Python 介绍树莓派机器人车详解

我想向你介绍 T.A.R.A.S,机器人车。T.A.R.A.S 实际上是一个 backronym;我是从一位帮助我起步的商业导师那里得名的。在绞尽脑汁试图想出一些办法后,我终于想出了如何把我的朋友塔拉斯变成 T.A.R.A.S,这个神奇的树莓派自动安全代理。从名字上你可能可以看出,T.A.R.A.S 将为我们监控一切,并充当自动保安。

T.A.R.A.S 将使用覆盆子 Pi 作为大脑和电机驱动板来控制摄像机框架和轮子的运动。T.A.R.A.S 还将具有传感器输入以及 LED 和蜂鸣器输出。T.A.R.A.S 将是我们在本书中获得的技能的集合。

我们将在本章中构建 T.A.R.A.S 并编写代码来控制它。

本章将介绍以下主题:

我把 T.A.R.A.S 设计得尽可能简单。T.A.R.A.S 由激光切割硬纸板底盘、3D 打印转轮和摄像头安装部件组成(也可以选择使用激光切割转轮安装)。为了让您构建 T.A.R.A.S,我为机箱提供了 SVG 文件,为 3D 打印部件提供了 STL 文件。所有其他零件可在线购买。以下是 T.a.R.a.S.的照片。组装前:

  1. 伺服摄像机支架(如图所示已装配)-搜索www.aliexpress.com中的摄像机平台防振摄像机支架

  2. 3D 打印支架(摄像头支架)

  3. 车轮用直流电机(显示时附带电机线和延长线)-搜索www.aliexpress.com智能汽车机器人塑料轮胎车轮

  4. 车轮支架(3D 打印)

  5. 发光二极管

  6. LED 灯座搜索www.aliexpress.com寻找 LED 灯座黑色夹

  7. 摄像机支架(激光切割)

  8. 主动蜂鸣器搜索www.aliexpress.com查找 5V 主动蜂鸣器

  9. 距离传感器(HC-SR04)-搜索www.aliexpress.com以查找 HC-SR04

  10. 备用车轮支架(激光切割)

  11. Raspberry Pi 摄像头(长镜头版本,无电缆显示)-搜索www.aliexpress.com

  12. 电机驱动板(激光切割)

  13. 车轮搜索www.aliexpress.com智能汽车机器人塑料轮胎车轮

  14. 机器人车底盘(激光切割)

  15. L298N 电机驱动板模块的电机驱动板搜索www.aliexpress.com

  16. 直流桶形插孔(图中附有电线)-www.aliexpress.com

  17. Adafruit 16 通道 PWM/伺服 HAT-https://www.adafruit.com/product/2327

  18. 覆盆子皮

  19. 40 针单列公针头连接器带(未显示)-www.aliexpress.com

  20. 各种松动的导线和试验板跳线(未显示)-购买许多不同的导线和试验板跳线是个好主意;您可以在www.aliexpress.com中搜索试验板跳线

  21. 热收缩(未显示)

  22. 带直流插孔的 7.4V 可充电电池(未显示)-搜索www.aliexpress.com以查找 7.4V 18650 锂离子可充电电池组(请务必在 16 中选择一个与直流桶插孔匹配的电池组)

  23. 除第 22 部分外,您可以使用 AA 大小的动力电池储物箱,而不是第 16 部分和第 22 部分-www.aliexpress.com

  24. 微型试验板(未显示)-搜索www.aliexpress.com查找 SYB-170 微型无焊原型试验试验板

  25. 各种防区(未显示)-防区高度应至少为 40 mm;尽可能多的对峙是一个好主意,因为它们似乎总是派上用场,你可以在www.aliexpress.com上搜索电子领域的对峙

  26. 330 和 470 欧姆电阻器(未显示)-购买许多电阻器是个好主意,因为它们确实很方便;在www.aliexpress.com中搜索电阻器组

  27. 便携式 USB 电源包(未显示)-此类型用于在移动中为手机充电;我们将使用此电源组为树莓 Pi 供电

以下是建造 T.A.R.A.S(我们的机器人车)的步骤。您的 T.A.R.A.S 版本可能与本书中使用的版本相近,或者您可以根据需要进行修改。首先,我使用的是一个长镜头的覆盆子 Pi 相机模块(夜视模型有更长的镜头)。我还使用 Adafruit 16 通道 PWM/伺服帽驱动摄像机支架的伺服。您可以选择使用另一块板或完全放弃伺服系统,将相机安装在固定位置。

One of my favorite robot backronyms is Vincent from the 1980s Disney movie The Black Hole. Vincent, or more accurately, V.I.N.CENT, stands for Vital Information Necessary Centralized. If you know the movie, you will know that V.I.N.CENT is quite clever and very polite. V.I.N.CENT is also a bit of a know-it-all and can be a little irritating at times. 

我已经包括了两种不同的方式来安装车轮马达:使用 3D 打印车轮安装或使用激光切割车轮安装。我更喜欢 3D 打印支架,因为它允许螺钉埋头,从而在底盘和车轮之间提供更多空间

If you are 3D printing the wheel mounts and camera brace yourself, you may use whichever solid filament type you desire. Personally, I used PETG as I like the way it bends without breaking. PLA is fine as well. Be sure to 3D print the wheel mounts on their sides so that they print wide and not high. This will result in a print that may be a little messy around the holes (for PETG, at least), but it will be a much stronger part. I managed to print a single wheel mount in 30 minutes and the camera brace in about 90 minutes.

建造机器人车需要一个下午的时间

如果你没听说过的话,纽约市有一家很棒的公司,为全世界的电子爱好者提供服务,名为 Adafruit。Adafruit 为 Raspberry Pi 创建了许多帽子硬件添加在顶部),包括我们将用于我们的机器人的那顶,Adafruit 16 通道 PWM/伺服帽子。

有了这顶帽子,控制伺服系统所需的重复时间脉冲从树莓 Pi 卸下并放到帽子上。有了这顶帽子,你可以控制多达 16 个伺服。

以下是帽子及其附带的标题的照片:

出于我们的目的,我们需要将头部焊接到电路板上:

  1. 由于我们只使用两个伺服,所以将两个3 针伺服头焊接到电路板上。
  2. 焊接2 X 20 针头。在焊接过程中固定电路板和引脚的一个好方法是使用一些 Play Doh!(焊接时,确保不要用热烙铁太靠近 Play Doh!):

  1. 由于我们将使用电机板上的电线为伺服板供电,所以将电源头焊接到电路板上。

  2. 我们需要从 Raspberry Pi 访问 GPIO 引脚,因此必须添加另一个引脚行。从 40 针收割台接头上断开 25 针。将引脚焊接到电路板上:

我们需要连接电机,使两个电机始终在同一时间、同一方向旋转:

  1. 切割八根相等的电线,并从所有电线的两端剥去一点绝缘层:

  1. 将一端焊接到电机的每个端子上:

  1. 对端子进行热缩处理,使其绝缘:

  1. 将每台电机的电线分组并连接,以便一台电机顶部的电线连接到另一台电机底部的电线(为清晰起见,请参见照片):

  1. 为了获得额外的强度和保护,您可以使用热收缩来使电线保持在一起(在前一张照片中,使用了黄色热收缩)。
  2. 可以在末端添加延长线(我选择在我的构建中这样做,因为导线长度有点短)。在将电机连接至电机驱动器板时,添加到端部的蓝色标签胶带将有助于解决以下问题:

通过我们的伺服摄像机支架,T.A.R.A.S 能够将头部左右移动,上下移动。这对于我们在第 14 章中使用 Python控制机器人车的项目非常有用。当你把伺服摄像机支架的零件倒在桌子上时,你将如何把它组装成有用的东西似乎有点让人望而生畏。

以下是伺服摄像机支架部件的照片,。我不想试着给零件命名,我只想写下字母,并参考字母进行组装:

要组装伺服摄像机支架,请执行以下操作:

  1. 将零件E放置在零件A的内部,使零件E的突出气缸面朝上:

  1. 翻转零件E至零件A,并使用组件中最小的螺钉拧紧:

  1. 使用小螺钉将伺服装置拧入零件D(见下图):

  1. 将零件B放置在伺服上,并将零件F插入为其制作的凹槽中。将零件F拧入位。伺服装置应能在连接到零件BF时自由上下移动:

  1. 将组装好的零件翻转过来,将另一个伺服插入零件B

  1. 将零件C放置在伺服上。您可能需要稍微弯曲零件D以使零件C适合:

  1. 将组装好的零件翻转过来,将零件BC拧在一起:

  1. 将组装好的零件插入零件E

  1. 将零件A拧到组装件的底部:

让我们面对现实吧。机器人不是机器人,除非它有某种面孔(向 R2D2 道歉)。在这一步中,我们将附加零件以构建 T.A.R.A.S.的头部和面部。

According to Rodney Brooks, founder of Rethink Robotics, robots do not have faces just to make them friendly. Faces on robots are used as visual cues for humans to pick up on. For example, if a robot moves its head in a certain direction, we can safely assume that the robot is analyzing something in that direction. When we move the head of T.A.R.A.S, we are giving cues to those around us that T.A.R.A.S is looking that way.

以下是完成头部所需零件的照片:

我们现在将组装 T.A.R.A.S.的头部。以下是零件列表:

  • A:树莓 Pi 摄像头模块
  • B:摄像机安装支架
  • C:带伺服的组装式摄像机支架
  • D:3D 打印支架
  • E:距离传感器
  • F:螺钉

要组装头部,请执行以下操作:

  1. 在 Raspberry Pi 摄像头模块和距离传感器上贴上小块双面泡沫胶带:

  1. 将 Raspberry Pi 摄像头模块和距离传感器固定在 3D 打印支架上的适当位置(请参见下图以了解详情):

  1. 将组件滑入组装好的摄像头支架上,并将其拧入到位(请参见下图以了解详情):

  1. 将阴到阴跳线添加到距离传感器的引脚。在这里,我使用了一个四针连接器来连接 4 个单独的针。您可以使用单独的跳线:

  1. 转动组装件并在齿上贴上标签:

直流电机板位于 T.A.R.A.S 的背面,装有移动车轮的直流电机驱动器。DC 桶形插孔和尾灯 LED 也位于 DC 电机板上。我们将通过创建尾灯 LED 开始此步骤。

下图显示了制造尾灯 LED 所需的零件:

以下是零件列表:

  • A:红色跨接导线(一端必须为母端)
  • B:棕色跨接导线(一端必须为母端)
  • C:红色 LED
  • D:绿色 LED
  • E:330 欧姆电阻器
  • F:热收缩

以下是创建 LED 尾灯的步骤:

  1. 将 330 欧姆的电阻器焊接到 LED 的阳极(较长的支脚)上。
  2. 对连接件进行热缩处理,以提供强度和绝缘性。
  3. 剥去红色跨接导线的一端(确保另一端为阴螺纹),并将其焊接到电阻器的端部。这是组件的正端:

  1. 在整个电阻器上施加热缩:

  1. Solder a brown wire to the cathode and apply heat shrink (in this photo, we show a red LED with an extended brown wire). This is the negative end of the assembly:

  2. 现在我们已经完成了两个尾灯的组装,让我们把直流电机板放在一起。以下是我们需要将直流电机板组装在一起的部件的照片:

以下是零件列表:

  • A:红色尾灯
  • B:绿色尾灯
  • C:短电源线
  • D:电机驱动板
  • E:直流电机板(激光切割)
  • F:LED 灯座
  • G:直流筒式千斤顶
  • H:40 毫米对峙
  • 八个 M3X10 螺栓(未显示)
  • 四个 M3 螺母(未显示)
  • 拉链带(未显示)

让我们开始把它放在一起:

  1. 使用四个 10 mm M3 螺栓将 40 mm 压头(H)拧到E上。有关正确方向,请参阅以下照片:

  1. 使用四个 10 mm M3 螺栓和螺母将电机驱动器板(D)拧到E上。有关正确方向,请参阅以下照片:

这是侧视图:

  1. 将电线C连接到直流桶形插孔(G端口)。确保红色导线连接正极,黑色导线连接负极。将导线C的另一端连接到电机驱动板(D中)。确保红色导线连接 VCC,黑色导线连接 GND。用扎带将直流圆筒千斤顶(G固定到直流电机板(E上)。有关说明,请参见以下照片:

这是接线图:

  1. 或者,您可以使用四块 AA 电池组供电。确保采用与连接到 VCC 的红线和连接到 GND 的黑线相同的接线:

  1. 将尾灯(B穿过 LED 孔和 LED 支架(F):

  1. 将 LED 支架(F推到位。如果孔太紧,则使用小锉刀将孔稍微大一点(LED 支架应紧密配合)。对红色尾灯重复以下步骤:

在此步骤中,我们将开始将零件连接到机箱。我们将首先固定车轮支架,然后固定电机。我们将在这一步中使用的车轮支架是 3D 打印的

此步骤所需的零件如下图所示:

以下是零件列表:

  • A:车轮
  • B电机
  • C:替代车轮安装(激光切割)
  • D:车轮支架(3D 打印)
  • E:机器人车底盘(激光切割)
  • 八个 M3 10 mm 螺栓(未显示)
  • 八个 M3 30 mm 螺栓(未显示)
  • 16 M3 螺母(未显示)

让我们开始把它放在一起:

  1. 使用 10 mm M3 螺栓和螺母,将每个车轮支座(D连接到底盘(E上),使螺栓头平放在车轮支座(D上)。请参阅以下照片以了解详情:

  1. 使用 30 mm M3 螺栓和 M3 螺母,使用车轮支架(D将电机(B)安装到底盘(E)上。确保螺栓头平放。请参阅以下照片以了解详情:

  1. 或者,您可以使用零件C而不是零件D来安装车轮。有关说明,请参见以下照片:

  1. 将车轮(A连接到电机(B上):

接下来,我们将连接电机传动板总成并连接车轮电机:

  1. 从步骤 5 开始,使用四个 M3 10 mm 螺栓将直流电机板组件固定到底盘顶部。确保将车轮电机的导线穿过中心孔。尾灯 LED 应位于机器人车的后部。有关说明,请参见以下照片:

  1. 将车轮电机的导线安装到电机驱动器板上的接线盒 OUT1、OUT2、OUT3 和 OUT4 中。右侧导线应连接至 OUT1 和 OUT2,左侧导线应连接至 OUT3 和 OUT4。此时,右导线中的哪一条连接到 OUT1 或 OUT2(或左导线连接到 OUT3 和 OUT4)并不重要。有关说明,请参见以下照片:

机器人车开始看起来像机器人车了。在这一步中,我们将连接摄像机支架(或 T.A.R.A.S 的头部)和树莓派。

我们先从覆盆子皮开始。这就是我们在如何将树莓 Pi 和 Adafruit 伺服板安装到底盘上时必须有点创意的地方。Adafruit 伺服板是一个令人惊讶的小板,但该套件缺乏所需的对峙,以保持板的一部分接触树莓派。我发现很难将 M3 螺栓穿过板上的安装孔。我的解决方案是使用 30 mm 的母对头将覆盆子 Pi 连接到底盘,使用 10 mm 的母对头将覆盆子 Pi 从 Adafruit 伺服板上分离。

以下是我收集的树莓派与一些对峙的照片:

以下是上图中的组件:

  • A:15 毫米男女尼龙对峙
  • B:10 毫米女对女尼龙对峙
  • C:树莓派

要创建此回路,请执行以下操作:

  1. 通过将A的一端拧入另一端,创建四个 30 mm 内螺纹至外螺纹压铆螺母。通过覆盆子皮将B支架拧到A支架上(详见下图):

  1. 使用四个 10 mm M3 螺栓将覆盆子 Pi 固定到机箱上:

现在,让我们连接摄像机支架,连接摄像机,并安装 Adafruit 伺服板:

  1. 使用四个 10 mm M3 螺钉和 M3 螺母将摄像头支架连接到机箱前部(请参见下图以了解详情):

  1. 通过 Adafruit 伺服板的适当开口插入摄像头模块的带状电缆(请参见下图以了解详情):

  1. 将 Adafruit 伺服板固定到 Raspberry Pi 上:

要安装在底盘上的最终部件是蜂鸣器和分压器。我们需要分压器,以便从距离传感器的回波引脚向树莓 Pi 提供 3.3V 电压。对于蜂鸣器,我们使用的是有源蜂鸣器。

An active buzzer omits a sound when a DC voltage is applied to it. Passive buzzers require an AC voltage. More coding is required for a passive buzzer. Passive buzzers are more like little speakers and, as such, you can control the sound coming from them.

以下是完成此步骤所需的组件:

  • A:微型试验板
  • B:棕色母材对母材跨接导线
  • C:红色母材对母材跨接导线
  • D:470 欧姆电阻
  • E:330 欧姆电阻
  • F:有源蜂鸣器

按照以下步骤完成电路:

  1. 要创建分压器,将 330 欧姆(E和 470 欧姆(D电阻器串联在试验板(a上):

  1. 将红色跳线(C连接到蜂鸣器的正极端子,将棕色跳线(B连接到另一个端子:

  1. 将蜂鸣器(F安装在底盘上适当的孔中。使用双面泡沫胶带,将微型试验板(A连接到机箱前部(请参见下图以了解详情):

现在是你一直在等待的部分:连接所有的电线!好吧,也许在老鼠窝里整理电线来弄清楚它们不是你认为的好时机。然而,只要有点耐心,这一步就会在你意识到之前结束。

参考以下接线图,将所有导线连接到适当的位置。电机驱动板的电源和电机连接不包括在我们的接线图中,因为我们在第 7 步“电机接线”中处理了这一问题。我已经注意到根据电线颜色的用途对其进行分组。请注意,接线图不是按比例绘制的:

要连接 T.A.R.A.S,请执行以下连接:

  • L298N(电机板)上从伺服帽到 In1 的针脚 5
  • L298N(电机板)上从伺服帽到 In2 的针脚 6
  • L298N(电机板)上从伺服帽到 In3 的针脚 27
  • L298N(电机板)上从伺服帽到 In4 的针脚 22
  • 从 HC-SR04(距离传感器)到伺服帽上针脚 17 的触发
  • 从 HC-SR04(距离传感器)到微型试验板上 330 欧姆电阻器左侧的回波
  • 从 HC-SR04(距离传感器)到伺服帽上 5 伏的 VCC
  • 从分压器到伺服帽上针脚 18 的输出
  • 从 HC-SR04 接地至微型试验板上 470 欧姆电阻器的右侧
  • 从迷你试验板接地到伺服帽上的接地
  • +从伺服帽电源端子(帽的左侧)到电机驱动板上的+5V 之间的 5V 电压(使用较粗的导线)
  • 伺服帽电源端子(帽的左侧)与电机驱动板上的 GND 之间的 GND(使用较粗的导线)
  • 从摄像机支架(pan)底部到伺服帽上的伺服零点的伺服
  • 从摄像机支架中间(倾斜)到伺服帽上的伺服装置
  • 从绿色尾灯到伺服帽针脚 20 的红线
  • 从绿色尾灯到伺服帽接地的棕色电线
  • 从红色尾灯到伺服帽针脚 21 的红线
  • 红色尾灯上的棕色电线至伺服帽上的接地
  • 从主动蜂鸣器到伺服帽针脚 12 的红线
  • 从主动蜂鸣器到伺服帽接地的棕色电线

为了给 T.A.R.A.S.供电,我们将使用两个便携式电源。对于 Raspberry Pi,我们将使用标准 USB 便携式电源组。对于电机驱动板和伺服帽,我们将使用可充电的 7.4V 电池。要安装电池,请执行以下操作:

  1. 以下是我们将用于机器人车的两个电池。左边的是覆盆子 Pi,使用 USB 到 micro USB 接口。右侧为电机驱动器板,使用标准直流插孔:

  1. 将 velcro 尼龙粘条剥离并粘贴到两个电池和机箱上,然后将电池放置在机箱上:

  1. 经过一些急需的梳理(清理电线),T.A.R.A.S 已准备就绪:

第 14 章中,我们将开始编写代码来控制 T.A.R.A.S。在我们开始编写代码之前,最好先看看如何设置 Raspberry Pi 来访问所需的接口。我们应该安装创建控制代码所需的库。

为确保我们为机器人车启用了所需的推理,请执行以下操作:

  1. 导航至应用程序菜单|首选项|树莓 Pi 配置

  2. 单击接口选项卡

  3. 启用摄像头、SSH 和 I2C。您可能需要重新启动 Raspberry Pi:

If you haven't changed the default password for the pi user, you may get a warning about it after you enable SSH. It's a good idea to change the password from the default. You may change it under the System tab in the Raspberry Pi Configuration tool.

要访问 Adafruit 伺服帽,必须下载并安装库:

  1. git用于从互联网下载 Adafruit 伺服帽库。用 Raspbian 打开终端,然后键入以下内容:
sudo apt-get install -y git build-essential python-dev
  1. 如果git已安装,您将收到一条消息,表明已安装。如果没有,则继续安装git
  2. 在终端中键入以下内容以下载库:
git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
  1. 键入以下内容以更改目录:
cd Adafruit_Python_PCA9685
  1. 使用以下命令安装库:
sudo python3 setup.py install
  1. 该库已成功安装到 Thonny 中的工具管理软件包。您应该看到以下列表:

在本章中,我们建造了我们的机器人车 T.A.R.A.S。我们首先概述了各个部分,然后把它们放在一起。如果你以前从未制造过机器人,那么恭喜你!你正式进入了机器人世界。你从这里把它带到哪里取决于你。

在本书的其余部分中,我们将对 T.A.R.A.S 进行编程以执行任务。在第 14 章使用 Python控制机器人车,T.A.R.A.S 将被召唤参与一项秘密任务。

  1. 对还是错?T.A.R.A.S 代表技术先进的机器人。
  2. 主动蜂鸣器和被动蜂鸣器的区别是什么?
  3. 对还是错?T.A.R.A.S 有眼睛摄像头。
  4. 电机驱动板的作用是什么?
  5. Adafruit 伺服帽的用途是什么?
  6. 3D 打印车轮支架需要多长时间?
  7. 机器人脸的用途是什么?
  8. 对还是错?Velcro 尼龙粘条是将电池固定在底盘上的好方法。

教程来源于Github,感谢apachecn大佬的无私奉献,致敬!

技术教程推荐

研发效率破局之道 -〔葛俊〕

高并发系统设计40问 -〔唐扬〕

架构实战案例解析 -〔王庆友〕

大厂晋升指南 -〔李运华〕

跟着高手学复盘 -〔张鹏〕

说透芯片 -〔邵巍〕

零基础入门Spark -〔吴磊〕

玩转Vue 3全家桶 -〔大圣〕

手把手带你写一个 MiniTomcat -〔郭屹〕