当前位置:网站首页>ROS2系列知识(5):【参数】如何管理?
ROS2系列知识(5):【参数】如何管理?
2022-08-01 16:43:00 【无水先生】
一、参数基本概念
参数是节点的配置值。您可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在 ROS 2 中,每个节点都维护自己的参数。有关参数的更多背景信息,请参阅概念文档。
二、开启演示方式
启动两个 turtlesim 节点,/turtlesim 和 /teleop_turtle。
打开一个新终端并运行:
ros2 run turtlesim turtlesim_node
打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key
2 ros2 参数列表
要查看属于您的节点的参数,请打开一个新终端并输入命令:
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。
ros2 param get
3 参数信息显示语句
显示当前参数的类型和值,用下列语句:
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 设置参数值
本文指出,设定参数有两个方式:
- 用set命令运行中改变
- 在服务调用时传入
在运行中改变参数值,用如下指令:
ros2 param set <node_name> <parameter_name> <value>
4.1 这里我们改变 /turtlesim
的背景颜色:
ros2 param set /turtlesim background_r 150
返回执行后结果:
Set parameter successful
目标的背景颜色已经改变如下:
4.2 在服务请求携带参数(产生一个新海龟例)
现在让我们通过调用 /spawn 并输入参数来生成一个新的海龟。在命令行的服务调用中输入 <arguments> 需要采用 YAML 语法。
命令如下:
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
您将获得正在发生的这种方法请求信息,然后是服务响应:
requester: making request: turtlesim.srv.Spawn_Request(x=2.0, y=2.0, theta=0.2, name='') response: turtlesim.srv.Spawn_Response(name='turtle2')
您的 turtlesim 窗口将立即更新新生成的海龟:
5 ros2 参数转储
您可以使用以下命令查看节点的所有当前参数值:
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 参数加载
您可以使用以下命令将参数从文件加载到当前运行的节点:
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 窗口应该像往常一样出现,但带有您之前设置的紫色背景。
在这种情况下,参数在启动时被修改,因此指定的只读参数也将生效。
8 总结
ROS2的参数机制,与ROS1有重大不同。ROS2的参数不再是【全局变量】、【参数服务】的概念,而是所有参数都归属于具体节点,访问的时候一定是带节点namespace进行访问。
边栏推荐
猜你喜欢
DOM系列之触屏事件
The site is not found after the website is filed. You have not bound this domain name or IP to the corresponding site! The configuration file does not take effect!
1个月写900多条用例,2线城市年薪33W+的测试经理能有多卷?
05 doris 集群搭建
22年镜头“卷”史,智能手机之战卷进死胡同
02 es 集群搭建
酷逼了 Pathetic Dog 第 304 场周赛
第一次改开源中间件keycloak总个结
TiFlash 存储层概览
软件测试谈薪技巧:同为测试人员,为什么有人5K,有人 20K?
随机推荐
DOM series of touch screen events
金仓数据库KingbaseES安全指南--6.3. Kerberos身份验证
暑气渐敛,8月让我们开源一夏!
等变图神经网络在药物研发中大放异彩
DOM系列之触屏事件
moxa串口服务器配置说明(moxa串口驱动)
金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(2. 概述)
11 一发布就发布一系列系列
请问数据库中报错信息如下,mongoshake 有什么配置的方式解决这种大消息问题吗?
高薪程序员&面试题精讲系列131之Eureka如何实现高可用?自我保护机制是怎么回事?
Go unit tests
软件测试谈薪技巧:同为测试人员,为什么有人5K,有人 20K?
DataTable Helper Class for C#
LeetCode第 303 场周赛
Use Canvas to implement mobile phone signature
【Unity,C#】哨兵射线触发器模板代码
月薪12K,蝶变向新勇往直前,我通过转行软件测试实现月薪翻倍...
参观首钢园
ESP8266-Arduino编程实例-74HC595位移寄存驱动
MLX90640 红外热成像仪测温模块开发笔记(完整版)