ラベル catkin の投稿を表示しています。 すべての投稿を表示
ラベル catkin の投稿を表示しています。 すべての投稿を表示

2013年8月23日金曜日

rosbuildの今後

 rosbuildのROSパッケージはdebianバイナリパッケージにしないよ。
ということみたいです。
これからもビルド・実行は出来るから安心しましょう。
 Having achieved this coverage and having no perceivable demand for rosbuildbased binary releases(aka zero releases so far) we plan to drop support forbuilding debian packages using the old rosbuild based release system. Thisis moving this change forward one release. The main reason for this is thatit will save approximately half the work of running the buildfarm and allowus to put the energy into other areas which are in higher demand. (Possiblythings such as adding support for armhf) 

 Note that you will still be able to build and run dry packages withrosbuild and rosmake from source.  We are only going to drop support forreleasing them into debian packagse.

2013年8月17日土曜日

dynamixelのリポジトリとcatkin化

かなり前の話題になりますが、dynamixel_motorスタックがgoogle codeから
githubに以降したもよう。
catkin化もされていますので、私のリポジトリも役目を終えたようです。

https://github.com/arebgun/dynamixel_motor

いじりたければ、ここをベースにforkしましょう。

2013年4月29日月曜日

catkinでのpythonのtestについて

catkinにはまだなれません。

catkin化したパッケージのテストについて調べたので書いてみます。
catkinはとにかくドキュメントが少なすぎて泣ける。

普段pythonしかコード書かないので、pythonのtestについてです。

catkinではpythonでのtestにnoseというフレームワークを基本的に使うみたいです。
unittestフレームワークを使ったコードはそのまま使えるので、
あまり意識しなくても大丈夫かも。

まず、テストファイルをこれまでと同様に準備します。

で、CMakeLists.txtに
catkin_add_nosetests(test/unit)

などと書きます。

noseではテストをパッケージにできるので、
test/unit以下にunittestのファイルと__init__.pyを置いておけば
すべて実行されるみたいです。

で、rostestのほうは、

add_rostest(test/***.test)

と書きます。
中身は今までどおり、rostestパッケージを使った書き方でよさそうです。

これで、

$ catkin_make run_tests
とすれば、すべてのパッケージのテストが実施されます。

$ cd WORKSPACE/build
$ make run_tests_PACKAGE_NAME

で、指定したパッケージだけのテストもできます。
いろんなソースとか調べた方法なので、もし、もっとちゃんとしたドキュメントとか
ご存知の方いたら教えてください。

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にて教えてください。

2013年2月9日土曜日

catkin化: 何をすればいいか理解する編

groovyから正式採用されたビルドシステムcatkin。
fuerteまではrosbuildというシステムを使っていた人がほとんどだと思いますが、
Groovyからはcatkinが標準になりました。

今回はすでにrosbuildで作っているパッケージをcatkin化する方法を見ていきます。

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

これまでとの違い

・manifest.xmlがpackage.xmlに変更
・stackという概念がなくなった。代わりにメタパッケージ(metapackage)が導入された(stack.xmlはpackage.xmlになる)
・CMakeLists.txtの内容が大幅に変わった

用語

これまでのrosbuildを使ったパッケージをDryパッケージ、
catkin化されたものをWetパッケージと呼ぶようなので覚えておくと良いと思います。

変換の手順

  1. workspaceの作成
  2. 依存パッケージがcatkin化されているならば、既存プロジェクトをこのworkspaceに移動させる
  3. stackをメタパッケージに変換する。ただしunary stackは単なるpackageになる。
    1. stackの中にstackと同じ名前のcatkinパッケージを作成する(ros_comm/ros_commのようになる)
    2. 作成したメタパッケージのpackage.xmlのrun_dependタグに、stack内のパッケージ名を書く
    3. stack.xmlから必要な情報をpackage.xmlに移してstack.xmlを削除する。
    4. stackフォルダには、同名のメタパッケージと普通のパッケージだけが含まれる状態にする
  4. manifest.xmlを含むフォルダにて
    1. manifest.xmlをpackage.xmlにリネームする
    2. nameタグを追加。パッケージ名(フォルダ名)を入れる。
    3. CMakeLists.txtがなければcatkin_package()を呼ぶCMakeLists.txtを作る
  5. CMakeLists.txtの編集
    1. rosbuildコマンドをcatkinのものに置き換える(後述)
    2. バイナリがどうインストールされるかを記述する
  6. すべてのバイナリ(実行ファイル、ライブラリ)に対して
    1. メッセージヘッダの生成のためにadd_dependencies()を加える(例:geometry_msgs_gencpp)
  7. すべてのPython実行ファイルについて
    1. setup.pyではなくcmakeでインストールすること
  8. もしpythonのpackageを含んでいるならば、setup.pyを作成し、catkin_python_setup()をCMakeLists.txtに記述する。
catkinワークスペースは以下のような配置になる。catkin_makeを使ったとき、バイナリはbuildフォルダに作られる。
my_workspace/
  build/  <-- created by catkin_make
  devel/  <-- created by catkin_make
  src/
    package_1/
      package.xml
      CMakeLists.txt
      src/
        code.cpp
        ...
    package_2/
      package.xml
      CMakeLists.txt
      src/
        code.cpp
        ...
    ...

もしcleanしたいときはbuild/とdevel/は削除してもよい。これらは自動で作成される。

これまでmanifest.xmlで管理されていた、ライブラリのエクスポート情報などは、CMakeで管理されるようになる
詳しくは
参照。

rosbuildで使われていたマクロはCMakeの標準的な記述、もしくはcatkin独自の記述に変更される。詳しくは
参照。

CMakeのマクロ対応表


Build Macros
rosbuild
catkin
rosbuild_init()
remove
rosbuild_add_library(...)
add_library(...)
rosbuild_add_executable(...)
add_executable(...)
rosbuild_add_compile_flags(...)
set_target_properties(target PROPERTIES COMPILE_FLAGS new_flags)
rosbuild_remove_compile_flags(...)
set_target_properties(target PROPERTIES COMPILE_FLAGS new_flags)
rosbuild_add_link_flags(...)
set_target_properties(target PROPERTIES LINK_FLAGS new_flags
rosbuild_remove_link_flags(...)
set_target_properties(target PROPERTIES LINK_FLAGS new_flags)
rosbuild_add_boost_directories(...); rosbuild_link_boost(target components)
find_package(Boost REQUIRED COMPONENTS components); include_directories(${Boost_INCLUDE_DIRS}); target_link_libraries(target ${Boost_LIBRARIES})
rosbuild_add_openmp_flags(...)
find_package(OpenMP), then do other stuff
rosbuild_invoke_rospack(...)
DO NOT DO THIS
rosbuild_find_ros_package(...)
DO NOT DO THIS
rosbuild_find_ros_stack()
DO NOT DO THIS
rosbuild_check_for_sse(...)
look around online and find an example of how to find SSE
rosbuild_include(package module)
include(module) (might require some initial work to find the path to the module)
rosbuild_add_lisp_executable()
no support for this currently
rosbuild_add_swigpy_library(target lib src1 src2)
?
Test Macros
rosbuild
catkin
rosbuild_add_gtest(...)
catkin_add_gtest(...)
rosbuild_add_gtest_labeled
?
rosbuild_add_gtest_future
?
rosbuild_add_gtest_build_flags
use set_target_properties on test target
rosbuild_add_pyunit
migrate to catkin_add_nosetests(...)
rosbuild_add_pyunit_labeled
?
rosbuild_add_pyunit_future
?
rosbuild_add_rostest
?
rosbuild_add_rostest_labeled
?
rosbuild_add_rostest_future
?
rosbuild_add_roslaunch_check
?
rosbuild_declare_test
add_dependencies(tests <test-target>)
rosbuild_count_cores
?
rosbuild_check_for_display
?
rosbuild_check_for_vm
?
Message / service macros
rosbuild
catkin
rosbuild_add_generated_msgs(...)
add_message_files(DIRECTORY msg FILES ...)
rosbuild_add_generated_srvs(...)
add_service_files(DIRECTORY srv FILES ...)
rosbuild_genmsg()
generate_messages() (once per CMakeLists.txt)
rosbuild_gensrv()
generate_messages() (once per CMakeLists.txt)
Listing the message files is useful as adding removing files will trigger an automatic reconfigure by cmake.
Version macros
rosbuild
catkin
rosbuild_get_stack_version
obsolete
rosbuild_get_package_version
obsolete
Data Macros
rosbuild
catkin
rosbuild_download_data(url filename [md5sum])
?
rosbuild_download_test_data
download_test_data
rosbuild_untar_file
?
Special targets
rosbuild
catkin
rosbuild_premsgsrvgen
?
rosbuild_precompile
?
rosbuild_make_distribution
?
Actionlib
rosbuild
catkin
include(${actionlib_msgs_PACKAGE_PATH}/cmake/actionbuild.cmake)
Remove this, Add actionlib_msgs to find_package call
genaction()
add_action_files(DIRECTORY msg FILES ...)


Pythonについて

catkinはPythonのdistuilsというライブラリを利用する。もしpackage内でpython packageやscriptを使っているならばsetup.pyを加える必要がある。
標準的な配置(src/package_name/)を使っているならば以下の様なsetup.pyになる。

   1 #!/usr/bin/env python
   2 
   3 from distutils.core import setup
   4 from catkin_pkg.python_setup import generate_distutils_setup
   5 
   6 d = generate_distutils_setup(
   7    scripts=['bin/myscript'],
   8    packages=['PYTHON_PACKAGE_NAME'],
   9    package_dir={'': 'src'}
  10 )
  11 
  12 setup(**d)
そしてCMakeLists.txtに
catkin_python_setup()
を記述する。

詳しくは
を参照。

という感じで、翻訳してみましたが、これだけ見ると嫌になってきますね。
しかし、これをある程度自動化してくれるスクリプトがあるようですので、
次回はそれを紹介します。