notes
Robotics

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. モータ 1 を X 度回して、driver joint (crank) の絶対角が X 度になるか目視・実測
  2. モータ 2 を Y 度回して、beam の絶対角が Y 度になるか (shoulder の姿勢に依存しない)
  3. 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° 差。ほぼ平行だが厳密には違う。

関連#

最終更新:

On this page