今日はROS勉強オフ会開催中です!
Turtlebot2を買った強者が自宅に来ております。
ROSのインストールはできたけど、ロボットが動かないとか。
僕の読みでは原因はケーブルの差し忘れです。
5分後・・・・
動きました!
ROS_HOSTNAME/ROS_MASTER_URIの設定がおかしかったみたいです。
2013年3月9日土曜日
2013年2月22日金曜日
2013年2月10日日曜日
catkin化: スクリプトで楽をする編
みなさんcatkin化してますか?
catkinizeというcatkin化を助けてくれるスクリプトがあるので、これを使ってみましょう。
参考URL:
http://ros.org/wiki/catkin/migrating_from_rosbuild
githubにソースがあるのでそこから取ってきてインストールします。
移行するためのworkspaceをつくります。
ここではlight_curtainというOTLの自作packageの移行をするものとします。
ここにlight_curtain packageのソースをもってきて、catkinizeします。
catkinizeの引数はpathとバージョン番号です。
もし、stackならcatkinize_stackを使えばOK。もしPakcageの新規作成ならcatkin_create_pkgを使いましょう。
catkinizeがすべて自動でやってくれるわけではないので、手動で対応しなければなりません。
例えばpackage.xmlの依存関係はすべてコメントアウトされた状態にあります。
また、CMakeLists.txtもTODOで、手動で埋めるべき項目が記されています。
注意:catkinではすべてのCMakeプロジェクトが1つにまとめられます。そのためCMake上の変数やターゲット名は被らないようにしなければなりません。
以下にやることを原典を参考に書いておきますが、実際にはCMakeLists.txtをいじりながら、ビルド、実行、ができる状態まで編集しつつ、分からないところを調べる、という作業になります。
あと、ライブラリが自動でリンクされないので、以下のような感じに書くとcatkinで依存関係記述されたライブラリがリンクできます。
target_link_libraries(hogehoge_target ${catkin_LIBRARIES})
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
もし、stackならcatkinize_stackを使えばOK。もしPakcageの新規作成ならcatkin_create_pkgを使いましょう。
手動でチェック
catkinizeがすべて自動でやってくれるわけではないので、手動で対応しなければなりません。
例えばpackage.xmlの依存関係はすべてコメントアウトされた状態にあります。
また、CMakeLists.txtもTODOで、手動で埋めるべき項目が記されています。
注意:catkinではすべてのCMakeプロジェクトが1つにまとめられます。そのためCMake上の変数やターゲット名は被らないようにしなければなりません。
以下にやることを原典を参考に書いておきますが、実際にはCMakeLists.txtをいじりながら、ビルド、実行、ができる状態まで編集しつつ、分からないところを調べる、という作業になります。
- maintainerの項目がコメントアウトされた状態で入っている(authorと同じになっている)のでそれを確認してコメントイン。<maintainer email="hoge@hoge.com">のように、emailフィールドも入れた方がいいみたいです。
- dependenciesがbuild/run/testで分かれたので、確認してコメントイン。http://ros.org/wiki/catkin/package.xmlを読んで意味を理解しましょう。
- CMakeLists.txtが編集されているので、そこに書かれたTODOをちゃんとやる
- 自動的に変更された部分を確認して修正する
- 古いコメント部分を削除
- 生成するメッセージ、サービス、アクションをadd_**_filesに記入
- 古いincludeを削除
- catkin_packageマクロを埋める
- 変数名がユニークなものになるように変更
- 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
・stackという概念がなくなった。代わりにメタパッケージ(metapackage)が導入された(stack.xmlはpackage.xmlになる)
・CMakeLists.txtの内容が大幅に変わった
catkin化されたものをWetパッケージと呼ぶようなので覚えておくと良いと思います。
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パッケージと呼ぶようなので覚えておくと良いと思います。
変換の手順
- workspaceの作成
- 依存パッケージがcatkin化されているならば、既存プロジェクトをこのworkspaceに移動させる
- stackをメタパッケージに変換する。ただしunary stackは単なるpackageになる。
- stackの中にstackと同じ名前のcatkinパッケージを作成する(ros_comm/ros_commのようになる)
- 作成したメタパッケージのpackage.xmlのrun_dependタグに、stack内のパッケージ名を書く
- stack.xmlから必要な情報をpackage.xmlに移してstack.xmlを削除する。
- stackフォルダには、同名のメタパッケージと普通のパッケージだけが含まれる状態にする
- manifest.xmlを含むフォルダにて
- manifest.xmlをpackage.xmlにリネームする
- nameタグを追加。パッケージ名(フォルダ名)を入れる。
- CMakeLists.txtがなければcatkin_package()を呼ぶCMakeLists.txtを作る
- CMakeLists.txtの編集
- rosbuildコマンドをcatkinのものに置き換える(後述)
- バイナリがどうインストールされるかを記述する
- すべてのバイナリ(実行ファイル、ライブラリ)に対して
- メッセージヘッダの生成のためにadd_dependencies()を加える(例:geometry_msgs_gencpp)
- すべてのPython実行ファイルについて
- setup.pyではなくcmakeでインストールすること
- もし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になる。
そしてCMakeLists.txtに
catkin_python_setup()
を記述する。
詳しくは
を参照。
という感じで、翻訳してみましたが、これだけ見ると嫌になってきますね。
しかし、これをある程度自動化してくれるスクリプトがあるようですので、
次回はそれを紹介します。
2013年1月1日火曜日
Groovyリリース
あけましておめでとうございます。
元日にGroovyリリース来ました!
willowに休日はなかったのか。
http://www.ros.org/news/2012/12/ros-groovy-galapagos-released.html
Groovyは正式にcatkin(rosbuildを使わず、cmakeの仕組みでビルド)化され、
慣れ親しんだroscreate-pkgがなくなる、など大きな変更があります。
とありますので、upgradeする人は、pipで入れていたPythonツール群(rosdepなど)は削除したほうが良さそうです。
主な変更は
・コードのGitHubへの移動
・catkin化(stackの削除:metapackageの導入)
・リリースシステムbloomの導入
・rqtの導入(WxからQtへの移行)
くらいですかね。
ビルドシステムが変更されたため、ベーシックなチュートリアルから変更されていますので、このブログの過去記事がまた役に立たなくなりましたのでご注意ください。
catkin化はぜひ取り上げたいですね。
元日にGroovyリリース来ました!
willowに休日はなかったのか。
http://www.ros.org/news/2012/12/ros-groovy-galapagos-released.html
Groovyは正式にcatkin(rosbuildを使わず、cmakeの仕組みでビルド)化され、
慣れ親しんだroscreate-pkgがなくなる、など大きな変更があります。
Ubuntu Users: Please make sure to use the Python tools from apt and not pip. The pip based installs tend to go out of date and not get updated with the rest of the system.
とありますので、upgradeする人は、pipで入れていたPythonツール群(rosdepなど)は削除したほうが良さそうです。
主な変更は
・コードのGitHubへの移動
・catkin化(stackの削除:metapackageの導入)
・リリースシステムbloomの導入
・rqtの導入(WxからQtへの移行)
くらいですかね。
ビルドシステムが変更されたため、ベーシックなチュートリアルから変更されていますので、このブログの過去記事がまた役に立たなくなりましたのでご注意ください。
catkin化はぜひ取り上げたいですね。
2012年11月27日火曜日
TurtleBot2もらったぞ!
iHeartRoboticsをご存知でしょうか?
iHeartEngineeringでTurtleBotの販売などを手がけております。
そこのBillさんとはROSを通じて友達になりまして、
(似たようなソフトを作ったり、趣味が合います。)
以前ROSのTシャツやらグッズをもらったりしました。
そしてなんと、今回出たばかりのTurtleBot2を貰いました!
うおーー!!!
他にもいろんなキットももらっちゃいました!
我が家の使い古されたルンバとのツーショット。
色が同じで兄弟みたい。
はるばる名古屋まで会いに来てくれたので、そのまま
名古屋のミッドランドスクエアというビルのオープンスペースで
二人でセットアップ&動かして遊んでました。
最高に楽しかったです。動画です↓(音声お聞き苦しくてすみません)
TurtleBot1や、ルンバはオドメトリ性能があまりよくなく、自律移動はやっとこさ、
って感じでしたが、オドメトリ性能が向上したということなので、
バリバリ家の中を走り回らせそうです!
私はドキュメントの日本語化、ソフト開発などやりまくります。
日本のみなさんも安心して、ぜひTurtleBot2買って、
日本で、世界で一緒に遊びましょう!
Thanks!! iHeartRobotics!! Bill!!!
iHeartEngineeringでTurtleBotの販売などを手がけております。
そこのBillさんとはROSを通じて友達になりまして、
(似たようなソフトを作ったり、趣味が合います。)
以前ROSのTシャツやらグッズをもらったりしました。
そしてなんと、今回出たばかりのTurtleBot2を貰いました!
うおーー!!!
他にもいろんなキットももらっちゃいました!
我が家の使い古されたルンバとのツーショット。
色が同じで兄弟みたい。
はるばる名古屋まで会いに来てくれたので、そのまま
名古屋のミッドランドスクエアというビルのオープンスペースで
二人でセットアップ&動かして遊んでました。
最高に楽しかったです。動画です↓(音声お聞き苦しくてすみません)
TurtleBot1や、ルンバはオドメトリ性能があまりよくなく、自律移動はやっとこさ、
って感じでしたが、オドメトリ性能が向上したということなので、
バリバリ家の中を走り回らせそうです!
私はドキュメントの日本語化、ソフト開発などやりまくります。
日本のみなさんも安心して、ぜひTurtleBot2買って、
日本で、世界で一緒に遊びましょう!
Thanks!! iHeartRobotics!! Bill!!!
ラベル:
TurtleBot
2012年11月25日日曜日
rosserialを使ってArduinoとROSで通信する
みなさんArduino使っていますか?
イタリア製のいかしたマイコンです。
mbedのほうがオシャレな気がしますが、
まだまだArduinoのほうが強い気がします。
ArduinoとROSを通信させたいときに便利なrosserial_arduinoを紹介します。
rosserial_arduinoは以下のメリットがあります。
まあ、要するにマイコンとPCのプロトコルをいちいち決めるのがめんどくさいときに楽できますよ、ってことです。
ちなみにrosserialはシリアル通信でROSをおしゃべりするための汎用的なライブラリで、rosserial_arduinoは、そのArduino用ライブラリになります。
PCとはjava/pythonで接続します。
チュートリアルはこちら。
http://ros.org/wiki/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup
http://ros.org/wiki/rosserial_arduino/Tutorials/Hello%20World
でもいいんですが、これだと最新のArduino IDE(1.0以降)で動きません。
なので、最新版をソースから使うのがいいです。
(groovyではそのまま動くと思います。)
hg clone https://kforge.ros.org/rosserial/hg rosserial
rosdep install rosserial_arduino
rosmake rosserial_arduino
そしたらそれを以下のコマンドでインストールします。<sketchbook>はArduino IDEをインストールしたパスで置き換えてくださいね。
roscd rosserial_arduino/libraries
cp -r ros_lib <sketchbook>/libraries/
するとArduinoのサンプルにros_libというのが出るので、
これで遊べます。
ExampleからHelloWorldを選択して、ダウンロードしてみてください。
するとすでにArduinoがROSをしゃべっているので、確認しましょう。
Publish/Subscribeができるようです。サービスはまだないのかな?
イタリア製のいかしたマイコンです。
mbedのほうがオシャレな気がしますが、
まだまだArduinoのほうが強い気がします。
ArduinoとROSを通信させたいときに便利なrosserial_arduinoを紹介します。
rosserial_arduinoは以下のメリットがあります。
- ArduinoのスケッチをROSライクに書ける
- ArduinoとROSのインタフェースで通信できる
まあ、要するにマイコンとPCのプロトコルをいちいち決めるのがめんどくさいときに楽できますよ、ってことです。
ちなみにrosserialはシリアル通信でROSをおしゃべりするための汎用的なライブラリで、rosserial_arduinoは、そのArduino用ライブラリになります。
PCとはjava/pythonで接続します。
チュートリアルはこちら。
http://ros.org/wiki/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup
http://ros.org/wiki/rosserial_arduino/Tutorials/Hello%20World
インストール
sudo apt-get install ros-fuerte-rosserialでもいいんですが、これだと最新のArduino IDE(1.0以降)で動きません。
なので、最新版をソースから使うのがいいです。
(groovyではそのまま動くと思います。)
hg clone https://kforge.ros.org/rosserial/hg rosserial
rosdep install rosserial_arduino
rosmake rosserial_arduino
そしたらそれを以下のコマンドでインストールします。<sketchbook>はArduino IDEをインストールしたパスで置き換えてくださいね。
roscd rosserial_arduino/libraries
cp -r ros_lib <sketchbook>/libraries/
するとArduinoのサンプルにros_libというのが出るので、
これで遊べます。
ExampleからHelloWorldを選択して、ダウンロードしてみてください。
実行
まずroscoreを上げます。roscore
次にマイコンとシリアル通信するPCのソフトを上げます。
rosrun rosserial_python serial_node.py /dev/ttyUSB0
rostopic echo chatter
Publish/Subscribeができるようです。サービスはまだないのかな?
登録:
投稿 (Atom)