2013年2月10日日曜日

catkin化: スクリプトで楽をする編

みなさんcatkin化してますか?
catkinizeというcatkin化を助けてくれるスクリプトがあるので、これを使ってみましょう。

参考URL:
http://ros.org/wiki/catkin/migrating_from_rosbuild

githubにソースがあるのでそこから取ってきてインストールします。

$ git clone https://github.com/ros-infrastructure/catkinize
$ cd catkinize
$ sudo python setup.py install


移行するためのworkspaceをつくります。
ここではlight_curtainというOTLの自作packageの移行をするものとします。

$ mkdir light_curtain_ws/src
$ cd light_curtain_ws
$ catkin_make
$ source devel/setup.bash


ここにlight_curtain packageのソースをもってきて、catkinizeします。

$ cd src
$ git clone https://github.com/OTL/light_curtain.git
$ catkinize light_curtain 0.1.0

catkinizeの引数はpathとバージョン番号です。
もし、stackならcatkinize_stackを使えばOK。もしPakcageの新規作成ならcatkin_create_pkgを使いましょう。

手動でチェック


catkinizeがすべて自動でやってくれるわけではないので、手動で対応しなければなりません。
例えばpackage.xmlの依存関係はすべてコメントアウトされた状態にあります。
また、CMakeLists.txtもTODOで、手動で埋めるべき項目が記されています。

注意:catkinではすべてのCMakeプロジェクトが1つにまとめられます。そのためCMake上の変数やターゲット名は被らないようにしなければなりません。

以下にやることを原典を参考に書いておきますが、実際にはCMakeLists.txtをいじりながら、ビルド、実行、ができる状態まで編集しつつ、分からないところを調べる、という作業になります。
  1. maintainerの項目がコメントアウトされた状態で入っている(authorと同じになっている)のでそれを確認してコメントイン。<maintainer email="hoge@hoge.com">のように、emailフィールドも入れた方がいいみたいです。
  2. dependenciesがbuild/run/testで分かれたので、確認してコメントイン。http://ros.org/wiki/catkin/package.xmlを読んで意味を理解しましょう。
  3. CMakeLists.txtが編集されているので、そこに書かれたTODOをちゃんとやる
  4. 自動的に変更された部分を確認して修正する
  5. 古いコメント部分を削除
  6. 生成するメッセージ、サービス、アクションをadd_**_filesに記入
  7. 古いincludeを削除
  8. catkin_packageマクロを埋める
  9. 変数名がユニークなものになるように変更
  10. pythonスクリプトがあるならその対応
・・・とやることいっぱいです。

また、


超はまったのが、dynamic_reconfigureで、
dynamic_reconfigure.parameter_generatorじゃなく、
dynamic_reconfigure.parameter_generator_catkin
にしないといけないところでした。

ともかく、すべてを理解してからじゃないととても無理だと思います。
package.xml, CMakeLists.txtの新しいフォーマットの理解をしましょう。
ともかく、1回やれば大体分かると思いますので、簡単なものからやってみるといいでしょう。


あと、ライブラリが自動でリンクされないので、以下のような感じに書くとcatkinで依存関係記述されたライブラリがリンクできます。

target_link_libraries(hogehoge_target ${catkin_LIBRARIES})

うーん、思ったより大変だった。
参考になるか分かりませんが、groovy化したlight_curtainをおいて置きます。


つっこみ、修正等あればgithubにて教えてください。

0 件のコメント:

コメントを投稿