■はじめに
こんにちは、プロンプト・ウサギです。
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の勉強は、カメのように一歩ずつ。
でも気がつけば前進しています🐢✨