ProjectRc27
PID/FF 自動チューニング計画 (RC27)
RC27 での PID/FF auto-tune 実装方針。motor_calibrator 実装済 (bench 単発)、次は rc27_control 側の mech_calibrator 統合
要点: 一般手法 (PID と FF 項の自動チューニング) の RC27 での運用計画。bench 用の motor_calibrator_node (4 stage、param 駆動、C++) は実装済み。次は rc27_control 側 (機構ノードに組み込む) と、起動シーケンス連動。
実装フェーズ
| フェーズ | 内容 | 状態 |
|---|---|---|
| 1 | V7 FF スタック API (FW + host) | 実装済 (impl) |
| 2 | can_md_controller の friction / accel_ff_gain param 転送 | 実装済 |
| 3a | bench 用 motor_calibrator_node (4 stage) | 実装済 (motor_test_bringup/src/motor_calibrator_node.cpp) |
| 3b | tuning primitives の header-only 分離 | 実装済 (motor_test::tuning::{stats, coulomb_viscous_fit, urdf_guard}) |
| 3c | URDF safety guard 統合 | 実装済 (Inside mode = 校正、Outside mode = homing) |
| 4 | rc27_control 側の mech_calibrator (機構ノードに組み込み) | 未着手、実機フェーズ後 |
| 5 | 積載別 gravity map の HSM 統合 | 未着手 |
| 6 | fibril_tuning への切り出し | 将来 (motor_test::tuning を sed 一発で移送予定) |
motor_calibrator_node の設計 (実装済)
motor_test_bringup/src/motor_calibrator_node.cpp に単発 orchestrator として実装:
| Stage | Param で ON/OFF | 内容 |
|---|---|---|
current_baseline | stages.current_baseline | FW 側 calibrate_current_baseline service を叩く |
friction | stages.friction | 対称速度 sweep → CoulombViscousFit で c/b/g を LS fit |
accel_ff_gain | stages.accel_ff_gain | 未実装 (J 同定 → J/Kt の計算) |
gravity | stages.gravity | 未実装 (上下 2 方向保持 → duty 平均) |
出力: /tmp/calibration_result.yaml (snippet 形式)。起動 launch (ff_homing_test.launch.xml) で読み込める形。
URDF safety guard: joint_name を指定すると UrdfGuard(Inside) が有効化。安全域 ([lower + margin, upper - margin]) を逸脱すると stage abort。校正中の暴走で機構を壊さない。
運用の粒度
| 対象 | 頻度 | RC27 での実装 |
|---|---|---|
| PID gain | 保守時 (yaml 保存) | 個別なし。積載で gain schedule するなら要検討 |
摩擦係数 (friction.coulomb, friction.viscous) | 毎回 or 日次 | motor_calibrator の friction stage で測る → yaml → 起動 launch で読む |
| 重力 duty | 積載状態ごと | 空荷 / E ブロック / S ブロック / ボールで別テーブル (未実装) |
| J (慣性) | 保守時のみ | accel_ff_gain stage で同定 (未実装) |
| 電流零点 offset | 起動時 (or on-demand) | FW 側 baseline state machine + host param 復元 |
対象軸と Kt
RC27 で対象になるアクチュエータ:
- ステアリング (RoboMaster、cascade P)
- リフト (RoboMaster、位置 PID + FF)
- 吸着系サーボ (別系統)
RoboMaster の Kt は duty=1.0 → 10 A の正規化から換算する ([[robomaster-normalization]] 参照、Claude memory 側)。
次にやりたいこと
短期 (bench 内)
- accel_ff_gain stage の実装: 自由減衰 (duty=0 で 測定) →
J = -friction/\dot\omega→J/Kt - gravity stage の実装: 上下 2 方向の同速度セグメントで duty 平均
- calibration_result.yaml の install 配置: 現状
/tmpに吐いてるので install/share/motor_test_bringup/config/ に置く方が読みやすい
中期 (実機フェーズ)
- rc27_control 側の mech_calibrator: bench の orchestrator を機構ノード配下に移送。yaml は
rc27_control/config/calibration_{lift,grip,arm}.yaml - 起動シーケンス連動: 起動時に自動で
current_baseline → frictionまで走る (BT or lifecycle で管理) - 積載別 gravity map: HSM の積載状態 (empty / block / ball) と gravity yaml を紐付け
長期
- fibril_tuning への切り出し:
motor_test::tuning→fibril::tuning、他プロジェクトでも共通で使える形に
関連
- 一般手法: PID と FF 項の自動チューニング
- 一般設計: Tuning primitives の分離設計
- 実装: FF スタック実装 (RC27) / Homing 実装 (RC27)
最終更新: