ROS学习(4)参数服务器

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,类似于编程语言中的全局变量

参数服务器理论模型

ROS Master为管理者,Talker为参数设置者,Listener为参数调用者。

ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。 

整个流程由以下步骤实现:

1.Talker 设置参数

Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。

2.Listener 获取参数

Listener 通过 RPC 向参数服务器发送参数查找请求,请求中包含要查找的参数名。

3.ROS Master 向 Listener 发送参数值

ROS Master 根据步骤2请求提供的参数名查找参数值,并将查询结果通过 RPC 发送给 Listener。

注:参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据

参数可使用数据类型:

  • 32-bit integers

  • booleans

  • strings

  • doubles

  • iso8601 dates

  • lists

  • base64-encoded binary data

  • 字典

参数操作(Python)

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

#! /usr/bin?env python

import rospy

if __name__== "__main__":
    #初始化ROS节点
    rospy.init_node("param_set_p")
    #新增参数
    rospy.set_param("type_p","xioaHuangche")
    rospy.set_param("radius_p",0.15)
    #修改参数
    rospy.set_param("radius_p",0.2)
    
    

2.参数服务器获取参数

#! /usr/bin/env python

import rospy

if __name__ == "__main__":
    #初始化ROS节点
    rospy.init_node("get_param_p")
    #1. get_param
    radius = rospy.get_param("radius_p",0.5)
    radius2 = rospy.get_param("radius_xxx",0.5)
    
    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_xxx",0.5)
    
    rospy.loginfo("radius3 = %.2f",radius3)
    rospy.loginfo("radius4 = %.2f",radius4)

    #3. get_param_name 获取所有参数的键
    names = rospy.get_param_names()
    for name in names:
        rospy.loginfo("name = %s",name)

    #4. has_param
    flag1 = rospy.has_param("radius_p")
    if flag1:
        rospy.loginfo("radius_p 存在")
    else:
        rospy.loginfo("radius_p 不存在")

    flag2 = rospy.has_param("radius_xxx")
    if flag2:
        rospy.loginfo("radius_xxx 存在")
    else:
        rospy.loginfo("radius_xxx 不存在")

    #4. search_param
    key = rospy.search_param("radius_p")
    rospy.loginfo("key = %s",key)

3.参数服务器删除参数

#! /usr/bin/env python

import rospy

if __name__ == "__main__":
    rospy.init_node("delete_param_p")

    try:
        rospy.delete_param("p_int")
    except Exception as e:
        rospy.loginfo("删除失败")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值