昨日、ROS 2のバージョンBeta 2がリリースされました。

https://discourse.ros.org/t/ros-2-beta-2-released/2135

昨年12月にバージョンBeta 1がリリースされたので、半年ちょっとぶりの新しいリリースです。

改訂されたロードマップによると、バージョンBeta 3が9月、バージョン1.0が12月を予定しています。 Beta 2からBeta 3にかけてが大忙しですが、ROSCon 2017に合わせたスケジュールなのでしょう。

https://github.com/ros2/ros2/wiki/Roadmap

本日は、Beta 1から2に進み、変更、改善された点Beta2 Overviewを和訳、意訳、追記しながら取り上げます。

サポートOS

Beta 1までは、Ubuntu 16.04のみを正式サポートしていましたが、Beta 2からはUbuntuだけでなく、macOS Sierra、Windows 10がサポートされます。

これにより、バイナリパッケージによるインストールとソースコードからのコンパイル手段がすべてのプラットフォームに拡大されて提供されることになります。

https://github.com/ros2/ros2/wiki/Installation

特徴

DDS Securityのサポート

これまでSROS2と呼ばれていたものが、DDS Securityと名前を新たにし、公式サポートされていくことになりました。 ROSの通信まわりでよく懸念材料に取り上げられてきたセキュリティ問題が、ノード間の通信暗号化をサポートすることで解決に向かっていきます。

この辺り、私はまだ詳しくないので、ROS UG #11 LT大会での@wataru_mitoさん、@hiroshi_shinjiさんたちの発表を楽しみにしています。

Debianパッケージ

Ubuntu 16.04に対しては、ROS 2のDebianパッケージが提供されるようになります。 これにより、ROS 1と同様にROS 2もインストールが簡単になっていきますね。

https://github.com/ros2/ros2/wiki/Linux-Install-Debians

ただし、恐らくこれが間接的な原因となって、私が結構時間を投入して出したプルリクエストは却下されることとなりました。 その時は一瞬イラっとしましたが、OSRFは現在、ROS 2をラピットプロトタイピングしている段階で、コミュニティサポートまで手が回らないのが現実なんだろうと自分をなだめました。

https://github.com/osrf/docker_images/pull/60

Dockerfile、Dockerイメージの公式提供は、近い将来サポートされるでしょう。 その時またコントリビューションします。

環境設定によるDDSベンダー選択

RMWの内部構造の改善が進み、ビルド時に一つのRMW実装(FastRTPSのRMW実装であったり、OpenSpliceのRMW実装であったり)を選ぶのではなく、環境変数の設定で変更可能になりました。

https://github.com/ros2/ros2/wiki/Working-with-multiple-RMW-implementations

これは結構将来効いてきそうな改善ですね。 例えば、開発環境ではオープンソース実装のDDSベンダーを使い、製品環境ではカスタマーサポートのある商用実装のDDSベンダーを使う、といったことをワンバイナリの環境変数のみの変更で実現できるようになります。

ノード、トピックに対するネームスペースのサポート

そもそも、これはBeta 1ではサポートされていなかったんですね。 確かにBeta 1時代のデモのソースコードのノード名やトピック名には/で区切ったものを見ませんでした。 このときは、デモだからネームスペースを端折ってグローバル宣言しているだけなのかと思っていました。

ただし、まだ一部問題があるそうです。

コマンドラインツールの整備

これまでは、ビルドで生成された実行ファイルをそのまま実行していましたが、ROS 1でいうrosrunのようにros2 runという形で、パッケージ名を指定して実行することができるようになりました。

これで、$PATH環境変数にtalkerとかlistenerみたいなサンプルアプリケーションの名前が挿入されてしまう問題も解消されているといいですね。

C/C++クライアントライブラリにロギングのためのマクロ追加

これまでは、ROS 1のようなロギングの仕組みがなかったため、std::coutなり、printfなりの標準出力にログを出力するしかありませんでした。

これがBeta 2からはロギング用のマクロが追加されて、RCUTILS_LOG_DEBUG()というような形でロギングできるようになります。 マクロ名が少し長いですね。ROS2_DEBUGに置き換えるマクロ流行りそうです…

http://docs.ros2.org/beta2/api/rcutils/index.html

ようやくROS 2がROS 2として体を成してきた感じがあって嬉しいです。 ブログ記事ネタが一気に増えたので、私個人的にもありがたいです。 近く、一つずつ取り上げていきます。