#这个系列文章,是我学习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
至此参数服务器的增删改查全部实现。