ROS机器人入门第七课:参数服务器

news2024/12/23 19:32:34

文章目录

  • ROS机器人入门第七课:参数服务器
    • 一、参数服务器介绍
    • 二、参数操作
      • 1.参数服务器新增(修改)参数
      • 2.参数服务器获取参数
      • 3.参数服务器删除参数

ROS机器人入门第七课:参数服务器

一、参数服务器介绍

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,关于参数服务器的典型应用场景如下:

导航实现时,会进行路径规划,比如: 全局路径规划,设计一个从出发点到目标点的大致路径。本地路径规划,会根据当前路况生成时时的行进路径

上述场景中,全局路径规划和本地路径规划时,就会使用到参数服务器:

  • 路径规划时,需要参考小车的尺寸,我们可以将这些尺寸信息存储到参数服务器,全局路径规划节点与本地路径规划节点都可以从参数服务器中调用这些参数

参数服务器,一般适用于存在数据共享的一些应用场景。

概念
以共享的方式实现不同节点之间数据交互的通信模式。

作用
存储一些多节点共享的数据,类似于全局变量。

案例
实现参数增删改查操作。

参数可使用数据类型:

  • 32-bit integers:32位整数类型,用于存储不需要小数部分的数值,如计数器、标识符等。

  • booleans:布尔类型,用于存储真(True)或假(False)值,适用于开关状态、条件判断等场景。

  • strings:字符串类型,用于存储文本数据,如路径名、配置选项的名称等。

  • doubles:双精度浮点数类型,用于存储需要精确到小数点后多位的数值,如传感器读数、位置坐标等。

  • iso8601 dates:符合ISO 8601标准的日期格式,用于存储日期和时间信息,如日志时间戳、事件发生的时间等。

  • lists:列表类型,用于存储一系列同种或不同种类型的数据项,适用于配置参数的多个值、一系列操作指令等。

  • base64-encoded binary data:Base64编码的二进制数据类型,用于存储二进制数据,如图像数据、文件内容等。采用Base64编码是因为参数服务器通常以文本形式存储和传输数据,而Base64编码能将二进制数据转换为文本表示。

  • 字典:字典类型(也称为映射或哈希表),用于存储键值对,每个键对应一个值。适用于存储具有结构性的数据,如配置参数的集合、不同类型数据的聚合等。

注意:参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据

二、参数操作


需求:实现参数服务器参数的增删改查操作。


1.参数服务器新增(修改)参数

#! /usr/bin/env python
# - coding: utf-8 -*-
"""
    参数服务器操作之新增与修改(二者API一样)_Python实现:
    本脚本展示了如何在ROS中使用Python设置和更新参数服务器的参数。
"""

# 导入rospy模块,这是ROS中与Python程序交互的主要模块。
import rospy

# 确定这个脚本是作为主程序运行,而不是作为模块导入到其他脚本中。
if __name__ == "__main__":
    # 初始化一个ROS节点,节点名为"set_update_paramter_p"。
    # 在ROS中,节点是通信的基本单元,每个节点都要有一个唯一的名称。
    rospy.init_node("set_update_paramter_p")

    # 下面一系列的set_param调用设置了参数服务器上的不同类型的参数。
    # 参数服务器是ROS中用于存储和管理参数的系统,如配置参数。

    # 设置一个名为"p_int"的整型参数,值为10。
    rospy.set_param("p_int",10)

    # 设置一个名为"p_double"的浮点型参数,值为3.14。
    rospy.set_param("p_double",3.14)

    # 设置一个名为"p_bool"的布尔型参数,值为True。
    rospy.set_param("p_bool",True)

    # 设置一个名为"p_string"的字符串型参数,值为"hello python"。
    rospy.set_param("p_string","hello python")

    # 设置一个名为"p_list"的列表型参数,值为一个字符串列表["hello", "haha", "xixi"]。
    rospy.set_param("p_list",["hello","haha","xixi"])

    # 设置一个名为"p_dict"的字典型参数,值为一个字典{"name":"hulu","age":8}。
    rospy.set_param("p_dict",{"name":"hulu","age":8})

    # 修改已有的参数。这行代码将名为"p_int"的参数的值更改为100。
    rospy.set_param("p_int",100)

ros函数解释:

  • rospy.init_node(NAME, ...): 这个函数告诉ROS你将要开始一个新的节点。NAME是节点的名称,在ROS网络中应当是唯一的。

  • rospy.set_param(PARAM_NAME, PARAM_VALUE): 这是一个设置参数的函数,PARAM_NAME是要设置的参数的名称,PARAM_VALUE是参数的值,可以是整型、浮点型、布尔型、字符串型、列表型、字典型等。这个函数既可以用来创建新的参数,也可以用来修改现有的参数。如果参数已经存在,这个函数将更新它的值。

然后和前几篇文章一样修改CmakeLists.txt文件和为python文件添加可执行权限,这里不再赘述


可以用rosparam list列出当前参数服务器上所有的参数名称
在这里插入图片描述

可以用rosparam get从参数服务器检索单个参数的值

在这里插入图片描述


2.参数服务器获取参数

#! /usr/bin/env python
# - coding: utf-8 -*-
"""
    参数服务器操作之查询_Python实现:
    本脚本展示了如何在ROS中使用Python查询参数服务器中的参数。
"""

# 导入rospy模块,rospy是ROS用于Python的主要客户端库。
import rospy

# 这个条件确保了以下代码只有在该Python文件作为主程序运行时才会执行。
# 当文件被其他文件import时,这些代码不会执行。
if __name__ == "__main__":
    # 初始化ROS节点,节点名为"get_param_p"。
    rospy.init_node("get_param_p")

    # 获取参数服务器上名为"p_int"的参数,如果该参数不存在,则返回默认值10000。
    int_value = rospy.get_param("p_int",10000)
    # 获取参数服务器上名为"p_double"的参数,如果该参数不存在,将引发错误。
    double_value = rospy.get_param("p_double")
    # 获取参数服务器上名为"p_bool"的参数,如果该参数不存在,将引发错误。
    bool_value = rospy.get_param("p_bool")
    # 获取参数服务器上名为"p_string"的参数,如果该参数不存在,将引发错误。
    string_value = rospy.get_param("p_string")
    # 获取参数服务器上名为"p_list"的参数,如果该参数不存在,将引发错误。
    p_list = rospy.get_param("p_list")
    # 获取参数服务器上名为"p_dict"的参数,如果该参数不存在,将引发错误。
    p_dict = rospy.get_param("p_dict")

    # 使用loginfo打印信息,显示获取的各种类型的参数。
    rospy.loginfo("获取的数据:%d,%.2f,%d,%s",
                int_value,
                double_value,
                bool_value,
                string_value)
    # 遍历列表参数,并打印其元素。
    for ele in p_list:
        rospy.loginfo("ele = %s", ele)

    # 打印字典参数中的"name"和"age"键对应的值。
    rospy.loginfo("name = %s, age = %d", p_dict["name"], p_dict["age"])

    # get_param_cached用于获取参数的缓存值,这可能比直接获取参数更快。
    int_cached = rospy.get_param_cached("p_int")
    rospy.loginfo("缓存数据:%d", int_cached)

    # get_param_names返回一个包含所有参数名称的列表。
    names = rospy.get_param_names()
    # 遍历并打印出所有参数的名称。
    for name in names:
        rospy.loginfo("name = %s", name)

    # 打印分隔线,用于清晰显示输出结果。
    rospy.loginfo("-" * 80)

    # has_param检查参数服务器是否有名为"p_int"的参数。
    flag = rospy.has_param("p_int")
    rospy.loginfo("包含p_int吗?%d", flag)

    # search_param搜索特定的参数名称,并返回完整的参数名称路径。
    # 如果参数位于不同的命名空间下,这个方法会很有用。
    key = rospy.search_param("p_int")
    rospy.loginfo("搜索的键 = %s", key)

ROS函数解释:

  • rospy.init_node(NAME, ...): 初始化一个ROS节点。NAME是节点的名称,在ROS网络中必须是唯一的。

  • rospy.get_param(PARAM_NAME, DEFAULT=None): 从参数服务器获取一个参数。如果指定的PARAM_NAME存在,返回其值;否则返回DEFAULT指定的默认值。

  • rospy.loginfo(msg, *args): 将一个消息作为info类型记录到/rosout话题和节点的控制台。msg是消息格式,*args是格式化消息的参数。

  • rospy.get_param_cached(PARAM_NAME): 与get_param类似,但是它使用缓存来加速参数的获取。适合频繁查询的情况。

  • rospy.get_param_names(): 返回一个字符串列表,包含参数服务器上所有参数的名称。

  • rospy.has_param(PARAM_NAME): 检查参数服务器上是否有指定的参数。返回True或False。

  • rospy.search_param(PARAM_NAME): 在当前命名空间以及父命名空间中搜索参数,并返回完整的参数名称(可能包含命名空间路径)。如果参数不存在,返回None。

每个函数都与ROS参数服务器的操作有关,这些操作用于查询和管理参数,这些参数可以配置ROS节点的行为。

在这里插入图片描述

3.参数服务器删除参数

下面是提供的代码块的详细注释版本,包括ROS函数delete_param的作用说明:

#! /usr/bin/env python
# 上面的shebang指令告诉操作系统使用env来查找python解释器的位置,以便执行此脚本。

"""
    参数服务器操作之删除_Python实现:
    rospy.delete_param("键")
    键存在时,可以删除成功,键不存在时,会抛出异常。
    本脚本用于演示如何从ROS参数服务器中删除一个参数。
"""

# 导入rospy模块,rospy是ROS用于Python的主要客户端库,用于与ROS系统通信。
import rospy

# 这个条件确保了以下代码只有在该Python文件作为主程序运行时才会执行。
# 当文件被其他文件import时,这些代码不会执行。
if __name__ == "__main__":
    # rospy.init_node用于告诉ROS系统这里是一个新的节点。
    # "delete_param_p"是这个新节点的名称。
    rospy.init_node("delete_param_p")

    # 尝试执行一个可能会抛出异常的操作。
    try:
        # rospy.delete_param函数用于删除参数服务器上的一个参数。
        # 这里尝试删除名为"p_int"的参数。
        # 如果参数存在,它将被删除。
        rospy.delete_param("p_int")
    except Exception as e:  # 如果在尝试删除参数时出现任何异常,将执行这个块内的代码。
        # rospy.loginfo函数用来打印信息级别的日志到/rosout话题和节点的控制台。
        # 这里它被用来告知用户参数删除失败。
        rospy.loginfo("删除失败")

ROS函数解释:

  • rospy.init_node(NAME, ...): 这个函数初始化一个ROS节点。NAME是节点的名称,在ROS网络中必须是唯一的。节点是ROS通信网络中的一个基本单位,所有的通信工具如话题(topics)、服务(services)和参数(parameters)都会与一个特定的节点相关联。

  • rospy.delete_param(PARAM_NAME): 这个函数用于删除参数服务器上的一个参数。PARAM_NAME是你想要删除的参数的名称。如果参数存在,它将被删除。如果不存在,函数会抛出rospy.ROSException

  • rospy.loginfo(msg, *args): 这个函数用来打印信息级别的日志到/rosout话题和节点的控制台。这对于调试和用户反馈都是非常有用的。

在这段代码中,delete_param函数是用来从ROS参数服务器上删除一个指定名称的参数。如果这个参数不存在,将会抛出一个异常,然后脚本会捕获这个异常并打印出"删除失败"的信息。这是一个参数管理的典型用例,确保了在删除不必要或过时的参数时系统的稳定性和一致性。

删除p_int
在这里插入图片描述
再次删除p_int
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第34天】SQL进阶-SQL高级技巧-Window Funtion(SQL 小虚竹)

回城传送–》《100天精通MYSQL从入门到就业》 文章目录 零、前言一、练习题目二、SQL思路初始化数据什么是Window Funtion窗口函数的分类语法结构第一种写法:第二种写法: 实战体验序号函数:row_number()序号函数:rank()序号函数&…

AI大模型量化格式介绍(GPTQ,GGML,GGUF,FP16/INT8/INT4)

在 HuggingFace 上下载模型时,经常会看到模型的名称会带有fp16、GPTQ,GGML等字样,对不熟悉模型量化的同学来说,这些字样可能会让人摸不着头脑,我开始也是一头雾水,后来通过查阅资料,总算有了一些…

Leetcode144_二叉树的前序遍历

1.leetcode原题链接:. - 力扣(LeetCode) 2.题目描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入&#xf…

如何在PostgreSQL中使用CTE(公共表表达式)来简化复杂的查询逻辑?

文章目录 解决方案步骤示例代码 结论 在处理复杂的SQL查询时,我们经常会遇到需要多次引用子查询或中间结果的情况。这可能会使得查询变得冗长且难以理解。为了解决这个问题,PostgreSQL(以及其他一些SQL数据库系统)引入了公共表表达…

变频器基础原理

文章目录 0. 基本知识1.三相的电压之和为02.正弦交流相量的相量表示法(相量只是表示正弦量,而不等于正弦量 ;只有正弦量才能用相量表示)引入相量表示法目的:一种正弦量的产生方式:正弦量的相量表示,使用欧拉公式表示复数 3.用复数表示正弦量&…

使用JavaScript收集和发送用户设备信息,后端使用php将数据保存在本地json,便于后期分析数据

js代码部分 <script> // 之前提供的JavaScript代码 fetch(https://api.ipify.org?formatjson).then(response > response.json()).then(data > {const deviceInfo {userAgent: navigator.userAgent,platform: navigator.platform,language: navigator.language,…

晶圆制造之MPW(多项目晶圆)简介

01、MPW是什么&#xff1f; 在半导体行业中&#xff0c;MPW 是 "Multi Project Wafer" 的缩写&#xff0c;中文意思是多项目晶圆。MPW 的主要思想是将使用相同工艺的多个集成电路设计放在同一晶圆片上进行流片&#xff08;即制造&#xff09;。这种方法允许多个设计共…

数码摄影色彩构成,数码相机色彩管理

一、资料描述 本套摄影色彩资料&#xff0c;大小58.54M&#xff0c;共有6个文件。 二、资料目录 《抽象彩色摄影集》.阿瑟.pdf 《色彩构成》.pdf 《色彩学》.星云.扫描版.pdf 《摄影色彩构成》.pdf 《数码相机色彩管理》.pdf 数码摄影进阶之4《色彩篇》.pdf 三、资料下…

算法课程笔记——STL题目

长度为2的字符串&#xff0c;当in下标为一&#xff0c;也就是\n,当i&#xff01;n&#xff0c;就是输出空格 &&且 city从citys里面取 加速后就不能混用scanf

HANA SQL消耗内存和CPU线程的限制参数

HANA再处理大数据表相关的复杂Sql时&#xff0c;如果没有设置Memory和CPU线程上限的话&#xff0c;会将HANA的资源占用殆尽&#xff0c;造成HANA无法响应其他Sql请求&#xff0c;导致表现在应用服务器上就是系统卡顿的情况。解决上述问题的办法就是按照下图设置Memory(图1&…

Rust序列化和反序列化

Rust 编写python 模块 必备库 docker 启动 nginx 服务 NGINX 反向代理配置

使用QGIS创建Hexbin地图

Binning是一种用于显示点特征密度的制图技术。分箱涉及将均匀形状的网格覆盖到点数据集上。然后为网格中的每个单元格分配落在其中的点数。然后采用分级颜色分类来直观地显示哪些单元格包含最多数量的点。可以采用不同尺寸的形状&#xff0c;例如矩形、菱形和六边形。 什么是 …

FreeSWITCH 1.10.10 简单图形化界面19 - FreeSWITH性能测试之2核2G和4核4G

FreeSWITCH 1.10.10 简单图形化界面19 - FreeSWITH性能测试之2核心2G和4核心4G 界面预览00、先看使用手册0、先安装FreeSWITCH0、测试备注1、2核心2G内存200分机未开启录音呼叫开启录音呼叫 300分机未开启录音呼叫开启录音呼叫 400分机未开启录音呼叫开启录音呼叫 2、4核心4G内…

《大话西游2》本人收集的十二个单机版游戏,有详细的视频架设教程,云盘下载

《大话西游2》是一款经典的大型多人在线角色扮演游戏&#xff0c;也是一款国风经典的游戏。 有能力的可以架设个外网&#xff0c;让大家一起玩。 《大话西游2》本人收集的十二个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1a; 链接&…

华为开源自研AI框架昇思MindSpore应用案例:数据处理性能优化

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 数据是整个深度学习中最重要的一环&#xff0c;因为数据的好坏决定了最终结果的上限&#xff0c;模型的好坏只是去无限逼近这个上限&#xff0c;所以高质量的数据输入&#xff0c;会在整个深度神经网络中起到积极…

ubuntu安装QEMU

qemu虚拟机的使用&#xff08;一&#xff09;——ubuntu20.4安装QEMU_ubuntu安装qemu-CSDN博客 遇到的问题&#xff1a; (1)本来使用git clone https://github.com/qemu/qemu.git fatal: 无法访问 https://github.com/qemu/qemu.git/&#xff1a;GnuTLS recv error (-110): …

Linux-内存文件

1. 基础IO操作 1.1 c语言的IO接口 fopen&#xff1a;打开一个文件&#xff0c;按照指定方式 参数&#xff1a;filename 文件名&#xff0c;也可以是路径&#xff0c;mode&#xff1a;打开方式 返回打开的文件指针 fread&#xff1a;从指定流中读数据 参数&#xff1a;从FIL…

浏览器数据找回

网站上分享的文章应该都是个人的心血&#xff0c;对于一些操作问题导致心血丢失真的很奔溃&#xff0c;终于找到一个弥补的办法&#xff0c;csdn的文章谷歌浏览器亲测有效&#xff0c;理论上其他浏览器的其他网站应该也可以&#xff0c;适用以下场景 把博客编辑当成了编写新博…

【Linux】虚拟机与Xshell及VS Code的连接

一、基础环境 虚拟机&#xff1a;VMware Workstation Pro 虚拟机镜像&#xff1a;ubuntu-18.04.5-desktop-amd64.iso 其他&#xff1a;Xshell 6、Xftp 6、Visual Studio Code 上述软件的安装操作不再赘述&#xff0c;CSDN上有大量的优秀博文&#xff0c;可参考&#xff1a;详细…

【树莓派Linux内核开发】入门实操篇(虚拟机Ubuntu环境搭建+内核源码获取与配置+内核交叉编译+内核镜像挂载)

【树莓派Linux内核开发】入门实操篇&#xff08;虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载&#xff09; 文章目录 【树莓派Linux内核开发】入门实操篇&#xff08;虚拟机Ubuntu环境搭建内核源码获取与配置内核交叉编译内核镜像挂载&#xff09;一、搭建…