先週の振り返り
先週の記事では、環境の構築を行いました。Ubuntu20.04上でROS2とWebotsを使っていくことを示しました。
今週の概要
・ROS2とWebotsの連携に関する調査
ROS2とWebotsの連携
連携について
シミュレータであるWebotsは、公式にROS2との連携がサポートされています。Webotsに適用されたセンサを含んだロボットをROS2の通信から制御できたり、ROS2からURDFを用いてロボットを適用することもできます。しかしROS2との連携を主としたシミュレータではないため、Gazeboと比較して少し手間があり勝手は違います。公式から充実したチュートリアルやドキュメントが提供されており、そこを理解できれば十分に連携させることができるでしょう。(Webots公式ドキュメント, ROS2ドキュメント)今回のプロジェクトでも、この公式のドキュメントを主に扱っていきます。
連携方法
Webotsの公式GitHubから、ROS2と連携させるためのパッケージが提供されています。これをcloneして使用しても良いのですが、今回は公式でも示されている、aptを用いたインストールを行います。以下のコマンドでインストールすることができます。こことは異なりますが、ROS2のドキュメントではdriverのみをインストールしています。
sudo apt install ros-foxy-webots-ros2
動作確認には、付属のサンプルを実行することが有効です。サンプルはいくつかありますが、以下の例では、2つのマニピュレータロボットが動作する様子が確認できます。
ros2 launch webots_ros2_universal_robot multirobot_launch.py
今後に向けての調査
以上までで連携の環境を構築してきました。しかしながら今後実際にプログラムを書いていく上で、どのようにWebotsとROS2は連携しているのかという仕組みと、C++でプログラミングしていく上で連携のために用いるライブラリなどはどうなっているのかを把握する必要があります。
ここから数週に渡って、そのような必要知識を得るための調査を行います。具体的には、既に示したWebots公式ドキュメントや連携のパッケージに含まれるサンプルを紐解いて、必要な知識を得ていこうというものです。以下、現在までに得られた調査の結果を簡単に示します。ただこれは調査途中のものであり、勘違いで間違ったことを記載している可能性が十分にあります。ご了承ください。
・ロボットのモデルについて
Webotsに適用するロボットのモデルはprotoファイルで定義されており、protoファイルにはパラメータなどロボットが持つ要素がテキストで記載されています。ROS2との連携においてWebotsに既に適用されているロボットを用いる場合、URDFファイルには対象のロボットの形状やパラメータなどは記載せず、protoファイルを参照し、URDFにプラグインを適用後、jointやsensorをprotoファイルと対応付ければ良さそうです。(参考コード)ただ、他のファイルが多く存在しもう一つのロボット (ur5e) では記述が異なるため、要調査です。
・C++でのライブラリについて
これは公式ドキュメントのこちらを見れば把握できると考えられます。まだちゃんと読んでいないので、来週までには理解したいところです。
今週の調査結果はここまでになります。まだ公式ドキュメントを全ては読めていないので、来週までには済ませておきたいところです。
終わりに・今後の予定
今回は、ROS2とWebotsを連携させる方法と、連携に関する多少の調査結果を示しました。
来週以降は連携に関する調査を継続し、より深く理解していきたいと考えています。まだまだ勉強を始めたばかりですので、もし知見を持っている方がいらっしゃったらアドバイスをいただけると幸いです。現状、開発はROS2とWebotsの連携を考えて進めていますが、調査の状況や自身の技術力のよっては、変更する可能性があります。このことを最後に示して、今回の記事を終わりたいと思います。
最後まで読んでいただき、ありがとうございました。また次週も読んでいただけると幸いです。
参考サイトリンク
・Open Robotics, ROS 2 Documentation: foxy, "Setting up a robot simulation (Webots)"
・cyberrobotics, GitHub, "webots_ros2"
・上記のWiki (記事中で公式ドキュメントとして紹介)