使用RedBoard Artemis ATP构建自动驾驶汽车
本项目的目标如下:
•将机器学习应用于机器人汽车。
•将PID控制器添加到该机器人中。
•最后,将Micro OLED扩展板添加到这个机器人上。
为了便于理解本项目,我们将其分为以下几部分:硬件、机器学习、PID控制器、添加微小OLED扩展板、打印和组装机箱,以及结论。
硬件
下图展示了示意图。
SparkFun RedBoard Artemis
特点:Arduino Uno R3 带有引脚布局,1MB Flash / 384KB RAM,支持 48MHz 和 96MHz 涡轮频率,24 个 GPIO 引脚(均可中断),21 个 PWM 渠道,内置 BLE 无线通信模块,10 个 14 位精度的 ADC 输入通道,2 个 UART 接口,6 个 I2C 总线,4 个 SPI 总线,PDM 接口,I2S 接口以及 Qwiic 连接器。详情、功能和文档请见此处……
微型OLED点阵
这是一款小巧的单色蓝黑OLED屏幕,可呈现极为清晰的画面,供您享受视觉体验。
最后,我使用了三个红外距离传感器。以下是它们的数据表:GP2Y0A41SK0F 和 GP2Y0A51SK0F(2)。
机器学习
在本教程中,我们将使用 Python 创建一个神经网络,并将其权重复制到 Artemis RedBoard ATP 板上的前向传播网络,从而使机器人汽车能够独立行驶且不会撞到墙壁。
在本次练习中,我们将让神经网络输出4个信号:每个电机两个输出,因为L298N驱动器将连接到电路板的两个数字输出端口,分别对应每台汽车电机。此外,这些输出值将在0到1之间(用于使电机去极化或极化)。
我们将有四个输入,其中三个对应三个传感器,第四个用于偏置(BIAS),其值为0或1,并按以下逻辑分配:当距离小于13厘米时,左右两侧的传感器值为1;当距离大于13厘米时,它们的值为0。中央传感器在距离小于16.7厘米时为1,大于16.7厘米时为0。偏置值始终为1。下表展示了这些变化:
发动机的操作方式如下:
为了创建我们的神经网络,我们将使用用 Python 3.7.3 开发的这段代码:NeuralNetwork.py
我们会看到什么?
我们添加的代码用于在训练到40,000次迭代后显示图形,如下所示:Graphic.py
现在我们可以看到从连接中获得的权重,这些权重将用于Arduino代码:Generate_Arduino_Code.py
包含神经网络配置的Arduino代码已加载到Artemis板上。Self_Driving_Car.ino
PID控制器
机器人配备了3个模拟红外传感器,分别位于前方和左右两侧,用于检测墙壁的距离。
机器人使用PID控制器来保持左右墙壁之间的中心距离。当机器人靠近左墙时,可降低右电机的速度并提高左电机的速度,使机器人向右移动,从而远离左墙;反之亦然。
左侧发动机的速度 d0 和右侧发动机的速度 d1 通过以下代码计算:
然而,由于微小的时间误差可能导致机器人运动不稳定,我们添加了第二个校正因子,以使运动更加平滑。也就是说:difAnt = dif;现在通过PWM信号将速度施加到两个齿轮电机上:
添加微OLED扩展板
小巧的单色蓝黑OLED屏幕可呈现极为清晰的画面,为您带来视觉享受。正因如此,我添加了此设备,用于在机器人汽车处于以下情况时发出视觉信号:停止、前进、后退、左转和右转。我所使用的图标(64x48像素)及其功能如下:
我从库中使用的示例代码是:MicroOLED_Rick_and_Morty_I2C.ino
我获得的 bitmaps.h 库,您可以在下载部分获取。下面我将向您展示之前章节中修改后的 Arduino 代码:Self_Driving_Car_microOLED.ino
底盘的冲压与组装
有两个部件需要使用PLA塑料打印,可能需要稍微调整尺寸或对塑料进行轻微修整,以确保所有部分能良好贴合。3D文件可在下载区获取。
在机箱底部,需安装以下部件:1)齿轮电机通过塑料网布进行固定;2)GP2Y0A51SK0F红外传感器用螺丝安装在机箱左右前端;3)GP2Y0A41SK0F红外传感器用螺丝安装在机箱中央和前方;4)电池通过塑料绑带固定;5)L298N驱动器和滚轮支架用螺丝安装。最后,将RedBoard Artemis ATP电路板用螺丝固定到下部机箱上。下图展示了该组件的多个视图。
结论
这个项目对我来说是一次极好的个人挑战,因为这是我第一次将机器学习与PID控制器结合使用,我对用我的RedBoard Artemis ATP开发的原型感到非常满意。
第一个视频显示,我主要进行了两项测试:在第一项测试中,我进行了多次调整,使机器人能够顺利地从两个方向环绕物体(纸箱);在第二项测试中,我在节点处添加了一些小的对角墙壁,以改善机器人的转向性能,使转弯过程更加平顺。
我为红外传感器设定的距离经过实验校准,使机器人能够尽可能快速地对准中心。对于中央的红外传感器,我测得的距离为16.5厘米,这使我能够及时减速并转向,而不会撞到对面的墙壁。
本文编译自hackster.io





