7d87987e41e92c2d2af66397e013370450d0f6e9
sentry-chassis
机甲大师哨兵机器人麦轮底盘固件:Linux ARM 主控 + 4 × GM3508(C620 电调),SocketCAN 接入,tokio 异步架构。
架构一览
| crate | 职责 | 平台 |
|---|---|---|
motor-core |
电机抽象:Motor trait、MotorState、PID / 速度环控制器 |
纯逻辑,全平台 |
dji-esc |
C620/C610 CAN 协议:帧编解码、多圈累计、EscBus 异步驱动、仿真器 |
纯逻辑,全平台 |
dji-esc-socketcan |
SocketCAN 后端:真实 CAN 接口 ↔ 内存通道桥接 | Linux |
mecanum |
麦轮正 / 逆运动学(纯数学) | 全平台 |
chassisd |
底盘守护进程:配置、1kHz 控制循环、安全逻辑、--mock 模式 |
全平台(实车需 Linux) |
分层原则:motor-core 与 dji-esc 不做任何真实 I/O——CAN 端口被抽象为一对 tokio 通道(CanLink),
因此协议、运动学与控制逻辑可以在 macOS / CI 上完整测试;真实总线只出现在最外层。
开发
需要 Rust stable(仓库通过 rust-toolchain.toml 锁定)。
cargo test --workspace # 单测 + 闭环仿真测试(无需硬件)
cargo run -p chassisd -- --mock # 无硬件全链路演示
just lint # fmt + clippy(与 CI 同标准)
Linux 虚拟 CAN(vcan0)集成测试
just vcan-test # 或见 justfile 内的 modprobe / ip link 命令
部署到目标板(armv7,实测:创龙 T153 / Buildroot)
二进制为 musl 静态链接,不依赖板端 libc,无需交叉工具链:
just deploy # 编译 + 推送 + mock 试运行(just deploy root@169.254.63.4)
# 或手动:
cargo build --release -p chassisd --target armv7-unknown-linux-musleabihf
scp target/armv7-unknown-linux-musleabihf/release/chassisd root@169.254.63.4:/tmp/
板端拉起 CAN(C620 标准 1Mbps;restart-ms 让 bus-off 后自动恢复):
ip link set can0 up type can bitrate 1000000 restart-ms 100
实车运行:/tmp/chassisd --config /tmp/chassis.toml --interface can0。板上运行样例见
deploy/chassisd.service,配置样例见
config/chassis.toml.example。
注意:电调未上电 / CAN 线未接时,控制器会因无 ACK 进入 bus-off(可用
ip -d link show can0查看),chassisd 侧表现为四电机反馈离线、强制零电流—— 这正是安全设计的预期行为。
文档
- 架构设计——分层、CAN 协议要点、单位与方向约定、测试策略
Languages
Rust
99.5%
Just
0.5%