如何利用ESP-32构建一辆探测车
我们最初设想这个项目是建造一辆太空探测车,使其能够在类似火星或月球的静态环境中自主行驶。然而,我们意识到这在之前已经有人做过,因此我们希望探索构建一个更具挑战性的动态环境,让探测车面临更复杂的任务。
为了帮助我们的探测车学会在崎岖不平、难以预测的地形上行驶,我们正在建造一个可变形的障碍赛道。可以把它想象成一个六边形网格的踏步单元,每个单元都能自行调节高度。每个单元机器人可以在车辆前方移动,以扩展空间,从而创造出无限延伸的环境。
我们使用ESP-32控制细胞机器人上的步进电机,使平台上下移动,从而即时形成新的坡道、凹陷和障碍物。由于这种物理环境可以自动改变布局,机器人因此不断面临新的挑战,帮助我们研究出在复杂地形中最佳的转向和导航方法。
动机/相关作品
我们的最初目标是创建一个自动变化的、限定在特定区域内的环境。其理念是模拟不同的环境,通过让环境中的某些区域上升或下降,从而形成丘陵或山谷,供机器人进行穿越。
然而,我们很快意识到这可能过于困难——一个全自动环境所需的网格单元数量很可能无法实现。因此,我们希望制作出一个最小可行的原型,以传达我们的想法。
通过“移动细胞为机器人创建无限环境”的理念,我们仅需两个功能细胞即可实现这一设想。
描述与开发
垂直机构
我们的第一步是设计细胞平台上下移动的机构。根据课堂所学,目前主要有两种电机:伺服电机和步进电机,两者均可实现旋转运动。由于我们的细胞需要垂直方向的线性运动,我们首先寻找一种可作为电机线性执行器的初始设计方案。我们找到了四种方案,其中两种适用于伺服电机,两种适用于步进电机。这些方案的图片如下所示。
每个设计都提供了.stl文件。经评估,右上角的设计(步进电机,#1)效果最佳。该设计的零件/齿轮较少,且无需复杂的打印工艺。其他设计则带有支撑结构,拆卸起来较为困难。
为确保齿轮与电机的最佳匹配,对不同齿轮公差进行了研究。最初测试的公差范围为0至2.5毫米,以0.5毫米为间隔。进一步优化后的公差范围为0.6至0.95毫米,以0.05毫米为间隔。结果表明,0.6毫米的公差是实现轴上导轨平稳运动、用于线性驱动的理想选择。
六边形蜂窝结构设计
第二步是利用第一步确定的垂直机构来设计六边形蜂窝机器人。我们从网上找到的线性驱动设计方案提供了起点,但缺少支撑结构以实现垂直运动。因此,我们为此设计了两种方案。第一种方案由两个矩形部件组成,用于支撑位于中心位置的电机,如下图所示。
这个设计虽然有效,但缺乏用于存放其他硬件(如面包板和电机驱动器)的底座,而且安全性也不高。第二个设计则是一个更大的结构,配有定制的六边形底板,并将电机安装在空心长方体内部。下图展示了该设计的示意图。
在课程演示中,使用改进后的支撑结构设计进行了线性驱动机构的现场演示。通过编程调整平台高度,现在可以在垂直方向上动态控制环境。
第三步是实现水平方向环境的动态控制。为此,细胞机器人需要能够通过轮子在地面上移动。我们决定采用常见的黄色TT直流电机来实现这一功能。选择直流电机而非步进电机(我们用于垂直线性驱动)的原因在于,直流电机速度更快。这一点非常重要,因为当仅使用少量有限的细胞时,必须实现细胞机器人的快速水平运动,以实现“无限”的环境尺寸。为此,我们采用了与TT直流电机相匹配的电机轮。
确定电机和轮子后,对电池组的设计进行了调整,以留出安装轮子的空间。为确保电机牢固固定在电池组上,设计中增加了专用支架。最后一步是设计平台,通过制作与底座结构尺寸相匹配的六边形形状来完成。导轨安装在平台的中心位置。
六边形单元的最终设计如下所示,相关 .f3d 文件请见附件。
六边形电池单元的电路设计/接线图如下。
驱动六边形单元的代码可在附件中找到。
机器人汽车设计
我们设计了一款简单的机器人汽车,通过在平台上移动来穿越环境。这款汽车旨在模仿火星或月球探测车在复杂或未知地形上的行驶方式。我们以网上可获得的小型汽车底盘作为设计起点,随后对底盘进行改造,在车顶加装一块面包板支架,并将电池和驱动器安装在车内。电线则通过汽车后部的后备箱布线。该机器人汽车采用两轮驱动,由安装在车辆前部的步进电机驱动。
机器人的底盘设计如下,包括薄型和宽型两种版本。相关 .f3d 文件也附在附件中。
机器人的电路设计/接线图如下所示。
完整实施
完整的实现概览图如下所示,它展示了本项目中软件(用于配置机器人的程序)与硬件(细胞机器人和探测车)组件之间的交互关系。
限制
在我们最初的环境设计中,计划使用传感器(温度、陀螺仪、LiDAR)来支持车辆在平台上的自动检测及其他功能。但由于设计蜂窝机器人时面临的现有挑战规模较大,最终未能将此功能纳入最终设计。该项目的另一个限制是,由于初期仅有少数步进电机,我们仅设计了单轴单步进电机的蜂窝机器人。这导致了稳定性问题,当车辆靠近平台边缘时,平台无法牢固支撑车辆。通过在平台上布置多个轴和步进电机以增强稳定性,这一问题可以得到缓解。
本文编译自hackster.io





