Files
linux_sentry_chassis/README.md
T
2026-09-22 20:05:16 +08:00

2.7 KiB
Raw Blame History

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 协议要点、单位与方向约定、测试策略