【大一做毕设?十二天四人从零开始手搓智能小车!(基于rdk x5、stm32与yolo v5,小车可实现巡线,避障,识别与夹取特定物块)】

前言:滑跪致歉标题,这玩意做毕设还是很不足的。。。由于我们四个人也只是大一新生,算法的实现、机械结构等等还是有很多不足,欢迎大家友好交流,持续优化小车性能。

小车的主要实现逻辑是以rdk x5作为上位机,负责视觉处理与决策;stm32作为下位机,负责运动控制。小车采用双轮驱动+后置一个万向轮。具体所需要的物资会放在文末!需要压缩包的可以点进我的主页,在资源那一栏找,没办法直接上传到文中。

先放一张小车美照!

Part 1:机械部分

(机械部分特别鸣谢袁婧柔同学,等她写完blog后本文将更新她的链接,下面展示她的部分设计思路,全文可以见压缩包里的小车说明书)

1.小车第一层:

小车最前方预留摄像机孔位,略微超出小车底版便于对摄像头进行调整;前方的矩形镂空用于电机走线;中间留有TB6612驱动板的散热孔,由于是组内自主进行设计打板,我们选择将开关焊接在板背面从矩形口伸出,便于直接从底侧开启小车;同时设计有支架架于驱动板上方用于固定STM32单片机,同时隔开电线与PCB板;后座设计有电池封装壳;两侧留有支柱孔位以及外壳安装孔位。

2.小车第二层

前端为机械臂底座预留孔位;中部为降压板安装底座,下方留有走 线孔,便于一层的线与二层相接;后方为RDK X5的安装底座,中间 设计有镂空便于散热,后方留有孔位便于插口连接(两个安装底座 均高于小车平面,一是便于进行散热的同时不会导致小车因镂空太 多而降低牢固度,二是可以将走线藏于底座下使其更加美观。且两个底座均在前后方带有隔板,用于避免RDK X5与金属接触);底座侧方设计有立体走线孔用于固定RDK X5和降压板的连接线;两侧还留有两个孔位,右侧用于安装固定小车顶盖,左侧用于安装固定装电线的篮筐。

Part 2:电控部分

控制部分我们分配给了我们组的组长------黎工(黎子希)负责。由于不是我负责的,对这个部分不是很了解,等黎工的文章发出来后将在这里同步更新他的链接!电控部分的代码压缩包里有,想直接用的话看压缩包就可以辽。

Part 3:视觉部分

终于到瓦负责的部分了!由于我们最终是利用RDK X5进行视觉处理和决策,所以我们RDK X5与yolov5模型的训练需要一手抓。视觉部分算是挺煎熬的,最主要的原因是如果之前从来没有接触过虚拟机或者接触过但是配置的环境与rdk x5要求的不一样,都很麻烦(对于我这种小白来说真的是这样。)

rdk x5

由于官方给的教程一般都对新手不是很友好,我直接在csdn上找了一些教程

这里提供一些我认为不错的参考文章:

1.万字长文,学弟一看就会的RDKX5模型转化及部署,你确定不学?(这篇文章算是很不戳的rdk x5入门文章了,唯一一个我觉得有点不足的点是像瓦这样的纯纯的正统新手,会因为有的时候需要在anaconda上操作而有的时候又要在ubuntu上面操作,但原文里面没有写清楚他这一步又要在哪里进行而十分疑惑。这个时候,瓦们就需要去------------问ai)

2.(非官方)RDK模型转化可视化工具!它来了!!!(和第一篇文章是同个作者,Sky大佬太强了!)

部署部分的逻辑,总的来说就是:

配置环境------把.pt模型转化成.onnx------再将.onnx转化为.bin------将.bin移植到rdk x5上,就可以在rdk x5上使用我们训练好的模型了!

按照上面的教程简单熟悉了rdk x5后,把yolov5模型部署到rdk x5上基本没有问题了

当然,压缩包中有我们直接转化好的.onnx与.bin文件。但是因为我们一开始的模型主要就是针对我们的环境光线以及摄像头高度角度等等来训练的,所以泛用性不是很强,强烈建议大家自行训练转化。

(等待~我随时随地在等待 下载环境真的好久。)

yolov5

yolov5部分,我们主要是类比迁移了b站up主林亿饼的YOLO系列视频。虽然视频里面的内容主要是讲yolov11的,但是大体逻辑上都差不多。在训练时用yolov5训,打标签那些yolov5与yolov11都差不多,视频里面的内容可以直接迁移。

压缩包里有我们训练好的.pt文件,但它的精度会受拍摄角度以及光线等等的影响,我们所提供的只是基于我们的摄像头配置、摄像头在小车上的高度、角度和我们的光线条件下所能训练出的一个精度比较高的模型(各个物块以及障碍物的检测精确度一般可以达到0.9以上)。所以要是自己想弄的话,还是极其建议大家自己训练一个模型,并且注意镜头畸变等带来的影响。

(这张是摄像头过曝情况下测试的,识别精度依旧能达到0.94)

Part 4:算法部分

算法部分,我们主要是将自己的思路告诉ai,让ai来写代码给我们。这个思路不只是告诉ai,我要实现什么样的功能,而是一个比较具体的可以用算法实现的思路。比如说,我要让小车达到某个距离时开始触发避障,而且这个距离既不会让小车车尾撞到障碍物,同时尽可能的减小避障消耗的距离。对此,我们告诉ai的是,采用三角形避障,利用坐标轴作为一个工具,在代码里面设置一个变量为y轴高度,这个y轴高度在画面中以y=(某个数)这条线显示出来,只要障碍物的下底边碰到这条线,就触发避障动作。对于这个y轴坐标的具体值,我们用了这样的提示词去让AI写代码来测:帮我生成一个显示摄像头界面的程序,里面要有一个滑块,可以控制屏幕中间y轴线的高度,在屏幕左上角显示此时的高度。这样一套下来,AI写出来的东西比较有保障,而且你比较能看的懂。

我们的代码跑出来后基本都直接部署到了rdk x5上,但我们有留存完整的代码!如果泥发现把代码直接部署到你的rdk x5上时有问题,你可以用ai自查一下是什么原因,因为可能我们部署的环境还有一些部署到板子上的工具有点不一样。

下面给大家介绍一下代码(详细可见压缩包中"完整版代码.txt"):

1.变量名称(都标有注释,依旧注释来看即可)

2.ROI参数(设计这个参数的初衷是因为我们用二值化来处理巡线,为了不让车乱跑,我们限制了巡线处理的区域)

3.YOLO检测区域(这个是我们发现摄像头拍摄氛围有点大,会出现同时检测到放在远处的障碍物,所以我们也限制了YOLO的检测区域)

4.三角形避障代码

主要逻辑:识别到障碍物(依据前文提到的y轴坐标,当障碍物达到所设定的y轴坐标时,即为识别到障碍物),触发避障动作。

5.夹取物块代码

夹取部分,我们需要让小车在第一次经过红线时(也就是我们设置的夹取物块的地方),将物块夹起来;第二次经过红线时,将物块放下(第二次经过红线时,我们设置的是让车左转一定角度,然后松开夹爪)。

夹取的主要逻辑(也就是我们告诉AI的大致的实现思路):识别到红线后停下(代码内有识别到红线后多久停下的时间,可以自行修改),然后开始向左转(因为我们的方块放在侧边),识别到选定颜色的方块后,停下,开始调整,使小车正对方块,再移动到合适的距离(和避障时一样,利用坐标轴),停止移动,开始夹取。

6.YOLO检测处理代码(我们的摄像头是1280x720p的,但是训练模型时用的格式是640x640,所以增加了这样一个代码来处理画面)

7.十字路口检测代码

逻辑:当识别到水平横线时,小车保持直行。

代码介绍的差不多了!大家想详细了解的话可以看看压缩包里的代码!

后记

感谢深圳大学AL&开放原子俱乐部举办的冬令营,让我有机会做一个小项目,去好好体会我们怎样让我们的想法落地,将一辆小车创造出来;也让我体会了要做成一个项目的大致流程。

还要特别感谢我的组员们!参加冬令营,不仅让我收获了技能,更是收获了一段珍贵的回忆和友谊!

当然,因为任务时间是12天,所以小车的很多地方还有待优化。比如小车的夹取代码,在我们现有的算法下,小车夹取时的决策时间很长;而且夹取精度虽然够用,但是应该还是能进一步提升的。我们的板子已经还回去了,但后续做这个项目的大家可以继续往这个方向去优化,期待大家的友好交流!

所需要准备的物资(有链接的都不是打广,只是为了指明用的什么型号等):

1.编码器电机:MG310电机

2.电机驱动板:TB6612

3.舵机:20kg舵机

4.CY-15A(尼龙主球)牛眼万向轮,固定使用M3尺寸螺丝

5.RDK X5 8g版本,附带64g内存卡

6.摄像头链接:【淘宝】7天无理由退货 https://e.tb.cn/h.74Tborq8FH8Ejpp?tk=mgOwfxmB9Is MF278 「1080p高清usb免驱安卓工业相机500万电脑广角无畸变摄像头模组otg」

7.电池:2550mAh电池

8.降压板:P05C降压板

9.地图链接:【淘宝】https://e.tb.cn/h.7l7YN0TtHHmgKi7?tk=pxE8UePzLIM MF168 「智能小车机器人巡线循搬运比赛竞寻迹赛道刀刮布地图亚光喷绘场地」

10.积木块:3.5cm3.5cm 3.5cm海绵块

链接:【淘宝】7天无理由退货 https://e.tb.cn/h.7kScJhQ17LvK2xj?tk=aIRMUWABiUo HU293 「EVA方块海绵泡沫积木块学生机器人比赛道具红绿蓝4/5/10cm正方体」

11.障碍物链接:【京东】https://3.cn/-2BwDIuO?jkl=@Y4bSv1za3az@ MU5104 「乃力足球标志桶障碍物标志杆碟盘雪糕桶锥筒篮球训练辅助器材标志杆 8cm轮滑桩 5色各2个 10只」

后编:生气生气,不到三级不能自定义标签!

相关推荐
想放学的刺客1 小时前
整理了120道单片机嵌入式面试题与答案,覆盖了硬件电路和C语言等核心领域。
c语言·c++·stm32·单片机·嵌入式硬件·mcu·51单片机
回不去的bug1 小时前
【STM32】玩转IIC之驱动MPU6050及姿态解算
stm32·单片机·嵌入式硬件·mpu6050
weixin_1122331 小时前
基于单片机的塑料厂房气体检测系统设计
单片机·嵌入式硬件
挂科边缘3 小时前
YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程
人工智能·深度学习·yolo·目标检测·计算机视觉·yolov12
阿ฅ( ̳• ε • ̳)ฅ5 小时前
esp32C3核心版下载AT固件,等待上电问题
单片机·嵌入式硬件
lanbo_ai7 小时前
基于yolov10的火焰、火灾检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
pytorch·python·yolo
Y1rong10 小时前
STM32之CAN
stm32
czhaii11 小时前
TCRT5000漫反射STC15F204EA AD转换
嵌入式硬件·硬件工程
恶魔泡泡糖11 小时前
51单片机-DS18B20温度传感器
单片机·嵌入式硬件·51单片机