基于ROS的无人驾驶智能车
来源:用户上传
作者:
摘 要:为了进一步解决在人为驾驶中存在主观因素的交通隐患问题,文中提出利用基于OpenCV深度学习摄像头进行识别,使用RPLIDAR-A1激光雷达进行构建实时地图并使小车实现自动识别交通标识、自动导航、自动避障,利用视觉识别定位技术作为ROS小车的感知方法,模拟人双眼视觉功能,通过图像处理信息感知客观环境,小车再根据ROS机器人算法做出对应符合交通规格的动作,rviz机器人仿真环境,同时结合兼容Linux系统的工控机的无人驾驶智能小车。实验表明,该方法可增大小车的精度和灵敏度,既节省驾驶员的精力,又减少了违法违规现象和交通事故的发生。
关键词:雷达建模;无人驾驶;OpenCV;深度摄像学习;跟踪识别;图像处理
中图分类号:TP316 文献标识码:A 文章编号:2095-1302(2020)06-00-02
0 引 言
汽车是人们生活中非常重要的一种交通工具,当今社会越来越多的人选择使用汽车出行。汽车在方便大家的同时也带了一些必不可少的交通问题和交通事故。为使交通路况畅通和避免一些人为可控的交通事故的发生,本文设计了一种无人驾驶智能车。该智能车通过基于OpenCV的深度摄像头模块[1]对红绿灯进行跟踪识别,通过电机驱动模块驱动小车行驶,并在合适地点直行、左转、右转、停车等。利用该科技手段,可有效监控红绿灯或突发意外,辅助或者代替司机驾驶,能规避绝大多数可能产生的意外,为人们生活工作提供安全保障。该无人驾驶汽车对行驶控制进行了优化,例如制动、加速等方面,这对于汽车提高发动机效率、降低污气排放有积极的作用。同时运用上了结合雷达实地三维建模[2]及视频处理技术[3],可大大地提高小车的性能,更好地实现安全无人驾驶。
1 系统总体结构
本系统总体结构如图1所示。
该无人驾驶小车的控制系统主要由工控机和STM32F103ZET6构成。蓄电池提供整个运动控制结构所需电力,电机驱动模块驱动直流编码减速电机。利用深度摄像头模块、激光雷达模块和超声波模块来实现自动导航及避障功能;结合GPS模块、激光雷达模块以及IMU姿态传感器实现小车的定位导航;摄像头模块、雷达模块等的实地测量数据通过触摸显示屏显示出来,最后用控制端APP进行人机交互。
2 系统硬件设计
2.1 自动导航方案设计
实现自动定位巡航的传统方案多是单纯地采用GPS模块定位技术[4],或者单纯地采用雷达定位技术。本系统自动定位巡航部分不但结合了即快速又精准的GPS定位技术,还结合了实地三维建模的雷达定位技术。首先利用GPS模块进行大概定位(U-blox6Q[5]的定位精度是2.5 m),再利用激光雷达进行实地三维建模以及定位[6](探测范围在
20 cm~20 m之间),同时,激光雷达可以进行实地建模。这样不仅能提高无人驾驶系统定位的精度,而且能增大自动避障的准确度。无人驾驶系统结合了GPS定位技术和雷达定位技术可以大大扩大使用范围。GPS模块能在室内精准定位和跟随等,但在偏僻公路上,GPS信号会受到建筑物以及树木的影响,从而会降低其定位准确度,但激光雷达可以利用激光在大范围内扫描障碍物进行实地建模以及精准定位,达到自动行驶的目的。
2.2 自动避障部分方案设计
本项目由深度摄像头模块、激光雷达模块、超声波模块对无人驾驶系统周围环境进行实时监控,通过摄像头视频处理技术判断小车是否行驶在安全路段[3],通过摄像头视频处理技术以及雷达三维建模技术进行判断道路是否具有障碍物需要避开;同时,结合超声波模块的短距离精准测距的功能来提高小车避障的准确度和安全度。此外,本项目还采用改进后的YOLO行人检测算法[7]。该算法可实时跟进对人及移动物体的检测,并精准定位到小车与行人或移动物体的距离,让小车与障碍物保持绝对安全距离,避免安全事故的发生。
3 系统软件设计
3.1 ROS系统的优点
本文系统使用的是基于Linux的ROS系统。该系统采用分布式框架的结构,通过点对点的方式可以让机器人分别运行不同的进程。除此之外,ROS系统还支持多种语言的编译,比如C++和Python等热门语言都是目前ROS系统应用最广的开发语言。另外,ROS系统是一个对所有开发者都开放的系统,并且具有强大的生态链,其核心设计方法为松耦合设计,这就有利于功能的复用和软件的拓展[8]。
3.2 OpenCV识别系统
本文在ROS系统的基础上,主要使用C++编译语言去实现小车的自动驾驶功能。通过调用OpenCV函数库去实现对交通标志和停车线的检测。对于交通灯的识别,这里采用的方法是先找出所要识别的颜色,再判断该颜色是否为圆,从而判断出找到的是什么颜色的交通灯,其总体框架如图2所示。
首先调用Open CV函数库库中的blur函数[9]对图像进行均值滤波,其原理为由该点的一个邻域中各点值的中值来代替,让周围的像素值接近真实值,从而消除孤立的噪声点[9]。再将滤波后的图片使用inRange()函数对图像进行二值化的限定,找出红绿灯的颜色;然后,在找到颜色的基础上使用Canny算法找出识别出的图像颜色边缘;最后使用HoughCircles函数进行最后的找圆。
3.3 SLAM算法建模
SLAM(Simultaneous Localization and Mapping)又称同步定位与建图,是在未知环境下,机器人在运动过程中实时观测地图特征,再根据自身位置的变化进行地图特征的匹配,从而完成定位和地图构建的技术[10]。通过SLAM算法可以完成对空间的建模和自身的定位还有行人的检测。
本文通过雷达采集实际环境中的数据。所谓的数据就是一系列分散的、具有准确的角度和距離信息的点—点云。再将采集到的数据对不同时刻的目标位置所移动的相对位置进行大概估算。特征匹配的算法有多种,一开始的有SIFT算法[10],其原理为采用高斯核与原图像进行卷积,生成分辨率逐层降低的图像金字塔,然后在相邻塔层间相减,得到由高斯差分金字塔构造的尺度空间[10]。本文使用的是SIFT的改进版SURF算法。该算法对图像进行积分,极大程度上的减少了图像中计算特征点的时间,有利于图像处理速度的提升,对于特征矢量描述子的计算,这里使用欧式距离公式对不同时刻的特征点进行计算,公式如下: 式中:d(A, B)图像中物体A到物体B的欧式距离;Pi,Pj分别是图像对应的第i个、第j个像素点;m,n分别为图像对应物体像素点的总数;DA(Pi),DB(Pj)分别为A,B物体像素点所对应的特征向量。然后使用滤波器对图像进行优化,用来减少视觉里程计所带来的累计误差,增大准确度,随后通过对比初始数据和处理后的数据所得到的运动轨迹最终完成建模。最后还要加上回环检测来提供一个来自空间上的约束以此消除累计误差。SLAM算法框图如图3所示。
最终SLAM算法建模图形如图4所示。
4 结 语
本文设计了一种无人驾驶智能车,并对该智能车的系统硬件结构、系统软件结构以及主要控制算法进行了设计及论述。该智能车主要运用ROS向雷达模块与摄像头模块发送信号,激光雷达模块通过SLAM算法进行建模,再结合基于OpenCV深度学习摄像头模块的图像识别以及视频处理技术来实现自动识别、自动巡航、自动避障等功能。本设计避免了司机长时间驾驶的疲劳,无人驾驶小车精准定位导航也对稳定交通秩序做了极大贡献,同时,也能减少交通事故的发生。综上所述,运用ROS可以将现实场景很好地模拟出来,并对各类突发状况进行高效的处理。
参考文献
[1]王晓鹏.基于OpenCV的图像处理滤波算法研究[J].现代工业经济和信息化,2018,8(6):61-62.
[2]白云裳,刘猛,冯酉鹏.基于激光雷达SLAM室内定位方法[J].中国新通信,2019,21(16):52.
[3]杨磊,王少云,刘力冉,等.一种智能视频监控系统中的行人检测方法[J].计算机与现代化,2019(11):69-74.
[4]陈红齐,吴益新.北斗导航及GPS技术在航海定位中的应用[J].设备管理与维修,2019(12):225-227.
[5]王君刚,王解先,陈俊平,等.U-Blox 6接收机解码与定位测试
[J].测绘通报,2015(11):24-27.
[6]黄晓杰,陈宇磊,邵跃堂,等.基于激光雷达的地铁隧道形变检测方法[J].城市轨道交通研究,2019,22(11):47.
[7]祝庆发,陈永生,郭玉臣.基于改进YOLO算法的密集人群场景下的行人检测[J].电脑知识与技术,2019,15(22):175-176.
[8]谢萌,张世武,李旺,等.基于ROS的远程车辆控制和目标跟随系统设计[J].工业控制计算机,2019,32(7):29-31.
[9]陈庆伟,李民东,罗川,等.视觉SLAM中圖像特征点提取与匹配算法研究[J].现代制造工程,2019(10):135-139.
[10]王嵘,万永菁.一种基于SLAM的多功能探索机器人设计[J].机械与电子,2019,37(9):51-53.
转载注明来源:https://www.xzbu.com/8/view-15249847.htm