notes
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 側 (機構ノードに組み込む) と、起動シーケンス連動。

実装フェーズ#

フェーズ内容状態
1V7 FF スタック API (FW + host)実装済 (impl)
2can_md_controller の friction / accel_ff_gain param 転送実装済
3abench 用 motor_calibrator_node (4 stage)実装済 (motor_test_bringup/src/motor_calibrator_node.cpp)
3btuning primitives の header-only 分離実装済 (motor_test::tuning::{stats, coulomb_viscous_fit, urdf_guard})
3cURDF safety guard 統合実装済 (Inside mode = 校正、Outside mode = homing)
4rc27_control 側の mech_calibrator (機構ノードに組み込み)未着手、実機フェーズ後
5積載別 gravity map の HSM 統合未着手
6fibril_tuning への切り出し将来 (motor_test::tuning を sed 一発で移送予定)

motor_calibrator_node の設計 (実装済)#

motor_test_bringup/src/motor_calibrator_node.cpp に単発 orchestrator として実装:

StageParam で ON/OFF内容
current_baselinestages.current_baselineFW 側 calibrate_current_baseline service を叩く
frictionstages.friction対称速度 sweep → CoulombViscousFit で c/b/g を LS fit
accel_ff_gainstages.accel_ff_gain未実装 (J 同定 → J/Kt の計算)
gravitystages.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 内)#

  1. accel_ff_gain stage の実装: 自由減衰 (duty=0 で 測定) → J = -friction/\dot\omega → J/Kt
  2. gravity stage の実装: 上下 2 方向の同速度セグメントで duty 平均
  3. calibration_result.yaml の install 配置: 現状 /tmp に吐いてるので install/share/motor_test_bringup/config/ に置く方が読みやすい

中期 (実機フェーズ)#

  1. rc27_control 側の mech_calibrator: bench の orchestrator を機構ノード配下に移送。yaml は rc27_control/config/calibration_{lift,grip,arm}.yaml
  2. 起動シーケンス連動: 起動時に自動で current_baseline → friction まで走る (BT or lifecycle で管理)
  3. 積載別 gravity map: HSM の積載状態 (empty / block / ball) と gravity yaml を紐付け

長期#

  1. fibril_tuning への切り出し: motor_test::tuning → fibril::tuning、他プロジェクトでも共通で使える形に

関連#

最終更新:

On this page