LoginSignup
20
19

More than 5 years have passed since last update.

ROSチュートリアル第五回 - catkinのパッケージをコンパイルしてみる

Last updated at Posted at 2014-01-28

catkinのレポジトリを追加する

前回catkinのワークスペースを$HOME/ros_catkin_ws/hydroに作成しました。
ここにソースコードを追加してみます。

今回はgaraemon-catkin-sample-pkgというレポジトリを追加してみます。中には簡単なサンプルが入っているだけです。

$ cd ~/ros_catkin_ws/hydro/src
$ wstool set --git garaemon-catkin-sample-pkg https://github.com/garaemon/garaemon-catkin-sample-pkg.git
$ wstool update

wstoolというのはcatkinのワークスペース、つまり$HOME/ros_catkin_ws/hydro/srcを色々といじるときに使うコマンドです。

$ wstool -h                                                                                                                                                                                                                                                                                                                       
wstool is a command to manipulate ROS workspaces. wstool replaces its predecessor wstool.

Official usage:
  wstool CMD [ARGS] [OPTIONS]

wstool will try to infer install path from context

Type 'wstool help' for usage.

help            provide help for commands
init            set up a directory as workspace

set             add or changes one entry from your workspace config
merge           merges your workspace with another config set
remove (rm)     remove an entry from your workspace config, without deleting files

update (up)     update or check out some of your config elements

info            Overview of some entries
status (st)     print the change status of files in some SCM controlled entries
diff (di)       print a diff over some SCM controlled entries

wstool setはワークスペースに新しくレポジトリを追加するときのコマンドになっています。

なので、

$ wstool set --git garaemon-catkin-sample-pkg https://github.com/garaemon/garaemon-catkin-sample-pkg.git

はローカルではgaraemon-catkin-sample-pkgという名前のディレクトリでhttps://github.com/garaemon/garaemon-catkin-sample-pkg.gitをとってきてください、ちなみにgitですという意味です。

wstool setをしただけではまだコードはcloneされていません。そのためにはwstool updateを走らせる必要があります。
これは、ワークスペースにwstool setで追加したレポジトリを全部アップデートしてくれ、というコマンドです。

パッケージが追加されたことを確認してみましょう

$ ls ~/ros_catkin_ws/hydro/src
CMakeLists.txt garaemon-catkin-sample-pkg
$ rospack find catkin_roscpp_sample
/home/username/ros_catkin_ws/hydro/src/garaemon-catkin-sample-pkg/catkin_roscpp_sample

ここでrospackという新しいコマンドが出てきました。rospackはROSのパッケージに関する情報を提供するためのコマンドです。例えば、

$ rospack list
actionlib /opt/ros/hydro/share/actionlib
actionlib_msgs /opt/ros/hydro/share/actionlib_msgs
actionlib_tutorials /opt/ros/hydro/share/actionlib_tutorials
(中略)
voxel_grid /opt/ros/hydro/share/voxel_grid
xacro /opt/ros/hydro/share/xacro
xmlrpcpp /opt/ros/hydro/share/xmlrpcpp

rospack listコマンドを使うとパッケージの一覧が見えます。
rospack findはパッケージのパスを返します。

catkinのパッケージをコンパイルする

catkin_makeというコマンドを使います

$ cd ~/ros_catkin_ws/hydro
$ catkin_make

catkin_makeを実行するディレクトリに注意してください。wstool~/ros_catkin_ws/hydro/src以下で使いましたが、これはその一つ上です。

catkin_makeを実行するとsrcディレクトリと並列にbuild, develというディレクトリが出来ます。

$ ls ~/ros_catkin_ws/hydro
build  devel  src

このdevelというディレクトリの中にコンパイルしてできたライブラリやバイナリが置かれます。

コンパイルしてできたサンプルを実行する

今回チェックアウトしたレポジトリにはcatkin_roscpp_sampleとういパッケージが有ります。
これには二つのノードの間でtopicを利用した通信を行う最低限のサンプルが含まれています。
これを実行しましょう。

まず一つ目のターミナルで

$ roscore

と実行します。
2つ目のターミナルで

$ rosrun catkin_roscpp_sample hello_publisher

と実行します

最後に3つめのターミナルで

$ rosrun catkin_roscpp_sample hello_subscriber

と実行します。

そうすると3つめのターミナルに以下の様な出力が出るはずです

$ rosrun catkin_roscpp_sample hello_subscriber
[ INFO] [1390899414.971967414]: subscriber get message: Hello World!!
[ INFO] [1390899414.982323544]: subscriber get message: Hello World!!
[ INFO] [1390899414.992567862]: subscriber get message: Hello World!!
[ INFO] [1390899415.001686398]: subscriber get message: Hello World!!
[ INFO] [1390899415.011823428]: subscriber get message: Hello World!!
[ INFO] [1390899415.021833998]: subscriber get message: Hello World!!
...

ちなみに、プログラムを止めるにはCtrl-Cをしてください。ROSのプログラムは基本的にCtrl-Cで止めます。

ここでは二つ新しいコマンドが出てきています, roscorerosrunです

roscoreはROSの通信を管理してくれるマスターです。必ず立ち上げる必要があります。
一つのroscoreが一つのROSネットワークを作ります。

rosrunはいわば便利スクリプトです。
rosrun package executablepackageというパッケージに含まれるexecutableを実行してくれという意味です。

つまり、rosrun catkin_roscpp_sample hello_publisher, rosrun catkin_roscpp_sample hello_subscriberの二つはcatkin_roscpp_sampleパッケージのhello_publisherhello_subscriberという二つの実行ファイルを実行してくれ、という意味です。

しかし、いちいちプロセスを一つ一つあげていたのでは面倒です。そのため、複数のプロセスをまとめて立ち上げるためのコマンドが用意されています。

roslaunchでサンプルを実行する

複数のプロセスを一気に立ち上げるにはroslaunchというのを利用します。先ほど立ち上げたプログラムを全て終了した後に

$ roslaunch catkin_roscpp_sample sample.launch

と実行すると同じようにHello Worldという文字列がターミナルに見えます。

roslaunchはlaunchファイルと呼ばれるxmlにどのようなプロセスを立ち上げるかとずらーっと書いておいて、それでまとめてプロセスを立ち上げるコマンドです。

sample.launchの中身を見てみましょう

$ roscd catkin_roscpp_sample
$ less launch/sample.launch
<launch>
  <node pkg="catkin_roscpp_sample"
        type="hello_publisher"
        name="publisher"
        output="screen">
  </node>
  <node pkg="catkin_roscpp_sample"
        type="hello_subscriber"
        name="subscriber"
        output="screen">
  </node>
</launch>

<node>タグによって、立ち上げるプロセスを指定しています。pkg属性によって実行ファイルが含まれるパッケージ、type属性は実行ファイルの名前, name属性はROSのネットワークにおける名前、output属性は標準出力をどこにPIPEするかを指定しています。

さりげなく登場してるroscdというコマンドはとても便利です。roscd packagepackageにcdするということです。
この系統のrosコマンドは、tab補完が効くので便利です。

サンプルの細かい中身は今後見ていきます。

まとめ

  • wstoolはcatkinのワークスペースをいじるコマンド
  • catkin_makeはcatkinのパッケージをコンパイルする
  • roscoreはネットワークのマスター
  • rospackはパッケージの情報を見るコマンド
  • rosrunは実行ファイルを実行するためのコマンド
  • roslaunchはlaunchファイルでまとめてプロセスを立ち上げる。
  • roscdはパッケージにcdする
  • Ctrl-CでROSのプログラムは終了させる
20
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19