ここでは、あまり注目されていない?launch.yamlの記法について説明します。
最近ROS2のlaunch記法のうちの一つにYAMLがあることを知りました。
launchとは、ROSのプログラムを同時に起動するときに使われるツールですが、基本Pythonで書かれることが多いです。ROS2の豊富な機能やリソースを全て使い切るためにはLaunchのAPIを直叩きするのが最も手っ取り早いです。(ROS2は機能のほとんどがPythonベースになっています。)
冗長なPythonによる設定よりもはるかに見やすいYAMLによる設定の方を初心者向けには推したいところですが、ドキュメントが本当に少なく、ハードルはxmlやpython記法よりも高い気がします。
今年度もROSの勉強会なるものを現在計画しています。やはり、できる限り円滑な講習の運営のためにはより分かりやすい文で書けるようにしたほうがいいと思っています。なぜならlaunchファイルはプログラミングではなく設定として扱われることが多いからです。
そこで、今回は多くの開発者が多用しているComposableNodeの書き方について示したいと思います。私が調べた限りではComposableNodeをlaunch_yamlで記載している記事を見たことがないです。
書き方
最初に見慣れたPythonの書き方を示します。demo_nodes_cpp talker_listener.launch.pyをComposableNodeで記述したプログラムです
import launch from launch_ros.actions import ComposableNodeContainer from launch_ros.descriptions import ComposableNode def generate_launch_description(): container = ComposableNodeContainer( name='image_container', namespace='', package='rclcpp_components', executable='component_container', composable_node_descriptions=[ ComposableNode( package='demo_nodes_cpp', plugin='demo_nodes_cpp::Talker', name='node_talker', remappings=[('/chatter', '/talker_listener')]), ComposableNode( package='demo_nodes_cpp', plugin='demo_nodes_cpp::Listener', name='node_listener', remappings=[('/chatter', '/talker_listener')]) ], ) return launch.LaunchDescription([container])
次にYAMLの書き方を示します。コマンドラインからの応答を元に記述しているため、ほかにも使える機能があるかもしれません。
launch: - node_container: pkg: "rclcpp_components" exec: "component_container" name: "my_container" namespace: "" composable_node: - pkg: "demo_nodes_cpp" plugin: "demo_nodes_cpp::Talker" name: "node_talker" remap: - from: /chatter to: /talker_listener - pkg: "demo_nodes_cpp" plugin: "demo_nodes_cpp::Listener" name: "node_listener" remap: - from: /chatter to: /talker_listener
参考サイト(xml)
launch.xmlのComposableNode対応
launchの3構文
そのほか
APIを呼ぶキーの割当てが定義されているファイルが見つかりませんでした…どこにあるか誰か教えてください
キーの指定方法がわからなかったので、エラー文から動作するプログラムを推測しました。