前言
记录一下ROS学习中的话题通信,我用的Ubuntu是16.04对应的ROS版本是kinetic
一、参数服务器
参数服务器设计到三个角色
ROS Master (管理者)
Talker (参数设置者)
Listener (参数调用者)
ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数
二、参数服务器新增(修改)参数
#! /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)
#修改参数 (参数名,参数的值)
rospy.set_param("radius_p",0.2)
1.1实验结果显示
1.终端中输入rosparam查看相关命令
2.运行参数服务器新增(修改)参数的代码,然后再执行rosparam list查看
3.通过rosparam get来查看参数的值
参数服务器获取参数
#! /usr/bin/env python
# _*_ coding:utf-8 _*_
# 第二行代码,编译中文不会报错
import rospy
"""
演示参数的查询
get_param(键,默认值)
当键存在时,返回对应的值,如果不存在返回默认值
get_param_cached
与get_param一致只是效率更高
get_param_names
获取所有参数的键的集合
has_param
判断某个键是否存在
search_param
查找某个参数的键,并返回完整的键名
"""
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_pxx",0.5)
rospy.loginfo("radius = %.2f",radius)
rospy.loginfo("radius2 = %.2f",radius2)
# 2.get_param_cached 与get_param一致只是效率更高
radius3 = rospy.get_param("radius_p",0.5)
radius4 = rospy.get_param("radius_pxx",0.5)
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 判断某个键是否存在
flog1 = rospy.has_param("radius_p")
if flog1 == True:
rospy.loginfo("radius_p 存在")
else:
rospy.loginfo("radius_p 不存在")
# 5.search_param 查找某个参数的键,并返回完整的键名
key = rospy.search_param("radius_p")
rospy.loginfo("key = %s",key)
2.1实验结果如下
参数服务器删除参数
#! /usr/bin/env python
# _*_ coding:utf-8 _*_
# 第二行代码,编译中文不会报错
import rospy
"""
演示参数删除:
delete_param()
"""
if __name__ == "__main__":
#初始化ros节点
rospy.init_node("delete_param_p")
try:
#删除参数
rospy.delete_param("radius_p")
except Exception as e:
rospy.loginfo("没有这个参数")