#はじめに
UnityとROS2を連携させることを可能にするUnity-Robotics-Hubが、最近ROS2対応しました。
Unity-Robotics-Hubには、「URDF-Importer」というドキュメンテーションが提供されており、Unity内にURDFファイルをインポートすることができます。
本記事では、三輪車を作成することを想定して、Fusion360で作成したCADモデルをURDF化し、Unity内に召喚し操作する方法について解説します。
#実行環境
本記事で用いる実行環境は以下の通りです。
項目 | 値 |
---|---|
CPU | Core i7-9750H |
OS | Windows10 |
ROS2 | Foxy Fitzroy |
Unity | 2020.3.16f1 |
項目 | 値 |
---|---|
CPU | 1.5GHz クアッドコア Cortex-A72(ARMv8、64bit L1=32KB、L2=1M) |
メモリ | UD-RP4B8:8GB |
OS | Ubuntu Desktop 20.04 |
ROS2 | Foxy Fitzroy |
##Fusion360で自作ロボットのモデルを作成する
fusion2urdfを使用して、URDFファイルを作成します。
※2021/10/13にROS2対応しました。
ここでは、手順といくつかの注意点を記述します。
######0:Fusion360の言語を英語にする
- 出力されるファイルに日本語が混ざり、エラーの原因になります
######1:z軸が上になるように設定する
-
Fusion360の座標系はデフォルトでY軸が上、ROS2はZ軸が上なので、ROS2に合わせる
######2:モデリング
- ジョイントを作成する際のコンポーネントの選択順で親子関係が設定されます。子にあたるコンポーネントを先に、親にあたるコンポーネントを後に選択します。
例)タイヤ(子)→シャフト(親)、シャフト(子)→base_link(親)
######3:コンポーネント化して、アッセンブル
- base_linkを指定する(component1をbase_linkにするとダメらしいので、プロパティで名前をcomponet2に変更する)
- base_linkをFusionワールドの中心に配置しておく
僕が作成したモデルは以下のような三輪車です。キャスターはUnity側で作成します。(理由は後述します)
##Fusion360からURDFファイルを出力する
#####1:githubからfusion2urdfをdownloadする
#####2:「URDF_Exporter」をFusion360のAPIにコピーする
- シェルでのpathの指定
$ cd <path to fusion2urdf>
例えば、以下のように指定します
$ cd ~/documents/fusion2urdf-master
- 続けて、「URDF_Exporter」をFusion360のAPIにコピーする
Mac OSの場合
cp -r ./URDF_Exporter "$HOME/Library/Application Support/Autodesk/Autodesk Fusion 360/API/Scripts/"
Windows OSの場合
Copy-Item ".\URDF_Exporter\" -Destination "${env:APPDATA}\Autodesk\Autodesk Fusion 360\API\Scripts\" -Recurse
#####3:Fusion360でURDF_Exporter」を実行
-
Fusion360の「ツール」→「アドイン」→「スクリプト 」→「URDF_Exporter」を実行
-
errorが出た場合は、エラーメッセージに従う
-
successした場合は、「hogehoge_description」というフォルダにxacroファイルなどが入っていることを確認する
#####4:URDF(xacro)→URDF変換する
UnityにURDFを召喚するための「URDF-Importer」は「.urdf」というファイル形式のみを扱います。しかし、「fusion2urdf」では「.xacro」ファイルが出力されます。(.xacroは、XML macroの略で、.urdfをより楽に書くためのもの)
そのため、「.xacro」を「.urdf」に変換する必要があります。こちらは、Ubuntu Desktop 20.04で実行しています。
変換手順
$ cd ~/my_workspace
$ . install/setup.bash
$ ros2 run xacro xacro -o /home/ubuntu/my_workspace/src/hogehoge_description/hogehoge.urdf /home/ubuntu/my_workspace/src/hogehoge_description/urdf/hogehoge.xacro
urdfファイルが完成し、指定したフォルダ内に出現していることを確認してください。
※xacroが入っていない人へ
こちらからフォルダをDownloadし、workspace/srcに入れてビルドすればxacroが使えるようになります
##URDFをUnityにインポートする
#####1:package managerで「Add Package from Git URL」を選択し、https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer#v0.5.0
を入力
#####2:Asset内にURDF_sampleというフォルダを作る
- その中に「hogehoge.urdf」と「hogehoge_description(ROS2 Package)」を入れる
※hogehoge_description(ROS2 Package) = fusion2urdfで作成したフォルダ
※hogehoge_descriptionフォルダにも「hogehoge.urdf」が入っていると思いますが、「URDF_sample」フォルダの中にも配置してください
######3:URDFをインポート
- URDF_sampleのフォルダにある「hogehoge.urdf」を右クリックし、「import Robot from Selected URDF file」を選択し、「Import URDF」をクリック。モデルが出現することを確認してください。
##URDFをUnity内で操作する
Unity-Robotics-Hubのサンプルのスクリプトを使うと便利です
-
このスクリプトのwheelに左タイヤと右タイヤのcomponentをDrag&Dropする
-
左右キーで直進、上下キーで旋回
-
Modeを「Keyboard」に変更
※「ROS」の場合では、ROSからのTopicで制御することが可能になります。
######僕のモデルの場合
キャスターをURDFファイルで作成すると、キャスターの摩擦によって真っ直ぐ走行できないことが確認されたため、キャスターはUnity側で摩擦ゼロのSphere Colliderを設置しました。
Unity-Robotics-Hubのサンプルでも同じ手法が使われていました。
##おわりに
本記事では、三輪車を作成することを想定して、Fusion360で作成したCADモデルをURDF化し、Unity内に召喚し操作する方法について解説しました。
自作ロボットのシミュレーションや、Unityコンテンツに召喚するなどの様々な応用方法が考えられます。