目的
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ファイルを追加しなさい.