背景知识
参数是节点的配置值。你可以把参数看作是节点的设置。一个节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在 ROS 2 中,每个节点都维护着自己的参数。
准备
这一节中,同样不要忘记在使用ROS2前需要先设置环境:
# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
source /opt/ros/jazzy/setup.bash
任务
1. 设置
启动两个turtlesim节点:/turtlesim和/teleop_turtle。
- 在新终端中运行:
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 标志,后面跟着你要加载的文件。
而停止正在运行的 turtlesim 节点,然后尝试使用保存的参数重新加载它,可以使用以下命令:
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
turtlesim 窗口应该会像往常一样出现,但背景颜色会是你之前设置的紫色。
需要注意:如果在节点启动时使用参数文件,则所有参数(包括只读参数)都会被更新。
总结
节点通过参数来定义它的默认配置值。你可以从命令行获取和设置参数值。你还可以将参数设置保存到文件中,以便在未来的会话中重新加载。
关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料