はじめに
ROSパッケージをインストールして開発を行う時に apt-get
で入れてしまうことがありますが、これをするとCIでプロジェクトの依存を解決する方法がありません。そこでrosdepを使用しpackage.xmlで管理をします。
前提条件
環境 | バージョン |
---|---|
開発 | Ubuntu 16.04.6 LTS |
ROS | Kinetic Kame |
パッケージを探す
例としてecl_exceptionsを使う例をみてみます。
apt-get
でインストールする場合には、 apt-cache
コマンドでパッケージの検索をおこないます。
$ sudo apt-cache search ros-kinetic | grep ecl | grep exceptions
ros-kinetic-ecl-exceptions - Template based exceptions - these are simple and practical and avoid the proliferation of exception types.
次にrosdepでインストールしようと思います。ecl-exceptionsなのでpackage.xmlに下記のように追記します。
<depend>ecl-exceptions</depend>
インストールを実行します。
$ rosdep install -i -r -y --from-paths src/test_common/ --ignore-src
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
test_common: Cannot locate rosdep definition for [ecl-exceptions]
Continuing to install resolvable dependencies...
# All required rosdeps installed successfully
どうやらapt-get
とrosdep
でインストールするときに設定するパッケージ名が異なるようです。wikiには、詳しい説明がありませんが、こういう時はソースを確認するのが一番確実です。
rosdepの仕組みを調べる
rosdistroのリポジトリを確認すると各環境ごとにディレクトリがあることがわかります。ここでkineticを確認するとパッケージのリポジトリとパッケージ名がわかります。
今回は、ecl_exceptions
という名称で管理されていますので、それをpackage.xmlに設定して再度rosdep install
を実行すればインストールできます。
また、共通で使用するものについては、base.yamlで管理されているので、こちらを確認します。
まとめ
- ROSの開発をするときは、
apt-get
でパッケージを入れると依存関係をCIが解消できない -
rosdep
でパッケージ名称を調べるときには、リポジトリの設定ファイルを確認すればよい