概要
ros2 launchの使い方について.
- ノードを準備
- launchファイルを準備
- launchファイル使用のための設定
- colcon build
- 使用可に!
launchで実行するnodeについて
いくつかパターンがあるので羅列しつつ,本ページで例題として使用する名前を以下のように付与.
- パッケージ名: nek_pkg
- ノードがpythonの場合
- target名, entry point: nek_target
- node名: nek_node
- ノードがC++の場合
- target名: nek_target
- node名: nek_node
- yamlファイル
- config/nek.yaml
- launchファイル
- launch/nek_launch.py
- launchファイルは後ろに
_launch
をつけることとなっている.
- launchファイルは後ろに
- launch/nek_launch.py
詳細
ノードのプログラミングは出来てるものとする.
yamlはconfig/
ディレクトリに,launchyファイルはlaunch/
ディレクトリに保存することとするので,最初に作っておく.
またyamlファイルの中身についてはYAMLファイルによるROS2のパラメータ設定あたりを参考に.
launchファイルの準備
一般的なもの
launchy/nek_launchy.py
from launch import LaunchDescription
from launch_ros.actions import Node
import os
pkg_name1 = 'nek_pkg'
def generate_launch_description():
ld = LaunchDescription()
config1 = os.path.join(
pkg_name1,
'config',
'nek.yaml'
)
node1 = Node(
package=pkg_name1,
executable='nek_target',
name='nek_node',
output='screen',
emulate_tty=True,
parameters=[config1]
)
ld.add_action(node1)
# 複数ノードを追加する場合は,configN,nodeNを作ってld.add_action(nodeN)?
return ld
コンポーネントノードの場合
Using ROS 2 launch to launch composable nodesを参照.気が向いたらそのうち書く.
launchファイル使用のための設定
ノードがPyhtonの場合
Using parameters in a class (Python)通り,setup.py
の中のdatafiles
項に加える.それに伴ってos
とglob
をimport
する.
setup.py
import os
from glob import glob
# ...
setup(
# ...
data_files=[
# ...
(os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*')),
]
)
ノードがC++の場合
ROS2 YAML For Parametersを参考に,CMakeLists.txt
に加える.ただし,config
に関する部分はいらない(参考ページとの整合性のためコメントアウトにしているがいらない.詳しくは参考の部分を参照のこと.)
CMakeLists.txt
...
install(DIRECTORY
launch
DESTINATION share/${PROJECT_NAME}
)
#install(DIRECTORY
# config
# DESTINATION share/${PROJECT_NAME}
#)
...
実行
ビルド,. install/local_setup.bash
後,以下のコマンドで実行.
$ ros2 launch nek_pkg nek_launch.py
参考
- ROS2 公式のページ
-
ROS2 YAML For Parameters
- launchにyaml(パラメータ用)を組み込むための良い情報源
- 上記ページではlaunchファイル用のディレクトリとyaml用のディレクトリの設定をsetup.py, CMakeLists.txtに組み込んでいるが,本ページではyaml用の設定はしない.
- ここで組み込むと実体が
install/.../share/...
にコピーされてそちらを用いることとなる.つまり,変更するとビルドをしてinstall/.../share/...
のアップデートが必要となる.しかしyamlファイルは気軽に使いたいので,yamlファイルの中身(パラメータ)を書き換えるたびビルドするのは面倒.なので本ページではlaunchファイルのみ設定している.
- ここで組み込むと実体が