notes
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 の手順#

  1. スクリプトを取得
git clone https://github.com/dheena2k2/fusion2urdf-ros2.git
  1. 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
  1. Fusion 360 で Shift+S → URDF_Exporter_Ros2 を Run
  2. 保存先フォルダを選ぶ → <robot_name>_description/ パッケージが生成される
  3. 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 (推奨)#

  1. Inventor で File → Save As → Pack and Go でアセンブリと参照パーツを 1 パッケージに固める
  2. Fusion 360 の Data Panel で Upload → Pack and Go した zip / フォルダを投入する
  3. クラウド側で変換後、Fusion 360 で開く

方法 B: STEP 経由#

  1. Inventor でアセンブリを開く
  2. File → Export → CAD Format → STEP (.stp) で保存
  3. 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-ros2syuntoku14 の直系 ROS 2 フォーク。まずこれ
Gazebo Harmonic 対応runtimerobotics/fusion360-urdf-ros2Mastering ROS 2 for Robotics Programming 書籍の付属
xacro + ros2_control + 階層構造Adriaeik/fusion2URDF慣性テンソルを CoM に正しく書き出す。ジョイント軸をリンクフレームで正しく解決
ROS 2 C++ (ament_cmake)RO-AD/fusion2urdf_ros2cppUnity / Omniverse 想定

初回は dheena2k2/fusion2urdf-ros2 で試す。xacro や ros2_control を厳密に扱いたくなったら Adriaeik/fusion2URDF に移行する。

つまづきどころ#

  • スクリプト実行時に「joint <name> エラー」 → そのジョイントを削除して再定義
  • 出力 URDF で全リンクが原点に重なる → ジョイント位置合わせに Position joints を使っている
  • STL が異常に大きい → ネストコンポーネントを整理、細かい部品は Rigid Group で束ねる
  • Inventor から何で持ってきても拘束は消えるので、ジョイントもマテリアルも Fusion 360 側で作り直す前提
  • スクリプトはモデルを書き換えるので、実行前にファイルをバックアップする

関連#

最終更新:

On this page