ROS用の3DモデルであるURDFファイルは、Unityに読み込むことができます。
すでに提供されているURDF-Importerを使えばOKなのですが、ファイルによってはちょっとインポートにコツが必要な場合があります。
ということで一発で読めないURDFを場合別に対処しつつ読み込んでみます。
準備1
まずURDF-Importerの導入については下記にまとめました。動画もついています。
この記事ではURDF-Importerv0.5.2のバージョンを前提としています。
準備2
公開されているURDFをDLします。
① ロイドワン:https://github.com/Ninagawa123/roid1
② ガンダム :https://github.com/gundam-global-challenge/gundam_robot
③ プリメイド:https://github.com/chikuta/premaidai_description
など
慣れている方はgit cloneでどうぞ。
もちろんzip形式でDLしてデスクトップで作業を進めることもできます。上記リポジトリのグリーンのCodeボタンからDownload ZIPします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F565043%2F80971b01-c5ee-ffd2-0ec6-0d899ccfe961.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=238ab9d7302e43a23e550fbca957c23b)
コツその1 .urdfファイルを読み込める場合
①のロイドワンはインポーターに適合した.urdfファイルを持っています。
URDF-Importerの導入済みのUnityのAssetsディレクトリに→URDFフォルダをドロップし→中にあるroid1_urdf_unity.urdfを右クリック→Import Robot From Selected URDFファイルを選択。
とすることで読み込むことができます。
コツその2 .urdfファイルがあるが階層構造が違う場合
②のガンダムは.urdfファイルを持ちますが、そのままではディレクトリが適合しません。そのためインポート時にルートディレクトリか個々のファイルまでのパスをURDF-Importerに教える必要があります。方法については前述の動画にまとめておきました。
また、ルートディレクトリの選択でうまくいかない場合は、コツその3が参考になると思います。
コツその3 .urdfファイルを書き換える必要がある場合
一発で読み込めない場合、URDF-Importer用に階層を整理することで読み込めるようになります。
まず、Assets内での.urdfファイルのディレクトリを、
URDF
├ xxx_description
│ └meshes
│ └.stlや.daeファイル
└ xxx.urdf
のように置き直します。
今のところ一番上のディレクトリをURDFとする必要があるようです。
次に、xxx.urdf内のファイルのmeshデータのパスを整理します。
<geometry>
<mesh filename="package://xxx_description/meshes/xxx.stl" />
</geometry>
「package://」が「URDF」ディレクトリを示しますので、上記のようにmeshファイル本体までの位置を先ほど置き直した階層構造に合致するようにパスで指定します。
コード内の該当箇所を一つ見つければ、あとは置換で一発変換してしまいましょう。
コツその4 .xacroから.urdfへの変換
バージョンv0.5.2のURDF-Importerは惜しいことにURDFしか読み取ることができません。.xacroファイルしかもたないファイルはそのままでは読み取れないので、一度変換する必要があります。
例えば③のプリメイドにはいまのところ.urdfがありません。
モデル全体の.xacroはrobotsディレクトリに入っていますので、これを.urdfに変換します。
変換するには今のところROSの入ったUbuntu環境を使用することになります。
ROS環境のない方は検索でROSの導入方法を探してください...
$ cd ~catkin_ws/src #いつものROSのワークスペース
の中に、該当の.xacroファイルが入ったディレクトリを親ディレクトリごと入れ、その後で、
$ roscd
$ catkin build
$ source ~/catkin_ws/devel/setup.bash(環境によりパスが違うかも?)
を実行します。
これで変換のためのパスが通りましたので、xxxx.xacroファイルがある階層にcdで移動し、
xacro xxxx.xacro > xxxx.urdf
とします。
これで展開された.urdfができますので、あとはコツ3→コツ1の手順で読み込むことができると思います。
実行結果
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F565043%2F4e7c0d0e-223e-4eac-39a9-8594a69264a2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=80627cbe9c10cab08a1b0c2f4fb90eec)
同じ手順でさまざまなURDFファイルをUnityに読み込むことができました。
ROS本でよく出てくるRP2ですが、今回初めて立体を見ることができた気がします。
一つ一つのモデルの内部構造までは精査できていないので、使用するには修正が必要なものもあるかもしれません。
おまけ1 : nao の召喚はちょっと難しい
naoはmeshファイルそのもののデータは提供されていないらしく、別途ビルドする必要があるようです。
ビルド方法のヒントは下記に紹介されていました。
meshが作成できたらコツ3のフォーマットに階層に整理しパスを書き換えればインポート可能でした。
ただし内部処理はけっこう大変なようで、インポート完了までに時間がかかりました。
お時間のある方はパズルゲームのつもりで試してみてはいかがでしょうか。
おまけ2 : 四脚を召喚してみよう!
以下は教えていただいたリポジトリです。URDFをまとめてDLできるらしいです。
参考
謝辞
階層を指定する必要があるというコツをROS japan UGスラックの質問コーナーで教えていただきました。ありがとうございました。
関連記事