背景
ROS2で関節のあるロボットを動かしたくなった。
KDLとかURDFとか使うんだよと同僚に教えてもらったので勉強したことをメモ。
Fusion 360からURDFを出力するアドインがあるそうなので、それをインストールし、Rviz2に表示するところまで目標にする。
準備
- Ubuntuの準備
WSL2でUbuntu22.04TLSをインストール
wsl --install -d Ubuntu-22.04
-
ROS2のインストール
ROS2 humbleを使います。
ここは淡々と公式にしたがってインストールしていきます。
https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html -
Fusion 360
公式からインストール。
※商業利用については個人向けライセンスは使えないはず。個人的な勉強なので気にしないで使う
https://www.autodesk.com/products/fusion-360/personal
アドオンのインストール
fusion360でURDFを出力するアドオンがあるそう。いくつかフォークがあるそうだけど、以下を参考にSpaceMaster85/fusion2urdfを利用。
インストールまではハマるところないかな?と思う。ダウンロードしたファイルを以下のコマンドをpowershell上で実行。
cd <path to fusion2urdf>
Copy-Item ".\URDF_Exporter\" -Destination "${env:APPDATA}\Autodesk\Autodesk Fusion 360\API\Scripts\" -Recurse
- はまりポイント
基本的に公式通り進めていくとインストールできると思いますが、Python3.9以上ではdistutilsの名前が変わったみたいでそのままでは動かない。実行時にエラーが見えない。
pullrequestが出てるがまだマージはされてないみたいなのでここに紹介。
from distutils.dir_util import copy_tree
copy_tree(package_dir, save_dir)
この2行を、下のように直す。
from shutil import copytree
copytree(package_dir, save_dir, dirs_exist_ok=True)
個人的には、ソフトウェアのこういうところがめちゃくちゃ嫌い。
ハードウェアで言ったら、みんな使ってる半田ごて買ってきたけど、自分で直さないと使えませんよ!みたいなのが平然と出回ってる。解せぬ。
Rviz2で表示するまでの実行手順
ここまでで準備ができたので、順番にいく。
Fusion360でモデルを作成
気を付けること:
-
Fusion360は英語にしておく
-
子部品→親部品の順に選択しないと正しくインポートされないらしい。
-
base_linkを設定
base_linkは、そのモデルの基盤となるリンクのことで、単純に名前をbase_linkにするとよい。
実行
正しく実行されると、保存先フォルダの確認、ROS1/ROS2の確認画面が出てくる。
ちょっとした後処理
URDF変換といいつつ、実際に出てくるのはxacroなので、変換が必要。
先ほど出力したファイルを全て丸ごと、WSL上のROS2のworkspaceのsrcフォルダへコピーする。正しく配置すると以下のようなファイル構成。
/home/ubuntu/
|--urdf_tutorial
|--src
|--launch
|--meshes
|--urdf
|--CmakeLists.txt
...
WSL上でMakeする。
colcon build
source ./install/setup.bash
未解決編
ここからは未解決。
公式のチュートリアルに従えば、あとはlaunchするだけで表示できるはずだが、ROS2ではなぜか実行できない。また、URDFファイルもこの時点ではできていない。(なんでやねん!)
- xacroを実行してurdfを作成。
※colcon buildしてからじゃないとxacroは実行エラーになる。
$ ros2 run xacro xacro -o ./src/urdf/[robotname].urdf ./src/urdf/[robotname].xacro
- Rviz2で表示
rviz2を立ち上げ、add > RobotModelを選択して[OK]を押す。
$rviz2
RobotModelを開き、Description SourceをFileに、その下のファイルタブからファイル名を選択するとロボットが表示されるはず。
これでやっと表示されました。
なぜか先ほどFusion360上で設定した関節がぐちゃぐちゃになって出てきましたけどね!!!
解決したら追記します。