複数のノードを同時に起動する方法

目的

rosrunによりノードを起動できますが,幾つものノードを立ち上げる際には手間となります.このような手間を解決するものとしてroslaunchが用意されています.ここでは,roslaunchの使い方について学びます.

複数のノードを一度に立ち上げる方法

複数のノードを同時に立ち上げる方法としてroslaunchがあります.roslaunchは,launchファイルで定義されたノードを起動します.launchファイルは,XML形式で書かれたスクリプト(簡易的なプログラム言語)です.XMLでは,タグ(< >で囲まれ要素)を列挙することでプログラムを構成します.

1. launchファイルの作成
今回は,パッケージ「turtlesim」のノード「turtlesim_node」を2つ起動するlaunchファイルを作成しましょう.まず,前回までに作成したワークスペース「practice_ws」のパッケージ「practice」に移動します.pwdコマンドで下記の出力が得られることを確認してください(アカウント名は異なっても問題ありません).

$ pwd
/home/yuu/practice_ws/src/practice

次に,launchファイルを保存するディレクトリを作成します.launchファイルは,パッケージの中のディレクトリ「launch」に保存します.catkin_create_pkgコマンドでは,ディレクトリ「launch」が作成されないため,自分でディレクトリを作成しましょう.作成したディレクトリ「launch」に移動し,テキストエディタでlaunchファイルを記述します.今回は「turtlesims.launch」というlaunchファイルを作成し,下記を入力しましょう.

<launch>

  <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

</launch>

<launch> ~ </launch>は,本ファイルがlaunchファイルであることを示すタグであり,launchファイルとして必要なタグとなります.<group ns=” “> ~ <group>は,ノードのグループを定義しています.””で囲まれた文字列は,名前空間を表します.<node pkg=” ” name=” ” type=” “/>は,起動するノードを定義しています.pkgにはパッケージ名,nameにはノード名,typeにはノードのファイル名を与えます.

nameで与えるノード名は,自由に名前をつけることができます.通常,同一のノードを複数立ち上げることができません.しかしながら,異なるノード名を与えることで,同一のノードを複数立ち上げることが可能となります.

launchファイルでは,それぞれのノードを起動する際に必要なパラメータ等も記述することができます.launchファイルのより詳細な記述方法についてはROS.orgのroslaunch/XMLを参照してください.

2. launchファイルの実行
作成したlaunchファイルを実行するには,roslaunchを使用します.roslaunchの使い方は下記の通りです.

$ roslaunch [package_name] [filename.launch]

それでは実際に作成したlaunchファイルを実行しましょう.

yuu@VB:launch$ roslaunch practice turtlesims.launch 
... logging to /home/yuu/.ros/log/ed02ff64-f54d-11e4-9386-08002794d9c5/roslaunch-VB-21600.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://VB:35830/

SUMMARY
========

PARAMETERS
 * /rosdistro
 * /rosversion

NODES
  /turtlesim/
    sim (turtlesim/turtlesim_node)
  /turtlesim2/
    sim (turtlesim/turtlesim_node)

auto-starting new master
process[master]: started with pid [21614]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to ed02ff64-f54d-11e4-9386-08002794d9c5
process[rosout-1]: started with pid [21627]
started core service [/rosout]
process[turtlesim/sim-2]: started with pid [21639]
process[turtlesim2/sim-3]: started with pid [21643]

もし,実行した際に下記のエラーが出力された場合には,環境設定ファイル(devel/setup.bash)をsourceコマンドで実行しましょう.わからない人はこちらのページを参照してください.

[turtlesims.launch] is neither a launch file in package [turtlesim_practice] nor is [turtlesim_practice] a launch file name

ノード「turtlesim_node」が2つ同時に起動すれば成功です.また,出力のハイライト部分に注目しましょう.自動的にマスターが立ち上がっていることがわかります.roslaunchでは,roscoreが起動していない場合には,自動的にroscoreが実行されます.

課題

1. 以前の講義で作成したturtlesim_practiceパッケージに,turtlesimノードとmove_turtlesimノードを同時に立ち上げるlaunchファイルを追加しなさい.