パスコンパスの日記

何か色々作るのが好きです

【ROS2】fusion2urdfを使って変換したモデルを動かすために気をつけること

 久しぶりに技術ブログっぽい記事を書きます。去年の秋位からROS2(RobotOS2)を使ったロボットを友達とオンラインで定期的に通話しながら作っています。
 進捗は下のツイートにぶら下げています。「ROSとRTOSの違いって何?」というところから少しずつ本やネットを参考に手探りで進めてきました。やっているうちに色々気をつけるべきところがあったので記事にしました。

 今回の記事はFusion360というCADソフトで作ったロボットをurdfという形式に変換しROS2というシステムを使ってシミュレーションする方法についてです。 URDFはUnified Robotics Description Formatの略の様で、ROSはロボットを動かしやすくするミドルウェアの様なものです。
 ROSにはROS1と2があり、2の方の情報が少ないのでもし誰かのお役に立ったら嬉しいです。 f:id:yoichi_41:20220307233751p:plain

目次

環境

ROS2 Foxy
Ubuntsu 20.04
Windows上のVirtual boxを使用

Fusion360Windows

 ROS2の基本の設定は済んでいる状態とします。 特に面識があったり、アドセンスを設定しているわけではありませんが下の本を参考にしました。

www.kinokuniya.co.jp

手順の概要

  1. Fusion360でモデルを作る(気をつけることが結構あるので後述)
  2. Fusion360にアドインを入れる(バージョンに注意)
  3. Fusion360でアドインを実行する(ここでROS2を選択)
  4. joint_state_publisher_gui を入れる(参考リンク後述)
  5. ワークスペースを作りfusion2urdfで作成されたフォルダを入れ、rviz2、joint_state_publisher_gui、launchを動かす
  6. スライドバーを動かすとジョイントが動く

Fusion360でモデルを作る際に気をつけること

 最初に配置するモデルは「base_link」という名前である必要があります。最初から「base_link」というモデル名で作り始めてもよいですが、リンクを切るという方法でも名前を変更することができます。また、base_linkにしたい部品を複数使用している際にはリンクを切るしかないと思います。
 部品を右クリックすると、下のようなメニューが出てきて切ることができます。また、先にジョイントを設定してからリンクを切って名前を変えるとうまく読み込めないことがあるので注意です。

f:id:yoichi_41:20220306230822p:plain

 他にもジョイントの順番やジョイントの名前等、気をつけるべきポイントがいくつかあり、こちらの記事を参考にさせていただきました。ありがとうございます。

rt-net.jp

 もう一点、fusion2urdfは何種類かあるためROS2を使うのであればそれに対応したものを使う必要があります。下記のものはOKでした。

github.com

joint_state_publisher_guiを入れる

 joint_state_publisher_guiというgui上でジョイントの角度を変えるツールを入れます。こちらのページが大変参考になりました。ありがとうございます。

kuwamai.hatenablog.com

実際に動かす

source /opt/ros/foxy/setup.bash

 ワークスペースへ移動して

. install/setup.bash

 ワークスペース内へ先ほどfusion2urdfで変換して解凍したフォルダを入れます。
※解凍してそのまま入れるとフォルダが2重になってしまうので中のフォルダを入れます。

colcon build

 ターミナルを3つ立ち上げそれぞれ3つを別々に実行します。 rviz2のターミナルでも忘れずに. install/setup.bashを実行してください。忘れると表示されません。

ros2 launch robot_description robot_description.launch.py
rviz2
ros2 run joint_state_publisher_gui joint_state_publisher_gui

※ launchの後の「robot_description」はパッケージ名に読み替えてください。

動くとこんな感じになります。

まとめ

 久しぶりに技術ブログっぽい記事を書きました。こういった記事は誰かのためにたったらもちろん嬉しいですが、正直未来の自分のため(忘れる)という側面もある気がしています。
 一緒にロボットを作ってくれる友人には感謝しかありません。たぶん一人だとあんまり触ったことのないLinuxの操作の時点で心が折れています。この記事も確認してもらっていたりします。
 読んで下さり、ありがとうございました。