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