前回はROS2のプログラムを色々作成してみました。
今回はLaunchファイルについて学んでゆきます。

パッケージは前回のを引き継いで作業しますので、前回を学んだあとにこちらを実践してください。
Launchファイルとは
これまで、ROS2のプログラムを起動する際には次のようなコマンドを使ってきました。
ros2 run パッケージ名 実行ファイル名例えば以下の通りです。
1つ目のターミナルで、
ros2 run turtlesim turtlesim_node2つ目のターミナルで、
ros2 run turtle_playground rotate_abs_keycontrol_rawこの方法は、単一のノードを1つずつ実行するにはとても便利です。
しかし、実際のロボットシステムでは、「センサー」「制御」「表示」など、複数のノードを同時に起動することが一般的です。
ROS2では、1台のロボットが複数のプログラム(ノード)で構成されています。
たとえば、以下のような構成が考えられます。
| ノード名 | 役割 |
|---|---|
camera_node | カメラ映像の取得 |
object_detector | 画像認識を行う |
motor_controller | モーターの制御 |
web_interface | Web経由で操作 |
これらを毎回個別に起動するのは面倒で、設定ミスも起こりやすくなります。
そこで登場するのが Launchファイル です。
Launchファイルは、ROS2において「複数のノードをまとめて起動・設定するためのスクリプト」です。
Launchファイルを使うことで、次のようなことが簡単に行えます。
| 機能 | 説明 |
|---|---|
| 複数ノードの同時起動 | 1つのコマンドで複数ノードを起動できる |
| パラメータ設定 | 起動時にノードのパラメータを変更できる |
| トピック名のリマップ | トピック名を別名に変更して通信を切り替えられる |
| 名前空間の指定 | ノードをグループ化して整理できる |
| 条件付き起動 | 特定の条件下でのみノードを起動できる |
Launchファイルの構成と実行
ROS2のLaunchファイルは Pythonで記述します。
そのため、他の設定ファイル形式(YAMLやXMLなど)よりも柔軟に記述できます。
基本構造は以下の通りです。
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='パッケージ名',
executable='実行ファイル名',
name='ノード名',
output='screen'
)
])このように記述したPythonファイル(例:my_launch.launch.py)を使って起動します。
ros2 launch パッケージ名 my_launch.launch.pyそれではturtlesimをLaunchファイルで起動してみましょう。
ファイル名:launch/simple_turtlesim.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
executable='turtlesim_node',
name='my_turtle',
output='screen'
)
])ファイルの保存場所は以下の通りです。
turtle_playground/
├── package.xml
├── setup.py
├── resource/
├── turtle_playground/
│ ├── __init__.py
│ └── ...(Pythonコード)
└── launch/
└── simple_turtlesim.launch.py ← この場所に置く!Launchファイルをただ置いただけでは、ビルド後にインストールディレクトリにコピーされません。
ROS2は setup.py の設定を見てファイルをコピーする仕組みになっています。
そのため、setup.py の data_files に以下のように追記します。※前回の続きになっています。
from setuptools import find_packages, setup
package_name = 'turtle_playground'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
# ▼ Launchファイルをコピーする設定を追加
('share/' + package_name + '/launch', ['launch/simple_turtlesim.launch.py']),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='ubuntu',
maintainer_email='ubuntu@todo.todo',
description='TODO: Package description',
license='Apache-2.0',
extras_require={
'test': [
'pytest',
],
},
entry_points={
'console_scripts': [
'turtle_vel_publisher = turtle_playground.turtle_vel_publisher:main', # ADDED: Publisher を登録
'turtle_pose_listener = turtle_playground.turtle_pose_listener:main', # ADDED: Subscriber を登録
'set_pen_client = turtle_playground.set_pen_client:main', # ADDED: /turtle1/set_pen クライアント
'rotate_abs_client = turtle_playground.rotate_abs_client:main', # ADDED: アクションクライアント
'rotate_abs_keycontrol_raw = turtle_playground.rotate_abs_keycontrol_raw:main', # Enter不要のキー操作
],
},
)ポイント
('share/' + package_name + '/launch', [...])の指定で、colcon build時にinstall/turtle_playground/share/turtle_playground/launchにコピーされます。- この設定を忘れると、
ros2 launch実行時に「ファイルが見つからない」というエラーになります。
それではビルドをして、起動してみましょう。
cd ~/ros2_wscolcon build --packages-select turtle_playgroundsource install/setup.bashros2 launch turtle_playground simple_turtlesim.launch.py無事、TurtleSimが立ち上がれば成功です。

複数ノードの起動
TurtleSimが1つ起動するだけでは何のご利益もありません。
さらに一歩進めて、turtlesimと自作のPythonノード(カメを回転させるパブリッシャー)を同時に起動します。
今回は前回作成したノードも併せて以下の2つを起動します。
| ノード名 | 役割 |
|---|---|
turtlesim_node | 画面上にカメを表示するシミュレーター |
turtle_vel_publisher | /turtle1/cmd_vel に角速度を送信し、カメを回転させるノード |
通常は次のように2つのターミナルを使います:
ros2 run turtlesim turtlesim_noderos2 run turtle_playground turtle_vel_publisherこれを 1つのLaunchファイルで同時に起動 できるようにします。
ファイル名: ~/ros2_ws/src/turtle_playground/launch/rotate_demo.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# ① turtlesimを起動
Node(
package='turtlesim',
executable='turtlesim_node',
name='sim',
output='screen'
),
# ② カメを回転させるパブリッシャーを起動
Node(
package='turtle_playground',
executable='turtle_vel_publisher',
name='rotator',
output='screen'
),
])setup.py の data_files に以下を追加します。
from setuptools import find_packages, setup
package_name = 'turtle_playground'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name + '/launch', [
'launch/simple_turtlesim.launch.py',
'launch/rotate_demo.launch.py', # ← これを追加
]),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='ubuntu',
maintainer_email='ubuntu@todo.todo',
description='TODO: Package description',
license='Apache-2.0',
extras_require={
'test': [
'pytest',
],
},
entry_points={
'console_scripts': [
'turtle_vel_publisher = turtle_playground.turtle_vel_publisher:main', # ADDED: Publisher を登録
'turtle_pose_listener = turtle_playground.turtle_pose_listener:main', # ADDED: Subscriber を登録
'set_pen_client = turtle_playground.set_pen_client:main', # ADDED: /turtle1/set_pen クライアント
'rotate_abs_client = turtle_playground.rotate_abs_client:main', # ADDED: アクションクライアント
'rotate_abs_keycontrol_raw = turtle_playground.rotate_abs_keycontrol_raw:main', # Enter不要のキー操作
],
},
)ビルドと起動を行います。
cd ~/ros2_wscolcon build --packages-select turtle_playgroundsource install/setup.bashros2 launch turtle_playground rotate_demo.launch.pyTurtlesimが起動し、自動で回転を始めれば成功です。

Launchファイルでパラメータを設定
ROS2のパラメータは、ノードの動作設定を外部から変更できる仕組みです。
ノードのプログラムを書き換えなくても、起動時に「動作モード」や「色」などを切り替えることができます。
たとえば、turtlesim_node には以下のようなパラメータがあります:
| パラメータ名 | 内容 | 型 |
|---|---|---|
background_r | 背景の赤の成分(0~255) | int |
background_g | 背景の緑の成分(0~255) | int |
background_b | 背景の青の成分(0~255) | int |
これらを指定すると、ウィンドウの背景色を変更できます。
Launchファイルの Node() に parameters=[{}] を追加します。
中には辞書(キーと値のペア)で設定したいパラメータを書きます。
ファイル名:launch/turtle_color.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# 背景色を変更した turtlesim_node
Node(
package='turtlesim',
executable='turtlesim_node',
name='color_turtle',
output='screen',
parameters=[{
'background_r': 0,
'background_g': 200,
'background_b': 255
}]
)
])setup.py に以下を追記します。
from setuptools import find_packages, setup
package_name = 'turtle_playground'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name + '/launch', [
'launch/simple_turtlesim.launch.py',
'launch/rotate_demo.launch.py',
'launch/turtle_color.launch.py', # ← これを追加
]),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='ubuntu',
maintainer_email='ubuntu@todo.todo',
description='TODO: Package description',
license='Apache-2.0',
extras_require={
'test': [
'pytest',
],
},
entry_points={
'console_scripts': [
'turtle_vel_publisher = turtle_playground.turtle_vel_publisher:main', # ADDED: Publisher を登録
'turtle_pose_listener = turtle_playground.turtle_pose_listener:main', # ADDED: Subscriber を登録
'set_pen_client = turtle_playground.set_pen_client:main', # ADDED: /turtle1/set_pen クライアント
'rotate_abs_client = turtle_playground.rotate_abs_client:main', # ADDED: アクションクライアント
'rotate_abs_keycontrol_raw = turtle_playground.rotate_abs_keycontrol_raw:main', # Enter不要のキー操作
],
},
)実行してみましょう。
cd ~/ros2_wscolcon build --packages-select turtle_playgroundsource install/setup.bashros2 launch turtle_playground turtle_color.launch.py水色の背景に変わった状態で起動すれば成功です。

Launchファイルの登録
Launch ファイルを増やしていく予定があるなら、次の1行で launch/ 以下の .launch.py を一括登録できます。
from glob import glob
data_files=[
('share/ament_index/resource_index/packages', ['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
# launch フォルダ内の .launch.py を全部インストール
('share/' + package_name + '/launch', glob('launch/*.launch.py')),
]setup.pyの全体を書き換えると以下のようになります。
from setuptools import find_packages, setup
from glob import glob
package_name = 'turtle_playground'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
# --- launch フォルダ内の .launch.py ファイルを自動登録 ---
('share/' + package_name + '/launch', glob('launch/*.launch.py')),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='ubuntu',
maintainer_email='ubuntu@todo.todo',
description='TODO: Package description',
license='Apache-2.0',
extras_require={
'test': [
'pytest',
],
},
entry_points={
'console_scripts': [
'turtle_vel_publisher = turtle_playground.turtle_vel_publisher:main', # ADDED: Publisher を登録
'turtle_pose_listener = turtle_playground.turtle_pose_listener:main', # ADDED: Subscriber を登録
'set_pen_client = turtle_playground.set_pen_client:main', # ADDED: /turtle1/set_pen クライアント
'rotate_abs_client = turtle_playground.rotate_abs_client:main', # ADDED: アクションクライアント
'rotate_abs_keycontrol_raw = turtle_playground.rotate_abs_keycontrol_raw:main', # Enter不要のキー操作
],
},
)ビルドして実行してみましょう。
cd ~/ros2_wscolcon build --packages-select turtle_playgroundsource install/setup.bashros2 launch turtle_playground turtle_color.launch.py課題7
turtlesim_nodeの背景色を変更し、同時にturtle_vel_publisherを回転半径を変えて起動するLaunchファイルを作成してください。

【条件】
- ファイル名:
launch/rotate_with_param.launch.py - 背景色:
- 赤(R)= 180
- 緑(G)= 230
- 青(B)= 255
- turtle_vel_publisherには以下のパラメータを渡す:
radius = 2.0(デフォルトの回転より広い軌道で回る)
- 2つのノードを同時に起動する。
- 実行コマンド:
ros2 launch turtle_playground rotate_with_param.launch.py解答例はこちら
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# ① 背景色を設定したturtlesimノード
Node(
package='turtlesim',
executable='turtlesim_node',
name='sim',
output='screen',
parameters=[{
'background_r': 180,
'background_g': 230,
'background_b': 255
}]
),
# ② 回転半径を指定した自作パブリッシャー
Node(
package='turtle_playground',
executable='turtle_vel_publisher',
name='rotator',
output='screen',
parameters=[{
'radius': 2.0
}]
),
])次回はこちら

