URDF(Unified Robot Description Format)とは、ロボットの形状と関節の構造をXML形式で記述する、ROS標準のモデル記述フォーマットです。 シミュレータでロボットを動かすには、まず**「このロボットはこういう形で、ここが曲がります」**とコンピュータに教える必要があり、その役割を担うのがURDFです。
この記事で分かること
- URDFとは、ロボットの形状・関節をXML形式で記述するROS標準のフォーマット
- link(骨)とjointの組み合わせで構造を表す。質量・慣性(inertial)を省くと物理シミュレーションが破綻する
- MuJoCoやIsaac SimなどROS以外のシミュレータにも読み込める
対象読者:自作ロボットをシミュレータで動かしたい学習者・エンジニア
執筆:ゆるふわフィジカルAI編集部 最終更新日:2026年10月23日
URDFは「ロボットの設計図」
中身はXMLで、たった2種類の要素でできています。
← 図は横にスクロールできます →
- link(リンク) = 骨。硬いパーツ1つ
- joint(ジョイント) = 関節。2つのlinkをつなぎ、動き方を定義する
メカ超入門で学んだ構造が、そのままファイルになったものだと考えてください。
最小のURDF
2つのリンクを1つの回転関節でつないだ、最もシンプルなロボットです。
<?xml version="1.0"?>
<robot name="my_arm">
<!-- 土台 -->
<link name="base_link">
<visual>
<geometry><box size="0.2 0.2 0.05"/></geometry>
<material name="pink"><color rgba="1 0.84 0.91 1"/></material>
</visual>
<collision>
<geometry><box size="0.2 0.2 0.05"/></geometry>
</collision>
<inertial>
<mass value="1.0"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
</inertial>
</link>
<!-- 腕 -->
<link name="arm_link">
<visual>
<origin xyz="0 0 0.15"/>
<geometry><cylinder radius="0.02" length="0.3"/></geometry>
</visual>
<collision>
<origin xyz="0 0 0.15"/>
<geometry><cylinder radius="0.02" length="0.3"/></geometry>
</collision>
<inertial>
<mass value="0.5"/>
<inertia ixx="0.004" ixy="0" ixz="0" iyy="0.004" iyz="0" izz="0.001"/>
</inertial>
</link>
<!-- 関節: base_link から arm_link へ -->
<joint name="shoulder" type="revolute">
<parent link="base_link"/>
<child link="arm_link"/>
<origin xyz="0 0 0.025"/>
<axis xyz="0 1 0"/>
<limit lower="-1.57" upper="1.57" effort="10" velocity="2.0"/>
</joint>
</robot>3つのブロックの役割
| 要素 | 用途 | 手を抜くとどうなる |
|---|---|---|
visual | 画面での見た目 | 見た目が変なだけ(実害は小さい) |
collision | 衝突判定 | 物をすり抜ける/めり込む |
inertial | 質量・慣性 | 物理が崩壊して吹き飛ぶ |
inertial は必ず書く
質量や慣性を省略したり0にすると、シミュレータが計算不能になり、ロボットが宇宙の彼方へ吹き飛びます。「起動したら消えた」の原因はほぼこれです。おおよその値でいいので必ず入れてください。
jointの型を選ぶ
| type | 動き | 使う場面 |
|---|---|---|
revolute | 回転(角度制限あり) | ほとんどの関節 |
continuous | 無限回転 | 車輪 |
prismatic | 直線スライド | 昇降軸、グリッパー |
fixed | 動かない | センサーの取り付けなど |
axis で「どの軸まわりに回るか」を指定します。0 1 0 ならY軸まわり(横から見て曲がる肘の動き)です。
座標系のつまずき
URDFの座標は親リンクからの相対位置です。絶対座標ではありません。
<origin xyz="0 0 0.025" rpy="0 0 0"/>
<!-- 親から見て、Z方向に2.5cm上 -->rpy はロール・ピッチ・ヨー(ラジアン)。度ではなくラジアンなので、90度は 1.5708 です。ここは全員が一度は間違えます。
確認と読み込み
# 文法チェック
check_urdf my_arm.urdf
# ROS 2で可視化(スライダーで関節を動かせる)
ros2 launch urdf_tutorial display.launch.py model:=my_arm.urdfMuJoCoやIsaac Simにもインポートできます。
# MuJoCoで読む場合(要MJCF変換 or 直接対応版)
import mujoco
model = mujoco.MjModel.from_xml_path("my_arm.urdf")よくあるエラー
- ロボットが吹き飛ぶ →
inertialの質量・慣性が0か未記述 - 関節が動かない →
limitの上下限が同じ、またはaxisが0 0 0 - パーツが変な場所にある →
originを絶対座標で書いている(親からの相対が正解) - メッシュが表示されない → STLのパス指定ミス。
package://形式を確認
実務での作り方
ゼロから手書きすることは稀です。現実的には:
- CAD(Fusion 360, SolidWorks)からエクスポート — URDF出力プラグインが定番
- 既存ロボットのURDFを改造 — SO-101等は公式で公開されている
- 手書きは学習用と簡易モデルのみ
よくある質問
Q. URDFとSDFはどう違いますか?
A. URDFはROS標準で、木構造のリンク・ジョイントだけを記述する形式です。SDFはGazebo向けで、ロボット単体だけでなく環境(地面や物体)も含めて記述でき、閉ループ機構のような木構造で表しにくい構造にも対応します。
Q. 既存ロボットのURDFはどこで手に入りますか?
A. 多くのオープンなロボットは、メーカーや開発者が公式リポジトリでURDFを公開しています。例えばSO-101のような教育用アームは公式のGitHubリポジトリから取得できます。ゼロから手書きするより、既存のURDFを自分の用途に合わせて改造するのが現実的です。
Q. URDFファイルの文法が正しいかはどう確認できますか?
A. ROS 2環境があれば、ターミナルで`check_urdf ファイル名.urdf`を実行すると文法エラーを検出できます。見た目や動きを確認したい場合は、本文で紹介した`ros2 launch urdf_tutorial display.launch.py`でスライダー付きの可視化ができます。
まとめ
- URDFは「link(骨)+joint(関節)」でロボットの形を記述するXML
- visual/collision/inertialの3点セット。inertialを省くと物理が壊れる
- 座標は親リンクからの相対、角度はラジアン
- 実務ではCADからのエクスポートか既存モデルの改造が主流
📚 もう少し詳しく(背景と理論)気になる人向け・タップで開く
次の一歩 🌸
作ったモデルを動かすならMuJoCo入門、ROS 2との連携はROS 2入門へどうぞ。
参考資料・出典
- Building a movable robot modelROS 2公式ドキュメント。revolute/continuous/prismaticなどjointの種類と記述方法を解説
- urdf - ROS Wiki(ミラー)ROS Wikiのミラーページ。check_urdfコマンドの役割と使い方を記載
ゆるふわポータルでは、一次情報・公的資料にもとづき、専門用語をできるだけやさしく翻訳することを心がけています。内容に誤りや古い情報がある場合は、お問い合わせからご連絡ください。
執筆:ゆるふわフィジカルAI編集部 最終更新日:2026年10月23日
ゆるふわフィジカルAI