(訳注:最新の情報は原文を参照してください.)

Note: This tutorial assumes that you have completed the previous tutorials: ROSパッケージを作る.
(!) 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: このチュートリアルではパッケージをビルドするためのツールチェーンを学びます.

Tutorial Level: BEGINNER

Next Tutorial: ROSのノードを理解する

パッケージのビルド

システムの依存するパッケージが全てインストールされると、作成したパッケージをビルドすることができる。

rosmakeの使用

rosmakemakeコマンドとほとんど同じであるが、ROSの特殊仕様がいくつか盛り込まれている。rosmake beginner_tutorialsを実行すると、beginner_tutorialsパッケージがビルドされるだけでなく、beginner_tutorialsが依存する全てのパッケージが正しい順序でビルドされる。ROS packageを作成する際、rospyとroscpp,std_msgsを依存パッケージとして設定しているので、rosmakeコマンドによりこれらのパッケージ(とこれらのパッケージの依存パッケージなど)もビルドされる。

使用法:

rosmake [package]

練習:

$ rosmake beginner_tutorials

上記のコマンドは終了まで少し時間がかかるかもしれない。実行中に以下のような出力が確認できる。

  • [ rosmake ] No package specified.  Building ['beginner_tutorials']
    [ rosmake ] Logging to directory
    [ rosmake ] /home/dbking/.ros/rosmake_output-2009-09-22-03-17-14
    [ rosmake ] [ 0 of 18  Completed ]
    [rosmake-0] >>> genmsg_cpp >>> [ make ]
    [rosmake-0] <<< genmsg_cpp <<< [PASS] [ 0.39 seconds ]
    [ rosmake ] [ 1 of 18  Completed ]
    ...
    ...
    ...
    [ rosmake ] [ 17 of 18  Completed ]
    [rosmake-0] >>> beginner_tutorials >>> [ make ]
    [rosmake-0] <<< beginner_tutorials <<< [PASS] [ 0.79 seconds ]

Fuerteの場合、依存パッケージが大幅に削減されているので、この処理は殆ど時間もかからず出力も以下のようになる。

  • [ rosmake ] rosmake starting...                                                                     
    [ rosmake ] Packages requested are: ['beginner_tutorials']                                          
    [ rosmake ] Logging to directory /home/alex/.ros/rosmake/rosmake_output-20120603-082414             
    [ rosmake ] Expanded args ['beginner_tutorials'] to:
    ['beginner_tutorials']                         
    [rosmake-0] Starting >>> std_msgs [ make ]                                                          
    [rosmake-1] Starting >>> roslang [ make ]                                                           
    [rosmake-0] Finished <<< std_msgs ROS_NOBUILD in package std_msgs
     No Makefile in package std_msgs  
    [rosmake-1] Finished <<< roslang ROS_NOBUILD in package roslang
     No Makefile in package roslang     
    [rosmake-1] Starting >>> rospy [ make ]                                                             
    [rosmake-2] Starting >>> roscpp [ make ]                                                            
    [rosmake-1] Finished <<< rospy ROS_NOBUILD in package rospy
     No Makefile in package rospy           
    [rosmake-2] Finished <<< roscpp ROS_NOBUILD in package roscpp
     No Makefile in package roscpp        
    [rosmake-2] Starting >>> beginner_tutorials [ make ]                                                
    [rosmake-2] Finished <<< beginner_tutorials [PASS] [ 1.14 seconds ]                                 
    [ rosmake ] Results:                                                                                
    [ rosmake ] Built 5 packages with 0 failures.                                                       
    [ rosmake ] Summary output to directory                                                             
    [ rosmake ] /home/alex/.ros/rosmake/rosmake_output-20120603-082414  

複数パッケージに対するrosmake

rosmakeにより一度に複数のパッケージビルドをすることもできる。

使用法:

rosmake [package1] [package2] [package3]

レビュー

これまで使用してきたコマンドをいくつか列挙しておく。

  • rosdep = ros+dep(endencies) : 依存するパッケージをインストールためのツール
  • rosmake = ros+make : あるROS packageをコンパイルする

パッケージをビルドする

自分のパッケージのシステム依存がインストールされていれば、新しいパッケージをビルドすることができます。

Note: aptやその他のパッケージマネージャーを使ってROSをインストールした場合はパッケージの依存関係は解消されています。

作業を続ける前に、環境セットアップファイルをsourceコマンドで忘れずに設定しておきましょう。Ubuntuで環境を構築しているなら、以下のようにして設定します:

$ source /opt/ros/hydro/setup.bash

catkin_makeを使う

catkin_makeは標準的なcatkinのワークフローを便利にするコマンドラインツールです。catkin_makeは標準的なCMakeのワークフローのcmakemakeの呼び出しを結合していると想像できるでしょう。

使い方:

#catkinワークスペースの中で
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

標準的なCMakeのワークフローに慣れていない人は、以下の説明を参考にしてください:

Note: これはCMakeが一般的にどう働くかの単なる一例ですので、以下のコマンドを走らせても動作しません。

# CMakeのプロジェクトの中で
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install  # (optionally)

このプロセスはそれぞれのCMakeのプロジェクトごとに実行されます。これとは対照的に、catkinプロジェクトではワークスペース単位で一緒にビルドされます。ワークスペース内のゼロから多数までのcatkinパッケージをビルドするには以下のワークフローに従います:

# catkin ワークスペースの中で
$ catkin_make
$ catkin_make install  # (optionally)

上記のコマンドは、srcの中のいかなるcatkinプロジェクトをもビルドします。これはREP128の推奨方針に従っています。もし自分のソースコードがmy_srcといった違う場所にあるときは、catkin_makeを以下のように呼びます:

Note: my_srcが存在しなければ、以下のコマンドを実行しても動作しません。

# catkin ワークスペースの中で
$ catkin_make --source my_src
$ catkin_make install --source my_src  # (optionally)

catkin_makeのより高度な使い方については、 catkin/commands/catkin_makeのドキュメントを参照してください。

自分のパッケージをビルドする

自分のコードをビルドする人は、CMakeLists.txtを編集する必要があるかもしれませんので、後で扱うチュートリアル(C++)/(Python) も、参照してください。

前のチュートリアルパッケージの作成catkin workspacebeginner_tutorialsと名付けた新しいcatkinパッケージがあるはずです。このcatkinワークスペースの中に入り、srcフォルダの中を見てみましょう。

$ cd ~/catkin_ws/
$ ls src
  • beginner_tutorials/  CMakeLists.txt@  

前のチュートリアルでcatkin_create_pkgのコマンドで作ったbeginner_tutorialsフォルダがあるのが確認できたら、catkin_makeコマンドを使ってパッケージをビルドできます。

$ catkin_make

以下のような出力に似た、cmakeからの出力やmakeの出力を見るでしょう。

  • Base path: /home/user/catkin_ws
    Source space: /home/user/catkin_ws/src
    Build space: /home/user/catkin_ws/build
    Devel space: /home/user/catkin_ws/devel
    Install space: /home/user/catkin_ws/install
    ####
    #### Running command: "cmake /home/user/catkin_ws/src
    -DCATKIN_DEVEL_PREFIX=/home/user/catkin_ws/devel
    -DCMAKE_INSTALL_PREFIX=/home/user/catkin_ws/install" in "/home/user/catkin_ws/build"
    ####
    -- The C compiler identification is GNU 4.2.1
    -- The CXX compiler identification is Clang 4.0.0
    -- Checking whether C compiler has -isysroot
    -- Checking whether C compiler has -isysroot - yes
    -- Checking whether C compiler supports OSX deployment target flag
    -- Checking whether C compiler supports OSX deployment target flag - yes
    -- Check for working C compiler: /usr/bin/gcc
    -- Check for working C compiler: /usr/bin/gcc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Using CATKIN_DEVEL_PREFIX: /tmp/catkin_ws/devel
    -- Using CMAKE_PREFIX_PATH: /opt/ros/groovy
    -- This workspace overlays: /opt/ros/groovy
    -- Found PythonInterp: /usr/bin/python (found version "2.7.1") 
    -- Found PY_em: /usr/lib/python2.7/dist-packages/em.pyc
    -- Found gtest: gtests will be built
    -- catkin 0.5.51
    -- BUILD_SHARED_LIBS is on
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- ~~  traversing packages in topological order:
    -- ~~  - beginner_tutorials
    -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -- +++ add_subdirectory(beginner_tutorials)
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/user/catkin_ws/build
    ####
    #### Running command: "make -j4" in "/home/user/catkin_ws/build"
    ####

catkin_makeがそれぞれどこの'spaces'を使っているかのpathsを最初に表示していることに注意してください。この領域についての詳細はREP128とwikiのcatkinワークスペースについてのドキュメントcatkin/workspacesに記載されています。注目すべき重要なことは、自分のcatkinワークスペース内に作られたフォルダがこれらのデフォルト値となっていることです。lsを使って見てみましょう。

$ ls
  • build
    devel
    src

buildフォルダはbuild spaceのデフォルト位置で、cmakemakeが環境設定しパッケージをビルドする場所です。develフォルダはdevel spaceのデフォルト位置で、自分のパッケージのインストールに先んじて、実行ファイルとライブラリが入る場所です。

ここまでで ROS パッケージのビルドを行いました.次は ROS メッセージとサービスについてお話ししましょう.

Wiki: ja/ROS/Tutorials/BuildingPackages (last edited 2015-10-13 13:17:16 by s_ktr)