catkin
rosbuild
Please ask about problems and questions regarding this tutorial on answers.ros.org . Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.
ROSのパッケージを手動で作る
Description: このチュートリアルは、どのようにROSのパッケージを手動で作るかを説明します。
Tutorial Level: INTERMEDIATE
Next Tutorial: Managing System Dependencies
ROSのPackages (roscreate-pkg )を作るツールはありますが、ご覧いただくように決定的な違いはありません。roscreate-pkg はミスを減らし、楽をできますが、パッケージはディレクトリとシンプルなXMLファイルだけです。
さて、新しいfoobarパッケージを作りましょう。このチュートリアルでは、ROS_PACKAGE_PATH の中のpkgs ディレクトリで作業することを想定しています。
pkgs$ mkdir foobar
pkgs$ cd foobarまず初めに行うことは、manifest ファイルを加えることです.manifest.xml ファイルで、rospack のようなツールがどのパッケージにこのパッケージが依存しているかなどの情報を決定することを可能にします。
foobar/manifest.xml の中に以下のものを書き込んでください。
<package>
<description brief="example package tutorial">A simple tutorial package</description>
<author>Your Name Here</author>
<license>BSD</license>
<depend package="roscpp" />
<depend package="std_msgs" />
</package>もうパッケージはmanifestを持っているので、ROSはこのパッケージを見つけることができます。以下のコマンドを打ってみてください。
rospack find foobarもしROSが正しく準備されているなら、/home/user/ros/pkgs/foobar のような表示を目にすることができると思います.これが、ROSが見えないところでパッケージを見つけ出せる理由です。
このパッケージは、roscpp や std_msgs に依存をもつことになったことにも注意してください。これらの依存関係を特定する意味を理解するための一つの例を見るため、以下のrospack のコマンドを実行してみてください。
rospack export --lang=cpp --attrib=cflags foobar
rospack export --lang=cpp --attrib=lflags foobarこれらを実行すると、rospackはfoobar の依存関係を見ていき、必要なインクルードやコンパイルするためのリンクの宣言のリストを生成し、実行ファイルをリンクします。これらのコマンドは、ROSのモジュールの特性にかかわらず、パッケージを正しくコンパイルしリンクするために、ビルドシステムによって使われます。ビルドシステムがこれらをあなたの変わりに管理してくれるので、あなたが直接これらをいじる必要はないでしょう。しかし、見てのとおり、もし違ったビルドシステムを利用したい場合にも、ほどよく簡単に使える。
これらを利用するためには、2つのファイルを作成する必要がある。: Makefile と CMakeLists.txt である.
foobar/Makefile の中で, 以下をコピーペーストしてください:
include $(shell rospack find mk)/cmake.mkこれは、このパッケージをビルドするのにMakeのかわりにCmakeを利用することをmake コマンドに知らせます。
次にCMakeLists.txt ファイルがCMakeをかわりに使うために必要です。ROSは複数のマルチプラットフォームでビルドする時にその強力な柔軟性をもってCMakeを使います。
foobar/CMakeLists.txt の中に以下をコピーペーストしてください:
cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
rosbuild_init()以上が、ROSでパッケージをビルドするのに必要なことです。もちろん、何かを実際にビルドし始めたいなら、CMakeのマクロについて学ばなければなりません。CMakeLists でさらなる情報をご覧ください。
ROSのPackages (catkin_create_pkg )を作るツールはありますが、ご覧いただくように決定的な違いはありません。roscreate-pkg はミスを減らし、楽をできますが、パッケージはディレクトリとシンプルなXMLファイルだけです。
さて、新しいfoobarパッケージを作りましょう。このチュートリアルでは、catkinのワークスペースで作業し、setupファイルを読み込み済みであることを想定しています。
catkin_ws_top $ mkdir -p src/foobar
catkin_ws_top $ cd src/foobarまず初めにわれわれがすべきことは、manifest ファイルを加えることです。package.xml ファイルはrospack のようなツールがパッケージがどれに依存してるかなどの情報についての決定できるようにサポートします。
foobar/package.xml の中で, 以下をコピーペーストしてください:
<package>
<name>foobar</name>
<version>1.2.4</version>
<description>
This package provides foo capability.
</description>
<maintainer email="foobar@foo.bar.willowgarage.com">PR-foobar</maintainer>
<license>BSD</license>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<run_depend>roscpp</run_depend>
<run_depend>std_msgs</run_depend>
</package>this page from catkin tutorial も更なるcatkin/package.xml に関する情報が必要ならご覧ください。
もうパッケージはmanifestを持っているので、ROSはこのパッケージを見つけることができます。以下のコマンドを打ってみてください。
rospack find foobarもしROSが正しく準備されているなら、/home/user/ros/catkin_ws_top/src/foobar のようなものを見るでしょう。これがROSがパッケージを見つけ出せる理由です。
roscpp や std_msgs と依存関係をこのパッケージは持っていることに注意してください。
そのような依存関係は正しい順序でパッケージを構成するために、catkinによって使われます。
次にCMakeLists.txt がマルチプラットフォームでビルドするときに強力な柔軟性をもつCMakeを利用するcatkin_make がパッケージをビルドするのに必要である。
foobar/CMakeLists.txt の中で, 以下をコピーペーストしてください:
cmake_minimum_required(VERSION 2.8.3)
project(foobar)
find_package(catkin REQUIRED roscpp std_msgs)
catkin_package()以上がcatkin を使ってROSの中でパッケージをビルドするのに必要なことです。もちろん、何かをビルドしようと思ったなら、CMakeのマクロについて学ばなければなりません。詳しくはCMakeLists.txt をご覧ください。package.xml や CMakeLists.txt などをカスタマイズするために、いつでも初心者レベルのチュートリアルもご覧ください。(CreatingPackage など)