当前位置: 首页 > news >正文

ROS参数服务器增删改查实操Python

ROS参数服务器增删改查实操Python

  • 环境准备
  • 参数服务器新增(修改)参数
  • 参数服务器获取参数
  • 参数服务器删除参数

ROS通信机制包括话题通信、服务通信和参数服务器三种通信方式,各原理及代码实现如下表

在这里插入图片描述

功能博客链接说明
VScode配置 ROS 环境VScode创建ROS项目 ROS集成开发环境使用VScode使用配置了ROS开发环境,实现ROS开发的第一步
话题通信理论ROS话题通信流程理论介绍了话题通信机制的原理
ROS话题通信机制实操C++ROS话题通信机制实操C++手把手的用C++实现了话题通信机制
ROS话题通信机制实操PythonROS话题通信机制实操Python手把手的用Python实现了话题通信机制
ROS话题通信流程自定义msg格式ROS话题通信流程自定义msg格式介绍了如何准备话题通信机制自定义msg数据格式,及相关配置
ROS话题通信机制自定义msg实战C++ROS话题通信机制自定义msg实战C++手把手的用C++实现了话题通信机制自定义msg数据通信
ROS话题通信机制自定义msg实战PythonROS话题通信机制自定义msg实战Python手把手的用Python实现了话题通信机制自定义msg数据通信
服务通信理论ROS服务通信流程理论介绍了服务通信机制的原理
ROS服务通信自定义srvROS服务通信自定义srv介绍了如何准备服务通信机制自定义srv数据格式,及相关配置
ROS服务通信机制实操C++ROS服务通信机制实操C++手把手的用C++实现了服务通信机制
ROS服务通信机制实操PythonROS服务通信机制实操Python手把手的用Python实现了话题通信机制
参数服务器理论ROS参数服务器理论模型介绍了参数服务器的原理
ROS参数服务器增删改查实操C++ROS参数服务器增删改查实操C++用 C++ 实现了参数服务器的的增删改查操作
ROS参数服务器增删改查实操PythonROS参数服务器增删改查实操Python用 Python 实现了参数服务器的的增删改查操作

环境准备

  • 在plumbing_param_server功能包下新建一个scripts文件夹

    在这里插入图片描述

  • 在scripts文件夹添加.py文件

    在这里插入图片描述

  • 编辑配置文件
    修改 plumbing_param_server功能包下的CMakeLists.txt,找到catkin_install_python,修改成如图所示:
    在这里插入图片描述

  • 给.py文件添加可执行文件
    进入到 scripts 文件下,打开Terminal,执行 chmod +x *.py 对demo_param_set_p.py、 demo_param_get_p.py 、 demo_param_del_p.py文件添加可执行的权限
    在这里插入图片描述

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

  • 新增参数方法
    调用set_param函数

    rospy.set_param("键","值")
    
  • 代码实现

    #! /usr/bin/env python3
    import rospy"""参数服务器操作之新增与修改(二者API一样)_Python实现:
    """if __name__ == "__main__":rospy.init_node("param_set_p")# 设置各种类型参数rospy.set_param("p_int",10)  # 整形类型rospy.set_param("p_double",3.14)  # 浮点类型rospy.set_param("p_bool",True)    # bool类型rospy.set_param("p_string","hello python")  # 字符串类型rospy.set_param("p_list",["hello","haha","xixi"])  # 列表rospy.set_param("p_dict",{"name":"hulu","age":8})  # 字典# 修改rospy.set_param("p_int",100)  # 修改参数值,和新增一样,设置不同的值即可
    

修改参数值,和新增一样,设置不同的值即可

参数服务器获取参数

  • 查询参数

    • rospy.get_param(“键”, “默认值”)
      键存在,返回对应的键的值,否则返回默认值,默认值可以不设置

      val = rospy.get_param("p_int", 0.5)
      
    • rospy.get_param_cached(“键”, “默认值”)
      是对rospy.get_param的优化,如果之前查询过,就会有缓存,rospy.get_param_cached会优先查询缓存,如果缓存没有,再去参数中查找,这样就提高了查询效率。
      键存在,返回对应的键的值,否则返回默认值

      val = rospy.get_param_cached("p_int", 0.5)
      
    • rospy.get_param_names()
      获取所有参数服务器中的键

      names = rospy.get_param_names()
      for name in names:rospy.loginfo("name = %s",name)
      
    • rospy.has_param(“键”)
      判断某个键是否存在,存在返回true,否则返回false

      flag = rospy.has_param("p_int")
      if (flag):rospy.loginfo("p_int键存在")
      else:rospy.loginfo("p_int键不存在")
    • rospy.search_param(“键”)
      查询某个键是否存在,如果存在返回键名,否则返回空

      key = rospy.search_param("p_int")
      rospy.loginfo("搜索的键 = %s",key)
      
  • 代码实现

    #! /usr/bin/env python3
    import rospy"""参数服务器操作之查询_Python实现:    get_param(键,默认值)当键存在时,返回对应的值,如果不存在返回默认值get_param_cached(键,默认值)当键存在时,返回对应的值,如果不存在返回默认值get_param_names获取所有参数服务器中的键has_param(键)判断某个键是否存在,存在返回true,否则返回falsesearch_param查询某个键是否存在,如果存在返回键名,否则返回空
    """if __name__ == "__main__":rospy.init_node("get_param_p")# 1.get_paramint_value = rospy.get_param("p_int",10000)double_value = rospy.get_param("p_double")bool_value = rospy.get_param("p_bool")string_value = rospy.get_param("p_string")p_list = rospy.get_param("p_list")p_dict = rospy.get_param("p_dict")rospy.loginfo("获取的数据:%d,%.2f,%d,%s",int_value,double_value,bool_value,string_value)for ele in p_list:rospy.loginfo("ele = %s", ele)rospy.loginfo("name = %s, age = %d",p_dict["name"],p_dict["age"])# 2.get_param_cachedint_cached = rospy.get_param_cached("p_int")rospy.loginfo("缓存数据:%d",int_cached)# 3.get_param_namesnames = rospy.get_param_names()for name in names:rospy.loginfo("name = %s",name)rospy.loginfo("-"*80)# 4.has_paramflag = rospy.has_param("p_int")rospy.loginfo("包含p_int吗?%d",flag)# 5.search_paramkey = rospy.search_param("p_int")rospy.loginfo("搜索的键 = %s",key)
    

参数服务器删除参数

  • 删除参数
    rospy.delete_param(“键”)
    键存在时,可以删除成功,键不存在时,会抛出异常

    try:rospy.delete_param("p_int")
    except Exception as e:rospy.loginfo("删除的参数不存在")
    
  • 代码实现

    #! /usr/bin/env python3
    import rospy"""参数服务器操作之删除_Python实现:rospy.delete_param("键")键存在时,可以删除成功,键不存在时,会抛出异常
    """if __name__ == "__main__":rospy.init_node("delete_param_p")try:rospy.delete_param("p_int")except Exception as e:rospy.loginfo("删除的参数不存在")
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络安全常见错误及解决办法(更新中)
  • 数据结构——单链表OJ题(下)
  • Golang | Leetcode Golang题解之第279题完全平方数
  • UE5 C++跑酷练习(Part2)
  • paraFoam 运行 报错 usr/lib/x86_64-linux-gnu/libQt5Core.so 已解决
  • 将git默认的编辑器设置为vin
  • springboot3-web-questions-分析
  • flink 实现大数据实时数据采集
  • 2024年jupyter notebook如何复制单元格cell输出的图片
  • Spring Boot 中常用注解及其用法
  • Spring Security学习笔记(二)Spring Security认证和鉴权
  • [译] 深入浅出Rust基金会
  • Java给定一些元素随机从中选择一个
  • 基于Libero的工程创建
  • export在linux中的作用
  • 分享的文章《人生如棋》
  • Apache Spark Streaming 使用实例
  • Laravel 中的一个后期静态绑定
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Spring声明式事务管理之一:五大属性分析
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue:响应原理
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 第2章 网络文档
  • 对象引论
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 爬虫模拟登陆 SegmentFault
  • 扑朔迷离的属性和特性【彻底弄清】
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • raise 与 raise ... from 的区别
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ‌移动管家手机智能控制汽车系统
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)linux使用docker容器运行mysql
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (一) 初入MySQL 【认识和部署】
  • (转)jdk与jre的区别
  • (转)Linq学习笔记
  • (转载)Google Chrome调试JS
  • (自适应手机端)行业协会机构网站模板
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Core中如何集成RabbitMQ
  • .Net IOC框架入门之一 Unity
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • :O)修改linux硬件时间
  • [ C++ ] STL---stack与queue
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ JavaScript ] JSON方法