Daily Archives: 八月 11, 2019

Donkey Car:第3部分 不到250美元资金就能学习自动驾驶

Published by:

学习驾驶Donkey Car的概念图。
绿色是初始的概念,蓝色的中间概念, 黑色是高层次的“完成”概念。

这是系列的第3部分。以下是第1部分和第2部分的链接。经过几天的挣扎,我终于让我的驴车在地下室的轨道周围自动驾驶!这里有一个简短的视频:

所以这就是让我失望的原因。当我将我的模型从我的Mac上传到Pi并运行“驱动器”命令时,加载模型时出错。我一直在重新运行这些步骤并得到了同样的错误。我花了几天才意识到我在Donkey Car上运行旧版TensorFlow(1.8)和更新版本我的MacBook Pro上的TensorFlow 1.12版本。我还在Donkey Car帮助Slack频道上发布了一个问题,他们在使用较新的TensorFlow版本1.12构建的模型上确认不会在较旧版本的TensorFlow上运行。一旦我弄清楚如何在我的Mac上降级TensorFlow(一线pip shell命令),我重新训练,用SCP将我的新模型转移到Pi,我的车开始运行……那是在我意识到我之后将相机镜头盖打开……

我从一个约16K图像的相对较小的训练集开始。TensorFlow 1.12的训练时间为55分钟,TensorFlow 1.8的时间为75分钟。1.8发布于2018年4月。让我们希望DonkeyCar图像很快升级,这样我们都可以利用这些性能改进!我也只是在赛道周围逆时针方向使用了一套测试装置。在真正的比赛中,我会用顺时针和逆时针方向训练赛车。但这也会增加构建模型的时间。

虽然汽车可以绕过轨道,但很容易被地板上的灯光和侧面的其他白色物体的反射所欺骗。这是因为我在地板上只使用了一条白色胶带。这对视觉系统来说还不够用。但是,我不认为我的妻子真的要我画一条宽大的黑色“道路”,中间有黄色条纹,就像官方的Donkey Car轨道一样。

当我终于让汽车在自动模式下工作时,它非常令人满意。但是也有点“怪异”。我实际上“教”了一个小大脑来跟随地板上的线。它几乎似乎模仿我糟糕的驾驶。它甚至学会了如何在直道上加速,并且在紧凑的曲线上减速。真的很酷!

虽然我在TensorFlow和Keras的工作中做过一些工作,但很多步骤都有点抽象。一旦我开始玩驴车,事情就更容易理解了。系统的优势及其弱点都变得清晰。我还意识到,在训练系统(我的MacBook)和推理系统(Pi)之间同步Python和TensorFlow库是一个关键步骤。

在完成所有步骤后,我现在了解了大部分组件,并且我正在构建一个“概念图”,其他人可以使用它来帮助理解他们需要知道什么概念才能让他们的Donkey Car运行。

我现在正在回顾我学到的所有步骤,并将这些步骤与我为当地CoderDojo俱乐部制作概念卡的先前工作相结合。这是博客文章顶部的数字。概念图中的每个方框最终将成为1/2张层压纸,正面有活动和问题,背面有答案。这些在CoderDojo中被称为“寿司卡”,因为它们是比特大小的学习点。以下是“电动机”概念卡的示例图像:

AI赛车联盟的电动概念卡。

我的朋友Jon Herke也有兴趣使用Donkey Cars建立一个“AI赛车联盟”,旨在教孩子们关于人工智能和机器人技术。请继续关注我们是否可以为hackdays建立一个基础和一个为期10周,每周4小时的夏令营类型计划。我们希望让女孩和弱势青年参与这些计划。如果您有兴趣帮助我们入门,请告诉我们。

Donkey Car:第2部分 – 构建,校准和生成培训数据

Published by:

这是我组装的驴车。我所拥有的chasis不符合我订购的3D部分,所以我不得不用一些有机玻璃即兴创作。

这是关于Donkey Car的3部分系列的第2部分。这是第1部分第3部分。在第1部分中,我谈到了如何基于Raspberry Pi启动并运行新的Donkey Car,并使相机连接正常工作。我用RPi Cam Web界面测试了相机,并在我们家的一楼开车,以感受汽车的感觉以及它如何导航。

来自RPi Cam Web界面的示例图像

在这种模式下,Pi只是在Web服务器后面的便携式摄像机,将视频图像传输到其网页。RC汽车完全由汽车附带的2.4 Ghz控制器控制。要运行RPi Cam Web Interface软件,我只需打开Pi上的终端并从github站点下载代码。然后我运行了启动Web服务器的startup.sh脚本。

我感兴趣的是,相机拍摄的图像与网页上出现的图像之间有多大的延迟。延迟可以忽略不计,这让我只需通过观看网页上的图像来驾驶汽车。这意味着相机和Pi之间的输入/输出速度很快,因为图像通过WiFi芯片转换为Web浏览器。它基本上证明了Pi中有足够的马力来进行实时远程视频驱动。

然后我断开连接器与RC汽车附带的2.4GHz接收器,并将连接移动到我从亚马逊订购的伺服控制器。虽然这个伺服控制器板设计用于控制多达16个伺服系统,但我们只需要使用两个伺服系统。一次是速度,一次是转弯。我还必须将四条线从伺服控制器连接到Pi 40 Pin GPIO总线。这些连接的照片如下:

四条线用于在Pi和伺服控制器之间进行通信。黑色为地,红色为+ 5v,黄色和橙色线为SCL(时钟)和SDA(数据)。它们在伺服控制器上清晰标记,您可以看到Pi GPIO接口上的引脚分布。

下一步是转向和加速度计的校准。要做到这一点,我必须SSH到Pi并运行校准。这个过程有点棘手,因为许多电子速度控制器(ESC)有点不同。据记载毛驴车网站在这里。因为我的“停止”频率不正确,我仍然无法让汽车进入倒车状态。最终结果是我们有一个配置文件,可以编码油门的参数和汽车的转向。

一旦完成,我就准备开车绕过测试跑道了。令我妻子懊恼的是,我把地下室的家具搬到了房间的一侧,在地下室的地板上放了一些白色的电工胶带。我们在地板上放了一层很酷的环氧树脂涂层,但白色胶带的对比度很好。

我的驴车示例训练轨道

你还可以看到地板上灯光的很多反射。我们的训练过程必须学会忽略光反射,只能对地板上的白色胶带“注意”。注意力是深度学习的一个重要概念。

然后,我从墙上插头上取下了Pi,并使用我在亚马逊上购买的新型6800 mAH电源组为其供电。我用了一些磁带来固定平台下的电源组。我应该注意,来自ESC的GND和VCC导线确实为RC汽车中使用的2.4GHz接收器中的数字电路供电。然而,这个电流不足以为Pi供电。作为测试,我在Pi运行时将USP电流表连接到汽车上。结果如下图所示:

当前拍摄照片时,USB电流表显示Pi绘图约300mA的图像。在实践中,它的电流范围为300至500mA – 比ESP设计提供的电流大得多。

生成培训数据

一旦我们将所有汽车组装好,我们就可以生成训练数据集了。然后我做了一个SSH进入Pi并启动了驱动程序:

$ python manage.py drive

这是一个python程序,它启动一个Web服务器,显示摄像头上的内容,它还为您提供了一些捕获训练集的控件。一旦驱动程序开始,您可以转到任何Web浏览器并使用端口8887键入您的汽车的IP地址。现在是困难的部分。我不得不在赛道上开车10次以建立一个训练集!

问题是虽然我可以用键盘键控制汽车,但很难驾驶。我也试过网络界面“指针”,但这也很难引导。最后,我拿出手机,在手机浏览器中拉出了Donkey Car的网页。网络浏览器足够智能,可以检测到手机的前倾和侧向倾斜,并将其转换为速度和转弯。非常聪明!通过大约一个小时的练习,我可以绕过课程。然后我按下“开始录音”,大约10圈后我按下“停止录音”。完成此操作后,我可以通过SSH进入Donkey Car并将目录更改为“tub”文件夹。在该文件夹中有大约30K .jpg和.json文件。每个JSON文件都具有对图像的引用以及时间戳,加速和转向作为浮点数。这是我们的培训数据。

以下是JSON文件的示例:

{
“user / angle”:0.18989955357142868,
“user / throttle”:0.7175781250000001,
“user / mode”:“user”,
“cam / image_array”:“1000_cam-image_array_.jpg”,
“timestamp”:“2019-01- 05 17:09:35.184483“
}

这是与该JSON文件对应的图像:

样品160X120像素图像用于训练驴车

然后我将Donkey Car中的图像复制到我的笔记本电脑进行培训。我将在第3部分介绍

Donkey Car:第1部分 -用DIY机器人构建AI社区

Published by:

用DIY机器人构建AI社区:第1部分 – 驴车

使用DIY机器人构建AI社区

这是关于Donkey Car的3部分系列中的第一部。以下是第2 部分第3 部分的链接。

我已经通过CoderDojo计划建立了用于教孩子计算机科学近四年的机器人。这是一次有益的经历,我学到了很多关于构建Arduino套件和简单机器人的知识。我一直在为8-18岁的孩子创造“学习阶梯”,而我的机器人则被5岁以下的儿童在The Works Museum使用。围绕DIY项目构建STEM课程很有趣,也是寻找社区的好方法。你可以在Moving RainbowCoderDojo Robots网站上看到我的一些工作。

随着新的一年,我决定扩展我的舒适区,包括基于Raspberry Pi,Python和机器学习的更复杂的机器人。我的朋友Arun Batchu也通过购买非常酷的NVIDIA Jetson Xavier开发套件来鼓励这一点。不幸的是,我的小机器人不足以运行这个价值90亿的晶体管系统。我认为这对我来说是一个很好的方式来了解最新的图像识别和边缘计算的热门话题。建立一个本地DIY机器人小组也是在明尼阿波利斯地区建立一个更强大的AI社区的一种方式。

对于那些不熟悉Donkey Car项目的人来说,它是一个开源DIY项目,让人们学习实时图像识别和一些AI的基础知识。这辆车的零件大约250美元。这比我的Arduino机器人贵10倍,但它也更强大。在湾区,有超过2,500人参加了DIY Robocars聚会,Donkey Car Slack工作区几乎有多少人在汽车,赛道,算法,机器学习模型和相关主题上有数千个帖子。我们在明尼苏达州还没有像这样的社区,但我希望改变这个!

以下是我开始制作驴车的工作日记。所以他们说…我们参加了比赛!

我在Swarm64的伟大人物的最后一次MinneAnalytics会议上“天赋”了一个Raspberry Pi 3 B + Kit,其中包括Paul McCullugh和Thomas Richter。Swarm64使用FPGA为RDBMS系统提供了出色的加速器。如果你需要一个更快的关系数据库给他们一个电话!

Raspberry Pi套件包括带有PI OS的32GB micro SD卡,电源砖,GPIO分线器以及外壳以及其他一些部件。我添加了一个27美元的SainSmart广角鱼眼摄像头和一个PCA9685 16通道12位PWM伺服电机驱动器以及一辆新的90美元RC车(我还没有测试过)。我使用GPIO使用Thonny Python IDE对LED进行了闪烁测试,并找到了用于控制LED灯条的DMA库。我还在圣路易斯公园的Microcenter购买了两张额外的32GB SD卡,每张 4.99美元。这比我在亚马逊上找到的要少。微中心真的很摇滚!我建议你买几张微型SD卡,这样你就可以进行备份了。

在Arduino的“C / C ++”工作多年之后,我对Pi开始的难度感到有些惊讶。有许多库需要以正确的顺序安装,需要考虑许多版本的Python。Thonney Python IDE很不错,但它缺少我们需要用TensorFlow认真工作的大多数库。好消息是,一旦库设置编码变得非常快。如果您正在使用物理设备进行硬件编程,那么当您对代码进行更改并且必须将其上传到Arduino时,就没有“滞后”。程序立即运行!我认为这可以加快开发速度,特别是当你有大型程序时。

现在进入Donkey Car … Donkey Car网站做得非常好,但它假设UNIX和Pi的背景非常强大。当他们发出指示时,我不清楚我应该在我的新Pi或远程计算机上运行。我花了大约两天时间试图让各种Python和TensorFlow库在Pi上本地工作。虽然我在进步中学到了很多东西,但事实证明这是一个死路一条。只有2GB或RAM的Pi太小了,无法在没有英雄努力的情况下编译庞大的TensorFlow-Keras系统。即使在具有16GB内存的Mac上,我也遇到了基于Bazel的TensorFlow编译系统的bug。Bazel构建框架本身非常复杂,您需要Bazel来编译TensorFlow怪物。做只是没有削减它。我正要放弃。如果像我这样拥有25年UNIX经验的人无法安装这个东西,我怎么能希望培养我14岁的学生呢?

然后我开始意识到,在Donkey汽车上完成的所有事情都假设了一个无头Pi(没有监视器,只是一个SSH访问),并使用他们的磁盘映像,这些映像由Linux和Pi专家精心制作了三年。你需要启动他们的Pi图像,其他一切都有效!你不能将Pi用作开发系统。TensorFlow文档确实这样说,但我没有RTFM。

我努力了解如何基于Donkey图像(包含磁盘映像的zip文件)为Pi构建启动映像。在尝试了NOOBS系统后,我意识到balenaEtcher应用程序正是我所需要的。该应用程序在Windows或Mac上使用非常简单。您只需从Donkey Car网站下载图像zip文件,将新SD卡放入并运行belenaEtcher应用程序。它会提示您输入图像文件(无需解压缩zip文件),它会自动找到SD驱动器然后我点击“Flash”。噗!在短短几分钟内,我就有了经过验证的磁盘映像。

重新启动新SD到我的Pi后,我可以登录并更改wifi设置。再一次重启,我准备好进入我的新驴车。我还设置了静态IP地址,因此每次都会重新连接到同一个IP地址。“/ home / pi / env”目录下的文件计数显示了近13,000个文件。如果你想的复杂细节我把它们放在一个启用评论,谷歌文档文件在这里。随意为该文件添加注释。

我将在发布更新时发布更新,并在其他部分到达后发布。我需要它们来做校准步骤。