# sentry-chassis RoboMaster 哨兵机器人麦轮底盘:Linux ARM 主控、4 × GM3508/C620、SocketCAN 或 SLCAN、tokio 异步运行时。 架构规范见 [`ARCHITECTURE.md`](ARCHITECTURE.md)。workspace 由 24 个职责单一 crate / 测试包组成,不使用 `rm-` 前缀,crate 内源码保持扁平。 安装本地规则 hook: ```sh just install-hooks just audit ``` 依赖层级、外部库白名单和 trait 边界见 [`docs/dependencies.md`](docs/dependencies.md)。 规则审查器是基于 Nightly `cargo -Zscript` 的单文件 Rust 脚本。 ## 结构 - `can` / `imu`:基础接口。 - `motor-protocol` / `delta10-protocol`:纯协议编解码。 - `socketcan` / `slcan` / `delta10`:硬件驱动。 - `motor` / `esc-bus`:设备契约与安全总线运行时。 - `pid` / `motor-control` / `mecanum`:纯控制算法。 - `motor-model` / `experiment` / `sim-harness` / `tuning`:仿真与自动整定。 - `dr16-protocol` / `dr16`:DJI DR16/D-BUS 协议和串口接收。 - `chassis-config` / `bench` / `chassisd` / `spin` / `chassis-tune`:配置、台架和应用入口。 `esc-bus` 不依赖控制算法。应用把 `motor-control::MotorPolicy` 作为 `motor::EffortPolicy` 传入总线,从而保持依赖无环。 ## 开发 ```sh cargo test --workspace --all-targets cargo run -p chassisd -- --mock cargo run -p spin -- chassis --device /dev/ttyACM0 --dry-run cargo run -p chassis-tune -- presets --preset config/tune.toml just lint just tune-smoke ``` 底盘控制频率为 1 kHz。命令是 50 ms 租约,上层必须逐拍重发目标值。 ## 台架 ```sh # 四轮 500 rpm 转子,slcan cargo run --release -p spin -- chassis --device /dev/ttyACM0 --rpm 500 # 单电机 SocketCAN 验证 cargo run --release -p spin -- motor can0 1 1000 10 ``` 轮子必须架空或整车固定,急停可及。工具默认限流、限时并支持 ctrl-c 安全停机。 ## 自动整定 ```sh cargo run --release -p chassis-tune -- sweep \ --preset config/tune.toml --preset-name sim_bench_model \ --samples 512 --out-dir target/tune ``` 仿真搜索不接触硬件。真机后端会转动轮子,必须显式传入 `--i-know-the-wheel-spins`。详细接线、标定和排障见 [`docs/chassis.md`](docs/chassis.md)。 ## 实时调度 仓库不使用 unsafe 或 libc FFI。生产调度策略由 [`deploy/chassisd.service`](deploy/chassisd.service) 的 systemd 指令设置。 std 程序不调用 `mlockall`。