ビルドシステムの重要性
誰かが実装したソフトウェアをコンパイルして実行する、単純なことだが依存ライブラリが増えてくるとコンパイルするだけで数日を使ってしまうことはよくある。
「画像処理にはこのライブラリが必要で、このデバイスを読むためにはあれが必要で、行列計算にはこのライブラリが…」という作業は、aptやyumで全てがインストールできれば良いが、研究者コミュニティのソフトウェアではそうも行かないことが多い。
この問題を解決するため、ROSはビルドシステムを提供する。これはROSを定義づける上で非常に重要な部分である。
ROSのパッケージシステム
ビルドシステムに触れる前に、ROSのパッケージシステムについて理解する必要がある。
ROSはソフトウェアをpackageという単位で構成する。
例えば、あるpackageは実行ファイルを提供し、あるpackageはヘッダのみを提供し、あるpackageは共有ライブラリを提供する、といったように。
そしてpackage間には依存関係が記述されているため、コンパイル時(や実行時)にその依存関係を解決することでソフトウェアのビルド(や実行)を容易にしている。
ROSのビルドシステム
ROSのビルドシステムには歴史的な経緯から2つのシステムがある。
rosbuildは以前から使われていたシステムで、catkinは最近登場した新たなビルドシステムである。
ROSはcatkinへ移行するようにユーザに言っている(ユーザからしたらrosbuildでいいじゃんと思うのだが…).
現在はrosbuildからcatkinへのビルドシステムの移行期のため、どちらも併用することができる。
簡単に言うと、パッケージの中にpackage.xml
があったらcatkin, manifest.xml
があったらrosbuildである。
catkinに移行する利点としては、コードをgithubで管理していると、bloomと呼ばれる仕組みでaptのパッケージを生成することができる点である。
基本的なパッケージはcatkinへの以降が終了しているが、まだ多くのパッケージがrosbuildで残されているというのが現状である。
具体的なこれらのビルドシステムの使い方についてはより詳細なチュートリアルで触れたいと思う。