Как запустить узел с параметром в ROS2?

Перенос пакета 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, пожалуйста, смотрите эту ссылку и эту ссылку.

Для справки, по состоянию на этот пост, ROS2 выпустила три релиза. Хотя Crystal Clemmens поддерживает узлы Python, предыдущая версия Bouncy Bolson - нет. Точно так же будущие выпуски могут добавить дополнительную поддержку для того, как / где вводить файлы конфигурации.

Вики ROS2 ссылается на файл конфигурации.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

Я хотел бы немного расширить ответ от @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]

Чтобы использовать его в файле запуска ROS2, теперь встроенном в Python, передайте .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

обновление: параметры ожидают список конфигурационных файлов.

Другие вопросы по тегам