【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取!

团队价绍

参赛单位:上海应用技术大学
参赛队伍:EAIDK666
指导老师:蒋文萍 丁肇红
参赛队员:温晓静 孙亦劼 杜为栋
获奖情况:"ARM"企业专项全国一等奖,全国总决赛三等奖,上海赛区三等奖

作品背景

汽车行业已经进入了一个颠覆性的革新时代,这个时代里面,智能化是一个必然的趋势。相对传统的人工驾驶,自动驾驶在安全,便捷,效率上有着巨大的优势。目前,我国已有自动驾驶汽车正在投入试用,于规定道路上取得一定成果。一方面自动驾驶的发展趋势方兴未艾,自动驾驶技术成为当前的主流研究方向。另一方面,中国在芯片电子领域在国际上处于被打压的形势下,本着挑战自我熟悉国产芯片的原则选择了该ARM中国企业命题,该赛题由安谋中国和OPEN AI LAB联合设计,该自动驾驶赛题围绕具体应用场景,结合传感器、算法和指定控制设备,以达到搭建完整应用产品。
【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第1张图片

技术难点与创新点

技术难点

  • 软件移植:由于EAIDK310不像树莓派那样是一款比较大众的开发板,其网上资料有限,如何完成已经在其他开发板的功能即软件移植是第一大难点。
  • 性能调优:EAIDK310板载芯片是瑞芯微的RK3228H,EAIDK310参数见官网。作为一款入门级嵌入式AI处理器想要实现基于图像识别的自动驾驶还是有很大的性能瓶颈,因此性能调优是第二大难点
  • 使用门槛:由于该命题为企业命题,而非开放命题,没有任何实现准备工作或者传承,面对一块陌生的开发板陌生的系统陌生的芯片,在有限的时间内将其跑通完成赛题指定任务是一个很大的门槛。

创新点

  • 硬件上采用了双摄像头架构:一个是用于采集车身在道路上位置的俯视安装的摄像头,其前瞻大约两倍车身长度,一个是用于采集行人交通标识等路况信息的平时安装的微广角摄像头。双摄像头的架构极大提高了图像采集和处理的效率,降低了软件分割处理图像的压力。

  • 软件架构:由于EAIDK310平台综合各方面因素,摒弃使用业界常用的ROS作为解决方案,而是使用了一个轻量级的数据缓存库Redis和DSDL来实现和ROS类似的功能,使得程序耦合性降低,以较低的成本实现了一种跨进程跨节点跨语言且较高性能的架构。

  • 算法优化上关于图像识别部分采用了Tengine边缘推理框架进行了性能调优加速,使整个系统的实时性得以提高。

实用价值

得益于该作品在硬件和软件架构上的创新,提出了一套成本低效率高的嵌入式视觉导航框架,使得研究该技术的硬件成本门槛降低,不仅仅在自动驾驶,该作品提出的基于Redis的软件方案在嵌入式系统中都是一个不错值得复制借鉴的框架。此外该作品最后实验结果验证了Tengine在嵌入式平台上优异的表现,为嵌入式系统运行AI推理优化加速调优提供了思路。

系统设计

系统架构图

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第2张图片

本设计整体的系统构如图所示,从下至上依次有硬件层,驱动层,数据交互层,数据处理层,控制算法层和应用层。
硬件层是本设计最直观的物理体现形式,主要包括电机、舵机、转速传感器IMU传感器按键蜂鸣器等。
驱动层是与硬件直接进行交互使其运行起来的的最底层软件,包括驱动电机舵机的PWM,获取转速传感器的输入捕捉,驱动IMU的IIC总线,以及用于人机,机机交互的GPIO和UART。
数据交互层是连接底层与上层的关键一层,它是对驱动层从数据流的角度进一步的抽象和封装,为上层应用对底层硬件的访问控制提供了统一的接口和权限的控制。
数据滤波层是数据经过的第一层处理,主要提供了对数据最基础的数学运算变换以及数字信号处理手段。基于底层提供的原始数据或者处理过的数据,控制算法层将这些数据带入到实际模型中完成对模型的控制。
应用层是最上层的逻辑处理层,在这一层实现了最具体的功能,例如让小车循迹行驶、以及小车自主行驶策略控制等均在应用层完成。下面对本架构从硬件和软件的角度展开阐述。

硬件架构图

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第3张图片

上图为本设计的系统总体硬件框架图,硬件系统采用主控制器加辅助控制器的架构。主控制器即EAIDK310开发板板载RK3228H处理器,辅助处理器为STM32F405处理器。主控制器负责摄像头数据采集处理,以及主要控制算法执行。辅助处理器是一个32位单片机,主要负责电机驱动,速度转向控制,以及车身姿态解算。

特别地,在主处理侧采用的是双摄像头方案,如下图(a)所示,其中摄像头1是用于采集车身在道路上位置,其安装于车身后方高度约15cm的位置,安装角度12到15度,安装高度和安装角度共同决定其前瞻大约两倍车身长度,摄像头2采用微广角摄像头,用于采集小车前方行人交通标识等实时路况信息,该摄像头安装于车头,正视小车前方视野。双摄像头方案的视野示意图如图(b)所示,相比单摄像头方案,双摄像头采集到的数据分别可以直接用于道路识别分割和交通标识处理,从而减少了处理器对图片的预处理工作。
【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第4张图片

软件架构

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第5张图片

与硬件系统对应地,软件也分为两部分,其架构图如图所示,主要分为主处理器端和辅处理器端,在主处理器端,采用opencv进行图像采集以及基本处理,采用Tengine实现人工智能训练模型的推理计算。其数据处理及计算的所有结果均写入redis供其他程序(车控算法、数据协议、图像识别等模块)调用。车控驱动是用python编写的一个与STM32单片机串口通信的节点,其通过实时读取redis中来自上层应用程序(车控算法)对小车的控制指令并随即通过串口协议发送给辅处理器端指挥小车做出相应动作。

系统测试

最终小车的设计图和整体图如图所示
【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第6张图片

交通标识道具

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第7张图片

数据集
【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第8张图片

赛道分割巡线
【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第9张图片

交通标识识别
【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第10张图片

未来展望

基于作品中提出的Redis和DSDL实现的机器人框架基础进行进一步的完善和补充,使其成为ROS的一个可替代选择,特别是在低性能处理器上。

总结

经过本次对EAIDK310的探索学习,以实际需求为应用背景,实现了自动驾驶基于双摄像头的自动驾驶Demo。
针对最初的功能需求,分别对巡线,交通标识识别进行了测试。由于巡线采用的是基础的机器视觉算法,对于背景复杂的路况的效果不是很理想,但是对于简单的赛道巡线效果非常好。
交通标识识别采用的是机器学习算法,前期在测试过程中记录了大量的训练数据供其训练,由于训练数据和实际验证场景相同,因此得到了较好的识别效果。
本次项目表明即使RK3228H处理器的性能限制不能跑大型AI模型算法,但得益于基于Redis的数据交互框架和Tengine边缘推理计算框架,使得基础嵌入式设备在AI项目中也可以发挥其作用,是一种低成本的解决方案。

参赛感悟

首先非常感谢安谋中国对我们团队作品的肯定,我们团队作品的获奖情况比较两极分化,在横向评比的上海赛区获得三等奖,在纵向评比的ARM企业命题获得一等奖,不出所料在同样是横向评比的全国赛区还是三等奖,其实不管是三等奖还是一等奖我们团队都是可以接受的。
清晰记得我们去上海赛区参加比赛时我们去看其他参赛团队的作品海报时的震撼,我们的作品时如此的朴实无华,没有看不懂的题目,没有高大上的技术,也更没有雄厚的资金支持,我们当时的小车的摄像头由于经费问题还是用的十年前用来QQ视频聊天的那种摄像头。所以给我们评三等奖我们也觉得我们确实不如其他团队的作品。
但是,企业赛题给我们评为一等奖我们也觉得我们是值得这个分肯定,我们做的虽然没有那么高大上,但所做工作紧靠赛题,没有丝毫偏题,一步步走来,扎扎实实,一步一个脚印,遇到问题逐个克服…

刚刚拿到EAIDK310开发板时陷入了平均一天重装两次系统的困境,要不是因为装软件装的内存不足了,要不是装软件装的系统崩溃了,几乎不能和这块板子好好相处。后来总算学会了使用 rsync 备份系统以后这个情况才得以改善,但只是重装系统变成了恢复系统,至少比之前进步了,但此时离报名截止还有一个月了,然后又陷入了跟OpenCV死磕,跟ROS死磕,跟pygame死磕,跟Tengine死磕,跟rockchip死磕。。。。的困境,这块板子太小众了,好多软件包都得自己编译,而且性能不是很高,在别的平台上跑通的在这里跑的很拉跨,直到最后我们拍板定下来放弃使用ROS放弃使用那么多依赖,一切自己重头来并使用一块STM32辅助处理器我们的工作才步入正轨,但话又说回来站在巨人的肩膀上不是更好吗,这时我们剑走偏锋瞄准了在互联网领域如数家珍的Redis(做嵌入式的同学可能对这个不是很了解),Redis和DSDL结合不就是一个轻量级的ROS框架嘛,说干就干,看是研究Redis的源码,研究DSDL的源码,总算在报名截止前一周我们实现了基础的框架模型,小车可以动起来了,各个节点之间通讯打通了,这个时候我们才确定报名ARM赛题,给队伍起了EAIDK666队的队名,申请了开发板(之前那块自掏腰包买的)图像识别我们认真学习了公开课的视频,对数据集进行了扩充并重新训练模型部署,此时马上就要报名截止了,我们PPT还没有做,视频还没有录。。。。一直在和时间赛跑

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第11张图片

就这样我们扎扎实实一步一步走来一等奖是对我们极大的肯定和鼓励!

一定是对安谋中国的感激让我坚持到现在把这个分享写完,截止今天(2021年8月27日)我刚刚参加完暑假的最后一个比赛的决赛(集创赛),我的暑假几乎是在竞赛中度过的,这个比赛结果我已经没有任何期待了,因为此时此刻我只想好好休息,我真的太累了,感谢安谋中国对我们作品的肯定。最后还是感谢安谋中国感谢我的导师!
由于作品中有些内容正后续要写论文投稿所以写的不是很详细,等论文投出去一定和大家分享,还有Redis和DSDL造出来的框架若各种条件都允许我们会将源码公开出来抛砖引玉。

后记

若干废话

  • 创新点中不排除战略吹牛的措辞,同学不喜勿喷请回避,比如说第三点使用了Tengine在这个赛题里根本不算创新点,因为但凡玩310的都知道这个框架,但是放在横向评比的全国赛区,这个是可以算作创新点的。
  • 和Tengine嗑了那么久还是没有搞定2.0,到组后用的是1.12.
  • 评奖两极分化是因为企业专家和校内专家所看待事物的角度不同,可能企业专家更加看重解决实际工程问题的能力,从答辩的时候提的问题也可以感觉出来。
  • 为什么要花精力要搞框架?一个好的框架给我们队友之间协作编程带了个极大的便利,正是有了这个框架,C、C++、python就像ROS一样可以混着使用,在EAIDK310上驱动小车的节点使用python写的
  • 这个是参加上海赛区我们小车的模样,由于经费有限两个摄像头是翻箱倒柜考古出土的。

【2021研电赛】基于EAIDK310的视觉导航自动驾驶小车_第12张图片

作品内容来源于EAIDK666队,非开源,转载请标明出处。
更多研电赛作品请查看2021年研电赛获奖作品合集

你可能感兴趣的:(IC技术竞赛作品分享,自动驾驶,人工智能,机器学习)