みなさんこんにちは!
「自分で作成したロボットファイル(URDFなど)をROSのパッケージにしたいけど、具体的な方法や手順がわからない」
という方に向けて、その方法や手順のイメージを掴んでもらうために簡単なチュートリアルを用いて解説していきます。
ROSパッケージにする理由
ロボットを触っている方であれば、RvizやGazeboなどのROSの機能を多く使っているのではないでしょうか?
ロボットをROSを使用せずに扱うハードルは高く、ROSに依存することで効率的な開発が行えている面があるでしょう。ロボットで何か機能を実現したいと思いググって見つけたプログラムがROSに対応していることは多いです。そして、それらはインストールすればすぐに使用できます。
容易に使用できる理由の1つに、ROSパッケージとよばれる形式で規格化されたルールに沿って開発・管理されている点が挙げられる思います。
ROSパッケージとは、ある目的を実現するためのプログラムの集合です。パッケージを構成するファイルは、個々の機能を実現するためのプログラムや、そのプログラムの自動起動や実行するためのプログラム、3Dモデルなど様々です。
オリジナルのロボットを開発するときに、ROSパッケージにしなかったり、間違ったパッケージ化を行うと、エラーが発生してROSの機能を十分に使用できない可能性が高くなります。
そのため、ROSパッケージの作成方法を知っておく必要があるのです。とはいえ、catkin_create_pkg
を用いてパッケージを作成するなどの基本事項はご存知の方が多いと思います。しかし、基本事項以外に暗黙のルールがあると感じています。その暗黙のルールは、作成するROSパッケージの目的によって異なるため、すべてを列挙することは無理です。
そこで、今回は、URDFなどのロボットファイルをROSパッケージ化する方法にテーマを絞って説明していきたいと思います。
チュートリアル
当サイトの管理人が設計した4脚ロボット(SimQ)の記述ファイルをROSパッケージにする方法を説明していきます。必要なデータはGitHubで公開していますので試してみてください。
※以降ではROSがインストールされている環境を前提に話を進めていきます。
パッケージの作成
まずは、パッケージを作成します。予め決めておく必要があるのはパッケージ名です。今回は、ロボットの記述ファイルをパッケージ化することを扱います。このような目的をもつROSパッケージの名前は、一般的に「ロボット名+"_description"」とすることが多いので、「SimQ_description」とします。
~/catkin_ws/src
catkin_create_pkg SimQ_description
※必要に応じて依存関係は追加してください。このチュートリアルを試すだけなら依存関係は必要ありません。
中身の作成
パッケージを作成したら、パッケージの中身の作成に移ります。作成直後のパッケージの内部構成は、CMakeLists.txtとpackage.xmlだけとなっています。catkin_create_pkg
で依存関係をしていした場合は、srcフォルダも作成されている可能性があります。
ここに、ロボットの記述ファイルを保存するurdfフォルダ、各パーツのメッシュを保存するmeshesフォルダを作成し、urdfファイルとstlファイルを保存していきます。
ただし、このチュートリアルでは既にurdfフォルダとmeshesフォルダ、および諸々のファイルが作成されているリポジトリをしますので、作業はとても簡単です。
以下のコードを実行し、SimQのリポジトリを取得し、urdfフォルダとmeshesフォルダを作成したパッケージの直下に移動します。移動した後は、SimQフォルダは不要なので削除します。
cd SimQ_description
git clone https://github.com/aakmsk/SimQ
mv SimQ/urdf urdf
mv SimQ/meshes meshes
rm -r SimQ
パスの修正
urdfファイルの中身を覗いてみると、meshesフォルダの中のstlファイルを参照している項目があることが分かります。
<mesh filename="package://meshes/〇〇">
様々なロボットのROSパッケージを調査した結果、このパスでは不十分であり、パッケージ名から始まるパス名に変更する必要があることが分かりました。すなわち、以下のようなパスに変更する必要があるのです。
<mesh filename="package://SimQ_description/meshes/〇〇">
1つずつ手作業で変更するのは大変なので、以下のコマンドで一括で変更しましょう。
cd ~/catkin_ws/src/SimQ_description/urdf
sed -i 's/meshes/SimQ_description\/meshes/g' model.urdf
ここでは、sedコマンドを使用し、's/A/B/g'でAからBに置換しています。
さいごに
以上がURDFなどのロボット記述ファイルをROSパッケージ化する方法です。
私自身、様々試しながら行ったものなので、まだ不十分なところがあるかもしれません。追記の必要があれば追記していく予定です。
最後までお読みいただきありがとうございました。