常に持ち歩くPCは半年前に購入したMacBook Pro 13inchです。このPCで何かアイデアを思いついたらすぐ取りかかれるようにする施策として、これまでは仮想マシンにUbuntuをインストールして使っていましたが、性能面や取り回しの面で少し不満がありました。

せっかくROS2はmacOS, Windowsへのネイティブ対応を掲げているので、これからはROS2で開発するときには積極的にmacOSをそのまま使っていこうと思います。 今回はROS2のmacOSでの開発時に役立つ情報をお届けします。

最新ビルド環境の構築

ROS2の公式レポジトリに何かイシューを投げたり、プルリクエストを出すにはレポジトリの最新コミットに常に張り付いていることが好ましいです。 だからと言って公式手順に従って常に最新ソースコードをビルドしているようでは時間短縮の元も子もありません。

https://index.ros.org/doc/ros2/OSX-Development-Setup/

macOS用のリリースバイナリも提供されているのですが、今現在8月のバイナリが提供されているだけで、それ以降の更新分はありません。

https://index.ros.org/doc/ros2/OSX-Install-Binary/

そこで活躍するのが、 https://ci.ros2.org です。ここでは、ROS2レポジトリに対するプリリクエストやmasterブランチ更新に対するユニットテストを行い、日々継続的インテグレーションが進められています。

たまたま気づいたのが、ci-packageing-*** という項目です。 これは最新のビルドに成功した結果を圧縮ファイルとして生成する機能のようです。OSごとに用意されており、macOSのものもあります。

https://ci.ros2.org/job/ci_packaging_osx/lastSuccessfulBuild/artifact/ws/ros2-package-osx-x86_64.tar.bz2

そう、これをワークスペースに配置すれば、ほぼほぼ最新のROS2ビルド環境が手に入るのです。ワークスペース名を仮に master としてみます。

$ mkdir ~/ros
$ cd ros
$ tar ycvf ~/Downloads/ros2-package-osx-x86_64.tar.bz2
$ mv ros2-osx master
$ . ~/ros/master/setup.zsh
$ ros2 run demo_nodes_cpp talker & ros2 run demo_nodes_cpp listener

もちろん依存ライブラリをインストールする必要はあります。下記手順に従ってください。

https://index.ros.org/doc/ros2/OSX-Install-Binary/

このとき、 tinyxml2 のバージョンだけは気をつける必要がありました。 今現在最新の tinyxml22.7.X ですが、上記ビルドは 2.6.X を要求します。 そこで、

brew switch tinyxml2 6.X.X

に変更する必要があります。私は以前に tinyxml2 をインストールした時の 2.6.X の分が残っていましたが、ない場合にはレポジトリから同バージョンをソースコードビルド、インストールする必要があるかもしれません。

ワークスペースのオーバーレイ

前節の手順だけでROS2自身のビルドは手に入りますが、自分が開発しているパッケージもビルドする必要があるかもしれません。 ROS1の頃は2つ以上ワークスペースを持つことができませんでしたが、ROS2からは複数持つことができます。

https://index.ros.org/doc/ros2/Ament-Tutorial/#create-an-overlay

ここでは、 youtalk というワークスペース名にしておきます。

$ cd ~/ros
$ mkdir -p youtalk/src
$ cd youtalk
$ . ~/ros/master/setup.zsh
$ colcon build
$ . ~/ros/youtalk/setup.zsh

つまり、 master というワークスペースを、 youtalk というワークスペースでオーバーレイ(覆った)したわけです。 これにより、 master ワークスペースにたくさんパッケージがあっても、それらのビルドが発生することなく、自分が開発しているパッケージだけがビルドされるようになり、開発を加速することができます。

まとめ

  1. CIの最新ビルドを用いたワークスペースを作成する
  2. 自分の必要とするパッケージのみクローンしたワークスペースをオーバーレイする

という手順を取ることで、修正したいある一つの公式パッケージだけをクローンしたワークスペースや、自分で作成したパッケージだけをクローンしたワークスペースなど、複数のワークスペースを切り替えながら開発を進めることができます。

この開発スタイルはmacOSに限らず、そのほかのOSでも活用できるかと思います。 ただ、Ubuntu 18.04の場合には、ほぼ最新のバイナリがaptインストールできるため、ROS1開発の時のような単一ワークスペースによる開発スタイルを継続することもできます。