環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 20.04 |
ROS | Noetic |
インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。
概要
ROS講座03でROSの実行を行いましたが、簡単なROSの実行でもターミナルを3つ開かなくてはいけません。この方法では、今後もっと複雑な構成をとることを考えると実行が大変面倒です。
そのような場合にはroslaunch
を使用します。roslaunch
では複数のROSノードを同時に立ち上げたり、複雑な設定をすることができます。
launchファイルの記述
流儀としてROSパッケージ内のlaunch/
ディレクトリにlaunchファイルを作成します。
cd ~/catkin_ws/src/ros_lecture/basic_lecture/launch
touch pubsub1.launch
以下のようなlaunchファイルを記述してみてください。XML形式で記述します。XMLでは開始タグ<tag>
から閉じタグ</tag>
までの間が1つの要素として扱われます。またタグの中に属性をattribute="value"
の形式で書けます。空要素タグ<tag/>
は単独で(つまり閉じタグ無しで)使えます。
<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
各ターミナルごとに実行前にsource ~/catkin_ws/devel/setup.bash
を実行する必要があります。
roslaunch basic_lecture pubsub1.launch
この1行でROS講座03で実行したターミナル3つ分の処理が行えます。
しかしlistenerの分しか画面出力がされていません。roslaunchではnodeタグにoutput="screen"
の属性を付けたノードのみ画面出力がされます。
user@ubuntu:~$ roslaunch basic_lecture pubsub1.launch
... logging to /home/srs/.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
以下のようなpubsub2.launchを書いて実行してみましょう。各ターミナルごとに実行前にsource ~/catkin_ws/devel/setup.bash
を実行する必要があります。
<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>
roslaunch basic_lecture pubsub2.launch
このようにするとbasic_simple_talker
とbasic_simple_listener
の両方の画面出力がターミナル上に出ます。