前言
这一节讲解下ros的画图工具的使用,可以很直观的观察我们的数据,也可以很方便的调试我们的代码。这一套ros的教程对于想参加ROS室外光电创意组的小伙伴也可以起到一个入门的作用,不过真心想参加室外光电创意组的建议看一下我博客里的ros编程实践那些文章,多尝试几个开源的ros平台会有更深刻的理解。
rqt_plot使用介绍
这里先用一个简单的例子说明这个工具的使用,然后再结合我们之前的巡线脚本使用。
在我们的buptsmartcat程序包下创建新的脚本:
cd ~/smartcar_ws/src/buptsmartcar/src
gedit sine_wave.py
sine_wave.py:
#!/usr/bin/env python
# coding=utf-8
import math, time
import rospy
from std_msgs.msg import Float64
rospy.init_node('sine_wave')#初始化节点
pub = rospy.Publisher('sin', Float64,queue_size = 1)#发布sin话题,消息类型是Float64
while not rospy.is_shutdown():#一直发布
msg = Float64()#创建Float64对象
msg.data = math.sin(4*time.time())#对象的数据
pub.publish(msg)#发布消息
time.sleep(0.1)
给脚本赋予可执行权限:
chmod 777 *
在一个终端启动ros服务:
roscore
使用ros的工具都需要启动ros的服务,我们之前用roslaunch之所以没启动roscore是因为执行roslaunch时内部会执行roscore
执行脚本:
cd ~/smartcar_ws/src/buptsmartcar/src
python sine_wave.py
打开另一个终端,使用rqt_plot函数可视化数据:
rqt_plot /sin/data
工具栏还有很多工具我们可以自己尝试下怎么使用。
!!!有同学用虚拟机执行rqt_plot命令显示不了波形,原因是虚拟机界面大小有限,ros的rqt界面会根据窗口大小自动伸缩,所以将波形图区域隐藏了,这里只要点开放大窗口就行了,如图:
修改我们的巡线脚本,可视化调试参数
cd ~/smartcar_ws/src/buptsmartcar/src
gedit findLine.py
将这一段加在如下图中位置:
msg = Float64()
msg.data = err
self.err_pub.publish(msg)
将这一段加在如下图中位置:
self.err_pub = rospy.Publisher('err',
Float64, queue_size=1)
将这一段加在如下图中位置:
from std_msgs.msg import Float64
这里我们发布的数据的话题是err,数据是/data,他的值是我们的偏差,也就是当前跑道的中心和我们图片的中心的偏差
启动gazebo模型
roslaunch smartcar_description smartcar_display_gazebo3.launch
执行巡线脚本,记得先把地图拖进去
rosrun buptsmartcar findLine.py
这里用rosrun可以不用到findLine.py文件夹中用Python命令来执行脚本,ros自动会帮你查找脚本位置
启动数据监视:
rqt_plot /err/data
Tips:
这里如果想查看多个数据可以这样使用:rqt_plot /err/data /sin/data ...
这里我们可以看到误差在0的上下起伏,这里我们修改PID参数中的P可以一定程度的减小这种起伏,但是如果P太小可能会导致在过急弯的时候车子因为转向太小而冲出跑道,所以当p的参数差不多的时候需要加PID中的D来消抖动。这里提一句吧,如果你发现你的PID参数不能很好的适应所有的情况,你可能会需要动态的来改变PID的参数,可以分几种情况,比如急弯时我们的P参数取一个较大的数,近乎直道时取一个较小的数等等。
结束