C++
ROS
ロボット

ROS講座04 roslaunch1

概要

ROS講座03でROSの実行を行いましたが、簡単なROSの実行でもターミナルを3つ開かなくてはいけません。今後もっと複雑な構成をとることを考えると実行が大変面倒であるというのは明らかです。
そのような場合にはroslaunchを使用します。roslaunchでは複数のROSノードを同時に立ち上げたり、複雑な設定をすることができます。

gitリポジトリにこの講座に出てくるプログラムが載っています。

launchファイルの記述

流儀としてROSパッケージ内のlaunch/ディレクトリにlaunchファイルを作成します。

cd ~/catkin_ws/src/ros_lecture/basic_lecture/launch
touch simple1.launch

以下のようなlaunchファイルを記述してみてください。XML形式で記述します。XMLでは開始タグ<tag>から閉じタグ</tag>までの間が1つの要素として扱われます。またタグの中に属性をattribute="value"の形式で書けます。空要素タグ<tag/>は単独で(つまり閉じタグ無しで)使えます。

basic_lecture/launch/simple1.launch
<launch>
  <node name="simple_talker"   pkg="basic_lecture" type="simple_talker" />
  <node name="simple_listener" pkg="basic_lecture" type="simple_listener" output="screen/>
</launch>

nodeタグの中のpkgはそのROSノードが属するROSパッケージ名を、typeはROSノードの名前を書きます。nameは自由につけることができる名前です。リネームすることができるので同じROSノードを名前を変えて2つ実行することもできます(これのメリットはまた後々書きます)。

実行1

launchの実行
roslaunch basic_lecture simple1.launch

この1行でROS講座03で実行したターミナル3つ分の処理が行えます。
しかしlistenerの分しか画面出力がされていません。roslaunchではnodeタグにoutput="screen"の属性を付けたノードのみ画面出力がされます。

実行2

以下のようなsimple2.launchを書いて実行してみましょう

basic_lecture/launch/simple2.launch
<launch>
  <node name="simple_talker"   pkg="basic_lecture" type="simple_talker"   output="screen"/>
  <node name="simple_listener" pkg="basic_lecture" type="simple_listener" output="screen"/>
</launch>
launchの実行
roslaunch basic_lecture simple2.launch

このようにするとsimple_talkersimple_listenerの両方の画面出力がターミナル上に出ます。

目次ページへのリンク

ROS講座の目次へのリンク