qff233 / rov-host

基于 Rust 语言与 GTK4 开发的高性能、跨平台水下机器人上位机程序

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

水下机器人上位机

./documents/screenshot.png

特性

构建

请确保 RustCargo 已正确安装,并运行:

编译依赖

通信

上位机与下位机之间使用 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 命令可以一次性设置多个推进器输出,范围在 -128127 之间。

设置参数

{
    "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°"
        // ...
    }
}

About

基于 Rust 语言与 GTK4 开发的高性能、跨平台水下机器人上位机程序

License:GNU General Public License v3.0


Languages

Language:Rust 100.0%