notes
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_signs
  • motor_driver_namespace, motor_index (default /motor_driver, 0)
  • current_baseline.duration_s
  • urdf_safety_margin (0.02 で 8 割の機構通る)

機構タイプで判断#

機構タイプmodel_typepositionsspeeds
直動リフト (垂直軸)const2-3 点0.5-1.5
アーム (垂直面回転)cos5-7 点, 可動全域0.3-1.0
水平回転 (重力無し)none不要0.5-2.0
傾斜レールlinear3-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 が可能な範囲に

関連#

最終更新:

On this page