10. ros2笔记-参数
背景
参数是节点的配置值。可以将参数视为节点设置。节点可以将参数存储为整数、浮点值、布尔值、字符串和列表。在ROS 2中,每个节点都维护自己的参数。有关参数的更多背景信息,请参阅概念文档。
需要条件
你需要一个turtlesim软件包;安装和配置好ros2环境。
启动
启动两个海龟节点,/turtlesima
和teleop_turtle
.
打开一个终端并执行
ros2 run turtlesim turtlesim_node
打开另一个终端并执行
ros2 run turtlesim turtle_teleop_key
2 ros2 param list
打开一个终端输入如下命令,查看属于您的节点的参数
~$ ros2 param list
/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
您将看到节点名称空间/teolep_turtle和/turtlesim,以及后面每个节点的参数。
每个节点都有参数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上运行相同的命令,将分1别获得值69和255。
4 ros2 param set
可以使用如下命令实时改变参数
ros2 param set <node_name> <parameter_name> <value>
下面我们改变 turtlesim
的背景颜色
~$ ros2 param set /turtlesim background_r 69
Set parameter successful
海龟仿真的窗口背景颜色发生了改变。
通过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文件,然后是要加载的文件。
停止您正在运行的turtlesim节点,并尝试使用保存的参数重新加载它,使用:
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
turtlesim窗口应该像往常一样出现,但背景是您之前设置的紫色。
当在节点启动时使用参数文件时,包括只读参数在内的所有参数都将更新。
~$ ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[INFO] [1691218844.334907104] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [1691218844.351470539] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
总结
节点具有用于定义其默认配置值的参数。可以从命令行获取和设置参数值。还可以将参数设置保存到文件中,以便在将来的会话中重新加载它们。