通过命令行将ROS参数传递给节点 [待校准@6297]

所有ROS节点都采用一组参数,这些参数允许重新配置各种属性。示例包括配置节点的名称/命名空间、使用的话题/服务名称以及节点上的参数。所有特定于ROS的参数必须在 --ros-args 标志之后指定: [待校准@6298]

ros2 run my_package node_executable --ros-args ...

更多细节见 this design doc[待校准@6301]

名称重新映射 [待校准@6302]

节点内的名称 (例如话题/服务) 可以使用语法 -r <old name>:=<new name>乙甲-r __node:=<new node name>乙乙-r __ns:=<new node namespace> 重新映射。 [待校准@6303]

请注意,这些重铸是 "static" 重铸,因为它们适用于节点的生命周期。 "Dynamic" 重新映射名称后节点开始尚不支持。 [待校准@6304]

有关重新映射参数的更多详细信息,请参见 this design doc (并非所有功能都可用)。 [待校准@6305]

示例

以下调用将导致以节点名称 my_talker 启动 talker 节点,发布名为 my_topic 的话题,而不是默认的 chatter 。命名空间,必须以斜杠,设置为 /demo ,意味着话题创建命名空间 ( /demo/my_topic ),而不是全球 ( /my_topic )。 [待校准@6306]

ros2 run demo_nodes_cpp talker --ros-args -r __ns:=/demo -r __node:=my_talker -r chatter:=my_topic

将重新映射参数传递到特定节点 [待校准@6307]

如果在单个进程中运行多个节点 (例如,使用 Composition ),则可以使用其名称作为前缀将重新映射参数传递给特定节点。例如,下面将重新映射参数传递给指定的节点: [待校准@6308]

ros2 run composition manual_composition --ros-args -r talker:__node:=my_talker -r listener:__node:=my_listener

以下示例将更改节点名称并重新映射话题 (节点和命名空间的更改总是在重新映射话题之前应用): [待校准@6309]

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

日志记录器配置 [待校准@6310]

看到 --log-level 参数用法在 the logging page[待校准@6311]

参数

直接从命令行设置参数

您可以使用以下语法直接从命令行设置参数: [待校准@6314]

ros2 run package_name executable_name --ros-args -p param_name:=param_value

例如,您可以运行: [待校准@6315]

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]"

其他节点将能够检索参数值,例如: [待校准@6316]

$ ros2 param list parameter_blackboard
a_string
some_int
some_lists.some_doubles
some_lists.some_integers

从YAML文件设置参数 [待校准@6317]

参数可以从命令行以yaml文件的形式设置。 [待校准@6318]

[需手动修复的语法] See here yaml文件语法示例。 [待校准@6319]

例如,将以下内容另存为 demo_params.yaml : [待校准@6320]

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 在节点中声明参数 (有关函数签名,请参阅 documentation ),或者通过命令行覆盖传入 set the node to automatically declare parameters[待校准@6321]

然后运行以下命令: [待校准@6322]

ros2 run demo_nodes_cpp parameter_blackboard --ros-args --params-file demo_params.yaml

其他节点将能够检索参数值,例如: [待校准@6316]

$ ros2 param list parameter_blackboard
a_string
some_int
some_lists.some_doubles
some_lists.some_integers