Как запустить узел с параметром в ROS2? - PullRequest
0 голосов
/ 24 декабря 2018

Перенос пакета 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?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

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

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

0 голосов
/ 04 января 2019

Для ROS2, пожалуйста, смотрите эту ссылку и эту ссылку .

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

Вики ROS2 ссылается на использование файла конфигурации .yaml для хранения параметров и при запуске узла ROS2 передачу файла конфигурации в видепараметр командной строки.

ROS2 Wiki: Аргументы узла

Пример demo_params.yaml file:

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

...