如何使用DonkeyCar平台构建一个自主机器人

描述

受到Plantvillage.psu.edu和iita.org工作的启发,我们希望使用DonkeyCar平台构建一个自主机器人。

该机器人可以在农场环境中移动而不会损坏现有植物或土壤,并使用物体检测来查找和标记病害作物具有环保色彩。传统上,在大多数高科技案例中,我们都必须使用手机手动检查大型农场以标记农作物,这会花费我们大量的时间和精力。此外,使用的各种手机不一定具备高效完成任务所需的所有功能,或者他们必须等待拥有合适设备的人。围绕农场运行的统一机器人平台将解决这些问题并使标记速度更快。速度还可以更轻松地在多个农场之间共享平台。

挑战:

保持机器人的尺寸/重量足够小,以免损坏作物本身。

在不损坏现有作物的情况下导航。

寻找一种安全标记患病作物的方法。

寻找一个数据集和农场来测试平台

机器人

背景:

除了在方法、技术、时间安排等方面找到共同点之外,我们还必须制定一个包含会议时间表、存储库、会议技术等的框架。从本质上讲,专业项目的所有组成部分都必须到位,除了没有报酬。我们没有预算,不过这不是问题,因为我们有共同的愿景和执行意愿。在这段时间,我们都度过了愉快的时光,这是一次了不起的学习经历。

构建机器人:

底盘、自主导航和图像分类的工作立即开始,进展顺利。但我们遇到了与底盘和驱动系统相关的重大意外挑战和延误。

简而言之,我们没有预料到测试温室之间会出现如此多变的地形,在场景A中表现良好的电机、轮子、接线、控制等在场景B中不堪重负。我们通过大量的mod拨入了一个适用于我们所有环境的工作机箱。所以我们不得不做出大量时间和预算限制,但最终产品超出了我们最初的最小可行配置目标。提交时的最终设计如下所述。

相机杆:

为了能够观察凸起的植物床,并可能升级到可以观察番茄植物顶部和底部的移动摄像头,我们使用从车库出售的碳纤维杆建造了一个摄像杆。该杆装有2个3D打印夹具,用于导航和分类摄像头。我们还在杆子上添加了1.2v太阳能照明,以及在泳池顶部添加了12v多色状态灯。是的,那是一个在杆子顶部涂成黑色的重新利用的药丸容器。最终效果非常好!

机器人

这些相机是连接到两个由USB充电器供电的不同Pi上的RaspberryPi相机。使用2Pi的原因是分类和导航都使用需要大量处理能力的神经网络。此外,分类摄像头必须指向植物,而导航摄像头必须指向前方。杆子的顶部也必须有灯作为指示器。在寻找足够亮的RGB灯时,我们发现它们要花费100美元以上,所以我们使用扬声器的灯、一个用于反射的小塑料袋并装在一个空药瓶中制作了自己的灯。因为灯需要12伏我们的Arduino输出为5伏,我们将其连接到继电器。连接需要与Arduino和3根电线共同接地,我们在Arduino的引脚7、8和11上放置的绿色和蓝色灯。我们可以通过使用analogWrite函数为所有三根线提供不同的值来模拟这些灯的RGB光谱。请注意,为了正确着色,所有三个都需要写入,否则之前在任何一个引脚上写入的颜色可能会显示出意想不到的结果。

机器人

机壳:

我们在StoneCoop和GrowingHope农场对带有轮子和履带的塑料底盘进行的实验证明是不成功的,这两种选择都将挖入有利于植物的沙地。我们剥离了其中一个临时底盘版本很多塑料齿轮在升级到金属之前和处理更高电流的能力:

机器人

由于其强大的电机和大轮子,我们最终选择了MountainArkSR13底盘,并按照以下说明进行组装。

我们对MountainArk进行了修改,添加了一个平台以将计算技术与电源分开,并通过定制涂漆的轻质外壳和独特的徽标为Farmaid增添了一丝风格。

机器人

组装好底盘后,我们需要电机和电池为其供电。虽然底盘带有电池盒,但我们决定使用12V锂聚合物电池,因为我们已经有了可用的电池,并且已将其与旧底盘一起使用。电机使用接线盒连接到电池,以获得更高的电流消耗。

机器人

我们最初使用的是我们拥有的普通L298电机控制器,但发现电流太低,无法为我们现在拥有的320RPM电机供电。因此,我们改用IBT-2电机控制器,这是另一个创客空间成员捐赠的。IBT-2电机控制器的问题在于它们只能控制1个电机,所以我们必须连接其中的4个。

IBT-2的详细信息可以在这里看到:http://www.hessmer.org/blog/2013/12/28/ibt-2-h-bridge-with-arduino/为了节省布线空间,我们拼接了左右PWM线,接头将左侧电机和右侧电机的L-PWM和R-PWM相互连接。

机器人

我们使用的另一种节省空间的技术是将所有电机的使能引脚直接连接到Arduino的5伏电压。

机器人

在此之后,我们需要直接连接到Arduino的唯一电机部分是PWM引脚。在左侧,我们将左侧电机的R_PWM连接到Arduino上的6引脚,将L_PWM连接到5引脚。请注意,左侧两个控制器的R_PWM引脚和左侧两个控制器上的L_PWM是拼接的,因此向一个的正向命令将同时向前移动,向一个反向命令将在左侧的两个轮子反转。右侧也进行了同样的拼接。右侧的R_PWM连接到Arduino的9针,L_PWM连接到Arduino的10针。对于碰撞检测,我们首先尝试了我们小组成员中的一个Garmin激光雷达,但我们很难让它工作,所以我们决定使用SR04超声波传感器。

机器人

我们还在后面添加了另一个传感器,但由于使用定时器中断的方式,我们无法在手动控制机器人的同时使用它。请注意,我们制作了另一个Arduino例程,仅使用传感器在障碍物之间移动机器人,但这不符合行为克隆方法。

机器人

驾驶:

由于我们无法使用类似于驴车的底盘,因为它无法在我们给定的环境中行驶,因此我们必须编写自己的驾驶代码。为此,我们使用了两个灵感,DonkeyCar自己的方法以及YouTuberSentdex的一系列视频。驾驶模型基于DonkeyCar,除了没有回归和均方误差,我们使用分类来使用图像在7个按钮之间进行分类。我们还将它转换成一个全卷积神经网络,使其更快,并与新的研究相一致。在测试中,我们发现它不断输出一个按钮,这与训练中我们在几个间隔后按下一个键不同。为了解决这个问题,我们后来在Arduino脚本中添加了一些代码来输出按钮按下之间经过的时间。

病株分类:

对于分类,我们使用MobileNetSSD模型,因为它的尺寸相对较小,而且它已经有一种上传到安卓应用程序的方法。我们通过使用5-10秒的视频获取数据并创建了一个脚本来从这些视频中提取图像视频。视频本身被放置在以疾病和植物命名的文件夹中。我们确保在不同的条件和不同的地点拍摄这些视频。整个训练数据集由大约2000张图像组成。我们还制作了一个网站来展示分类的输出以及温室及其植物健康的整体地图。该网站使用XML数据创建此网格。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分