ROS参数服务器增删改查实操Python
- 环境准备
- 参数服务器新增(修改)参数
- 参数服务器获取参数
- 参数服务器删除参数
ROS通信机制包括话题通信、服务通信和参数服务器三种通信方式,各原理及代码实现如下表
功能 | 博客链接 | 说明 |
---|---|---|
VScode配置 ROS 环境 | VScode创建ROS项目 ROS集成开发环境 | 使用VScode使用配置了ROS开发环境,实现ROS开发的第一步 |
话题通信理论 | ROS话题通信流程理论 | 介绍了话题通信机制的原理 |
ROS话题通信机制实操C++ | ROS话题通信机制实操C++ | 手把手的用C++实现了话题通信机制 |
ROS话题通信机制实操Python | ROS话题通信机制实操Python | 手把手的用Python实现了话题通信机制 |
ROS话题通信流程自定义msg格式 | ROS话题通信流程自定义msg格式 | 介绍了如何准备话题通信机制自定义msg数据格式,及相关配置 |
ROS话题通信机制自定义msg实战C++ | ROS话题通信机制自定义msg实战C++ | 手把手的用C++实现了话题通信机制自定义msg数据通信 |
ROS话题通信机制自定义msg实战Python | ROS话题通信机制自定义msg实战Python | 手把手的用Python实现了话题通信机制自定义msg数据通信 |
服务通信理论 | ROS服务通信流程理论 | 介绍了服务通信机制的原理 |
ROS服务通信自定义srv | ROS服务通信自定义srv | 介绍了如何准备服务通信机制自定义srv数据格式,及相关配置 |
ROS服务通信机制实操C++ | ROS服务通信机制实操C++ | 手把手的用C++实现了服务通信机制 |
ROS服务通信机制实操Python | ROS服务通信机制实操Python | 手把手的用Python实现了话题通信机制 |
参数服务器理论 | ROS参数服务器理论模型 | 介绍了参数服务器的原理 |
ROS参数服务器增删改查实操C++ | ROS参数服务器增删改查实操C++ | 用 C++ 实现了参数服务器的的增删改查操作 |
ROS参数服务器增删改查实操Python | ROS参数服务器增删改查实操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,否则返回falseflag = 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("删除的参数不存在")