えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

YAMLでComposableNodeを起動する(ROS2・launch_yaml)

ここでは、あまり注目されていない?launch.yamlの記法について説明します。


最近ROS2のlaunch記法のうちの一つにYAMLがあることを知りました。

docs.ros.org

launchとは、ROSのプログラムを同時に起動するときに使われるツールですが、基本Pythonで書かれることが多いです。ROS2の豊富な機能やリソースを全て使い切るためにはLaunchのAPIを直叩きするのが最も手っ取り早いです。(ROS2は機能のほとんどがPythonベースになっています。)

冗長なPythonによる設定よりもはるかに見やすいYAMLによる設定の方を初心者向けには推したいところですが、ドキュメントが本当に少なく、ハードルはxmlpython記法よりも高い気がします。


今年度も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対応

github.com

launchの3構文

docs.ros.org

そのほか

APIを呼ぶキーの割当てが定義されているファイルが見つかりませんでした…どこにあるか誰か教えてください

キーの指定方法がわからなかったので、エラー文から動作するプログラムを推測しました。