73 lines
2.4 KiB
Markdown
73 lines
2.4 KiB
Markdown
# 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`。
|