ProjectRc27
mech_ff_tuner の機構ごとに変える param
RC27 の mech_ff_tuner を新機構に適用する時に触る 5-6 個の値。それ以外は default で動く
要点: 新機構に mech_ff_tuner を適用する時は 5-6 値だけ変える。default で動く param は触らない。誤って全部書き換えると事故のもと。
変える (機構ごとに)
mech_ff_tuner:
ros__parameters:
motor_prefix: /XXX/motor # topic 経路 (motor_driver 側の motor{i}.prefix と揃える)
joint_name: front_lift # URDF safety guard (URDF joint 名)
gravity:
model_type: cos # none / const / cos / linear
positions: [-0.5, ..., 0.5] # 可動範囲内で 5-7 点
friction:
speeds: [-1.0, ..., 1.0] # 可動範囲 + 負荷に合わせる
center_position: 0.0 # 各 velocity 点の前に戻る中心位置
accel_ff_gain:
step_velocities: [0.5, 1.0] # 加速テストの目標速度変えない (default OK)
stages.*(baseline / gravity / friction / accel_ff_gain の on/off)*.dwell_s,*.settle_s,*.stop_threshold(timing 系)sanity.r2_min,sanity.check_signsmotor_driver_namespace,motor_index(default/motor_driver,0)current_baseline.duration_surdf_safety_margin(0.02 で 8 割の機構通る)
機構タイプで判断
| 機構タイプ | model_type | positions | speeds |
|---|---|---|---|
| 直動リフト (垂直軸) | const | 2-3 点 | 0.5-1.5 |
| アーム (垂直面回転) | cos | 5-7 点, 可動全域 | 0.3-1.0 |
| 水平回転 (重力無し) | none | 不要 | 0.5-2.0 |
| 傾斜レール | linear | 3-5 点 | 中速 |
判定の目安:
- 保持 duty が姿勢で変わるか? → yes なら cos or linear
- 保持 duty がゼロ近辺か? → yes なら none
- 保持 duty が一定 (垂直リフト等)? → const
実行
書き換えたら:
ros2 launch motor_test_bringup mech_ff_tuner.launch.xml \
params_yaml:=~/mech_ff_XXX.yaml
# 別 term
ros2 service call /mech_ff_tuner/calibrate std_srvs/srv/Trigger '{}'出力: install/share/motor_test_bringup/params/mech_ff_params.yaml に係数が保存される。次回起動時 extra_params_yaml で load。
注意点 (今回の教訓)
- sanity check がある ので、fit が壊れた時は出力しない (default 0 のまま)。log の
[sanity]warning を必ず見る - 重力軸なら gravity stage 必須 (
stages.gravity: true)。skip すると friction が gravity と縮退して係数が壊れる (前回の viscous < 0 の主因) - speeds の絶対値を大きくしすぎない。機構の可動範囲を超えるとサチュ / 端到達で fit がゴミになる。center_position + 適切な速度で 4-6 秒 × 6 点の movement が可能な範囲に
関連
- 一般設計: FF スタック, PID と FF 項の自動チューニング
- 実装: FF スタック実装 (RC27)
- 手法: Tuning primitives の分離設計
最終更新: