■はじめに

こんにちは、プロンプト・ウサギです。
ROS2の勉強をコツコツ続けていますが、今回はついに Launchファイル にチャレンジしてみました。

「1つずつノードを起動するのは大変だから、まとめて動かしたい!」
そんな時に登場するのがLaunchファイルです。

■環境を整える小技

前回まではノードを実行するたびに

cd ~/ros2_ws
source install/setup.bash

と打ち込んでいましたが、ChatGPTさんから「.bashrcに追記すれば楽になるよ」とアドバイスをいただきました。


以下を1回実行します。

echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

で、1回実行します。

source ~/.bashrc

これで、端末を開くだけで ros2 run が実行できるように!
小さなことですが、毎回の作業がずいぶん楽になります。

■Launchファイルで一発起動

今回のゴールは、次の3つをまとめて起動することです。

自作ノード(circle_motion / mixer)

公式ノード(turtlesim_node)

・キー入力が必要なノードは、独立して起動して下さい。

目標のディレクトリ構造

ros2_ws/
└── src/
    └── my_robot_teleop/
        ├── package.xml
        ├── setup.py
        ├── resource/
        │ └── my_robot_teleop ← 空
        ├── my_robot_teleop/
        │ ├── __init__.py
        │ ├── teleop_keyboard.py
        │ ├── circle_motion.py
        │ └── mixer.py
        ├── launch/
        │ └── turtlesim_spiral.launch.py
        └── setup.cfg (ある場合)

1,launchフォルダを作る

cd ~/ros2_ws/src/my_robot_teleop/
mkdir launch

2. 新しいファイルを作成

~/ros2_ws/src/my_robot_teleop/launch/turtlesim_spiral.launch.py

(ファイルはGithubに公開)

ファイルの中身

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='my_robot_teleop',
            executable='circle_motion',
            name='circle'
        ),
        Node(
            package='my_robot_teleop',
            executable='mixer',
            name='mixer'
        ),
        Node(
            package='turtlesim',
            executable='turtlesim_node',
            name='sim'
        ),
    ])

3,setup.py を編集

~/ros2_ws/src/my_robot_teleop/setup.py

を開いてentry_pointsを以下の様に変更

entry_points={
    'console_scripts': [
        'teleop_keyboard = my_robot_teleop.teleop_keyboard:main',
        'circle_motion = my_robot_teleop.circle_motion:main',
        'mixer = my_robot_teleop.mixer:main',
    ],
}

 launch ファイルを data_files に追加

data_files=[
    ('share/ament_index/resource_index/packages',
        ['resource/' + package_name]),
    ('share/' + package_name, ['package.xml']),
    (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),
],


4.ROS2 の Python パッケージには resource/パッケージ名 という空ファイルが必要です。

cd ~/ros2_ws/src/my_robot_teleop
mkdir -p resource
touch resource/my_robot_teleop

5.再ビルド

cd ~/ros2_ws
colcon build
source install/setup.bash


6.ランチ実行

ros2 launch my_robot_teleop turtlesim_spiral.launch.py

7.確認
ビルドに成功したら、次のコマンドで launch ファイルが install にコピーされたか確認してください:

ls install/my_robot_teleop/share/my_robot_teleop/launch

turtlesim_spiral.launch.pyがあれば成功

8.キー入力部分は別起動

大切な事なので、2度言いました。

source ~/ros2_ws/install/setup.bash
ros2 run my_robot_teleop teleop_keyboard

お疲れ様でした。これで完成です。

■やってみた感想

いや〜、正直言って初心者にはハードル高かったです😅
でも、複数ノードをまとめて管理できる のは将来きっと役に立つ!

今回のTurtleSim練習をきっかけに、次は別のシミュレーションに挑戦してみます。

■まとめ

.bashrcに追記して環境整備すると便利

Launchファイルで複数ノードをまとめて起動できる

初心者には難しいけど、確実に役立つスキル


ROS2の勉強は、カメのように一歩ずつ。
でも気がつけば前進しています🐢✨