ROS-参数服务器(python)方向的基本实现流程及代码演示

声明

首先是创造工作空间等等这里就不再赘述,下文使用的工作空间叫 ilove02_01_ws;功能包名字叫做:ilovezero2。

参数服务器的一套简单流程就是围绕:增删改查;这四个字组成的。

其中由增改这两个字组成一个主体文件,后面就叫它为 set文件。实行查与删功能的文件后面我就分别叫它们get文件和del文件

SET文件:增改

实现增改功能的语句是:rospy.set_param(),我们通过这个语句对它相关属性进行赋值操作,以下是set文件代码演示:

#! /usr/bin/env python
# coding=utf-8
import rospy
"""
   演示参数的新增与修改;
   需求:在参数服务器中实现机器人的属性,型号,半径
   实现:
       rospy.set_param()
"""
if __name__=="__main__":
    # 初始化ros节点
    rospy.init_node("param_set_p")
    # 新曾参数
    rospy.set_param("type_p","xiaohuangche")
    rospy.set_param("radius",0.15)
    # 修改参数
    rospy.set_param("radius",0.2)
    pass

这行串代码是实现的功能是建立两个参数 一个是typ_p ,它对应的型号是xiaohuangche

另一个是描述这个小车或机器人的半径是0.15然后通过该代码改为了0.2。

GET文件:查

查的对象是我原来已经赋值好的set文件,可以通过查的方式经行set文件中相关属性的查询操作,下面get文件会带来5种方法来查找set文件的相关属性。

get文件的代码演示如下:

1.get_param(x,y) x是前文的相关的键,y是自己定义的默认值,如果前面已经定义好了默认值会被前面所定义好的值所代替。y是一个可写可不写的值。

get_param就相当于是运行之后得到前面定义好的键的值 。

2.get_param_cached 这个语句是和1.功能是一样的,但是区别就是1. 的值是从内存中提取出来的,而2.是从本地中直接拿出来的,因此2.的效率比1.快。

3.get_param_names 它的作用是获得所有的键,这也就包括的系统本身的键和自身所定义的键。

4.has_param 这个语句就是判断是否有某一个键(要结合if语句)

5.search_param 这是用来寻找是否有某一个键的,并输出键名。

下面代码是将各类方法对set文件的radius进行的操作:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
"""
   演示相关参数的查询
"""
if __name__=="__main__":
    # 初始化ros节点
    rospy.init_node("get_param_p")
    # 1.get_param
    radius1 = rospy.get_param("radius",0.5)
    radius2 = rospy.get_param("radius_x",0.5)
    rospy.loginfo("radius1 = %.2f",radius1)
    rospy.loginfo("radius2 = %.2f",radius2)
    # 2.get_param_cached 与1.的区别就是2.的效率更高
    radius3 = rospy.get_param("radius",0.5)
    radius4 = rospy.get_param("radius_x",0.5)
    rospy.loginfo("radius3 = %.2f",radius1)
    rospy.loginfo("radius4 = %.2f",radius2)
    # 3.get_param_names 获取所有的建
    names = rospy.get_param_names()
    for name in names:
        rospy.loginfo("name = %s",name)
    # 4.has_param 表示某一个建是否存在
    flag1 = rospy.has_param("radius")
    if flag1:
        rospy.loginfo("radius 存在")
    else:
        rospy.loginfo("radius 不存在")
    flag2 = rospy.has_param("radius_x")
    if flag2:
        rospy.loginfo("radius_x 存在")
    else:
        rospy.loginfo("radius_x 不存在")
    # 5.search_param 查找某一个建,并输出建名
    key = rospy.search_param("radius")
    rospy.loginfo("key = %s",key)

DEL文件:删

语句:delete_param,这个语句是用来删除指定的键的,值得注意的是第一次删除时,代码正常运行,如果连续删除的话,那就会出现报错的情况,因为你的键已经删掉了。所以我使用了try——except这给捕获错误的语句做了一个优化,提示无此键了。

以下时del文件的代码演示:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
"""
   delet_param
"""
if __name__=="__main__":
    rospy.init_node("del_param_p")
    
    try:
        # 删除参数
        rospy.delete_param("radius")
    except Exception as e:
        rospy.loginfo("被删除的参数不存在")
    

---------------------------------------------------------------------------------------------------------------------------

下面我来运行这三个文件:

首先是set文件它的结果是

其次我再运行get文件:

我们可以从上面这个照片看到键radius,接下来我们运行del文件将会删除这个键

运行del文件并使用list查看:

此时我们会发现radius这个键就没了。

下面我们再次运行一遍del文件:

你就会发现它会出现我们上述优化之后的日志结果。

-------------------------------------------------------------------------------------------

下面经行总结:

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值