@[toc]
参考官方文档:Understanding parameters
背景
参数是一个节点的配置值。你可以把参数看成是节点的设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在ROS 2中,每个节点都维护自己的参数。关于参数的更多背景,请看About parameters in ROS 2。
1. 准备环境
打开一个新的终端并运行:
ros2 run turtlesim turtlesim_node
打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key
2. ros2 param list 命令
要查看属于你的节点的参数,打开一个新的终端并输入命令:
ros2 param list
你会看到节点命名空间,/teleop_turtle 和 /turtlesim ,后面是每个节点的参数。
/teleop_turtle:
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
scale_angular
scale_linear
use_sim_time
/turtlesim:
background_b
background_g
background_r
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
use_sim_time
每个节点都有参数use_sim_time;这不是turtlesim独有的。
根据它们的名字,看起来 /turtlesim 的参数使用RGB颜色值来确定turtlesim窗口的背景颜色。
要确定一个参数的类型,你可以使用 ros2 param get 命令。
3. ros2 param get 命令
要显示一个参数的类型和当前值,使用命令:
ros2 param get <node_name> <parameter_name>
例如找出 /turtlesim 的参数 background_g 的当前值:
ros2 param get /turtlesim background_g
返回值如下:
Integer value is: 86
现在你知道 background_g 是整数值。
如果你对 background_r 和 background_b 运行同样的命令,你将分别得到69和255的数值。
4. ros2 param set 命令
要在运行时改变一个参数的值,使用命令:
ros2 param set <node_name> <parameter_name> <value>
例如改变 /turtlesim 的背景颜色:
ros2 param set /turtlesim background_r 150
你的终端应该返回信息:
Set parameter successful
并且你的 turtlesim 窗口的背景应该会改变颜色。
用set命令设置参数只会在你当前的会话中改变它们,而不是永久性的。然而,你可以保存你的设置,并在下次启动节点时重新加载它们。
5. ros2 param dump 命令
你可以通过使用这条命令查看一个节点的所有当前参数值:
ros2 param dump <node_name>
该命令默认打印到标准输出(stdout),但你也可以将参数值重定向到一个文件中,以便以后保存。要把你目前对 /turtlesim 的参数配置保存到文件 turtlesim.yaml 中,请输入命令:
ros2 param dump /turtlesim > turtlesim.yaml
你会在你的shell运行的工作目录中发现一个新文件。如果你打开这个文件,你会看到以下内容:
/turtlesim:
ros__parameters:
background_b: 255
background_g: 86
background_r: 150
qos_overrides:
/parameter_events:
publisher:
depth: 1000
durability: volatile
history: keep_last
reliability: reliable
use_sim_time: false
如果你想在将来用相同的参数重新加载节点,导出参数就会很方便。
6. ros2 param load 命令
你可以使用命令从文件中向当前运行的节点加载参数:
ros2 param load <node_name> <parameter_file>
要把用 ros2 param dump 生成的 turtlesim.yaml 文件加载到 /turtlesim 节点的参数中,请输入命令:
ros2 param load /turtlesim turtlesim.yaml
你的终端将返回信息:
Set parameter background_b successful
Set parameter background_g successful
Set parameter background_r successful
Set parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be set because it is read-only
Set parameter use_sim_time successful
只读参数只能在启动时修改,之后不能修改,这就是为什么对 "qos_overrides "参数有一些警告。
7. 在节点启动时加载参数文件
要使用你保存的参数值启动同一个节点,请使用:
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
这与你启动 turtlesim 时使用的命令相同,但增加了标志 --ros-args 和 --params-file ,后面是你要加载的文件。
例如:
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
turtlesim 窗口应该像往常一样出现,但背景是你之前设置的紫色。
在这种情况下,参数在启动时被修改,所以指定的只读参数也将生效。