当前位置 博文首页 > txr152111的博客:20th 参数服务器的增、删、改、查操作实现(Py

    txr152111的博客:20th 参数服务器的增、删、改、查操作实现(Py

    作者:[db:作者] 时间:2021-09-01 22:08

    在上一讲中,实现了用C++来写参数服务器的增删改查操作,在本节,是使用python来实现相同的功能。

    一、增

    1.1新建文件

    #!/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_p",0.15)  
        pass
    

    1.2可执行权限

    1.3配置文件

    1.4测试

    二、改

    改和增使用的是同一个api

    对同一个参数进行二次设置,就实现了修改,原理上是进行覆盖

    ?

    三、查

     参数服务器操作之查询_Python实现:    
            get_param(键,默认值)
                当键存在时,返回对应的值,如果不存在返回默认值
            get_param_cached
            get_param_names
            has_param
            search_param

    3.1 新建文件

    #!/usr/bin/env python
    # -*- coding:UTF-8 -*-    
    import rospy
    from rospy import names
    """
        演示:在参数服务器中查询参数
         参数服务器操作之查询_Python实现:    
            get_param(键,默认值)
                当键存在时,返回对应的值,如果不存在返回默认值
            get_param_cached
            get_param_names
            has_param
            search_param
    """
    if __name__ =="__main__":
          #初始化ros节点
        rospy.init_node("param_get_p")
    
        #1. get_param(参数名,默认值)
                #存在,返回对应结果,否则返回默认值
        radius =  rospy.get_param("radius_p",0.5)
        radius2 =  rospy.get_param("radius_p_no",5.55)
        rospy.loginfo("radius = %.2f",radius)
        rospy.loginfo("radius2 = %.2f",radius2)
    
        #2.get_param_ached
            #与第一个没什么区别,主要是效率高,可以从缓存中读取
        radius3 =  rospy.get_param_cached("radius_p",0.5)
        radius4 =  rospy.get_param_cached("radius_p_no",5.55)
        rospy.loginfo("radius3 = %.2f",radius3)
        rospy.loginfo("radius4 = %.2f",radius4)
    
        #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_p")
        flag2 = rospy.has_param("radius_p_no")
        if flag1:
            rospy.loginfo("radius_p存在")
        else:
             rospy.loginfo("radius_p不存在")
    
        if flag2:
            rospy.loginfo("radius_p_no存在")
        else:
             rospy.loginfo("radius_p_no不存在")
    
        #5.search_param
        # 查找这键名,存在则返回键的名
        key =  rospy.search_param("radius_p")  
        rospy.loginfo("key = %s",key)  

    3.2 可执行权限

    3.3配置

    3.4测试?

    以第一个get_param为例:

    ?设置参数

    运行程序

    ?四、删?

    4.1 新建文件

    ?

    #!/usr/bin/env python
    # -*- coding:UTF-8 -*-    
    import rospy
    """
        演示:在参数服务器中删除参数
        实现:delete_param()
    """
    if __name__ =="__main__":
        #初始化ros节点
        rospy.init_node("param_del_p")
    
        #删除参数
        rospy.delete_param("radius_p")

    4.2 可执行权限

    4.3配置

    4.4测试

    之后:

    cs