【玄铁杯第三届RISC-V应用创新大赛】基于LicheePi 4A的智能网联汽车控制器
[复制链接]
本帖最后由 DDZZ669 于 2023-12-6 00:24 编辑
基于LicheePi 4A的智能网联汽车控制器
作者:码农爱学习
- 项目背景
近年来,随着人工智能、芯片技术、通信网络等的不断发展,安全辅助驾驶、自动驾驶也在一步步走进我们的生活,如何借助科技的进步,来提高驾驶的安全性与舒适体验性,是我们追求的目标。RISC-V作为比肩ARM的架构,近年来在不断发展,探索使用RISC-V架构的SoC作为智能汽车的控制器,提高驾驶的安全与舒适性,是一个值得研究的方向。
- 作品简介
本项目“基于LicheePi 4A的智能网联汽车控制器”,主要尝试实现两方面内容:
一是实现驾驶的舒适性,包括提供车载娱乐(车载音乐播放、视频播放),提高车内乐趣;提供天气查询服务,提前了解行程规划中天气信息;提供地图导航;提供车内温湿度监控与空调控制,使车内环境保持舒适;提供智能语音助手,解放双手,实现语音控制等功能,另外,控制器还可兼具行车记录仪功能。
二是实现驾驶的安全性,借助视觉与AI算法,发挥LicheePi 4A的算力,实现如车道线检测,实时监测汽车是否偏离车道;交通标志与路牌检测,辅助提醒道路信息;行人与车辆检测,对可能出现的突发情况进行预警与安全干预。此外,当多个车辆都安装了智能控制器,通过车联网,进行车辆行驶状况等信息实时共享与安全干预,可极大避免如连环追尾等事故的发生;对于路况的共享,可提前预警需谨慎驾驶的路段以及规划最优路线等。
基于上述设想,在过去这些天对LicheePi 4A的学习与开发,已实现了设想中的部分功能,最终的作品实物图如下:
图 1 作品照片
目前主要实现的功能包括:
- 音乐播放器功能
- 视频播放器功能
- 时间展示功能
- 天气服务功能
- 车内温湿度显示功能
- 车前路径显示功能
- 地图服务功能
- 车辆信息展示功能
此外,对于行人和车辆的AI识别,已经车道线检测,进行了单独的功能测试,后期有时间再集成到整个项目中。
- 系统框图
本项目的整体硬件结构如下:主体为LicheePi4A主控制器,外接摄像头获取图像,外接音箱播放声音,外接屏幕(项目中时间使用的远程登录虚拟屏幕)实现与人交互,与ESP8266节点进行TCP通信,获取温湿度传感器的数据。
图 2 项目硬件结构
对于功能的展示,使用python中的Qt功能设计界面,主要代码也是通过python实现。为了便于展示各个功能的使用,设计一个汽车中控屏的主界面,主界面上有各个子功能的图标按钮,按下对应的图标,即可进入到对应的子功能界面中。在每个子界面的右上角,通过返回按钮或返回图标,可以再回到主界面,如下图所示。
图 3 Qt界面主体框架
主框架的细节可参考之前的测评笔记:LicheePi 4A pyQt简易汽车中控UI框架
- 各部分功能说明
4.1音乐播放器功能
音乐播放器功能,可以提供车内的娱乐功能。
界面主要包括三部分:
- 音乐文件列表
- 播放进度条
- 播放操作按钮
设计的界面如下,初始会读取默认位置的音乐文件,展示音乐列表,还可通过右下角文件夹选择按钮,指定音乐文件夹。播放功能方向,可以进行基础的音乐播放功能,如开始、暂停、继续,上一曲、下一曲等。
音乐文件,支持中文文件名的展示。后期还可继续完善,增加如歌词展示,播放顺序选择,音乐收藏,网络音乐的获取与播放等。
图 4 音乐播放器界面
软件实现方面,使用Qt自带的媒体播放器QMediaPlayer进行音乐播放。QMediaPlayer的主要使用方法:
- player = QMediaPlayer() 创建一个播放器
- player.setMedia(QMediaContent(media_file)) 设置要播放的音乐
- player.play() 开始播放
- player.pause() 暂停播放
4.2视频播放器功能
视频播放器功能,一是可以提供车内的娱乐功能,二是可以作为播放器,播放如行车记录仪中的录制的视频。
视频播放器的界面设计与软件实现,与音乐播放器基本类似,也是使用QMediaPlayer进行媒体播放。
图 5 视频播放器界面
在板子中实际播放时,会有卡顿的现象,具体原因还不清楚。
4.3时间展示功能
时间展示功能,可以为提供车内人员时间信息。
为了更全面的呈现时间,设计了圆盘钟表形式的时钟,和现代电子表形式的时间展示两种形式。
圆形表盘的设计,通过Qt中的QPainter依次绘制圆形表盘,短直线的刻度,三角形的表针实现。获取LicheePi 4A已联网的系统的时间,再结合QTime的定时器功能,每秒更新一下时间的显示。
电子表的设计,通过QtWidgets中的QLCDNumber组件实现,通过设置显示格式,设置为时分秒的展示形式。获取与更新时间的机制与圆形表盘类似。
图 6 时间展示界面
4.4天气服务功能
天气服务功能,可以为驾驶员提供当地的天气信息,以及目的地的天气信息,为行车环境提供天气服务信息。
天气界面,通过Qt Creadtor进行图形化的界面设置:左边是今天的天气,右边是后3天的天气,天气类型通过对应的天气图标展示。
通过地址下拉选择框,可以选择展示不同城市的天气信息。
图 7 天气服务界面设计
天气的具体数据,是联网获取的,可以使用python中的requests模块,获取网络天气服务,通过指定地区码,可获取指定城市的天气,比如101210101就是杭州的地区码。获取到的数据为json格式,可解析获取需要的字段。
图 8 联网获取天气的代码
图 9 天气数据
图 10 不同城市天气展示
4.5车内温湿度显示功能
车内温湿度显示功能,提供车内实时的温湿度信息。
通过ESP8266无线节点,将DHT11温湿度传感器的数据,通过TCP socket的方式,发送给LicheePi 4A板子进行数据展示。
ESP8266部分,采用Arduino IDE编程,实现DHT11温湿度数的获取和数据发送。
后期还可继续完善,增加如根据温湿度,自动调节车内空调系统等。
图 11 车内温湿度界面
4.6车前路况显示功能
车前路况显示功能,主要是通过摄像头,实时展示车前的路况,类似于行车记记录仪。此外,后期如果增加了AI识别功能,可为AI识别提供实时的视频图像。
目前摄像头使用OpenCV接口获取USB摄像头图像,并结合Qt界面展示出来。
图 12 车前路况显示界面
4.7地图服务功能
地图服务功能,可以为驾驶员提供位置信息,以及行程的导航信息。
地图的展示,使用的是python中的地理可视化工具包folium,使用folium.folium.Map可以实现地图创建,使用folium.Circle或folium.CircleMarker可以进行地图标记,另外还有其它接口可实现路径规划等。
Qt中的WebEngine模块提供了一个Web浏览器引擎,可以将地图嵌入在Qt界面中展示,支持地图的放大缩小等基础显示功能。
在LicheePi 4A上测试运行时,可能是RISC-V的python包还未支持,未能在板子中成功安装Qt WebEngine,目前只是显示了一张地图的图片:
图 13 地图服务界面
4.8车辆信息展示功能
车辆信息展示功能,可以为驾驶员提供当前车辆的各种信息,如车速、例程、电量、胎压、各种传感器的状态等等。
由于时间有限,目前只开发了汽车仪表盘的展示,可模拟展示汽车时速。
汽车仪表盘的设计,与时钟功能的设计类似,也是使用Qt中的QPainter依次绘制圆形表盘,短直线的刻度,四边形的表针实现。
图 14 车辆信息展示界面
4.9车辆与行人检测
车辆与行人检测,可以为汽车安全辅助驾驶提供保障,及时发现潜在危险。
目前的检测,使用的是例程中的YOLOX目标检测,在此例程中,学习到了AI模型的相关知识,以及HHB-onnxuruntime环境的基础使用。
实测测试的一张汽车与行人图片的AI识别结果如下,可以准确的识别:
图 15 车辆与行人检测
后续还测试了Yolov5n与MobilenertV2等框架的AI识别。
关于AI物品检测的相关实践,可参考之前的试用报告:
4.10车道线检测
车道线检测,可以在驾驶过程中,为汽车偏离车道提供实时的安全纠正信息,提高驾驶的安全性。
目前使用python和OpenCV编程,通过二值化处理、图像阈值调整、Sobel特征提取等,提取车道线特征,检测到当前行车的车道线。特征提取示意如下:
图 16 车道线特征提取
在LicheePi 4A板子中,使用测试用的路况视频,来检测视频中的车道信息,并将检测到的当前车道通过绿色掩膜画出。实测效果如下:
图 17 车道线视频检测测试效果
- 视频演示
简介
基于LicheePi 4A的智能网联汽车控制器,视频内容包括:
- 作品硬件实物简介
- 作品软件环境简介
- 各项子功能的演示,包括:
- 音乐播放器功能:展示音乐播放,下一曲切换等
- 视频播放器功能:展示视频播放(还有点问题)
- 时间展示功能:圆盘时钟和电子表形式的时间展示
- 天气服务功能:不同城市的今天及近三天的天气信息展示
- 车内温湿度显示功能:与ESP8266无线节点连接,获取温湿度数据展示
- 车前路径显示功能:USB摄像头显示实时画面
- 地图服务功能:展示地图信息(暂无法在板子中运行)
- 车辆信息展示功能:显示汽车仪表盘等信息
- 行人车辆检测:AI识别行人和车辆
- 车道线检测:检测当前的车道线
视频链接
图 18 演示视频封面图 基于LicheePi 4A的智能网联汽车控制器-演示_x264
- 项目源码
本项目源码分享至gitee代码仓库:
图 19 源码结构
其中主体代码在1_pyQt文件目录中,包括pyQt设计的中控屏主界面和各个子功能模块的源码:
图 20 主体代码
- 发布的博文
试用期间分享了12篇笔记,平头哥论坛发布链接:
1.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A 开箱测评与上电运行
2.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A 烧录最新系统与VNC登录
3.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A 编程环境与系统扩容测试
4.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A pyQt音乐播放器与中文名问题解决
5.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A pyQt视频播放器与遇到问题
6.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A YOLOX初体验与USB摄像头测试
7.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A Yolov5n的HHB编译问题记录
8.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A Yolov5n编译问题解决与demo测试
9.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A HHB工具使用基础与MobilenertV2测试
10.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A pyQt地图服务与遇到问题
11.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A pyQt简易汽车中控UI框架
12.【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A pyQt天气服务与车内温湿度
- 项目总结
本项目基于LicheePi 4A开发板,设计了一款智能网联汽车控制器,意在提高驾驶的舒适性和安全性,通过汽车中控屏的形式展示实现的功能。在驾驶舒适性方面,实现了基础的车载娱乐(音乐播放器、视频播放器)、网络信息服务(网络时间、网络天气、地图服务)、车辆信息(车内温湿度、车前影像、当前车速)等功能;在驾驶安全行方面,探索实践了使用AI框架进行行人和车辆的检测,通过图像特征检测车道线功能。后期可再继续完善优化,结合识别到的信息,进行安全辅助驾驶。
从拿到开发板,逐步熟悉系统的烧录与基础功能使用,到搭建开发环境,参考官方文档熟悉RISC-V架构的Linux系统的应用开发,对RISC-V架构的嵌入式开发板有了更深刻的感受,并初次接触了平头哥的HHB开发工具,熟悉了基础使用方法,并对应学习了Yolov5n模型与MobilenertV2模型在LicheePi 4A板子中的运行。
在学习探索的过程中,不断分享记录在开发中实际遇到的问题就解决记录,并学习其他网友的分享笔记,最终将实践过的各个子功能模块整合为目前的智能网联汽车控制器综合项目,并分享源代码供大家交流学习。
八、其他
|