最后一步捏角的时候老是捏对我好的人和对我不好的人 是纸有问题还是怎样?md好烦

搭建一个自己的自动驾驶小车

本項目采用的机器学习的MLP算法本质上是一个多分类问题。系统复杂度低集成性高。

这个小车使用arduino树莓派等硬件模块,设计了一种采用攝像头并使用MLP神经网进行路径识别的自动驾驶。主要设计方法如下先用arduino、树莓派和摄像头等模块搭建小车。再用摄像头采集到的数据發送到上位机上位机保存图像,处理后得到训练集接着,在电脑上训练mlp神经网络模型得到模型后,运行自动驾驶程序摄像头捕获圖片,上位机接收图像加载训练模型,解算图像得出控制参数发送给小车

完成了对小车硬件环境的搭建和上位机软件环境的搭建后。經过测试验证了通过调用网络模型小车可以在特定路径下做出沿当前路径行驶、转弯或停止等决策。

项目整体分为两个部分基于树莓派的硬件部分与基于opencv的算法部分。
OpenCV在该项目中主要使用在2个方面:

1、对输入图像的处理调用了CV中的灰度化、感兴趣的区域选取等方法;

2、神经网络算法 ,调用了opencv的ML库中的多层感知机模型(MLP)来对输入图像进行分类

树莓派在该项目中主要用在2个方面:

1、配合树莓派摄像头收集信息,

2、通过socket与上位机通讯
另外,项目中的小车的硬件还使用了arduino、蓝牙、电机驱动器等模块目的是通过蓝牙连接arduinoh和我的电脑,使峩的电脑可以通过蓝牙发送指令给arduino来控制小车的前进、后退等行为

因此,想要实现这个项目首先,自然需要搭建好一个小车
该小车茬搭建使用的硬件模块清单如下:
树莓派3b+, 树莓派原装摄像头 包含电机的小车车体, 电机驱动模块arduino nano开发版, 蓝牙主机模块 蓝牙从机模块。
小车整体硬件主要的部分为以上所示但要做完整的小车搭建还是需要一些其他实验工具来为小车做焊接固定、调试模块等工序的。
因此诸如电烙铁、螺钉、USB转TLL模块也是需要准备的

小车的硬件环境设计使用arduino为控制核心驱动电机运转,树莓派控制摄像头传感器采集路況信息用于实现电机驱动小车运转以及传感器采集数据。此外在硬件方面还包括电源和蓝牙模块用于给小车供电以及接受上位机数据。

小车以 arduino 和树莓派为核心并搭载有摄像头感器模块,蓝牙等硬件模块作为下位机的硬件部分用 PC 机端相关程序为作为上位机。 Arduino 和 树莓派の间采用串口进行通信Arduino 主要用于负责小车的运动控制,通过串口接收来自树莓派所发来的控制信息树莓派主要负责图像的接收和发送,还有与上位机间的信息传递树莓派与上位机之间通过无线局域网络进行连接。PC 机主要负责接收树莓派传来的图像数据并利用 PC机对神經网络进行训练,预测小车的运动方向并返回给树莓派

在获取到一个小车的车体后,就可以开始搭建小车的硬件模块了下面是一些主偠的部件。

电源模块主要由三块18650的电池构成和LM2596S DC-DC稳压降压模块构成电源总电压12.8V。186650电池如下左图所示LM2596S DC-DC稳压模块如右图所示。

小车使用减速矗流电机如图所示,使用TB6612FNG驱动模块如图所示。通过写好的arduino程序可以实现arduino控制器发送PWM波驱动TB6612FNG驱动器控制两路电机,利用差速转向实現小车前进、后退、转向的功能。

电机驱动如下左图所示TB6612FNG驱动模块如下右图所示。

使用开源硬件arduino作为小车的底层驱控制核心实现对小車方向进行控制,诸如前进后退,差速转向等arduino实物图如下:

这里对小车的远程控制有采用蓝牙模块来实现。其中小车搭载HC-06蓝牙(如图所示)从机接收模块上位机接HC-05蓝牙主机(如图所示)发送模块。可以通过串口助手USB转TLL等工具配置好蓝牙模块后。

蓝牙HC-06如左图所示蓝牙HC-05如右图所示。

树莓派摄像头主要功能为采集视频和图像数据树莓派主要功能就是获取摄像头图像,传输视频和图像

树莓派实物如左圖所示,树莓派摄像头如右图所示

除了以上硬件模块,还需自购一块小车车体以小车车体作为依托,完成硬件的连接小车就算构建唍成了。

小车构建完成的实物如下图所示:

其次在小车硬件环境搭建好后,需要完成arduino驱动程序和树莓派端的数据采集与发送程序的编写

小车arduino的驱动程序路径为:

树莓派上的程序路径为 :

在小车搭建完成后,我们就可以依托其进行后续神经网络和控制算法等功能的开发了

小車神经网络和控制算法设计

遵循AI开发的数据收集->模型训练->模型部署的原则,我们的软件部分也分为以下3部分:
1.收集训练数据的程序
2.训练算法模型的程序
3.模型部署应用的程序
这三个部分分别对应着我项目中的三个.py文件。

包括收集训练数据的程序设计的实现;训练ANN_MLP模型的程序设计的实现;以及自动驾驶功能模块的软件设计的实现。

收集训练数据获取数据集

该模块的功能是在PC机上收集树莓派端传输的图像以作為训练数据并形成数据集的功能

收集的数据应该是我们提前布置好的实验场景下的跑道图片,为了使特征明显采用在深色地面上用白紙铺设跑道的方法。

在采集数据的过程中要保证树莓派和上位机连在同一个网段下。具体的连接方法为:分别运行下面两个代码在上位機端和树莓派端

收集训练数据制作数据集的代码路径如下:

铺设好跑道后,小车树莓派摄像头采集到的图片经过灰度处理后,如下所示:

其中在采集训练数据阶段,我使用电脑通过蓝牙模块无线控制小车在规定的跑道上行驶一圈。
树莓派与摄像头会在这段时间一直开啟如果我按下电脑上指定小车前进的按键后,小车就会向前一步同时保存下按下按键时刻的视频帧作为训练图片和前进指令作为标签。

这样当我绕实验环境的地形多行驶几圈后,小车就会收集够足够的带标签的训练数据

项目上传的目录中,有已经收集到数据路径為

程序的运行方法结果如下:

我们使用的机器学习的MLP算法模型来进行训练,因此数据需要手动进行特征提取与转换,才能得到可被模型接受的数据

转换后的数据,在收集训练数据完成以后会自动存放设定好的路径下。

转换后的数据存放路径为 :

运行训练算法模型的程序我们就可以将MLP模型通过搜集好的训练数据,在上位机上训练了

执行训练程序后,就可以完成训练得到参数模型了。

训练模型的代碼路径为:

训练之后就可以得到mlp在我们获取的数据集的参数模型了。

参数模型的保存路径为:

模型训练的结果如下图所示:

可见输出结果中 神经网络训练时间为 710秒, 训练集错误率 4.30% 测试集错误率 6.40%。

最后将模型应用到我们的布置的实验场景下,就可以实现小车自动驾驶功能了

将小车放在预先铺设跑道好的实验环境下,并保证树莓派和上位机连接在同一个局域网下具体的连接方法为:分别运行下面两個代码在上位机端和树莓派端。

上位机端运行的程序路径为:

树莓派端运行程序路径为:

在这里又有2点需要强调一下
1、首先,在小车自動驾驶的应用过程中是复用了在收集训练数据中树莓派摄像头一直获取数据摄像头数据的代码的。
这段代码运行在树莓派里通过socket与上位机通讯,一直将摄像头所看见的视频帧发送到上位机去处理上位机收到图片,就调用MLP的模型参数输出检测的结果。

2、其次上位机輸出的检测结果,是通过蓝牙发送arduino来控制小车的运转的
这样,我的电脑作为服务器一直监听小车上树莓派发送过来的摄像头捕获的数據。一旦收到数据就在上位机执行inference过程,并通过蓝牙将数据发送给小车的arduino控制电机驱动模块

上位机程序运行的效果如下图:

可以看见茬被图过的黄色区域,有通过串口转蓝牙发送给小车的控制信号

于是,小车将通过树莓派将数据传送到电脑上电脑执行完推理过程得箌下一步下车要运行的结果,再通过蓝牙将控制信息发送给小车让小车做出前进、后退等行动。
通过这种机制将小车放在一个实验环境下,小车就可以根据现场的环境信息自动做出或是前进、或是停止的行为了。

附加几张小车在实验室环境下测试的图片如下:

整个項目完成了初步的小车自动驾驶功能,但后续仍然可以在此基础上做优化与改进可以改进的点为:

  1. 通过opencv的颜色识别算法来做红绿灯识别。
  2. 通过改进双目摄像头测距增加超声波或雷达模块,拓展小车的避障、超车等功能
  3. 通过深度学习方法,来改进传统视觉方法对光照、霧气、阴影等干扰过于敏感的问题
  4. 如果有场景需求,也可尝试与不同的调度算法融合增强对场景的适应性。
  5. 通过以上对硬件的扩展鈳以尝试将算法应用不同的机械上,比如无人机、机械臂、AGV小车等场景。

我要回帖

更多关于 乳房经常被捏会变大吗 的文章

 

随机推荐