通过命令行将 ROS 参数传递给节点
所有 ROS 节点都采用一组参数,允许重新配置各种属性。 示例包括配置节点的名称/命名空间、使用的主题/服务名称以及节点上的参数。 所有 ROS 特定参数都必须在“–ros-args”标志后指定:
ros2 run my_package node_executable --ros-args ...
有关更多详细信息,请参阅`此设计文档 <https://design.ros2.org/articles/ros_command_line_arguments.html>`__。
名称重新映射
可以使用语法 -r <旧名称>:=<新名称>
重新映射节点内的名称(例如主题/服务)。
可以使用 -r __node:=<新节点名称>
和 -r __ns:=<新节点命名空间>
重新映射节点本身的名称/命名空间。
请注意,这些重新映射是“静态”重新映射,因为它们适用于节点的生命周期。 节点启动后的名称“动态”重新映射尚不受支持。
有关重新映射参数的更多详细信息,请参阅`此设计文档 <https://design.ros2.org/articles/static_remapping.html>`__(并非所有功能都可用)。
示例
以下调用将导致“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
记录器配置
可以使用 --log-level
命令行参数指定每个节点的日志记录级别。
可以使用 --log-file-name
命令行参数指定可执行日志文件名前缀,其中包括可执行文件中的所有节点。
有关更多信息,请参阅 日志记录页面。
参数
直接从命令行设置参数
您可以使用以下语法直接从命令行设置参数:
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 文件语法的示例。
例如,将以下内容保存为 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,或`设置节点以自动声明参数<http://docs.ros.org/en/rolling/p/rclcpp/generated/classrclcpp_1_1NodeOptions.html#_CPPv4NK6rclcpp11NodeOptions47automatically_declare_parameters_from_overridesEv>`__(如果它们是通过命令行覆盖传入的)。
然后运行以下命令:
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