ROS参数服务器增删改查实操Python
创始人
2024-12-20 01:35:48
0

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,否则返回false         search_param         	查询某个键是否存在,如果存在返回键名,否则返回空 """  if __name__ == "__main__":     rospy.init_node("get_param_p")      # 1.get_param          int_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_cached     int_cached = rospy.get_param_cached("p_int")     rospy.loginfo("缓存数据:%d",int_cached)      # 3.get_param_names     names = rospy.get_param_names()     for name in names:         rospy.loginfo("name = %s",name)      rospy.loginfo("-"*80)      # 4.has_param     flag = rospy.has_param("p_int")     rospy.loginfo("包含p_int吗?%d",flag)      # 5.search_param     key = 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("删除的参数不存在") 

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...