ROS 2 Bouncy Bolson

ROS 2の2番目のバージョンであるBouncy Bolsonがリリースされました。

https://github.com/ros2/ros2/wiki/Release-Bouncy-Bolson

Ubuntu 18.04に対応したバイナリビルドも提供されるため、本バージョンからはUbuntu 18.04に移行した方が開発しやすいです。僕ものこの機会に移行しました。

Windows 10, macOS 10.12にも正式対応しています。

特徴

上記リリース記事で取り上げられている特徴のうち、主要なものを下に挙げます。

launchシステムの刷新

ROS 1ではroslaunchコマンドとXML形式のlaunchファイルを組み合わせて複数ノードの起動手順を記述していました。

ROS 2からはXMLファイルではなく、Pythonスクリプトを記述して複数ノードの起動手順を記述することになります。

https://github.com/ros2/launch

確かにこれまでもXMLの特殊タグを駆使して、変数宣言や制御構文を模した機能を実現していましたが、起動したいノード数が増えるに従って、XMLファイルを追いかけるのが難しくなってきていたように思います。 特にMoveIt!などは顕著でした。 記述が冗長なXML文法と特殊タグを駆使して記述するよりは、純粋にプログラミング言語で書けた方がデバッグの面でも有利そうです。

シリアライズされたデータのPub/Sub対応

ROS 1含め、これまでのPub/Subで通信するデータはROSメッセージの定義に沿って中間表現に変換されていたため、特に画像などのセンサーデータを送受信することは非常にオーバーヘッドが大きい処理が必要でした。

今回導入されたシリアライズ機能により、データのバイナリ表現をそのまま送受信することができるようになるため、中間表現への変換コストとデータサイズが削減されることが期待できます。 また、動的メモリ割り当てせず事前にメモリ確保をしたものを使いまわすこともできるようになります。

この機能はrosbag2実装のためにこれから必要となってくるのだそうです。

RMW実装のバイナリビルド提供の拡大

これまでRMW実装はFastRTPSのものしかバイナリビルドが提供されていなかったため、他のRMW実装を使うにはソースコードビルドを行う必要がありましたが、ROS 2 Bouncyからは以下の3つが提供されるようになります。

  • eProsima’s FastRTPS(デフォルト)
  • RTI’s Connext
  • ADLINK’s OpenSplice

RMW実装は環境変数で切り替えられるため、開発時はオープンソース実装、製品出荷時は商用実装を用いるといったことが簡単に実現できます。

ament_toolsに代わるビルドツールcolcon

これは僕自身いろいろな文章やソースコードを読んでも、まだいまいち理解していないのですが、ROS 2でこれまでに提供されてきたメタビルドツールであるament_toolsが非推奨化され、新しくcolconというビルドツールが導入されました。

ament_toolscatkinに代わって導入された背景には、モノリシックな実装であるcatkinから、モジュール構造でプラグイン拡張しやすい実装に変更したというのが理由でした。 しかし、colconはROS 2だけでなく、ROS 1、Gazeboもビルドできるツールとして再設計されたらしく、大量のレポジトリが出来上がっています。

https://github.com/colcon

正直、ament_toolsのプラグイン実装でROS 1やGazeboをビルドできるようにでき流ようにしなかった理由は、まだよくわかっていません。

コマンドラインツールの機能追加

ros2コマンドのサブコマンド群がかなり増えたそうです。 これにより、ライフサイクルやセキュリティもros2コマンドで設定、取得できるようになります。

https://github.com/ros2/ros2/wiki/Introspection-with-command-line-tools

次回から

は上で取り上げた特徴やこれまで取り上げてこなかった新しい機能を中心に一つずつ紹介していきます。

ROS 2はあと一つ、アクション機能が実装されれば、ほぼ中核機能は完成といった感じでしょうか。面白くなってきました。