如何在 ROS2 中启动带参数的节点?

Posted

技术标签:

【中文标题】如何在 ROS2 中启动带参数的节点?【英文标题】:How to launch a node with a parameter in ROS2? 【发布时间】:2018-12-24 20:32:43 【问题描述】:

将 ros1 包迁移到 ros2,但不知道如何使用 ros2 中的参数启动。

对于 ros1,我有一个启动文件,它引用了一个配置文件,并且从 cpp 代码中我使用 node.getParam

启动文件:

<launch>
    <arg name="node_name" default="collector" />
    <arg name="config_file" default="" />
    <node name="$(arg node_name)" pkg="collector" type="collector" respawn="true">
      <rosparam if="$(eval config_file!='')" command="load" file="$(arg config_file)"/>
    </node>
</launch>

配置文件:

my_param: 5

cpp 代码:

double my_param = 0;
n.getParam("my_param", my_param);

我的问题是如何转化为 ROS2?

【问题讨论】:

【参考方案1】:

对于 ROS2,请参阅this link 和 this link。

作为参考,截至本文,ROS2 已经发布了三个版本。虽然 Crystal Clemmens 支持 Python 节点,但之前的版本 Bouncy Bolson 不支持。同样,未来的版本可能会增加对如何/在何处输入配置文件的额外支持。

ROS2 Wiki 引用使用 .yaml 配置文件来存储参数,并在运行 ROS2 节点时将配置文件作为命令行参数传递。

ROS2 维基:Node Arguments

示例demo_params.yaml 文件:

talker:
    ros__parameters:
        some_int: 42
        a_string: "Hello world"
        some_lists:
            some_integers: [1, 2, 3, 4]
            some_doubles : [3.14, 2.718]`

然后运行以下命令:

ros2 run demo_nodes_cpp talker __params:=demo_params.yaml

【讨论】:

【参考方案2】:

我想扩展一下@PSA 的答案,这真的很好。

如上所述,将您的参数放在.yaml 文件中

talker:
    ros__parameters:
        some_int: 42
        a_string: "Hello world"
        some_lists:
            some_integers: [1, 2, 3, 4]
            some_doubles : [3.14, 2.718]

要在现在用 Python 构建的 ROS2 启动文件中使用它,请将 .yaml 文件路径作为参数传递 parameters,如此处所述 https://github.com/ros2/launch/blob/master/launch_ros/launch_ros/actions/node.py 如下所示:

ld = LaunchDescription([
        launch_ros.actions.Node(
            package='nmea_navsat_driver', node_executable='nmea_serial_driver_node', output='screen',
            parameters=["config.yaml"])
    ])

这里config.yaml是参数文件。

如果您想手动启动节点,请按照@PSAs 回答中的说明启动它: ros2 run demo_nodes_cpp talker __params:=demo_params.yaml

更新:参数需要配置文件列表。

【讨论】:

以上是关于如何在 ROS2 中启动带参数的节点?的主要内容,如果未能解决你的问题,请参考以下文章

spark启动问题,发现任务都是在localhost下面运行的,原来启动spark-shell的时候需要带主节点的参数

带参数启动程序

带参数启动 Activity

如何在java中调用不带参数的PL/SQL函数

C#怎么启动带参数的执行文件

带配置文件参数启动Flink任务