- 使用 Rust 进行高性能、内存安全的应用程序的开发
- 基于 GTK4/libadwaita 构建现代的图形用户界面
- 跨平台
- 全屏模式
- 夜间模式
- 通过 SDL2 支持多手柄输入
- 通过 GStreamer 对视频流进行多种格式的实时编解码
- 使用 OpenCV 进行实时图像后处理(图像增强)
- 支持使用多种图像格式保存经过后处理的图像
- 多机位并行操作、并行显示与同步录制
- 在线固件更新
- 在线参数调整
- Microsoft Windows
cargo rustc --release -- -C link-args=-mwindows
- MacOS、GNU/Linux
cargo build --release
上位机与下位机之间使用 JSON 数据包通过 TCP 协议进行通信,一个数据包可以包含任意数量的有效命令,基本框架如下:
{
"command1" : null,
"command2" : "arg",
"command3" : ["arg1", "arg2"],
"command4" : { "key1": "value1", "key2": "value2" }
// ...
}
当前有效的发送命令如下:
命令 | 描述 |
---|---|
x | 控制机器人左右平移 |
y | 控制机器人前进或后退 |
z | 控制机器人的上浮或下沉 |
set_debug_mode_enabled | 启用/禁用下位机调试模式 |
set_propeller_values | 设置推进器输出 |
set_propeller_parameters | 设置推进器参数 |
set_control_loop_parameters | 设置控制环参数 |
set_propeller_pwm_freq_calibration | 设置 PWM 频率 |
save_parameters | 保存参数 |
load_parameters | 请求读取参数 |
firmware_update | 进行固件更新 |
当前有效的接收命令如下:
命令 | 描述 |
---|---|
feedbacks | 反馈数据 |
set_propeller_parameters | 设置推进器参数 |
set_control_loop_parameters | 设置控制环参数 |
info | 显示任意信息 |
{
"x" : 0.0, // 左右平移
"y" : -0.5, // 前进后退
"z" : 0.8, // 上浮下沉
"rot" : 0.1, // 左右旋转
"catch" : 0.0, // 机械臂
"depth_locked" : false, // 深度锁定
"direction_locked" : true // 方向锁定
}
{
"set_propeller_values": {
"front_left" : 127, // 推进器名称与输出
"back_right" : -128
// ...
}
}
set_propeller_values
命令可以一次性设置多个推进器输出,范围在 -128
与 127
之间。
{
"set_propeller_parameters": { // 推进器参数
"back_right": { // 推进器名称
"deadzone_upper" : 8, // 死区上限
"deadzone_lower" : -12, // 死区下限
"power_positive" : 0.75, // 正向动力百分比
"power_negative" : 0.75, // 反向动力百分比
"reversed" : false,// 是否反转
"enabled" : true // 启用/禁用推进器
}
// ...
},
"set_control_loop_parameters": { // 控制环参数
"depth_lock": { // 控制环名称
"p" : 1.0, // 比例调节
"i" : 2.0, // 积分调节
"d" : 0.5 // 微分调节
}
// ...
},
"set_propeller_pwm_freq_calibration": 0.01
}
上位机向下位机发送:
{ "load_parameters" : null }
下位机接收到该命令后,向上位机发送设置参数数据包。
上位机向下位机发送:
{ "save_parameters" : null }
下位机接收到该命令后,将内存中的参数写入非易失性存储器中,以便记忆设置的参数。
上位机向下位机发送:
{ "set_debug_mode_enabled": true }
下位机收到命令后将启用调试模式。
上位机向下位机发送:
{ "set_debug_mode_enabled": false }
下位机收到命令后将禁用调试模式。
上位机先向下位机发送:
{
"firmware_update": {
"size" : 12345678, // 数据包大小
"compression" : "none", // 压缩方式:"gzip" 、"none"
"md5" : "3f89ba32a56cb03b5d4e93ed2d033f75" // MD5 校验
}
}
然后直接向下位机发送以 compression
方式压缩的二进制流。下位机接收到此命令后,
立即准备接收长度为 size
的数据包。下位机接收完成后,以 compression
方式解压并对解压后的数据进行 MD5 校验。
如果校验的结果与 md5
一致,直接替换下位机可执行文件,然后重启完成固件更新。
上位机支持在调节控制环时,通过图表的方式实时可视化显示下位机传感器数据, 下位机以一定时间间隔向上位机发送反馈数据:
{
"feedbacks": {
"control_loops": {
"depth_lock" : 1.0,
"direction_lock" : -1.0
// ...
}
}
}
上位机接收到数据后,显示的图表会根据用户设置进行更新。
上位机支持在操作机器人过程中,实时显示机器人的信息,如航向角、舱内温度等。 下位机可以向上位机发送任何想要显示的信息:
{
"info": {
"温度" : "25℃",
"航向角" : "37°"
// ...
}
}