1

将 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?

4

2 回答 2

1

对于 ROS2,请看这个链接这个链接

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

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

ROS2 Wiki:节点参数

示例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

于 2019-01-04T07:03:33.837 回答
1

我想对@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

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

于 2019-03-05T07:54:50.793 回答