P83使用Python实现参数服务器

#这个系列文章,是我学习B站ros教程(赵虚左)所做的学习记录,目的是整理学习过程中的思路。着力推荐赵老师的学习教程

一、增加参数

1、新建文件

在功能包plumbing_param_server 下新建文件夹,名为:scripts。在scripts文件夹下新建文件,名为:demo01_param_set_p.py

2、编写程序

#!/usr/bin/env python
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)
    #修改参数

3、配置文件

catkin_install_python(PROGRAMS
  scripts/demo01_param_set_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

4、添加执行权限

chmod +x *.py

ll

5、编译

ctrl+shift+b

6、启动终端,查看结果

启动终端:ctrl+alt+t

启动核心:roscore;

打开工作空间:cd demo03_ws

声明源头:source ./devel/setup.bash

运行程序:rosrun plumbing_param_server demo01_param_set_p.py

分屏,查看参数:rosparam list

 可以看到参数列表中的“radius_p”、"type_p",这两个参数,这是刚刚程序中设置的。

可以通过命令查看参数的值

二、修改的参数的值

同样通过set_param语句修改参数的值

#!/usr/bin/env python
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)
    #修改参数
    rospy.set_param("radius_p",0.25)

编译后重新运行程序,可以看到参数值发生变化

三、查看参数

在scripts文件夹中新建文件,命名为:demo02_param_get_p.py

添加可执行权限:

chmod +x  *.py

ll

配置文件

catkin_install_python(PROGRAMS
  scripts/demo01_param_set_p.py
  scripts/demo02_param_get_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

设置程序框架:

#/usr/bin/env python
import rospy
"""
参数查询
"""
if __name__=="__main__":
    rospy.init_node("get_param_p")

1、get_param

当键存在时,返回对应的值;当不存在时,返回默认值

代码实现:

#1、get_param 当键存在时,返回键对应的值,如果不存在返回默认值
    radius=rospy.get_param("radius_p",0.5)
    radius2=rospy.get_param("radius_p_xxx",0.555)
    rospy.loginfo("radius=%.2f",radius)
    rospy.loginfo("radius_p_xxx=%.2f",radius2)

查看结果 :

打开终端,启动核心:roscore

竖直分屏,打开工作空间:cd demo03_ws

声明程序源:source ./devel/setup.bash

启动程序:rosrun plumbing_param_server demo01_param_set_p.py

水平分屏,声明程序源:source ./devel/setup.bash

启动程序:rosrun plumbing_param_server demo02_param_get_p.py

2、get_param_ached

和get_param类似,但是缓存中已经存在参数时,查询速度比get_param速度快。

#2、get_param_cached  当内存中有,即被调用了之后,使用这个查询效率更高
    radius3=rospy.get_param("radius_p",0.5)
    radius4=rospy.get_param("radius_p_xxx",0.444)
    rospy.loginfo("radius=%.2f",radius3)
    rospy.loginfo("radius_p_xxx=%.3f",radius4)

查看结果:

3、get_param_names

 获取所有参数的键的集合

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

 查看结果:

4、has_param

判断是否存在某个参数;如果存在返回真,不存在则返回假

#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_p_xxx")
    if flag2:
        rospy.loginfo("radius_p_xxx存在")
    else:
        rospy.loginfo("radius_p_xxx不存在")

查看结果:

5、search_param

查找某个键,如果参数存在,则返回键名字

#5、search_param查找某个键名字,并返回完整的键名字
    key=rospy.search_param("radius_p")
    rospy.loginfo("key=%s",key)

查看结果:

demo02_param_get_p.py完整的程序:

#/usr/bin/env python
import rospy
"""
参数查询
"""
if __name__=="__main__":
    rospy.init_node("get_param_p")
    #1、get_param 当键存在时,返回键对应的值,如果不存在返回默认值
    radius=rospy.get_param("radius_p",0.5)
    radius2=rospy.get_param("radius_p_xxx",0.555)
    rospy.loginfo("radius=%.2f",radius)
    rospy.loginfo("radius_p_xxx=%.2f",radius2)
    #2、get_param_cached  当内存中有,即被调用了之后,使用这个查询效率更高
    radius3=rospy.get_param("radius_p",0.5)
    radius4=rospy.get_param("radius_p_xxx",0.444)
    rospy.loginfo("radius=%.2f",radius3)
    rospy.loginfo("radius_p_xxx=%.3f",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")
    if flag1:
        rospy.loginfo("radius_p存在")
    else:
        rospy.loginfo("radius_p不存在")
    flag2=rospy.has_param("radius_p_xxx")
    if flag2:
        rospy.loginfo("radius_p_xxx存在")
    else:
        rospy.loginfo("radius_p_xxx不存在")
    #5、search_param查找某个键名字,并返回完整的键名字
    key=rospy.search_param("radius_p")
    rospy.loginfo("key=%s",key)

四、删除参数

在文件夹:scripts中新建文件:demo03_param_del_p.py

添加可执行权限

配置文件

catkin_install_python(PROGRAMS
  scripts/demo01_param_set_p.py
  scripts/demo02_param_get_p.py
  scripts/demo03_param_del_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

编写程序:

#!/usr/bin/env python
import rospy
"""
演示参数删除操作
delete_param()
"""
if __name__=="__main__":
    rospy.init_node("del_param_p")
    #删除参数
    try:
        rospy.delete_param("radius_p")
    except Exception as e:
        rospy.loginfo("被删除的参数不存在")

查看结果:

打开终端,启动核心:roscore

竖直分屏,打开工作空间:cd demo03_ws

声明程序源:source ./devel/setup.bash

启动程序:rosrun plumbing_param_server demo01_param_set_p.py

水平分屏,声明程序源:source ./devel/setup.bash

启动程序:rosrun plumbing_param_server demo03_param_del_p.py

至此参数服务器的增删改查全部实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值