当前位置:网站首页>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进行访问。
边栏推荐
- PHP 安全漏洞:会话劫持、跨站点脚本、SQL 注入以及如何修复它们
- DataTable Helper Class for C#
- Vulnhub target drone: HARRYPOTTER_ NAGINI
- Complete knapsack problem to find the number of combinations and permutations
- 七夕到了——属于程序员的浪漫
- 二分练习题
- 高薪程序员&面试题精讲系列131之Eureka如何实现高可用?自我保护机制是怎么回事?
- MySQL's maximum recommended number of rows is 2000w, is it reliable?
- DOM series of touch screen events
- UI helper class for Winform - some components will use DevExpress components
猜你喜欢
随机推荐
02 es 集群搭建
C#Excel帮助类
比对软件-blastN结果详解
网站备案后没有找到站点 您没有将此域名或IP绑定到对应站点! 配置文件未生效!
京东软件测试面试题,仅30题就已经拯救了50%的人
C#的路径帮助类
ESP8266-Arduino编程实例-GA1A12S202对数刻度模拟光传感器
1 缺陷规范
【二叉树】奇偶树
软测面试如何介绍项目?要做哪些技术准备?
探讨if...else的替代方案
[Dark Horse Morning Post] Hu Jun's endorsement of Wukong's financial management is suspected of fraud, which is suspected to involve 39 billion yuan; Fuling mustard responded that mustard ate toenails
阿里官方 Redis 开发规范
直播app开发,是优化直播体验不得不关注的两大指标
[ACNOI2022]物品
下载 | 谷歌科学家Kevin P. Murphy发布新书《概率机器学习:高级主题》
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!
LeetCode Week 303
【R语言】对图片进行裁剪 图片批量裁剪
MySQL locking case analysis