Robotics
CAD から URDF への変換 (Fusion 360 / Inventor)
Fusion 360 は fusion2urdf-ros2 系スクリプトで直接エクスポート。Inventor は直接エクスポータが無いので STEP または Pack and Go 経由で Fusion 360 に渡す。
要点: Fusion 360 は fusion2urdf-ros2 系スクリプトで URDF + STL + launch を直接出力する。Inventor 用の実用的なエクスポータは存在しないし、Fusion 360 に持ち込む際に拘束 (mates) を保つ方法も無い。
Fusion 360 の手順
- スクリプトを取得
git clone https://github.com/dheena2k2/fusion2urdf-ros2.git- Fusion 360 の Scripts フォルダに配置
# Linux / macOS
cp -r ./URDF_Exporter_Ros2 \
"$HOME/Library/Application Support/Autodesk/Autodesk Fusion 360/API/Scripts/"
# Windows (PowerShell)
Copy-Item ".\URDF_Exporter_Ros2\" `
-Destination "$env:APPDATA\Autodesk\Autodesk Fusion 360\API\Scripts\" -Recurse- Fusion 360 で
Shift+S→URDF_Exporter_Ros2を Run - 保存先フォルダを選ぶ →
<robot_name>_description/パッケージが生成される - ROS 2 ワークスペースに置いて
colcon build
Inventor Pro 2027 の手順
Inventor 単体で動くまともな URDF エクスポータは存在しない (gavanderhoorn/inventor_to_urdf は Inventor 2013 専用、2027 では不可)。Fusion 360 に橋渡しする。
代替として iLogic で joint と質量特性を JSON に出し Python で URDF にする方法がある: Inventor から iLogic で URDF を出す。
方法 A: Pack and Go (推奨)
- Inventor で
File → Save As → Pack and Goでアセンブリと参照パーツを 1 パッケージに固める - Fusion 360 の Data Panel で Upload → Pack and Go した zip / フォルダを投入する
- クラウド側で変換後、Fusion 360 で開く
方法 B: STEP 経由
- Inventor でアセンブリを開く
File → Export → CAD Format→ STEP (.stp) で保存- Fusion 360 で
Upload→ STEP を読み込む
どちらの方法でも Fusion 360 側でやること
- ジョイントを全て定義し直す
- マテリアル (密度) を再設定する。慣性テンソルの計算に必要
base_linkにリネームし Unground する
Inventor の拘束 (mates) は保てない
**拘束を保ったまま Fusion 360 に持ち込む方法はない。**Autodesk 公式で確認されている挙動。
- Inventor の mates / constraints は Fusion 360 のクラウド変換で剥がれる。.iam / .ipt を直接アップロードしても Fusion 360 は STEP と同等に扱う (ジオメトリのみ、履歴無し、アセンブリ拘束無し)
- 逆方向 (Fusion → Inventor) も同じで、Fusion のジョイント / motion study は Inventor で検出されない
- Autodesk のエンジニア回答でも Inventor 形式へのエクスポートは STEP / SAT と同じ generic conversion で、パラメータ情報も伝わらないと明言されている
- カーネルが異なる (Inventor: ShapeManager ・ Fusion: T-splines / Parasolid 以外の内部形式)。拘束のシリアライズ形式に互換性がない
拘束を残したいなら Inventor 側で完結させるしかない。URDF 化のパイプラインに乗せる限り、Fusion 360 側でジョイントを作り直す前提で進める。
現実的な弍
- 実機組み立て用の完全アセンブリとは別に、シミュレーション用の簡略アセンブリ を Inventor 側で作る。装飾ネジ・配線・全これらを落とし、リンク単位でパーツをまとめておく
- これで Fusion 360 側でのジョイント定義がごく少ない回数で済む (リンク間のジョイントだけ = URDF のジョイント数)
- Inventor の元アセンブリは図面・製作用として保存し、シミュ用アセンブリと並行で管理する
- 見た目の良さは別途 Inventor から per-part OBJ → Blender で DAE 変換して URDF の visual メッシュだけ差し替えると實現できる (URDF の visual メッシュを Inventor の DAE で差し替える)
Fusion 360 側の設計ルール
スクリプトが正しく URDF を吐くための制約。守らないと無言で壊れた URDF が出る。
- ベースコンポーネントを
base_linkにリネーム、かつ Unground する - ジョイントを定義する際、Component2 が親リンク になる (Component1 ではない)
- サポートされるジョイントは Rigid / Revolute / Slider の 3 種のみ (Cylindrical, Ball, Pin-Slot は不可)
- Fusion 360 の「Position joints」機能でジョイント位置合わせをしない。設計段階で正しい位置にモデリングする
- 電球アイコン (visibility) がオフのコンポーネント・ジョイントはエクスポートされない
- ネストされたコンポーネントは 1 個の STL に統合される。細かい部品は Rigid Group でまとめる
座標系と単位
- URDF は 右手系 / メートル / SI 単位 で固定
- Fusion 360 のドキュメント単位は mm でも問題ない (スクリプトが m に換算する)
- モデル全体で右手系を維持する (Z up 推奨)
スクリプトの選び方
| 用途 | リポジトリ | 備考 |
|---|---|---|
| ROS 2 標準 (ament_python) | dheena2k2/fusion2urdf-ros2 | syuntoku14 の直系 ROS 2 フォーク。まずこれ |
| Gazebo Harmonic 対応 | runtimerobotics/fusion360-urdf-ros2 | Mastering ROS 2 for Robotics Programming 書籍の付属 |
| xacro + ros2_control + 階層構造 | Adriaeik/fusion2URDF | 慣性テンソルを CoM に正しく書き出す。ジョイント軸をリンクフレームで正しく解決 |
| ROS 2 C++ (ament_cmake) | RO-AD/fusion2urdf_ros2cpp | Unity / Omniverse 想定 |
初回は dheena2k2/fusion2urdf-ros2 で試す。xacro や ros2_control を厳密に扱いたくなったら Adriaeik/fusion2URDF に移行する。
つまづきどころ
- スクリプト実行時に「joint
<name>エラー」 → そのジョイントを削除して再定義 - 出力 URDF で全リンクが原点に重なる → ジョイント位置合わせに Position joints を使っている
- STL が異常に大きい → ネストコンポーネントを整理、細かい部品は Rigid Group で束ねる
- Inventor から何で持ってきても拘束は消えるので、ジョイントもマテリアルも Fusion 360 側で作り直す前提
- スクリプトはモデルを書き換えるので、実行前にファイルをバックアップする
関連
- Onshape から URDF への変換
- URDF の visual メッシュを Inventor の DAE で差し替える
- Isaac Sim: URDF Import
- Isaac Sim: ジョイントゲイン調整
最終更新: