Files

2.9 KiB
Raw Permalink Blame History

DT7 + DR16 遥控底盘接入

这里的 dt16 目录沿用现有资料目录名;硬件是 DT7 遥控器 + DR16 接收机。接收机通过 D-BUS 输出 18 字节帧,软件中的协议名称统一为 DR16。

协议与接线

  • DR16 DBUS 接 T153 原生 UART RX,默认设备 /dev/ttyS2。
  • UART 参数固定为 100000 baud, 8 data bits, even parity, 1 stop bit,无流控。
  • 接收机 VCC/GND/DBUS 使用 3-Pin 线;确认 T153 UART RX 电平与 DBUS 信号兼容后再上电。
  • 本实现的字段布局参考 DT7/DR16 手册和 RoboMaster/RoboRTS-Firmware 的 DR16 解码, Rust 代码为独立重写,不复制参考仓库源码。

摇杆与安全语义

输入 通道 底盘动作
左摇杆上下 T/ch3 前后平移,上为前进
左摇杆左右 R/ch4 旋转,右为顺时针(负 omega)
右摇杆左右 A/ch1 左右平移,右为右移(负 vy)
右摇杆上下 E/ch2 本次不绑定动作
S1 上档 wire value 1 允许运动
S1 中/下档 wire value 3/2 立即停车

摇杆满量程为协议中心值 ±660。5% 死区外使用平方曲线,满杆对应 chassis.max_vx/max_vy/max_omega。速度从零到满量程使用 ramp_ms = 500 的逐轴斜坡; S1 离开上档、合法帧断流超过 timeout_ms = 100、串口关闭时立即归零,不走斜坡。

配置

在 /etc/chassisd/chassis.toml 增加:

[remote]
kind = "dr16"
device = "/dev/ttyS2"
timeout_ms = 100
deadband = 0.05
ramp_ms = 500
invert_vx = false
invert_vy = false
invert_omega = false

如果某个轴的实车方向相反,只翻转对应的 invert_*。chassisd --rc-device /dev/ttyS2 可以覆盖配置中的设备节点;没有 [remote] 段时守护进程保持安全静止。

只读监视

先不要让车轮着地,使用只读命令观察帧和方向:

cargo run --release -p spin -- rc --device /dev/ttyS2

输出包含帧龄、A/E/T/R 原始值、S1/S2 位置和显示用 vx/vy/omega(默认满量程 3.0/3.0/6.0)。它不打开 CAN,也不驱动电机。

实车验收

  1. S1 置中档或下档,执行 spin rc --device /dev/ttyS2,确认帧龄约 14 ms、四个通道随摇杆变化、S1 上档 wire value 为 1。
  2. 架空四轮,执行 chassisd --dry-run --config /etc/chassisd/chassis.toml,确认 UART 与四个电调反馈正常。
  3. S1 上档后低速验证:左杆上/下 = 前/后,右杆左/右 = 左/右平移,左杆左/右 = 逆/顺时针。
  4. 运动中把 S1 拨离上档,必须立即停车。
  5. 运动中关闭遥控器或拔掉 DBUS,必须在 100 ms 内停车。
  6. 若方向相反,修改对应 invert_* 后重复步骤 3,再落地低速复验。

参考资料