OpenMV Donkey自动驾驶汽车

本指南展示了如何使用OpenMV摄像头替代Raspberry Pi,在"Donkey"自动驾驶汽车平台的基础上创建一个DIY Robocar分支。您可以在此视频中看到汽车的实际运行情况这里

OpenMV 摄像头驱动的Donkey车

零件

以下零件并非必须,例如我们可以使用pca9685代替OpenMV的官方舵机驱动板
车架可以选择闲鱼里HSP98186,瓦迪顿,200以内就搞定。

OpenMV Cam Donkey Car的设计旨在通过在线购买零件并使用基本工具进行组装,使其易于构建。以下是构建自动驾驶汽车所需的基本零件清单。

零件描述 零件链接 零件数量 零件成本
1/16 2.4Ghz HSP94186或瓦迪顿 RC车
1/16 2.4Ghz HSP 94186
https://m.tb.cn/h.5BPqFppNEOcDZC4?tk=Opx8WLpItQ9 1 255
RC车底座板
RC车底座板
https://www.shapeways.com/product/6YD3XR9ND/magnet-car-base-plate

您可以在此处下载该零件的STL文件这里

Adam Conway的RC车底座板
1
RC车防护架
RC车防护架
https://www.shapeways.com/product/74VXFV7AT/magnet-car-roll-cage

您可以在此处下载该零件的STL文件这里

Adam Conway的RC车防护架
1
OpenMV Cam Donkey安装座
OpenMV Cam Donkey安装座
https://www.shapeways.com/product/G7YQBUMRC/openmv-cam-donkey-mount

您可以在此处下载这些零件的STL文件这里

Chris Anderson的OpenMV Cam Donkey安装座
1
M2自锁螺丝套装
M2自锁螺丝套装
淘宝或拼多多 1
M3 35mm自锁螺丝
M3 35mm自锁螺丝
淘宝或拼多多 1
M3自锁螺母
M3自锁螺母
淘宝或拼多多 1
30 CM伺服电缆延长组件杜邦线
30 CM伺服电缆延长组件杜邦线
淘宝或拼多多 1
OpenMV Cam M7
OpenMV Cam M7
https://openmv.io/products/openmv-cam-m7

注意:您需要一个焊接烙铁和焊锡来连接此零件的引脚头。
1
OpenMV Cam伺服控制板
OpenMV Cam伺服控制板
https://openmv.io/products/servo-shield

注意:您需要一个焊接烙铁和焊锡来连接此零件的引脚头。
1
尼龙束带
尼龙束带
淘宝或拼多多 1
Micro USB电缆
Micro USB电缆
淘宝或拼多多 1
  • 然而,如果您可以3D打印零件,构建机器人车辆的成本会大大降低。您可能还有一些上述零件闲置(例如Micro USB电缆)。

虽然上述零件清单是您所需的全部内容,但您可能希望使用以下零件来控制机器人车辆的舵机,以便使用基于Arduino的舵机控制板远程控制机器人车辆,该控制板将允许您使用RC车附带的RC遥控器进行控制。如果您使用以下组件构建汽车,则不需要上面的舵机控制板。我强烈建议您购买Arduino舵机控制板的零件,以便您可以远程控制机器人车辆的油门。如果没有这个控制板,您很可能会意外驾驶车辆撞到墙上并立即损坏您的机器人车辆!

零件描述 零件链接 数量 成本
5V 16 MHz Arduino Pro Mini
5V 16 MHz Arduino Pro Mini
淘宝或拼多多 1 $6.49
Arduino Pro Mini编程器
Arduino Pro Mini编程器
淘宝或拼多多 1 $9.95
舵机控制板
舵机控制板
https://oshpark.com/shared_projects/2bKUWmbq

您可以在此处下载该零件的Gerber文件 here.

舵机控制板由Chris Anderson制作
1 $10.50
母头排针
母头排针
淘宝或拼多多

注意:您需要一个焊接铁和焊锡将这些排针连接到上述PCB。
1 $5.69
8针堆叠排针
8针堆叠排针
淘宝或拼多多

注意:您需要一个焊接铁和焊锡将这些排针连接到上述PCB。
1 $5.08
RC接收器舵机适配器
RC接收器舵机适配器
淘宝或拼多多 1 $4.49
  • 您可能已经有上述某些零件。

除了上述所有零件,我强烈建议您购买一个OpenMV Cam的广角镜头。使用广角镜头,您的自动驾驶汽车在进行紧急转弯时更容易保持前方道路的视野,而不会失去目标。如果没有广角镜头,您将需要降低最大速度以进行紧急转弯。

零件描述 零件链接 数量 成本
OpenMV Cam广角镜头
OpenMV Cam广角镜头
https://openmv.io/products/ultra-wide-angle-lens 1

接下来,为了获得更好的性能,我建议您购买LiPo电池、适配器和一个LiPo充电器。HSP 94186 Car附带的NiMh电池很快会耗尽电力,使您在同一天的比赛前难以进行长时间测试。

部件描述 部件链接 部件数量 部件成本
Turnigy 1300mAh 2S 20C LiPo电池组
Turnigy 1300mAh 2S 20C LiPo电池组
http://hobbyking.com/en_us/turnigy-1300mah-2s-20c-lipo-pack-suit-1-18th-truck.html 3
Tamiya迷你母头到XT60公头转接器
Tamiya迷你母头到XT60公头转接器
http://hobbyking.com/en_us/female-mini-tamiya-gt-male-xt60-3pcs-bag.html 1
Turnigy E3紧凑型2S/3S锂电池充电器
Turnigy E3紧凑型2S/3S锂电池充电器
http://hobbyking.com/en_us/turnigy-e3-compact-2s-3s-lipo-charger-100-240v-us-plug.html 1

最后,为了无线编程,我建议您购买一个用于OpenMV Cam的WiFi扩展板。有了WiFi扩展板,您将能够舒适地从一个位置测试您的自动驾驶汽车,而无需通过USB电缆跟随汽车。

部件描述 部件链接 部件数量 部件成本
OpenMV Cam WiFi扩展板
OpenMV Cam WiFi扩展板
https://openmv.io/products/wifi-shield 1

组装

一旦您购买并收到了上述DIY Robocar所需的所有零件,您现在可以开始组装它了。

零件

请注意,您将需要一把小刀、一个十字螺丝刀、钳子、一个焊接烙铁和一些焊锡。

工具

步骤1 - 清理零件:

您的3D打印部件很可能需要进行一些清理。使用小刀去除3D打印部件上的任何毛刺,并清理任何孔中的多余材料。特别是,您需要确保清除滚动杆两侧的槽中剩余的材料。

去毛刺

接下来,尝试将3D打印的OpenMV Cam支架颈部插入其支架中。这些部件设计得非常贴合,所以需要一些力气。如果遇到困难,请使用锉刀将颈部支架扩大。由于我们希望相机尽可能高,您只需要将支架插入到足够对齐第一组孔的位置即可。

插入

第2步 - 组装车身:

使用三颗M2螺丝和螺母将滚动保护架安装到底板上 - 每个滚动保护架的腿上都需要一对。您可以使用适合的任何M2螺丝长度。在将滚动保护架安装到底板之前,请确保螺丝座朝上。螺丝座是用于Raspberry Pi和舵机控制器的,但是如果您以后想要安装其他东西,螺丝孔不应该朝下。

车身

要将滚动保护架连接到底板上,您需要将螺母插入到前两个滚动保护架腿的两侧的槽中(请注意,螺丝是从底板底部插入的)。然后,在拧入M2螺丝时,您必须保持螺母固定在原位。这样做并不是特别容易。您可能希望使用工具来防止螺母在槽中旋转。

车身

在将两个前腿连接到底板后,您可以连接第三个后腿。这应该相当容易,因为您可以从顶部按下螺母,以防止它在您从底部拧紧M2螺丝时旋转。

最后

接下来,使用四颗中等长度的M2螺丝将OpenMV Cam颈部支架安装到滚动保护架的顶部。请注意,由于螺丝孔不太可能完全对齐,这需要一些努力。我建议先只将四颗螺丝稍微拧入一点,然后再将每颗螺丝完全拧紧。

对齐

接下来,在颈部支架和颈部底部孔之间插入一颗长M3螺丝。然后使用一个M3螺母紧固连接,以确保颈部部件稳定。

锁定

现在,将OpenMV Cam支架安装到颈部部件的顶部,并使用另一颗长M3螺丝和螺母将支架固定在位。确保像下面的图片中所示正确放置。

支架

然后,从您的遥控车上取下塑料引擎盖。引擎盖由四个金属销夹持。取下引擎盖后,您应该可以看到遥控车的内部,就像下面的图片中所示。我们将把底座安装到遥控车上的四个支柱上。为了固定底座,我们将使用与引擎盖相同的金属夹子。然而,由于底座上用于固定底座的切口很紧,我们需要付出一些努力。

引擎盖

首先,稍微弯曲这四个金属夹子,这样我们在安装底座后更容易将它们穿过支架孔。

夹子

之后,使用小刀从底座的凹槽中割掉一些材料,以便金属销可以穿过支架孔。

小刀

最后,将每个销插入每个支架孔,将底座牢固地固定在遥控车上。

连接

完成后,您的汽车应该看起来像下面的图片。

完成

步骤 3 - 组装摄像头头部:

现在我们将组装您的Robocar的OpenMV Cam头部。首先,使用螺丝刀将镜头支架从OpenMV Cam上取下,并使用异丙醇和棉签清洁镜头支架下的摄像头IC。确保清除任何污垢,并且不要在摄像头IC上留下任何纤维。

清洁

然后重新安装镜头支架。接下来,我们需要将引脚头焊接到OpenMV Cam上。使用焊铁将两个8引脚头焊接在摄像头的两侧,使得8引脚头的引脚朝向OpenMV Cam的背面。

引脚

最后,如果您购买了广角镜头,请将它替换OpenMV Cam原配的镜头。

镜头

接下来,让我们为OpenMV Cam构建舵机控制板,以便它可以控制RC遥控车。

控制板

您需要将两个8引脚头焊接在舵机控制板的两侧,引脚朝向下方。然后,焊接两个舵机连接头。每个连接头上的塑料部分应该是垂直的,而不是平放在舵机控制板上。

焊接

如果您购买了WiFi扩展板,我们也要组装它。将它带有的两个8引脚头焊接在扩展板的两侧,引脚朝向下方。

WiFi

最后,让我们将所有部件叠放在一起。您可以将扩展板从OpenMV Cam的顶部或底部安装。但是,让我们将WiFi扩展板安装在OpenMV Cam的底部,将舵机控制板安装在顶部。

叠放

步骤 4 - 组装:

使用两个螺丝孔将OpenMV Cam安装到robocar车身顶部的OpenMV Cam支架上。为了给自己更多的自由度,我们将OpenMV Cam倒装安装。您将能够在软件中取消旋转OpenMV Cam的视野。

安装

接下来,使用舵机扩展头将舵机控制板的通道0和通道1分别连接到油门和转向舵机的线缆上。确保将舵机扩展线穿过底板上的孔。还要使用扎带将所有线缆固定,以防止它们到处晃动。您不希望您的robocar因为碾过其中一根线而意外损坏自己。完成后,您的车辆应如下图所示。

控制器

最后,将随RC车一起提供的黑色管子套在天线上,以保护天线。

天线

如果您购买了LiPo电池升级配件,接下来让我们安装它们。首先,将XT60适配器连接到每个LiPo电池上。

适配器

然后,用其中一个LiPo电池替换您的RC车上的NiMh电池。确保将电池放置在线缆朝向车辆前部的位置,如下图所示。

LiPo

完成后,它应该看起来像下图所示。

完成

最后,请确保将ESC上的跳线也移至LiPo位置!

危险

第5步 - 安装软件:

由于您使用的是OpenMV Cam,这将是最简单的部分。从这里下载OpenMV IDE并在您的笔记本电脑上安装它。完成后,将Micro USB电缆连接到OpenMV Cam和笔记本电脑上。

OpenMV_Cam

接下来,启动OpenMV IDE,并点击IDE左下角的连接按钮。这样做后,OpenMV IDE应该在右下角显示您的OpenMV Cam固件已过时。

Update

点击文本,按照对话框中的步骤更新您的OpenMV Cam固件。当OpenMV IDE询问是否要擦除OpenMV Cam的闪存时,请选择是。然后,OpenMV IDE将更新您的OpenMV Cam固件。请注意,您的OpenMV Cam是无法变砖的,所以如果出现任何问题,您可以进行恢复。

Firmware

现在,您的OpenMV Cam已经更新完毕。您需要调整镜头的焦距。请运行hello world脚本(点击绿色运行箭头),并转动镜头,直到在OpenMV IDE的帧缓冲查看器中图像变得清晰可见。

View

完成所有这些操作后,从这里下载robocar的代码,并在OpenMV IDE中打开该脚本。脚本的工作原理在注释中有详细说明。请注意,您需要将ARDUINO_SERVO_CONTROLLER_ATTACHED变量设置为True,以便OpenMV Cam输出串行数据以控制Arduino舵机控制板,将其设置为False以便OpenMV Cam输出串行数据以控制舵机控制板(非Arduino版本)。

Script

最后,在调整完所有设置后,转到Tools->Save open script to OpenMV Cam,将带有注释的脚本保存到OpenMV Cam中。然后点击Tools->Reset OpenMV Cam。现在,您可以断开OpenMV Cam与笔记本电脑的连接,它将自动运行该脚本。每当您希望OpenMV Cam在没有连接笔记本电脑的情况下运行脚本时,请按照上述两个步骤操作。在连接笔记本电脑进行快速测试和调试时,只需使用运行按钮和停止按钮在编辑之间启动和停止脚本。

*如果您使用的是舵机控制板(非Arduino版本),您还需要将两个脚本从OpenMV IDE复制到OpenMV Cam板上,以使其正常工作。请转到Files->Examples->15-Servo-Shield->pca9865.py,将其保存到OpenMV Cam的内部闪存驱动器上。此外,您还需要将Files->Examples->15-Servo-Shield->servo.py保存到OpenMV Cam的内部闪存驱动器上。这两个步骤只需执行一次(您还可以从此README所在的目录中获取这两个脚本)。

可选步骤1 - 构建基于Arduino的舵机控制板:

如果您选择获取基于Arduino的舵机控制板,以便您可以使用遥控器作为您的robocar的切断开关(这是一个非常好的主意),以下是构建步骤。

Parts

首先,按照下图将Arduino Pro Mini焊接起来。

Arduino

然后,将Arduino焊接到123D Circuits电路主板上,如下图所示。我们试图将其安装在OpenMV Cam板的背面,因此布局看起来有些颠倒。只需按照图像中的内容复制即可。

Controller

底部应该是这样的。

Bottom

现在,将电路板安装到OpenMV Cam盾板堆叠的背面。请注意,我们不需要额外长度的电路板连接器从背面伸出。如果您喜欢,可以随意修剪它们。或者,保留它们以堆叠更多的电路板。如果您决定保留它们,请确保它们彼此之间不会短路。

Stack-up

最后,将舵机连接到Arduino的通道(1),将油门舵机连接到通道(2),将遥控器接收器的转向输出连接到通道(3),将遥控器接收器的油门输出连接到通道(4)。请注意,遥控器接收器的转向输出是通道(1),油门输出是通道(2)。此外,您需要使用短长度的母对母舵机线延长线和长延长线将遥控器接收器连接到Arduino舵机控制板。

Wire

完成所有这些后,您的机器人应该如下图所示。请注意,您应该使用束线带整理好布线。

Done

可选步骤2 - 编程基于Arduino的舵机控制板:

将USB串口适配器连接到Arduino Pro Mini顶部突出的6针排针上。确保将GND连接到GNDDTR连接到DTR。接下来,将Micro USB电缆连接到USB串口转换器和您的笔记本电脑上。

编程器

这里安装Arduino IDE。从这里下载舵机控制代码,并在Arduino IDE中打开它。转到工具->板子,选择Arduino Pro或Arduino Pro Mini,然后转到工具->处理器,选择Atmega328 (5V, 16Mhz)

Arduino_IDE

最后,转到工具->端口,选择您的USB串口转换器连接的COM端口(通常是最高编号的COM端口),然后点击上传按钮(圆形右箭头)。Arduino IDE将编译代码并开始对Arduino Pro Mini进行编程。完成后,将USB串口转换器从Arduino Pro Mini上取下,您的舵机控制板将准备就绪。

Arduino_IDE_Done

当OpenMV Cam未运行时,Arduino舵机控制板允许您直接控制机器人车辆的油门和转向,使用RC遥控器。一旦OpenMV Cam开始运行并向Arduino发送命令,Arduino只会在RC遥控器打开时驱动转向舵机,并且只会在RC遥控器油门触发器被触发时驱动油门(前进或后退)。您可以随时使用RC遥控器上的转向控制来覆盖OpenMV Cam的转向。最后,在打开RC遥控器并将油门调节旋钮设置为零后,通过调整RC遥控器上的油门调节旋钮来实现完全自主控制。确保在关闭RC遥控器后将油门调节旋钮设置回零。

机器人车是如何跟随线路的?

OpenMV Cam使用线性回归来检测线路的位置并跟随它。对于OpenMV Cam来说,机器视觉部分很简单。OpenMV Cam正在运行的脚本大部分工作都与将线路检测转换为舵机输出以控制机器人车有关。您可以在这篇博文中阅读更多关于其中的内容。