通过命令行将 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_parameterdeclare_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