notes
Robotics

車輪速度指令の単位境界 (m/s と rad/s)

逆運動学が出す接触点線速度 [m/s] と、モータ側の角速度 [rad/s] をどの層で変換するか。車輪半径は motor driver 層に置く

要点#

逆運動学は m/s を出し、車輪半径は motor driver 層で持つ。sim も同じ層で変換する。

数字#

  • 関係式: v_contact [m/s] = ω_joint [rad/s] × r_wheel [m]
  • r_wheel = 0.05 m なら係数 20。変換抜けで指令 0.5 m/s → 0.025 m/s (1/20)
  • 減速比 N のモータで rotor 速度を使う場合: ω_rotor = N × v / r_wheel

各層の単位#

層量単位
omni / mecanum 逆運動学接触点 tangent 線速度 v_i = vy·cos a_i − vx·sin a_i + R·wzm/s
motor driver (encoder gain)tick → 距離m, m/s
物理 sim の joint actuatorhinge 角速度rad/s

R は機体中心から車輪までの距離。パラメータ名が wheel_radius でも中身が R のことがある。値で確認する。

変換をどこに置くか#

実機の motor driver は encoder gain (2π / ticks_per_rev / N × r_wheel) で tick を m に直し、速度 PID を m/s で回す。上位コントローラは車輪半径を知らない。

sim でも同じ層 (motor モデルの入出力スケール) で変換する。理由:

  • 上位コントローラが sim / 実機で無改造
  • 変換ノードを間に挟むと経路が 1 段増え、rate や順序の問題が入る
  • feedback も同じスケールで m/s に戻る

上位コントローラの出力を rad/s に変えるのは、実機 driver が m/s 待ちのときは不可。

確認手順#

  1. ros2 topic echo <motor>/target の値の桁を見る。0.1〜2 なら m/s、5〜50 なら rad/s
  2. 指令一定で 2 秒走らせ、変位 ÷ 時間 と指令速度を比べる。1/r_wheel 倍か r_wheel 倍ずれていれば単位抜け
  3. feedback velocity と target が同じ桁で追従しているか

関連#

最終更新:

On this page