APP下载

ROS 无人驾驶创新实验课程研究与教学实践

2020-09-29葛亚明胡一博雷乔治陈浩耀

实验技术与管理 2020年6期
关键词:红绿灯无人驾驶车道

葛亚明,胡一博,雷乔治,陈浩耀

(1.哈尔滨工业大学(深圳) 实验与创新实践教育中心,广东 深圳 518055;2.哈尔滨工业大学(深圳) 机电工程与自动化学院,广东 深圳 518055)

智能网联汽车是汽车发展的主要方向,无人驾驶技术是智能网联汽车的重要组成部分,是体现汽车产业核心竞争能力的重要指标[1-5]。本创新实验课从当前无人驾驶技术研究的热点、难点中提炼教学内容,让学生了解无人驾驶技术国内外发展现状,全面掌握无人驾驶技术的整体技术框架和技术要点,包括摄像头、激光雷达、陀螺仪等传感器在无人驾驶技术中的使用方法与数据处理方法,无人驾驶技术中的车辆控制技术和系统决策机制,以及通信、感知、控制、导航等技术的交叉融合[6-10]等。这不仅能让学生初步掌握无人驾驶技术的相关理论和实现方法,还能提高学生的研究兴趣,培养动手能力和创新能力,为学生将来的进一步发展和就业奠定基础。该课程旨在提升学生对人工智能、机械、检测、控制等交叉学科知识的综合运用能力,同时给学生提供一个可以自由创作、自由发挥,且不失趣味的实验平台。课程采用团队合作方式,不同专业、不同年级学生的搭配与合作,不仅能促进各自专业知识的互补式学习,更有可能迸发出意想不到的新思路和新创意。

基于以上课程建设理念,本文从无人驾驶系统的硬件设计、软件设计、教学实践效果等方面进行详细阐述。

1 无人驾驶系统的硬件设计

图1 为无人驾驶车设计雏形。希望学生理解系统的硬件架构,以及无人驾驶车所使用的主要传感器。软件选择在ROS(robot operating system)下开发,以便能方便地处理各类传感器数据,能够轻松地使用不同语言及不同功能的代码,并快速调用各节点来实现所需的功能。该车不仅能完成无人驾驶技术中的一些主要功能,还能实现室内环境的同步定位与地图构建(SLAM),以及自主导航等功能。在图1 的雏形设计基础上,学生可以自由设计底盘硬件结构,利用各类传感器实现自己的无人驾驶车设计及控制。

图1 无人驾驶车设计雏形

无人驾驶系统主要由电脑、STM32、双目摄像头、激光雷达、陀螺仪等组成,如图2 所示。电脑作为上位机总控单元,可以完成系统的导航、避障、通信等功能,并作为显示及操作机构,完成程序的修改与装载、导航的显示、航迹路径规划等功能;路由器完成与其他机器人的通信,每台车都有自己的局域网Wi-Fi,实验时需要选择好对应的车;STM32 作为系统的底层控制,完成采集陀螺仪、超声波、左右轮编码器等传感器数据,以及控制电机转动的功能;陀螺仪用于测量车转动的角度;超声波主要用于检测玻璃等透明障碍物。

图2 系统硬件架构框图

2 基于ROS 的软件系统设计

本实验使用Linux 16.04 操作系统,ROS 是连接该操作系统和开发者所写程序的机器人操作系统,它提供类似于操作系统的功能,如硬件抽象、通信架构、软件分发、包管理等。ROS 下可以同时运行多个节点,每个节点可以单独设计,ROS 将提供一个框架来管理这些节点,作为他们之间通信的桥梁[11-12]。

软件系统的构建主要包括STM32 控制无人车移动、车道线识别、红绿灯识别、交通避障等。此外,还给学生提出了以下拓展研究点:车辆自主导航,车与车之间的控制决策、通信及复杂环境识别等。以命名为dashgo_ws 的ROS 工程为例,系统软件的主要结构和功能如图3 所示。

图3 ROS 工程的主要结构和功能

2.1 STM32 控制与通信

STM32 模块与电脑是通过串口在规定的通信协议下进行通信的。STM32 模块将采集的陀螺仪、超声波、左右轮电机编码器等传感器数据传输给电脑,并且接收电脑传输过来的左右轮电机速度数据,控制电机转动。在dashgo_ws 工程中,dashgo_driver 包负责与STM32 通信并控制无人车移动,因此需要先启动dashgo_driver 驱动,然后再启动键盘控制程序,来控制车的移动。通信交互过程如图4 所示。键盘控制节点会向速度主题发布ROS 消息,包括机器人中心的线速度和角速度,驱动节点监听到/cmd_vel 中有新消息后,将其转成左右轮电机速度,并下发给STM32,从而控制无人车移动。

图4 控制无人车移动的通信图

2.2 车道线识别

使用ZED 摄像头对交通环境中的车道线进行识别,将图像原来的RGB 图像空间转换为HSV 图像空间。如果不进行颜色识别,可以采用HSL 通道。然后再将H 通道进行二值化处理,对车道线截面进行分析,统计出各个截面中点的横坐标,取其中中点数目最多的横坐标作为车道线位置,进行PID 调节。图5 为编写lineonly.cpp 程序的流程。

图5 对车道线图像处理过程框图

2.3 红绿灯识别

使用深度摄像头识别红绿灯。由于红灯和绿灯的特征差别较小,直接进行红绿灯识别会存在较大误差。为了提高红绿灯识别的效果与效率,将红绿灯识别分为红绿灯位置识别和红绿灯颜色识别两个部分。

实验采用AdaBoost算法进行红绿灯的位置识别[13],共有两个步骤。第一,初始化训练数据的权值分布。假设有n 个样本数据,则初始化所有样本权值为1/n。第二,训练所有的弱分类器。在具体训练过程中,如果某个样本已经被准确地分类,那么在构造下一个训练集时,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高,同时得到弱分类器对应的话语权。更新权值后的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

依据图片和图片中红绿灯的位置截取出红绿灯,目的是去除图片中的背景;再将红绿灯图片转换到HSV 空间,并依据一定的范围进行二值化;然后对包含红绿区域的红绿灯的二值图像进行轮廓提取,并确定轮廓大小,根据轮廓大小及其位置,确定红绿灯的颜色。为了提高颜色识别准确率,需要确定连续多帧图像中红绿灯的颜色,当连续多帧图像的颜色大于一定阈值则认为是颜色判断成功,并输出结果。

将训练后的样本文件拷贝到指定目录下,并在红绿灯识别代码trafficlight.cpp 中修改存放样本的实际路径,即可测试红绿灯的识别程序。

2.4 交通避障

激光雷达用于测试周围环境,判断相对于车的哪个角度及多远距离处有障碍物。首先要对激光雷达数据进行处理,选取一个扇形区域,设定最小和最大弧度为-1.05 rad 和1.05 rad,检测的最小和最大距离为0.1~1.8 m,该设定值可以根据环境在程序中调整。然后订阅雷达消息,对每一个角度激光的返回距离值进行阈值判断,当满足条件的激光数达到一定阈值时,则认定为有障碍物。将检测到障碍物的结果话题发布到车道识别程序。如果检测到障碍物,发布让车速度为零的话题,反之,使车按正常情况行驶。按照以上方法编写避障程序obscontrol.cpp,待后续调用。

3 教学实践与问题分析

3.1 教学实践

基于Ubuntu16.04 系统,并以ROS 机器人操作系统作为上位机,在ROS 下很容易将车道线识别、红绿灯识别、避障等程序节点调用起来,对车进行控制。学生基于给定的车和DEMO 程序,通过调试来实现运行效果。对于在调试过程中出现的各种问题,要逐一解决。解决问题的过程也是熟悉和掌握系统软硬件架构的过程。

图1 的初级版无人驾驶车,是两轮差速结构底盘,运行速度受到一定限制,灵活性也不高。在此基础上,学生自行设计了如图6 的全向轮结构底盘。

该车尺寸为400mm×400mm,双层结构,下层放置电池、STM32 等,上层为悬挂避震器、固连分流板、电调等,以便最大限度地利用空间。上板上面可搭载摄像头、激光雷达等传感器,以实现基于SLAM 的无人驾驶。

图6 全向轮底盘的无人驾驶车实物图

在实现车道线识别的基础上,提出车辆变道和急转弯控制两个拓展研究点,让学生自行研究。车辆变道的实现,是在车辆行驶到一定位置时,识别标志物,并结合定时函数让车在一段时间内重复这一动作(如赋予一定的角速度),从而使车偏离某一轨道,进入另一轨道,实现变道。在急转弯(特别是尖角)时,由于霍夫变换求取出的斜率极不稳定,所以减小了摄像头读取范围,减小了遇到尖角时斜率不稳定的时间,同时在进、出急转弯区域贴两个红色标志物,让车进入急转弯前识别到第一个标志物时降低速度,走完急转弯并识别到第二个标志物时恢复速度,提高急转弯的稳定性。

3.2 实践考核

在课程实践中,鼓励学生提出改进无人驾驶技术的想法,因此在课程考核中,拓展研究点的分值权重最高。能够在原有设计基础上,进行一定的创新或者是技术改进,都可获得加分。考核标准中列出了很多加分点,大大激发了学生的研究热情。

学生的研究态度、表现、解决问题的能力等也是考核的内容。课程结课时,采取现场实际调试和答辩的方式记录分值,并与以上各个环节的分值一起作为最终评定成绩。

3.3 实践教学存在问题及改进

在教学实施过程中,学生的自主学习能力出现了一些层次上的分级,主要体现在应用新知识、新方法的快速性和灵活性以及寻找解决问题的途径上,在动手设计和软件程序的编写上也参差不齐。

针对这些问题,首先应建设完善的软资源,如实验指导书、相关的参考书等。在指导书中,将学生遇到的疑难问题进行汇总,给出相应的解决方法,并对所涉及的知识点做相应的讲解。第二,应开发模块化、功能化的程序,以功能性实现为主对程序进行注释,用思维导图方式引导学生编写、调试、丰富和完善代码。第三,在硬件结构设计上,应借鉴已有的机械设计经验,基于成熟的机械结构加以改善,制作符合本课程要求的机械结构。

4 结语

基于ROS 构建的无人驾驶创新实验课,是本科教学中的一门新的实践课程,适于在学习之余有能力进行拓展研究的学生。在课程教学中,教师的作用是构建课程框架,引导学生正确的研究方向,对学生研究中遇到的问题给予解决思路,鼓励学生使用新的思路、新的技术去实现研究任务。该选课不限制学生专业,鼓励通过各专业学生的合作,在机械结构设计、程序代码优化、视觉数据处理、传感器应用、通信方式等方面提出各种各样有意义的新颖想法。这样的学科交叉与互补研究活动,契合了“新工科”“双一流”高校建设的理念。

猜你喜欢

红绿灯无人驾驶车道
我们村的无人驾驶公交
北斗+手机实现车道级导航应用
避免跟车闯红灯的地面车道线
浅谈MTC车道改造
无人驾驶车辆
无人驾驶公园
红绿灯前
神奇的红绿灯
会说话的红绿灯
无人驾驶,先上赛道如何?