通过命令行向节点传递ROS参数
所有ROS节点都接受一组参数,允许重新配置各种属性。例如,配置节点的名称/命名空间、使用的话题/服务名称和节点上的参数。所有ROS特定的参数都必须在``--ros-args``标志之后指定:
ros2 run my_package node_executable --ros-args ...
更多详细信息,请参阅`这个设计文档 <https://design.ros2.org/articles/ros_command_line_arguments.html>`__。
名称重映射
可以使用语法``-r <旧名称>:=<新名称>``对节点内的名称(例如:topics/services)进行重映射。节点本身的名称/命名空间可以使用``-r __node:=<新节点名称>``和``-r __ns:=<新节点命名空间>``进行重映射。
请注意,这些重映射是"静态"重映射,即它们在节点的生命周期内生效。目前尚不支持在节点启动后动态重映射名称。
请参考 此设计文档,了解有关重新映射参数的详细信息(并非所有功能都可用)
示例
以下调用将使``talker``节点以节点名称``my_talker``启动,发布到名为``my_topic``的主题,而不是默认的``chatter``。命名空间必须以正斜杠开头,设置为``/demo``,这意味着主题在该命名空间中创建(/demo/my_topic
),而不是全局(/my_topic
)
ros2 run demo_nodes_cpp talker --ros-args -r __ns:=/demo -r __node:=my_talker -r chatter:=my_topic
向特定节点传递重新映射参数
如果在单个进程中运行多个节点(例如使用 Composition),可以使用节点名称作为前缀将重映射参数传递给特定节点。例如,以下操作将重映射参数传递给指定的节点:
ros2 run composition manual_composition --ros-args -r talker:__node:=my_talker -r listener:__node:=my_listener
下面的示例将同时更改节点名称和重新映射一个主题(节点和命名空间的更改总是在主题重新映射之前应用):
ros2 run composition manual_composition --ros-args -r talker:__node:=my_talker -r my_talker:chatter:=my_topic -r listener:__node:=my_listener -r my_listener:chatter:=my_topic
参数
直接从命令行设置参数
您可以使用以下语法直接从命令行设置参数:
ros2 run package_name executable_name --ros-args -p param_name:=param_value
例如,您可以运行:
ros2 run demo_nodes_cpp parameter_blackboard --ros-args -p some_int:=42 -p "a_string:=Hello world" -p "some_lists.some_integers:=[1, 2, 3, 4]" -p "some_lists.some_doubles:=[3.14, 2.718]"
其他节点将能够检索参数值,例如:
$ ros2 param list parameter_blackboard
a_string
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
some_int
some_lists.some_doubles
some_lists.some_integers
use_sim_time
从YAML文件中设置参数
参数可以以yaml文件的形式通过命令行设置。
有关yaml文件语法的示例,请参阅此处 <https://github.com/ros2/rcl/tree/humble/rcl_yaml_param_parser>。
例如,将以下内容保存为 demo_params.yaml
文件:
parameter_blackboard:
ros__parameters:
some_int: 42
a_string: "Hello world"
some_lists:
some_integers: [1, 2, 3, 4]
some_doubles : [3.14, 2.718]
然后,您可以在节点内使用 declare_parameter
或 ``declare_parameters``(请参阅 文档 了解函数签名)声明参数,或者如果通过命令行覆盖传递了参数,则可以 设置节点自动声明参数。
然后运行以下命令:
ros2 run demo_nodes_cpp parameter_blackboard --ros-args --params-file demo_params.yaml
其他节点将能够检索参数值,例如:
$ ros2 param list parameter_blackboard
a_string
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
some_int
some_lists.some_doubles
some_lists.some_integers
use_sim_time