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="basic_simple_talker"   pkg="basic_lecture" type="basic_simple_talker" />
  <node name="basic_simple_listener" pkg="basic_lecture" type="basic_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"の属性を付けたノードのみ画面出力がされます。

launchの結果
user@ubuntu:~$ roslaunch basic_lecture simple1.launch 
... logging to /home/erio/.ros/log/afcc2554-5dc7-11e8-a707-000c297e7534/roslaunch-ubuntu-7245.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://ubuntu:39439/

SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.13

NODES
  /
    simple_listener (basic_lecture/simple_listener)
    simple_talker (basic_lecture/simple_talker)

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

setting /run_id to afcc2554-5dc7-11e8-a707-000c297e7534
process[rosout-1]: started with pid [7268]
started core service [/rosout]
process[simple_talker-2]: started with pid [7275]
process[simple_listener-3]: started with pid [7286]
[ INFO] [1526997287.237937304]: I heard: [hello world!]
[ INFO] [1526997287.337150230]: I heard: [hello world!]
[ INFO] [1526997287.437157640]: I heard: [hello world!]
[ INFO] [1526997287.536618320]: I heard: [hello world!]
[ INFO] [1526997287.636732507]: I heard: [hello world!]
[ INFO] [1526997287.737866320]: I heard: [hello world!]
#この後も続く

実行2

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

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

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

目次ページへのリンク

ROS講座の目次へのリンク