ゆるふわフィジカルAI
パソコンで作業中のゆるロボ

URDFとは?|ロボットの形・関節を記述するXML形式

2026-08-11 ・ 実践

#URDF#ROS2#シミュレーション#実践

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
<?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の座標は親リンクからの相対位置です。絶対座標ではありません。

XML
<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.urdf

MuJoCoやIsaac Simにもインポートできます。

Python
# MuJoCoで読む場合(要MJCF変換 or 直接対応版)
import mujoco
model = mujoco.MjModel.from_xml_path("my_arm.urdf")

よくあるエラー

  • ロボットが吹き飛ぶ → inertial の質量・慣性が0か未記述
  • 関節が動かない → limit の上下限が同じ、または axis が 0 0 0
  • パーツが変な場所にある → origin を絶対座標で書いている(親からの相対が正解)
  • メッシュが表示されない → STLのパス指定ミス。package:// 形式を確認

実務での作り方

ゼロから手書きすることは稀です。現実的には:

  1. CAD(Fusion 360, SolidWorks)からエクスポート — URDF出力プラグインが定番
  2. 既存ロボットのURDFを改造 — SO-101等は公式で公開されている
  3. 手書きは学習用と簡易モデルのみ

よくある質問

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からのエクスポートか既存モデルの改造が主流
📚 もう少し詳しく(背景と理論)気になる人向け・タップで開く

URDF(Unified Robot Description Format)は、ロボットをリンク(剛体)とジョイント(関節)の木構造として記述するXML形式です1。各リンクには見た目(visual)・衝突形状(collision)・慣性(質量・慣性テンソル)を持たせ、これがあって初めて運動学や動力学シミュレーションが正しく動きます2。

木構造ゆえ閉ループ機構(並列リンク)は素直に書けず、拡張が必要です3。後継・関連フォーマットとして、環境も記述できる SDF(Gazebo)や、Isaac などで使われる USD があり、相互変換しながら使うのが実務です。

次の一歩 🌸

作ったモデルを動かすならMuJoCo入門、ROS 2との連携はROS 2入門へどうぞ。

参考資料・出典

ゆるふわポータルでは、一次情報・公的資料にもとづき、専門用語をできるだけやさしく翻訳することを心がけています。内容に誤りや古い情報がある場合は、お問い合わせからご連絡ください。

執筆:ゆるふわフィジカルAI編集部 最終更新日:2026年10月23日

Footnotes

  1. URDF は ROS 標準のロボット記述フォーマット。link と joint(revolute / prismatic / fixed 等)の親子関係で運動連鎖を表す XML。 ↩

  2. 動力学シミュレーションには各リンクの質量・重心・慣性テンソルが必須。これらが不正確だと制御やSim-to-Realがずれる。CADから抽出するのが一般的。 ↩

  3. URDF は木構造前提のため、並列リンクなどの閉ループは直接表現できず、SDF や追加の制約記述で補う。環境ごと記述するなら SDF、Omniverse系なら USD が使われる。 ↩

この記事をシェア:𝕏 で共有LINEで送る

🔥 この分野の最新トレンドをチェック →

学習コース

25 / 46 本目

学習コースの全体を見る

あわせて読みたい

Isaac Lab入門|強化学習フレームワークの導入とサンプル実行

Isaac Labとは、NVIDIAが提供するロボット向け強化学習フレームワークです。インストール手順、必要なGPU・OS要件、環境一覧の確認方法、最初のサンプルの動かし方をエンジニア向けに解説します。

MuJoCoのビューアが開かない・固まるときの原因と直し方

MuJoCoのビューアウィンドウが開かない、エラーで落ちる、真っ暗なまま固まるときの原因と直し方。DISPLAY未設定・macOSのmjpython・sync()忘れの3パターンを、公式ドキュメントと実際の動作確認で整理します。

Gymnasium入門|CartPoleで強化学習を体験する

Gymnasiumとは、強化学習の環境をPythonの共通インターフェースで扱えるFarama Foundation製のオープンソースライブラリです。CartPole-v1でreset/stepの基本ループを動かし、ランダム行動と自分で書いた方策で結果がどれだけ変わるかを比較しながら体験します。

IMUセンサーフュージョンをPythonで実装する|加速度計とジャイロから傾きを求める(相補フィルタ)

IMU(加速度計+ジャイロ)から姿勢の傾きを求める相補フィルタをPythonでゼロから実装。加速度計だけだとノイズだらけ、ジャイロだけだとドリフトで増え続ける様子を数値で確認し、2つを混ぜるとなぜ安定するのかを手を動かして理解します。