notes
ProjectSalamander

重力・摩擦の同定 (静的保持)

salamander の shoulder_pitch × beam_pitch を 5×5 格子で上下 2 方向から保持し、feedback torque と Pinocchio 予測の残差から invert・スケール・τ_c を出す。RC27 の tuner は持ち込まない

要点: 25 点 × 上下 2 方向 × 2 s 静止、所要 10 分。出すのは静止摩擦 τ_c (定常誤差 τ_c/Kp) と重力モデルの残差。RC27 の mech_ff_tuner は duty 指令・1 軸・cos テーブル前提なので移植しない。使うのは手順だけ。

準備#

  • ros2 launch salamander_bringup manual.launch.xml motor_names:="[shoulder_pitch, beam_pitch]" (重力補償 on)
  • 手先は空。pad_pitch 開、wrist_pitch 0
  • 先に中央 1 点 (0.2, 0.75) で torque の桁と符号が gravity/joint_command と合うことを見る

格子 (URDF 上限から 0.1 rad 内側)#

関節点 [rad]URDF 上限
shoulder_pitch−0.6, −0.2, 0.2, 0.6, 1.0[−0.785, 1.309]
beam_pitch0.15, 0.45, 0.75, 1.05, 1.3[0, 1.396]

干渉する組み合わせは Isaac の運動学モードで先に除く。

手順#

  1. 各点で +0.15 rad から降りて 2 s 静止、−0.15 rad から上がって 2 s 静止
  2. 動かすのは 1 関節ずつ
  3. 指令は joint_target へ ros2 topic pub -1 を 4 s 間隔
ros2 bag record -o ~/rosbags/static_hold_$(date +%m%d_%H%M) \
  /salamander/arm/shoulder_pitch/motor/feedback /salamander/arm/beam_pitch/motor/feedback \
  /salamander/gravity/joint_command /salamander/joint_states \
  /salamander/joint_target /salamander/ruckig/joint_setpoint

後処理#

  • 各保持の最後 1 s (|velocity| < 0.01 rad/s) の torque 平均 τ_up, τ_down
  • τ_g = (τ_up + τ_down)/2、τ_c = |τ_up − τ_down|/2
  • 定常誤差 = τ_c / Kp (Kp 30 N·m/rad)。τ_c 0.5 N·m なら 16.7 mrad、手先 8 mm (箱の側壁すき間 1.95 mm)。MIT mode は積分器が無いので消えない
  • τ_g と gravity/joint_command effort の残差 → invert・スケール・4 パラメータ (質量×重心、2 軸連成) の最小二乗
  • RobStride の torque は Iq 推定でモータ軸の値。減速機の効率は「スケール」に吸収する

前提#

  • 平行四節リンクは mimic で縮約。出るのは有効パラメータ
  • payload モデル 0.10 kg は 2 缶で 0.18 kg。腕の重力トルクの 1 割未満なので後回し可

関連#

最終更新:

On this page