はじめに
こちらの書籍を参考書としてROS2プログラミングの勉強をしていきます.
このページではローンチファイルを作成します(参考書ではp.249)
ローンチファイルは一括して複数のノードを立ち上げたり,ノードのパラメータを設定したり,ノード名やトピック名を付け替えるリマップに関する情報を含むPythonスクリプトです.
まとめて立ち上げる自作のノード
今回練習として過去に作成した下記2つの自作ノード
「my_image_canny_node」(ROS2プログラミング基礎_3-2)
https://qiita.com/pez/items/99ed918900f7c8517c13
「my_gamepad_node」(ROS2プログラミング基礎_1-3)
https://qiita.com/pez/items/9d100183d8bac3b9e18f
を同時に立ち上げるだけの最もシンプルなローンチファイルを作成してみます.
環境
・PC: Panasonic Let's Note CF-FV
・OS: Windows11 Pro (64bit)
・VirtualBox: 6.1.38 (Ubuntu20.04.5, GUI環境)
・ROS: ROS2 Foxy
・ロボット:
Turtlebot3 burger (Raspberry Pi 3B+)
Turtlebot3 waffle pi (Raspberry Pi 3B+)
Turtlebot3 waffle pi (Raspberry Pi 4B)
※いずれも同様の操作でOK
・ゲームパッド:Logicool F710
ローンチファイルの作成
今回名前は「mylaunch.launch.py」としておきます.
作成場所はホームフォルダ直下の launch ディレクトリとします.
$ cd
$ midir -p launch
$ cd launch
$ emacs mylaunch.launch.py
中身は下記のように記述し保存して下さい.
my_image_canny パッケージの my_image_canny_node と,
my_gamepad パッケージの my_gamepad_node を立ち上げる
という中身になっています.
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='my_image_canny',
executable='my_image_canny_node',
),
Node(
package='my_gamepad',
executable='my_gamepad_node',
)
])
動作テスト(TurtleBot実機)
今回はロボットを動かすプログラムなのでロボットを起動します.
TurtleBot3の設定については別記事参照.
https://qiita.com/pez/items/1d3d15b3911d5dab1702
※下記2つはロボット側でコマンド入力
$ ros2 launch turtlebot3_bringup robot.launch.py
$ ros2 run usb_cam usb_cam_node_exe
自作ローンチファイル実行
ファイルがある場所で単純に先ほど作成したpythonスクリプトを実行します(最も簡単な実行方法)
$ cd ~/launch/
$ ros2 launch my_launch.my_launch.py
TurtleBot3に接続したUSBカメラの画像が2つ表示(1つは元画像,もう1つはエッジ検出結果)された上,gamepadによる操作が可能な状態になっていれば成功です.
補足
ローンチファイルの中身ですが,今回記述した「package」と「executable」は必ず記述が必要なものとなっています.その他にもパラメータを指定したりノード起動時に新しいターミナルを開くなどの色々な設定が可能ですがそれはまた別の記事にしたいと思います.