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

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

团队价绍

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

作品背景

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

技术难点与创新点

技术难点

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

创新点

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

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

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

实用价值

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

系统设计

系统架构图

在这里插入图片描述

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

硬件架构图

在这里插入图片描述

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

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

软件架构

在这里插入图片描述

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

系统测试

最终小车的设计图和整体图如图所示
在这里插入图片描述

交通标识道具

在这里插入图片描述

数据集
在这里插入图片描述

赛道分割巡线
在这里插入图片描述

交通标识识别
在这里插入图片描述

未来展望

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

后记

若干废话

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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS防抖与节流

防抖 防抖是什么? 单位时间内,频繁触发事件,只执行最后一次 通俗易懂点就是把防抖想象成MOBA游戏的回城,在回城过程中被打断就要重来 例子:我们来做一个效果,我们鼠标在盒子上移动,数字就变化 …

Python爬虫:使用Scrapy框架进行高效爬取

Python爬虫可使用的架构有很多,对于我而言,经常使用Scrapy异步处理框架Twisted,其实意思很明确,Scrapy可以实现多并发处理任务,同一时间将可以处理多个请求并且大大提高工作效率。 Scrapy是一个强大且高效的Python爬虫…

鸿蒙Watch 页面跳转

新建页面 config.json 回自动注册 添加跳转 <button type"capsule" onclick"toStatusMonitor">状态检测</button>写跳转方法 import router from system.router;export default {data: {},onInit() {},onShow() {},toStatusMonitor() {rou…

深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)

无论是在机器学习还是深度学习中&#xff0c;Python已经成为主导性的编程语言。而且&#xff0c;现在许多主流的深度学习框架&#xff0c;例如PyTorch、TensorFlow也都是基于Python。本课程主要是围绕“理论实战”同时进行&#xff0c;所以本章将重点介绍深度学习中Python的必备…

pandas、numpy的几个示例

这里写自定义目录标题 Pandas 示例NumPy 示例数据分析案例: Iris 数据集 Pandas 示例 Pandas 是一个数据处理和分析的库&#xff0c;它提供了 DataFrame 和 Series 这两种主要数据结构。 # 从字典创建 DataFrame import pandas as pd# 创建一个字典 data {Name: [Alice, Bob…

C++学习之路(十七)C++ 用Qt5实现一个工具箱(增加托盘图标并且增加显示和退出菜单)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《为屏幕颜色提取功能增加一个点击复制的功能》功能。今天我们增加一个比较正式点的功能&#xff0c;就是增加托盘图标并且增加显示和退出菜单&#xff08;越来越像回事了吧 &#x1f601; &#xff09;。下面我们就来…

【CMD】关于在for中SET变量失效的问题

如题&#xff0c;在for中进行一些细化操作时发现SET变量一直不成功(尤其在读取文件时)   简单搜了下看到有个帖子(BAT求助与讨论-SET变量失效)是讨论这个问题的&#xff0c;然后有个老哥给出的解答&#xff0c;其中使用了使用CALL&#xff0c;这让我想起几天前看到的一个博客…

Linux4.7、环境变量

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 基本概念 见见环境变量 指令原理 常见环境变量及其测试 环境变量相关指令 环境变量组织方式 通过代码获取环境变量 通过系统变量获取环境变量以及设置环境变量 环境变量的全局属性 基本概念 首先&#xff0c;…

什么?居然可以免费使用Jetbrains?!

JetBrains是一家捷克的软件开发公司&#xff0c;该公司位于捷克的布拉格&#xff0c;并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室&#xff0c;该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境&#xff1a;IntelliJ IDEA。 如下是jetbrains旗下的产…

【笔记】Clion 中运行 C/C++11 之 CMakeLists.txt 的配置

该文章记录第一次使用 Clion 时&#xff0c;对 CMakeLists 的配置&#xff0c;使其能够运行 C/C11 的代码。 一. CMakeLists.txt 的配置 1、首先我们在需要新建一个项目 2、填写新建项目相关的信息 3、修改 CMakeLists.txt 文件内容 替换文本&#xff1a; # 使用此 CMakeLis…

帆软报表不能增加SAP连接方式 通过插件一致性检测 同步至本地解决

帆软报表开发人员需要增加一个SAP数据连接方式&#xff1a;SAP_ECC_600环境 在服务器端不能直接增加&#xff0c;而在帆软报表设计器切换到远程模式时&#xff0c;又不能显示SAP连接&#xff0c;导致不能增加。 解决&#xff1a;重新进入帆软报表报计器时报以下错误&#xff0c…

开源运维监控系统-Nightingale(夜莺)应用实践(未完)

一、前言 某业务系统因OS改造,原先的Zabbix监控系统推倒后未重建,本来计划用外部企业内其他监控系统接入,后又通知需要自建才能对接,考虑之前zabbix的一些不便,本次计划采用一个类Prometheus的监控系统,镜调研后发现Nightingale兼容Prometheus,又有一些其他功能增强,又…

从马帮到金蝶云星空通过接口配置打通数据

从马帮到金蝶云星空通过接口配置打通数据 接入系统&#xff1a;马帮 上海马帮科技有限公司&#xff0c;是一家专注于提供全流程跨境电商ERP管理软件解决方案的企业。聚焦服务于各阶段、各领域的跨境电商从业者&#xff0c;旗下包含专业版ERP、亚马逊专用版ERP、东南亚海外版ERP…

JavaScript空值合并运算符

The Nullish Coalescing Operator&#xff08;空值合并运算符&#xff09;是一种 JavaScript 的新运算符&#xff0c;用于解决默认值设定中存在的一些问题。它的语法为 ??&#xff08;两个问号&#xff09;&#xff0c;表示当左侧的操作数为 null 或 undefined 时&#xff0c…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建 持续更新中… java+vue+微信小程序项目】从零开始搭建——健身房管理平台 项目简介Java项目搭建(IDEA)1.新建项目2.项目类型3.项目设置4…

mysql基础语句

【select查询】 1、Select * from 表名; 查询 例&#xff1a; Where 限定的条件查询 AND 连接两个或者多个查询条件 OR 连接两个或者多个查询条件&#xff0c;满足其中一个就可以查询出 2、Select * from 表名 where 字段 某某条件&#xff1b; 例&#xff1a; 3、Selec…

EasyRecovery易恢复2024最新免费版电脑数据恢复软件功能介绍

EasyRecovery从&#xff08;易恢复2024&#xff09;支持恢复不同存储介质数据&#xff0c;在Windows中恢复受损和删除文件,以及能检索数据格式化或损坏卷&#xff0c;甚至还可以从初始化磁盘。同时&#xff0c;你只需要最简单的操作就可以恢复数据文件&#xff0c;如&#xff1…

kubeadm 安装k8s1.28.x 底层走containerd 容器

1. k8s1.28.x 的概述 1.1 k8s 1.28.x 更新 Kubernetes v1.28 是 2023 年的第二个大版本更新&#xff0c;包含了 46 项主要的更新。 而今年发布的第一个版本 v1.27 有近 60 项&#xff0c;所以可以看出来&#xff0c;在发布节奏调整后&#xff0c; 每个 Kubernetes 版本中都会包…

DeepSort知识整理:余弦距离和马氏距离 (一)

一、余弦距离 1.1 余弦相似度 余弦相似度是用来衡量两个非零向量之间的夹角的余弦值。对于两个向量 A A A 和 B B B&#xff0c;余弦相似度的计算公式为&#xff1a; C o s i n e S i m i l a r i t y ( A , B ) A ⋅ B ∥ A ∥ ∥ B ∥ {\rm{Cosine Similarity }}\left( …

maven篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、什么是Maven的坐标?二、讲一下maven的生命周期三、说说你熟悉哪些maven命令?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的…