建造一艘自动驾驶船





船体








船体是船体中最大的部分。不仅因为它的尺寸巨大(100cm*80cm),还因为建造这个定制结构花费了大量时间。如果我再做一次,我肯定会选择现成的零件。不幸的是,现成的遥控船不在我们的考虑范围内,因为这些船的有效载荷能力非常有限。像冲浪板或冲浪板或五金店的几根 PVC 管之类的东西会是一个更简单的解决方案,我只能推荐。
无论如何,我们的船体始于 Fusion 360 中的 3D 模型。我制作了一个非常详细的模型,并在我们真正开始建造它之前经过了多次迭代。我确保为模型中的每个组件赋予适当的重量,甚至对内部进行了建模。这使我在建造船之前就知道了船的大致重量。我还做了一些浮力校准,方法是插入一条“水线”,用它切割车辆并计算水下的体积。这艘船是双体船,因为这种车辆比单体船具有更高的稳定性。
经过大量的建模时间,我们开始将船体栩栩如生地呈现出来,方法是用聚苯乙烯板切割出两个船体的基本形状。然后将它们切割成形状,填补孔洞,并进行大量打磨。连接两个船体的桥梁只是一个大木箱。
我们用 3 层玻璃纤维覆盖了所有东西。这一步花了大约 3 周的时间,需要数天的手工打磨才能获得相当光滑的表面(0/10 不推荐)。之后,我们将其涂成漂亮的黄色,并加上了“Kenterprise”这个名字。这个名字是德语单词“kentern”(意为沉没)和星际迷航宇宙飞船“USS Enterprise”的组合。我们都认为这个名字绝对适合我们创造的这个庞然大物。
推进系统





没有马达或船帆的船,其行驶特性就如同一块浮木。因此,我们需要在空船体上添加推进系统。
我想再给你一个剧透:我们选择的发动机功率太大了。我将描述当前的解决方案及其缺点,并提出一种替代推进系统。
目前的解决方案
我们不知道这艘船到底需要多大的推力,所以我们买了两台赛艇发动机。每台发动机都用于驱动一艘 1 米长的遥控赛艇,相应的电子速度控制器 (ESC) 可以连续输出 90A 电流(这种消耗会在一小时内耗尽一个大型汽车电池)。
它们还需要水冷。通常,您只需用一些管子连接 ESC 和电机,将入口放在船的前部,将出口放在螺旋桨的前面。这样,螺旋桨就可以将湖水拉过冷却系统。然而,所讨论的湖泊并不总是干净的,这种解决方案可能会堵塞冷却系统并导致电机在湖上出现故障。这就是为什么我们决定采用内部冷却回路,将水泵入船体顶部的热交换器(图 3)。
目前,船上有两个水瓶作为水箱,没有热交换器。水箱只是增加了热质量,因此发动机需要更长的时间来加热。
电机轴通过两个万向节、一个轮轴和一个所谓的尾管连接到螺旋桨,目的是防止水进入。您可以在第二张图片中看到此组件的侧视图。电机以一定角度安装在 3D 打印支架上,螺旋桨也是打印的(因为我把旧的弄坏了)。我很惊讶地得知这些螺旋桨可以承受电机的力。为了支持它们的强度,我将叶片做成 2 毫米厚,并用 100% 填充物打印它们。设计和打印螺旋桨实际上是一个非常酷的机会,可以尝试不同类型的螺旋桨并找到最有效的螺旋桨。我附上了我的螺旋桨的 3D 模型。
可能的替代方案
测试表明,船只只需要 10-20% 的油门范围即可缓慢移动(速度为 1m/s)。直接将油门开到 100% 会导致巨大的电流峰值,从而完全损坏整艘船。此外,冷却系统的要求也相当烦人。
更好的解决方案可能是所谓的推进器。推进器将电机直接连接到螺旋桨。然后将整个组件浸入水中并因此冷却。这是带有相应ESC的小型推进器的链接。它可以提供 30 A 的最大电流,这似乎是更合适的尺寸。它可能会产生更小的电流峰值,并且油门不必受到太大的限制。
转向




推进很酷,但船也需要转弯。有多种方法可以实现转弯。最常见的两种解决方案是舵和差动推力。
舵似乎是显而易见的解决方案,所以我们就选择了它。我在 Fusion 中建模了一个舵组件,并用 3D 打印了舵、铰链和伺服支架。对于伺服器,我们选择了两个 25 公斤的大型伺服器,以确保相对较大的舵能够承受水的阻力。然后将伺服器放置在船体内部,并通过细线通过一个孔连接到外部的舵。我附上了舵运行的视频。观看这个机械组件移动非常令人愉快。
虽然舵看起来很棒,但第一次试驾发现,舵的转弯半径约为 10 米,这太糟糕了。此外,舵往往会与伺服器断开连接,使船无法操纵。最后一个弱点是那些电线的洞。这个洞离水太近了,倒车会导致船被淹没,从而淹没船体内部。
我没有尝试解决这些问题,而是将舵全部拆除,堵住洞,并寻求差动推力解决方案。使用差动推力时,两个电机会朝相反方向转动,使车辆转弯。由于船的宽度和长度几乎一样,并且电机的位置远离中心,因此可以当场转弯。它只需要一点配置工作(对 ESC 和主控制器进行编程)。请记住,如果其中一个电机发生故障,使用差动推力的船将绕圈行驶。由于上一步中描述的电流峰值问题,我可能经历过一两次这种情况。
电池







在我看来,遥控组件(例如这艘船中使用的组件)几乎可以用任何东西供电,从手表电池一直到核电站。显然,这有点夸张,但它们的电压范围相当广。此范围未写入数据表中,至少未以伏特为单位。它隐藏在 S 等级中。此等级描述了它可以处理多少个串联电池单元。在大多数情况下,它指的是锂聚合物 (LiPo) 电池。充满电时电压为 4.2V,电量耗尽时电压约为 3V。
船舶发动机声称能够处理 2s 到 6s,这意味着电压范围从 6V 一直到 25.2V。尽管我并不总是相信上限,因为一些制造商会将只能承受较低电压的组件放置在其电路板上。
这意味着只要能够提供所需的电流,就可以使用各种各样的电池。实际上,在制造出合适的电池之前,我试用了几种不同的电池。以下是这艘船(到目前为止)经历的三次电池迭代的简要概述。
1.锂聚合物电池组
当我们规划这艘船时,我们并不知道它会消耗多少能量。对于第一块电池,我们选择用众所周知的 18650 锂离子电池组装一个电池组。我们使用镍条将它们焊接成 4S 10P 电池组。该电池组的电压范围为 12V 至 16.8V。每个电池都有 2200mAh,额定最大放电率为 2C(相当弱),因此 2*2200mA。由于有 10 个电池并联,它可以提供仅 44A 的峰值电流,容量为 22Ah。我们还为电池组配备了电池管理板(稍后会详细介绍 BMS),用于平衡电荷并将电流限制在 20A。
测试船只后发现,20A 的最大电流远远低于电机消耗的电流,如果我们不小心操纵油门杆,BMS 就会不断切断电源。这就是为什么我决定桥接 BMS 并将电池直接连接到电机以获得完整的 44Amps。坏主意!!!虽然电池设法提供稍多一点的电力,但连接电池的镍条无法处理它。其中一个连接融化了,导致船的木质内部冒烟。
是啊,所以这个电池不太合适。
2. 汽车电池
为了验证我的 2020 年概念,我决定使用更大的电池。但是,我不想多花钱,所以我用了一块旧汽车电池。汽车电池不是为了完全放电和充电而设计的,它们应该始终保持充满电,并且只用于短时间电流爆发来启动发动机。这就是为什么它们被称为启动电池。将它们用作遥控车的电池会大大缩短它们的使用寿命。还有另一种铅电池,通常具有相同的外形尺寸,专门设计用于多次放电和充电,称为深循环电池。
我很清楚我的电池的缺点,但我想快速测试一下船,而且电池本来就很旧。好吧,它用了 3 个周期。现在,只要我踩油门,电压就会从 12V 降至 5V。
3.LiFePo4电池组
他们说“第三次是幸运的”。由于我仍然不想花自己的钱,我向我的大学寻求帮助。果然,他们一直都有我梦寐以求的电池。我们的大学参加了“学生方程式电动赛车”比赛,因此有一辆电动赛车。赛车队之前从 LiFePo4 电池换成了 18650 LiPo 电池,因为它们更轻。所以他们有一堆不再需要的旧 LiFePo4 电池。
这些电池的电压范围与 LiPo 或 LiIon 电池不同。它们的标称电压为 3.2V,电压范围为 2.5V 至 3.65V。我将 3 个 60Ah 电池组装成一个 3S 电池组。该电池组可以提供 3C 的峰值电流,即 180A,最大电压仅为 11V。我决定采用较低的系统电压来降低电机电流。这个电池组最终让我驾驶船超过 5 分钟并测试了自动驾驶能力。
关于电池充电和安全
电池会集中能量。能量会转化成热量,如果热量以电池起火的形式出现,那么你就有麻烦了。这就是为什么你应该以应有的尊重对待电池,并为其配备合适的电子设备。
电池单元有 3 种失效方式。
- 将其放电至最低额定电压以下(冷死亡)
- 使用超过其最大额定电压的电压进行充电(可能导致膨胀、火灾和爆炸)
- 吸收过多电流或使其短路(所以我必须解释为什么这可能不好)
电池管理系统可以防止所有这些事情的发生,这就是您应该使用它们的原因
布线

第一张图片显示了肌肉部分的接线。底部是电池,应该用合适的保险丝熔断(目前没有)。我添加了两个外部触点来连接充电器。用合适的 XT60 连接器替换它们是个好主意。
然后我们有一个大电池开关,它将系统的其余部分连接到电池。这个开关有一个真正的钥匙,让我告诉你,转动它并看到船开始运转真是太令人满意了。
大脑与电池接地相连,而 ESC 和伺服器则由分流电阻隔开。这样可以通过小橙色连接测量电流,因为它会在分流电阻上产生小电压降。其余的接线只是红色到红色和黑色到黑色。由于伺服器实际上不再使用,因此可以忽略它们。冷却泵是船上唯一需要 12V 的部件,如果电压高于或低于 12V,它们似乎无法正常工作。因此,如果电池电压高于 12V,则需要调节器,如果低于 12V,则需要升压转换器。
使用舵操纵时,两根 ESC 信号线都会进入大脑上的同一通道。但是,船只现在使用差动推力,又称滑移转向,因此每个 ESC 都需要有自己独立的通道,根本不需要伺服器。
大脑:组成部分




大脑是一个装满有趣电子产品的大盒子。其中许多可以在 FPV 竞速无人机中找到,其中一些实际上是从我自己的无人机中取出的。第一张图片显示了所有电子模块。它们使用黄铜 PCB 支架整齐地堆叠在一起。这是可能的,因为 FPV 组件具有称为堆栈站点的特殊外形尺寸。从下到上,我们的堆栈包含以下内容:
配电板 (PDB)
这个东西的功能正如其名称所暗示的那样,可以分配电力。电池的两根电线接入,它提供多个焊盘,用于将不同的模块连接到电池。这个 PDB 还提供 12V 和 5V 稳压器。
飞行控制器(FC)
飞行控制器运行 ArduPilot Rover 固件。它可以做很多事情。它通过多个 PWM 输出控制电机控制器,监控电池电压和电流,连接到不同的传感器和输入输出设备,还配有陀螺仪。你可以说这个小模块是真正的大脑。
遥控接收器
接收器连接到遥控器。在我的情况下,它是一个用于遥控飞机的 FlySky 遥控器,它有十个频道,甚至建立双向通信,因此遥控器也可以接收来自接收器的信号。它的输出信号通过一根线使用所谓的 I-bus 协议直接发送到 FC。
视频发送器 (VTX)
大脑盒配有一个小型模拟摄像头。摄像头的视频信号被传送到 FC,FC 会将屏幕显示 (OSD) 添加到视频流中,其中包含电池电压等信息。然后,它会被传送到 VTX,VTX 会将其传输到另一端的特殊 5.8GHz 接收器。这部分并不是绝对必要的,但能够看到船上看到的东西还是很酷的。
盒子顶部有一组天线。一个来自 VTX,两个来自 RC 接收器。另外两个天线是以下组件。
遥测模块
433MHz 天线属于遥测模块。这个小型发射器是一个输入/输出设备,可将飞行控制器连接到地面站(带有 433MHz USB 加密狗的笔记本电脑)。此连接允许操作员远程更改参数并从内部和外部传感器获取数据。此链接还可用于远程控制船只。
GPS 和指南针
船顶上的大圆形物体实际上不是天线。它有点像天线,但它也是整个 GPS 模块和指南针模块。正是它让船能够知道自己的位置、速度和方向。
由于无人机市场的增长,每个模块都有各种各样的组件可供选择。您最有可能想要切换的是 FC。如果您想连接更多传感器并需要更多输入,则有各种更强大的硬件选项。以下是 ArduPilot 支持的所有 FC 的列表,上面甚至还有一个树莓派。
下面是我使用的确切组件的列表:
- FC:综合 F4 V3S Aliexpress
- 遥控接收器:Flysky FS-X8B Aliexpress
- 遥测发射器套件:433MHz 500mW Aliexpress
- VTX:VT5803 全球速卖通
- GPS 和指南针:M8N Aliexpress
- 外壳:200x200x100 毫米 IP67 Aliexpress
- 遥控器:FLYSKY FS-i6X Aliexpress
- 视频接收器:Skydroid 5,8 Ghz Aliexpress
大脑:接线






大脑直接从电池获得工作电压。它还从电流分流器获得模拟电压,并输出两个电机的控制信号。这些是可以从大脑盒外部访问的外部连接。
内部看起来更加复杂。这就是我制作第一张图片中的小接线图的原因。这显示了我在上一步中描述的所有不同组件之间的连接。我还为 PWM 输出通道和 USB 端口制作了几条延长线,并将它们布线到外壳背面(见图 3)。
为了将堆栈安装到盒子上,我使用了 3D 打印底板。由于组件(尤其是 VTX)会产生热量,我还安装了 40 毫米风扇和另一个 3D 打印适配器。我在边缘添加了 4 个黑色塑料件,以便将盒子拧到船上,而无需打开盖子。所有 3D 打印部件的 STL 文件都已附上。我使用环氧树脂和一些热胶将所有东西粘到上面。
大脑:ArduPilot设置





Ardupilot Wiki 详细介绍了如何设置 Rover。以下是 Rover 文档。我在这里只介绍一点。在正确连接所有设备后,启动并运行 ArduPilot Rover 的步骤基本如下:
- 将 ArduPilot 固件刷入 FC(提示:您可以使用 Betaflight,一种常见的 FPV 无人机软件)
- 安装地面站软件(如 Mission Planner)并连接电路板(参见图 1 中的任务规划器 UI)
- 进行基本的硬件设置
- 校准陀螺仪和罗盘
- 校准遥控器
- 设置输出通道
- 通过查看参数列表进行更高级的设置(图 2)
- 电压和电流传感器
- 通道映射
- 发光二极管
- 进行试驾并调整油门和转向的参数(图3)
砰的一声,你就有了一个自动驾驶探测车。当然,所有这些步骤和设置都需要一些时间,校准指南针之类的事情可能相当繁琐,但借助文档、ArduPilot 论坛和 YouTube 教程,你最终可以实现这一目标。
ArduPilot 为您提供了一个包含数百个参数的高级平台,您可以使用这些参数构建几乎任何您能想到的自动驾驶汽车。如果您缺少某些东西,您可以与社区合作来构建它,因为这个伟大的项目是开源的。我只能鼓励您尝试一下,因为这可能是进入自动驾驶汽车世界最简单的方法。但这里有一个小的专业提示:在建造一艘巨大的遥控船之前,先用一辆简单的车辆尝试一下。
以下是我针对特定硬件设置所做的高级设置的小列表:
- 更改了 RC MAP 中的通道映射
- 音高 2->3
- 节流阀 3->2
- 激活 I2C RGB LED
- 框架类型 = 船
- 设置滑移转向
- 通道 1 = 油门左
- 通道 2 = ThrottleRight
- 通道 8 = 飞行模式
- 通道 5 = 布防/撤防
- 设置电流和电池监视器
- 电池监控=4
- 然后重启。BATT_VOLT_PIN 12
- 电池电流引脚 11
- 电池电压乘以 11.0
大脑:自定义LED控制器




让我们面对现实吧,RGB LED 非常酷。它们看起来不错,多年来一直在提高游戏 PC 的性能,对于 ArduPilot 车辆来说,它们实际上有其用途。它们向您展示控制器内部正在发生的事情。绿色代表好,红色代表坏,中间还有很多颜色代码,这里是完整列表。
ArduPilot Rover 支持多种类型的 LED,例如可寻址的 WS2812b RGB LED,又名 NeoPixels。但是,它仅支持开箱即用的单个 LED。它还支持脚本,因此您可以编写自己的 LED 控制脚本来控制更多 LED,但您的飞行控制器必须至少有 2MB 的 RAM 才能支持此功能。
我的 FC 不支持脚本,但我在大脑盒外部放置了 36 个可寻址 LED,我想看到它们全部亮起。为了实现这一点,我在 FC 和 LED 之间放置了一个 Arduino Nano。对于 FC,它的行为就像一个 I2C RGB LED 控制器,能够让 LED 灯带以单一颜色亮起。在另一端,它控制 36 个 WS2812b LED。我的自定义 LED 控制器基本上只是一个转换器,它将智能可寻址 LED 变成一个哑 RGB 灯带。我附上了 Arduino 草图。
我非常确定有一种方法可以让多个 WS2812b LED 仅使用 ArduPilot FC 工作。在谷歌搜索了一个小时后,这对我来说是最简单的方法。
执行几个任务





经过所有这些艰苦的努力,这艘船终于能够自动驾驶了,这意味着我可以点击任务规划软件中的地图来创建航点任务,将其上传到船上,然后它就会按照预先配置的路线行驶。虽然这艘船还没有完美调试,也没有经过充分测试(希望未来的项目组能做到这一点),但它能够遵循简单的路线,并向地面站发送恒定的遥测数据流。
对我来说,当我按下遥控器上的开关,船就开始自己移动,而我无需触摸油门杆,这真是一个神奇的时刻。而且路线高度可重复。我只需将航点地图存储在一个小文件中,船就会一次又一次地沿着相同的路线行驶。这使得可以对湖面上的某些点进行采样并随时间生成热图。这可以使趋势变得明显,而这些趋势通常发生得太慢或规模太大而无法被注意到。因此,由于所有参与创建 ArduPilot 的人的出色工作,Kenterprise 是一款相对易于操作的出色调查工具。
我希望你喜欢这个指导,也希望你对 ArduPilot 着迷。
感谢您的阅读,也非常感谢 2019 年支持我们项目团队的所有人以及我在 2020 年升级期间给予我支持的所有人。特别感谢 Ammar 对我的帮助。
如果您有任何疑问,本 Instructable 未回答,请随时在评论中留言。我会尽力回复并在必要时进行扩展,尽管可能不会立即回复。此外,如果您构建了自己的 ArduPilot 探测车,请分享。我很乐意看看它。还有一件事,如果您喜欢这个项目,您可能想在 2020 年 Make it Move 大赛中为它投票。
快乐制作











