17
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Fusion360で作成したCADモデルをURDF化し、Unityに召喚し操作する

Posted at

#はじめに

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軸が上になるように設定する

######2:モデリング

  • ジョイントを作成する際のコンポーネントの選択順で親子関係が設定されます。子にあたるコンポーネントを先に、親にあたるコンポーネントを後に選択します。

例)タイヤ(子)→シャフト(親)、シャフト(子)→base_link(親)

######3:コンポーネント化して、アッセンブル

  • base_linkを指定する(component1をbase_linkにするとダメらしいので、プロパティで名前をcomponet2に変更する)
  • base_linkをFusionワールドの中心に配置しておく

僕が作成したモデルは以下のような三輪車です。キャスターはUnity側で作成します。(理由は後述します)

スクリーンショット 2021-11-11 14.00.40.png

スクリーンショット 2021-11-11 14.00.58.png

##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で制御することが可能になります。

スクリーンショット 2021-11-11 142831.png

######僕のモデルの場合

キャスターをURDFファイルで作成すると、キャスターの摩擦によって真っ直ぐ走行できないことが確認されたため、キャスターはUnity側で摩擦ゼロのSphere Colliderを設置しました。

Unity-Robotics-Hubのサンプルでも同じ手法が使われていました。

スクリーンショット 2021-11-11 14.04.50.png

このように動けば成功です
yamaha_3.gif

##おわりに
本記事では、三輪車を作成することを想定して、Fusion360で作成したCADモデルをURDF化し、Unity内に召喚し操作する方法について解説しました。

自作ロボットのシミュレーションや、Unityコンテンツに召喚するなどの様々な応用方法が考えられます。

17
20
1

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
17
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?