简单介绍一下ROS中的参数服务器,废话不多说直接上程序:
#!/usr/bin/env python
# coding:utf-8
import rospy
def param_demo():
rospy.init_node("param_demo")
rate = rospy.Rate(1)
while(not rospy.is_shutdown()):
#get param
parameter1 = rospy.get_param("~param1") #在node下的私有变量
parameter2 = rospy.get_param("/param2", default=222) #全局变量
print(type(parameter1)) #参数类型
print(type(parameter2)) #参数类型
rospy.loginfo('Get param1 = %s', parameter1)
rospy.loginfo('Get param2 = %d', parameter2)
#delete param 删除
rospy.delete_param('/param2')
#set param 设置
rospy.set_param('/param2',2)
#check param 判断是否存在
ifparam3 = rospy.has_param('/param3')
if(ifparam3):
rospy.loginfo('/param3 exists')
else:
rospy.loginfo('/param3 does not exist')
#批量获取参数
gain_param = rospy.get_param('gains')
p, i, d = gain_param['P'], gain_param['I'], gain_param['D']
rospy.loginfo("gains are %s, %s, %s", p, i, d)
#get all param names
params = rospy.get_param_names()
rospy.loginfo('param list: %s', params)
rate.sleep()
if __name__=="__main__":
param_demo()
对应的launch文件:
<launch>
<param name="/param2" value="111"/>
<node name="param_demo" pkg="h_h" type="param_demo.py" output="screen" >
<param name="param1" value="'1'"/>
</node>
<group ns="gains">
<param name="P" value="1.0" />
<param name="I" value="2.0" />
<param name="D" value="3.0" />
</group>
</launch>
看程序中 的 ~param1,参数带~的是私有参数,对应的我们在launch中 在node下写参数,写param1的时候不带~
/param2要写在外面,不写在node下,名称与程序中相同。
gain_param 用于批量写入参数,在launch中叶要写一个group