北邮智能车仿真培训(五)—— 数据可视化工具的使用

前言

上一节:北邮智能车仿真培训(四)—— 仿真原理详解
这一节讲解下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

北邮智能车仿真培训(五)—— 数据可视化工具的使用_第1张图片
工具栏还有很多工具我们可以自己尝试下怎么使用。
!!!有同学用虚拟机执行rqt_plot命令显示不了波形,原因是虚拟机界面大小有限,ros的rqt界面会根据窗口大小自动伸缩,所以将波形图区域隐藏了,这里只要点开放大窗口就行了,如图:
北邮智能车仿真培训(五)—— 数据可视化工具的使用_第2张图片

修改我们的巡线脚本,可视化调试参数

cd ~/smartcar_ws/src/buptsmartcar/src
gedit findLine.py

将这一段加在如下图中位置:

      msg = Float64()
      msg.data = err
      self.err_pub.publish(msg)

北邮智能车仿真培训(五)—— 数据可视化工具的使用_第3张图片
将这一段加在如下图中位置:

    self.err_pub = rospy.Publisher('err',
                                       Float64, queue_size=1) 

北邮智能车仿真培训(五)—— 数据可视化工具的使用_第4张图片
将这一段加在如下图中位置:

from std_msgs.msg import Float64

北邮智能车仿真培训(五)—— 数据可视化工具的使用_第5张图片
这里我们发布的数据的话题是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 ...
北邮智能车仿真培训(五)—— 数据可视化工具的使用_第6张图片

这里我们可以看到误差在0的上下起伏,这里我们修改PID参数中的P可以一定程度的减小这种起伏,但是如果P太小可能会导致在过急弯的时候车子因为转向太小而冲出跑道,所以当p的参数差不多的时候需要加PID中的D来消抖动。这里提一句吧,如果你发现你的PID参数不能很好的适应所有的情况,你可能会需要动态的来改变PID的参数,可以分几种情况,比如急弯时我们的P参数取一个较大的数,近乎直道时取一个较小的数等等。

结束

下一节:北邮智能车仿真培训(六)—— 修改模型参数

你可能感兴趣的:(北邮智能车仿真,ROS,智能车,北邮)