Как запустить узел с параметром в 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
обновление: параметры ожидают список конфигурационных файлов.