Donkey是一个用Python编写的开源自动驾驶车辆平台,用于遥控车辆。它专为爱好者和学生开发,注重快速实验和简单的社区贡献。它支持基于神经网络、计算机视觉和GPS的各种类型的自动驾驶系统。它在中小学和大学的学习和研究中得到了广泛应用。它提供了丰富的图形界面,并包含一个模拟器,因此您可以在构建机器人之前进行自动驾驶的实验。它得到了活跃的在线社区的支持。

donkeycar

如果您想要:

  • 构建一个机器人并教会它自动驾驶。
  • 尝试自动驾驶、神经网络、计算机视觉和GPS。
  • 参加像DIY Robocars这样的自动驾驶比赛,包括与世界各地的竞争对手进行的在线模拟器比赛。
  • 参与充满活力的在线社区,学习前沿技术并享受其中。

构建您自己的Donkey车

Donkey是大多数人首先构建的标准车型。零件成本约为250到300美元,组装时间为2小时。以下是构建您自己的车辆的主要步骤:

  1. 组装硬件。
  2. 安装软件。
  3. 创建Donkey应用程序。
  4. 校准您的车辆。
  5. 开始驾驶。
  6. 创建自动驾驶系统。
  7. 使用模拟器进行实验。

在开始之前需要了解什么?(简而言之,不需要了解任何内容)

Donkeycar被设计为自动驾驶的“Hello World”;它简单而灵活、功能强大。不需要特定的先决知识,但如果您具备以下知识,会更有帮助:

  • Python编程。您不需要进行任何编程就可以使用Donkeycar。您需要编辑的配置您的车辆的文件myconfig.py是一个Python文件。您只需要取消注释要更改的部分并进行编辑;如果您了解Python的注释缩进的工作原理,可以避免常见的错误。
  • 树莓派。树莓派是Donkeycar的首选车载计算机。如果您已经设置和使用了树莓派,那将会很有帮助,但这并非必需。Donkeycar文档描述了如何在Raspberry Pi OS上安装软件,但是如何使用Raspberry Pi Imager安装Raspberry Pi OS以及如何使用raspi-config配置Raspberry Pi的具体细节,请参考树莓派文档,该文档非常详尽和良好。我建议您使用树莓派文档设置树莓派,然后稍微玩一下;使用浏览器访问网站并观看YouTube视频,比如这个拍摄的第一次户外比赛。使用文本编辑器编写和保存文件。打开终端并学习如何导航文件系统(见下文)。如果您对树莓派感到熟悉,那么您就不需要同时学习树莓派和Donkeycar。
  • Linux 命令行 Shell。命令行 Shell 通常也被称为终端。您将在终端中输入命令来安装和启动Donkeycar软件。Donkeycar文档描述了这是如何工作的。还有必要了解如何导航文件系统以及如何列出、复制和删除文件和目录/文件夹。您还可以远程访问您的车辆(https://www.raspberrypi.com/documentation/computers/remote-access.html);因此,您需要知道如何启用和连接WIFI以及如何从主机计算机启用和启动SSH终端或VNC会话以在您的车辆上获得命令行。

开始驾驶。

构建Donkeycar安装Donkeycar软件之后,您可以选择自动驾驶的模板,并校准您的车辆,然后开始驾驶

修改你的汽车行为。

Donkeycar包括一些预先构建的模板,只需更改配置即可轻松入门。预先构建的模板可能是你所需要的全部,但如果你想走得更远,可以更改模板或创建自己的模板。Donkeycar模板被组织成一个软件部件的流水线,在每次通过车辆循环时按顺序运行,读取输入并将输出写入车辆的软件内存。一个典型的汽车具有以下部件:

  • 从摄像头获取图像。Donkeycar支持许多不同类型的摄像头,包括3D摄像头和lidar
  • 从GPS接收器获取位置读数。
  • 游戏手柄或遥控器获取转向和油门输入。Donkeycar支持PS3、PS4、XBox、WiiU、Nimbus和Logitech蓝牙游戏手柄,以及与RaspberryPi兼容的任何游戏手柄。Donkeycar还实现了一个WebUI,允许连接任何兼容浏览器的游戏手柄,并提供一个适用于手机的屏幕触摸控制器。
  • 控制汽车的驱动系统油门和转向。Donkeycar支持各种驱动系统,包括大多数遥控汽车常见的ESC+舵机配置。它还支持各种差动驱动配置。
  • 保存遥测数据,如摄像头图像、转向和油门输入、lidar数据等。
  • 自动驾驶汽车。Donkey支持三种类型的自动驾驶系统;深度学习自动驾驶系统、GPS自动驾驶系统和计算机视觉自动驾驶系统。深度学习自动驾驶系统支持Tensorflow、Tensorflow Lite和Pytorch以及许多模型架构

如果没有你想要的Donkeycar部件,那么可以编写自己的部件并将其添加到车辆模板中。

#定义一个每秒拍摄并记录10张照片的车辆。

import time
from donkeycar import Vehicle
from donkeycar.parts.cv import CvCam
from donkeycar.parts.tub_v2 import TubWriter
V = Vehicle()

IMAGE_W = 160
IMAGE_H = 120
IMAGE_DEPTH = 3

#添加一个摄像头部件
cam = CvCam(image_w=IMAGE_W, image_h=IMAGE_H, image_d=IMAGE_DEPTH)
V.add(cam, outputs=['image'], threaded=True)

#添加一个tub部件来记录图像
tub = TubWriter(path='./dat', inputs=['image'], types=['image_array'])
V.add(tub, inputs=['image'], outputs=['num_records'])

#以10赫兹的速率启动驾驶循环
V.start(rate_hz=10)

请查看主页或加入Discord服务器以了解更多信息。

享受吧!


为什么叫Donkey(驴)?

该项目的最终目标是构建一些有用的东西。驴是最早被驯化的载重动物之一,它们以顽固著称,并且对儿童安全。在汽车能够从城市的一边导航到另一边之前,我们将暂时不以某个天体命名它。