通过命令行将ROS参数传递给节点 [待校准@6297]
所有ROS节点都采用一组参数,这些参数允许重新配置各种属性。示例包括配置节点的名称/命名空间、使用的话题/服务名称以及节点上的参数。所有特定于ROS的参数必须在 --ros-args
标志之后指定: [待校准@6298]
ros2 run my_package node_executable --ros-args ...
ros2 run my_package node_executable ...
更多细节见 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_parameter
或 declare_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