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·wz | m/s |
| motor driver (encoder gain) | tick → 距離 | m, m/s |
| 物理 sim の joint actuator | hinge 角速度 | 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 待ちのときは不可。
確認手順
ros2 topic echo <motor>/targetの値の桁を見る。0.1〜2 なら m/s、5〜50 なら rad/s- 指令一定で 2 秒走らせ、変位 ÷ 時間 と指令速度を比べる。1/r_wheel 倍か r_wheel 倍ずれていれば単位抜け
- feedback velocity と target が同じ桁で追従しているか
関連
- MuJoCo で車輪ロボが爆発する 5 つの典型原因 — 単位不整合は原因 1
最終更新: