URDF で平行リンクを mimic で表現する
パレタイザ型の平行 4-bar リンクは URDF の <mimic multiplier=-1> で serial chain に埋め込める。elbow を θ の相殺で水平に保つことで、以降の joint がベース側モータの絶対角と 1 対 1 で対応する
要点: パレタイザ型の平行 4-bar リンク (両ピッチモータがベース側、平行リンクで各リンクの絶対角 = モータ角) は URDF の <mimic multiplier="-1"> で serial chain に埋め込める。elbow を「回した分だけ mimic で逆回転」させて水平に保つと、以降の joint はベース側モータの絶対角と 1 対 1 で対応する。ホスト側のモータ → joint 変換は joint = motor / gear_ratio の独立 1:1 で済み、cross-coupling を書かなくて良い。
平行 4-bar を serial chain に埋め込む
物理: 両ピッチモータはベース側に固定。平行 4-bar でトルクが元リンクへ伝わり、モータ角 = リンクの絶対角 (対地)。
URDF: 追従リンクを mimic で回して元回転をキャンセルする。
shoulder_pitch (θ₁) → crank_link
crank_parallel (mimic −θ₁) → elbow_link ← θ₁ をキャンセルして水平を保つ
beam_pitch (θ₂) → beam_link
beam_parallel (mimic −θ₂) → wrist_mount ← θ₂ をキャンセルして水平を保つcrank_parallel = −θ₁ があるので elbow は θ₁ によらず常に水平。ここから beam_pitch θ₂ を測るから beam の絶対ピッチ = 0 + θ₂ = モータ 2 の角。cross-coupling は URDF 内で解消済み。
なぜ mimic だけで済むか
<mimic joint="X" multiplier="k" offset="c"/> は joint = k * X + c の固定線形結合。平行 4-bar は幾何的にちょうどこの 1 対 1 対応で表現できる (multiplier = -1、offset = 0) 特殊クラスなので、URDF の表現力に収まる。
この方式が使えない機構
<mimic> は 1:1 固定線形結合しか書けないので、次は表現不能:
| 機構 | 理由 |
|---|---|
| 5-bar / Delta / Stewart | 幾何が非線形。関節同士の関係が姿勢依存 |
| 差動機構 (モータ 1 = A+B、モータ 2 = A−B の合成) | mimic は 1 source → 1 sink。合成不可 |
| ケーブル / テンドン駆動 | 張力分配が姿勢依存 |
| 弾性 / バックラッシュ | URDF は理想剛体 |
これらは Pinocchio / CasADi 側で拘束を解いた joint 値を URDF に流すか、ros2_control の transmission で書く。
検証手順
mimic の値が正しく効いてるかは実機と突合するのが唯一の手段:
- モータ 1 を X 度回して、driver joint (crank) の絶対角が X 度になるか目視・実測
- モータ 2 を Y 度回して、beam の絶対角が Y 度になるか (shoulder の姿勢に依存しない)
- mimic multiplier or offset が違うと 2 が姿勢依存になる = 落ちる
落とし穴: 「近似平行 4-bar」
CAD の 4 pivot の実測で side link 2 本が等長でも、base link と coupler の長さや向きが違うと完全な平行 4-bar ではなく、beam 絶対角が shoulder に微小に依存する。URDF <mimic multiplier="-1"> はこれを表現できないので、「大体の姿勢では独立、極端な姿勢では coupling が見える」という現象になる。厳密な beam 絶対角は 4-bar FK (Freudenstein) で解く必要があり、URDF 側では包絡だけ持って、実行時に外部で計算する。
例: salamander の palletizer アームは CAD 計測で crank 449mm / drive rod 448mm (等長) / base 520mm / coupler 496mm。base ≠ coupler で 24mm 差、方向も 10° 差。ほぼ平行だが厳密には違う。
関連
- /docs/robotics/urdf-joint-limits
- /docs/robotics/urdf-as-source-of-truth
- /docs/robotics/ik-verification-order