こんにちは。koraです。
今回はfusion2urdfを使って、ROSで利用するロボットモデルを作成したいと思います。
URDF・xacroとは
URDFとはUnified Robot Description Formatの略で、ロボットモデルを記述するフォーマットです。XMLファイルでロボットの構成や関節情報を記述します。URDFの解説は 移動型ロボットのURDF作成 が分かりやすいです。
基本的には、ロボットをlinkと呼ばれるパーツと、jointと呼ばれる関節の組み合わせとして定義します。linkには外観、当たり判定、重心、質量、慣性モーメントなどを定義できます。一方、jointには親となるlink、子となるlink、親linkから見た相対位置などを定義します。また、jointにはrevolute (回転)、continuous (無限回転)、prismatic (直動)、fixed (固定)などの種類があり、必要に応じて回転軸や制限角度なども定義します。
xacroとは、このURDFを生成するマクロ言語です。URDFと同じXMLファイルを使いますが便利な機能が追加されています。xacroについては マニピュレータ型ロボットのURDF作成 が参考になります。
fusion2urdf
fusion2urdfはFusion360用のスクリプトで、設計したCADモデルから直接URDFを作成することができます。また、URDFだけでなく、外観用の3Dモデルも出力してくれるうえ、ROSで起動しやすいようにパッケージにまとめてくれます。
なお、2020/01/04の更新で出力されるファイルがURDFからxacroに変わったようです。xacroの別ファイルをインクルードする機能を使って、MaterialやTransmission、Gazeboに関する設定が行われています。
今回、fusion2urdfの使い方については GitHubリポジトリのREADMEと、 Fusion360で描いたロボットモデルをROSのURDF形式に変換する を参考にさせていただきました。
fusion2urdfの制約
素晴らしいプラグインなのですが、一定のルールに沿ってFusion360のモデルを作っておく必要があります。
- Fusion360で作成したコンポーネントが、URDFのlinkになります。
- ひとつのコンポーネントに複数のボディが入っていても大丈夫です。
- ただしコンポーネントの中にコンポーネントがあるモデルには対応していません※1。
- 全ての親となるコンポーネントの名前をbase_linkに設定する必要があります。
- 別のデザインから読み込んだコンポーネント(鎖マークがあるもの)はリンクを解除する必要があるようです。
- Fusion360で作成したジョイントが、URDFのjointになります。
- ジョイントを作成する際のコンポーネントの選択順で親子関係が設定されます。子にあたるコンポーネントを先に、親にあたるコンポーネントを後に選択します。
- 回転ジョイントの場合、駆動範囲の制限を設定するとrevoluteに、設定しないとcontinuousになるようです。
- Fusion360を日本語設定にしているとデフォルトのジョイント名が日本語になりますが、URDFに変換すると文字化けしてしまうので英数字に変更しておく必要があります。
- 除去したはずのジョイントがまだ存在すると誤認されることがあります 。そのような場合はURDFを出力する直前に「デザイン履歴をキャプチャしない」を選択すると良いようです。(参考)
- 設計を始める前にFusion360の座標系をROSに揃えておいたほうが良いです。
※1 分かれているコンポーネントのボディをコピーして統合したいコンポーネントに貼り付ける、もしくは結合コマンドを使って異なるコンポーネント間のボディをまとめるなどの方法で対応はできる場合もあります。
インストール
Fusion360をインストールしているPCがWindowsの場合、まずPowerShellを起動します。次に、fusion2urdfリポジトリを適当な場所にクローンし、以下のコマンドを実行するだけです。
cd fusion2urdf Copy-Item ".\URDF_Exporter\" -Destination "${env:APPDATA}\Autodesk\Autodesk Fusion 360\API\Scripts\" -Recurse
URDFの出力
上記の制約を満たした上で、ツール → スクリプトとアドイン → マイスクリプト → URDF_Exporter を選択して実行ボタンを押します。
保存先を選択した後、問題なければ数十秒ほどでROSで利用できるパッケージが生成されます。パッケージ名はFusion360のデザイン名に”_description”が追加されたものになります。今回はデザイン名をnisoku_kenshu_xyzとしていたので、nisoku_kenshu_xyz_descriptionとなりました。
動作確認
ここからはROSがインストールされた環境に移ります。この研修ではロボットに搭載したRaspberryPi4にUbuntuをインストールしてROSの環境を作っているので、生成されたパッケージをRaspberryPi4にコピーします。~/catkin_ws/srcディレクトリに配置したら、次のコマンドでURDFが正しく動くか確認します。
$ roslaunch nisoku_kenshu_xyz_description display.launch
joint_state_publisherのスライダーを操作することで各軸の動作を確認することができます。
次回
fusion360からROS用のロボットモデルを出力することができました。次回からこれをロボットの制御に活用してみたいと思います。