【ROS2】launchファイルを作成して使うまでの流れ【Python】

ROS2で複数のノードを起動するのに、いちいちros2 run package1 noderos2 run package2 node...と実行するのは面倒ですよね。

ros2 launchを使えば、複数のノードを一括で起動できます。

今回はlaunchファイルを作成してから使うまでの流れを紹介します。

launchファイルを作成する

launchに必要なファイルを作成しましょう。

まず、パッケージのディレクトリ内にlaunchファイルを保管するlaunch/ディレクトリを作ります。

その中に起動したいノードを記述するfilename_launch.py(慣例的にファイル名はsuffixに.launch.pyか_launch.pyとする)を作成。

以下のように起動したいノードを記述します。

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        # 起動したいノードを記述
        Node(
            package=‘package1’,
            executable=‘node’,
        ),
        Node(
            package=‘package2’,
            executable=‘node’,
        )
    ])

詳しい書き方は公式チュートリアル[1]https://docs.ros.org/en/foxy/Tutorials/Launch-Files/Creating-Launch-Files.htmlが参考になります。

公式チュートリアルには載っていませんが、Nodeに関して以下のパラメータが便利です。

  • prefix="xterm -e":ノードを起動するときに別のターミナルを立ち上げる(事前にxtermをインストールしておく必要)
  • output="screen":launchで実行された標準出力をコンソール表示するためのオプション(デフォルトだと標準出力はコンソールではなく、ログファイルに吐き出される)
  • required="true":該当ノードが終了した場合に、launchファイルにある他の全てのノードを停止させる。
  • respawn="true":該当ノードが終了した場合に、再起動するようにする。

launchファイルを使う

launchファイルの呼び出し方は2通り。

1. パスで直接指定して使う方法

以下のようにパスを直接指定して実行する。

ros2 launch path/to/launch_dir/hoge_launch.py

2. ビルドして使う方法

1. パッケージ内のsetup.pyのdata_filesパラメータに、以下のようにlaunchファイルのパスを追加(これはcolcon(ビルドツール)がlaunchファイルを見つけられるようにするため)

import os
from glob import glob
# ...
setup(
 # ...
 data_files=[
   # ...
   (os.path.join('share', package_name), glob('launch/*_launch.py')),
  ]
 )

2. ビルドとソースをして、以下のように実行

ros2 launch <package_name> <launch_file_name>

このようにパスを指定しなくて良いので扱いが楽です。

launchファイルを作成した場合はsetup.pyに反映させる、ということを覚えておくと良いと思います。

その他

コメント