9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

URDF-Importerを使うコツ

Last updated at Posted at 2022-09-16

パターンがつかめてきた

ROS用の3DモデルであるURDFファイルは、Unityに読み込むことができます。
すでに提供されているURDF-Importerを使えばOKなのですが、ファイルによってはちょっとインポートにコツが必要な場合があります。
ということで一発で読めないURDFを場合別に対処しつつ読み込んでみます。

Unityのバージョンに注意(2025.01.02追記)

URDF-Importerは2025年1月2日現在、更新が止まっています。
記事を書いた当時は問題がありませんでしたが、URDF-ImporterはUnity2020.xに対応しており、Unity2021.x以降では、VHACDが使えなくなっています。おそらく内部的にVHACDの場所が変更になったためです。
その場合、インポート時のウィンドウの「Select Convex Decomposer」のMesh Decomposerの設定をデフォルトのVHACDからUnityに変更することで読み込みができるようになります。
VHACDを使用したい場合、応急処置として、Unity2020.xで読み込んだものをプレハブとしてエクスポートし、Unity2021.x以降でインポートすることで対応できそうです。

準備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します。

コツその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の手順で読み込むことができると思います。

実行結果

同じ手順でさまざまなURDFファイルをUnityに読み込むことができました。
ROS本でよく出てくるRP2ですが、今回初めて立体を見ることができた気がします。

一つ一つのモデルの内部構造までは精査できていないので、使用するには修正が必要なものもあるかもしれません。

おまけ1 : nao の召喚はちょっと難しい

naoはmeshファイルそのもののデータは提供されていないらしく、別途ビルドする必要があるようです。
ビルド方法のヒントは下記に紹介されていました。

meshが作成できたらコツ3のフォーマットに階層に整理しパスを書き換えればインポート可能でした。
ただし内部処理はけっこう大変なようで、インポート完了までに時間がかかりました。
お時間のある方はパズルゲームのつもりで試してみてはいかがでしょうか。

おまけ2 : 四脚を召喚してみよう!

以下は教えていただいたリポジトリです。URDFをまとめてDLできるらしいです。

おまけ3 : 実行時の操作(2025.01.02追記)

URDF-Importerの標準機能として、インポート後にプロジェクトを実行すると、URDFのモデルを操作できます。
ヒエラルキーウィンドウにてロボットのオブジェクトを選択した状態でインスペクターウィンドウを見るとControllerに値を設定できるようになりますので、適当に値を入れます。

Unityを実行中に、カーソルキーの上下で動かしたいジョイントを選択し、左右で回転させます。
選択したジョイントには色がつくはずですが、色がつかない場合は、ヒエラルキーウィンドウの中のロボットパーツのVisualsがCollisionsよりも上にくるように階層を変更してください。

そのまま実行するとロボットは下に落ちてしまうので、床を設置するか、もしくはBaseLinkをインスペクターウィンドウの設定で固定するとよいでしょう。

おまけ4 : その他の詳しい情報(2025.01.02追記)

参考

謝辞

階層を指定する必要があるというコツをROS japan UGスラックの質問コーナーで教えていただきました。ありがとうございました。

関連記事

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?