Files
linux_sentry_chassis/docs/dt16/README.md
T

71 lines
2.9 KiB
Markdown

# 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` 增加:
```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]` 段时守护进程保持安全静止。
## 只读监视
先不要让车轮着地,使用只读命令观察帧和方向:
```sh
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,再落地低速复验。
## 参考资料
- `DT7&DR16_RC_System_User_Manual_v2.00_cn.pdf`
- [RoboMaster/RoboRTS-Firmware](https://github.com/RoboMaster/RoboRTS-Firmware)