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など)