我的机器人研究章节

Table of Contents

这篇文章讲述了我的机器人之旅,从在2015年于FRC中发现我对机器人的热情开始,到我在科罗拉多矿业学院以人为本的机器人实验室 (HCR Lab)担任研究助理的时间,时间为2021年2月至2021年9月。请注意,自2022年底以来,HCR Lab已从科罗拉多矿业学院迁至马萨诸塞大学阿默斯特分校,其网站也从hcr.mines.edu迁至hcr.cs.umass.edu

背景

我于2018年秋季学期开始在科罗拉多矿业学院攻读本科学位。我的专业是计算机科学,专注于机器人和智能系统。我于2022年春季毕业。

我很幸运在生活的早期就找到了我的热情。在高中期间,我花了很多时间来弄清楚我喜欢什么以及我擅长什么。经过一些试验和错误,我终于发现我的热情是计算机科学。但在这个过程中,我也发现我对通过代码构建事物有着强烈的热爱。

在矿业学院,我有机会在矿业学院的以人为本的机器人实验室(HCR Lab)工作,导师是张浩博士。我第一次在2020年春季通过他的课程“以人为本的机器人学”(CSCI473)认识了张博士,在经历了COVID的混乱和课程作业后,我在2021年春季初进入了他的实验室工作。

以人为本的机器人学 (CSCI473) 课程

矿业学院的以人为本的机器人学 (CSCI473) 是我大学经历中少数几门对我产生深远影响的课程之一。该课程由张浩博士教授。我们整个课程的成绩仅由三个项目组成,每个项目都提出了一个具有挑战性的问题,介绍了机器人的核心概念。这些项目包括:

  1. 学习机器人操作系统 (ROS)
  2. 机器人沿墙行驶的强化学习
  3. 机器人理解人类行为的骨架表示

学习机器人操作系统 (ROS)

这是我们被分配的第一个项目。该项目包括三个任务:

  1. 设置开发环境
  2. 理解Gazebo模拟器
  3. 编写一个ROS的“Hello World”

对于任务1和任务2,我们只需设置开发环境并遵循Gazebo的入门教程。这包括:

而任务3则是一个真正的挑战。任务是使用turtlesim让海龟绘制矿业学院的“M”标志:

这个任务虽然听起来简单,但比看起来要困难得多。这个项目最终让我接触到了开环和闭环系统的概念。有关完整的项目描述,请查看csci473-p1.pdf,或者您可以在ROS Move Turtle项目页面上了解更多关于这个项目和我的解决方案的信息。

机器人沿墙行驶的强化学习

这是我们被分配的第二个项目,也是我在大学期间做过的最难的项目之一。项目描述如下:

在这个项目中,学生将设计和实现强化学习算法,以教导一个自主移动机器人沿墙行驶并避免碰撞。学生将使用ROS Melodic中的Gazebo模拟来模拟一个名为Triton的全向移动机器人,并使用提供给你的环境地图。学生将使用机器人上的激光测距仪进行感知和学习,机器人通过转向和速度命令进行控制。学生需要使用C++或Python在运行Ubuntu 18.04 LTS的ROS Melodic中编程此项目(即与项目1中使用的相同开发环境)。此外,学生需要按照标准IEEE机器人会议的格式使用LATEX撰写报告。

对于强化学习算法,我们被指示使用Q-Learning。我们还使用了课程提供的Stingray Gazebo模拟环境。Stingray包含Triton模型和物理逻辑。我们还提供了一个迷宫供机器人跟随。总的来说,环境看起来是这样的:

我从未将我的解决方案发布到GitHub或网络上,因为它并不好且存在很多缺陷。此外,在正确的环境中运行代码相当困难且令人烦恼。然而,我确实有一个我提交给课堂的演示视频,展示了我的解决方案。您可以在这里查看:

有关完整的项目描述,请查看csci473-p2.pdf

机器人理解人类行为的骨架表示

对于第三个项目,项目描述如下:

在这个项目中,学生将实现几种基于骨架的表示(交付物1),并使用支持向量机(SVM)(交付物2)来分类人类行为,使用从Kinect V1传感器收集的公共活动数据集。此外,学生需要按照标准IEEE机器人会议的格式使用LATEX撰写报告(交付物3)。

这个项目具有挑战性,但没有第二个项目那么困难。主要目标是使用Kinect V1传感器数据,来自MSR Daily Activity 3D Dataset,以及支持向量机来分类某些人类动作/行为。有关完整的项目描述,请查看csci473-p3.pdf,或者您可以在使用LIBSVM预测人类动作博客文章中了解更多关于这个项目和我的解决方案的信息。

CSCI473 结论

CSCI473是我在矿业学院本科学习期间上过的最好的一门课之一。所有这些项目教会了我很多,让我有了一个很酷的项目目录,可以反思并在我的简历上引用。它也是我第一次感到自己在自己擅长的领域,因为我从来不是一个好的考试者,但在完成项目方面表现出色。正是通过这门课,我认识了张浩博士,他最终帮助我在矿业学院的以人为本的机器人实验室(HCR Lab)获得了研究助理的职位。

CS 领域课程 (2020年夏季)

CG_GUI_19

在2020年夏季,在完成CSCI473课程和加入HCR Lab之间,我在科罗拉多矿业学院的计算机科学本科学位课程中修读了CSCI370或“高级软件工程”。CSCI370是一门让学生为公司设计、实现和文档化软件相关解决方案的课程。它使学生能够将他们的课程知识应用于现实世界的计算机科学问题。您可以在这里了解更多关于该课程的信息。

在课程中,您可以决定要做哪个项目/公司。课程提供了详细说明每个项目和公司的PDF文件。最终,我决定参与一家名为Lunar Outpost的公司发布的一个项目,名为“增强月球导航的实时轮滑检测和错误修正”。由于名称较长,我们给这个项目起个别名为“轮滑检测”。

问题

Lunar Outpost是一家试图创建自主月球探测车的初创公司。在月球上,有很多已知会导致轮滑的月尘。这并不理想,因为轮滑可能导致自主系统失去对其现实世界位置的追踪。在地球上,这个问题通过使用GPS数据来纠正轮滑造成的任何偏移来解决。但GPS的问题在于,它只能通过30+颗导航卫星不断环绕地球轨道并发射独特信号来工作,从而使计算机能够计算其位置。但在月球上,目前没有GPS。知道这一点后,必须使用除GPS以外的其他方法来检测轮滑。有关项目问题的更详细报告可以在这里查看。

团队

这个项目并不是一个简单的项目,因此必须在团队中完成。团队由五名科罗拉多矿业学院的学生组成:

这个项目并不是一个简单的项目,因此必须在团队中完成。这个团队由梅赫梅特·伊尔马兹(我)、凯恩·布鲁斯、布雷登·奥卡拉汉、利亚姆·威廉姆斯和凯文·格兰特组成。

该项目要求我们了解一些ROS、C++、Python、Linux、Raspberry Pi和Arduino。我们大多数人对这些技术中的一种或多种有经验,但我是在2020年春季学期的以人为本的机器人学(CSCI473)课程中唯一一个有ROS经验的人。因此,早期我帮助大家了解ROS及其开发。

挑战

在这个项目中,我们面临了许多挑战。但我们面临的最大挑战是没有真实的机器人进行测试。这是由于 COVID 使一切变得远程,阻止我们在月球前哨的实验室/建筑中工作。因此,我们不得不使用模拟。

此外,我们还查阅了一些来自 WVU 导航实验室 的学术研究,以了解如何解决月球前哨的轮滑问题,这对我们这些大二和大三的本科生来说,比我们预期的要困难得多。

我们面临的另一个挑战是我们在这个项目上工作的时间。CSCI370 是一个为期一个月的课程。但这个问题本身是一个巨大的问题,许多公司和学术界已经尝试解决/完善了几十年。因此,一个月的时间远远不够解决这个问题。但是,尽管面临所有这些挑战,我们还是坚持下来了,并确保交付。

结论

经过所有的研究和开发,我们确定几乎不可能在数字上模拟正确的月球物理,因此在模拟中真正尝试这个算法是没有意义的,并且不会在太空和月球上的轮滑检测中产生任何有意义的研究。我们得出结论,使用沙子和真实硬件(如 Husky 机器人)建立一个合适的测试环境对于这类研究要重要得多。我们确实更新了轮滑检测代码,使其作为 ROS 节点工作,并且功能正常,可以轻松导入到真实硬件中进行测试。这个项目让我担任了领导角色,教育我的同龄人关于 ROS 开发,并在处理我从未遇到过的复杂问题时获得了 Python、ROS 和 Gazebo 的经验。最重要的是,这次经历进一步巩固了我对机器人技术的热情,并加强了我在该领域追求研究的愿望,为我在机器人之旅中接下来的发展奠定了基础。

在 HCR 实验室开始

在完成 CSCI473、2020 年夏季的计算机科学实习课程和 2020 年秋季学期后,我决定追求机器人研究。我在 CSCI473 和计算机科学实习课程中有过非常好的经历,因此我决定想为 HCR 实验室做研究。由于我在前一年见过张博士,我决定在 2021 年 1 月给他发邮件,询问实验室是否有任何机会。在大约两周内,张博士表示了兴趣,向我展示了研究选项,并为我提供了实验室的角色。然后我于 2021 年 2 月开始为实验室工作。

介绍视频

这是我在 HCR 实验室工作几个月后录制的介绍视频。它是在 2021 年 5 月录制的,涵盖了我在 2021 年夏季在 HCR 实验室专注的研究:

我的项目

在 HCR 实验室期间,我主要专注于 Triton 项目。Triton 项目是由科罗拉多矿业学院的 人本机器人实验室 开发的移动机器人。它是一种由 NVIDIA 的 Jetson Nano 驱动的三角形全向轮地面机器人。

Triton 的简单概述包括以下部分:

  • NVIDIA Jetson Nano
  • NVIDIA 的 Seed Studio A205 扩展板
  • Arduino Mega
  • 64 GB Micro SD 卡
  • 自定义 3D 打印机机身
  • 3 个麦克纳姆轮
  • 1 个 AR 电池
  • 用于优化电源分配和布线的自定义电路
  • 英特尔的 Realsense D435 摄像头
  • 一些 LED 灯

它是在 2018-2020 年间设计、建造和制造的,作为教育用途的机器人。到我加入时,Triton 已经相当成熟,实验室正在考虑制作它的新版本。然而,Triton 的主要问题是它的软件。Triton 可以移动、充电,并在基本意义上运行,但并没有真正做任何智能的事情。它甚至缺乏进行更高级运动的能力。

电池充电器设置 测试区域布局
Tritons 在早期测试阶段 Tritons 在架子上

为了解决这个问题,实验室设置了一个区域,以便我们可以跟踪 Triton。为此,他们创建了一个 2 米乘 2 米的区域,使用 8 个 Optitrack Flex(红外)摄像头以大约 6-7 英尺的高度呈正方形排列。

区域 I1 区域 I2

除了建立这个区域外,每个 Triton 的顶部都有三个灰色球体。

通过这个设置,我们有效地建立了自己的小型 GPS 系统,使我们能够获取 Triton 在我们感兴趣区域的确切坐标(以米为单位)。通过使用 Optitrack 红外摄像头和以三角形形状排列的 Optitrack 灰色球体,我们可以精确定位 Triton 在我们区域的确切坐标。这使我们能够应用闭环系统以提高运动的准确性。

Optitrack 系统在正确校准时以约 120Hz 的频率提供位置和方向数据,精度达到亚毫米级。每个 Triton 的三个反射标记形成一个独特的三角形模式,系统可以将其跟踪为一个刚体。坐标系统经过校准,使得 (0,0) 位于跟踪区域的中心,X 和 Y 轴与房间的几何形状对齐。但尽管有如此精确的定位数据,Triton 在运动方面仍然存在困难。

通过这个设置,我们希望为 Triton 提供的一个核心功能是能够移动到特定坐标。用户或他们的软件可以在他们感兴趣的区域内提供一个 (x, y) 坐标。然后,机器人将尽可能快速、准确、无缝地移动到该坐标。当我加入时,这个功能存在,但效果并不好。这里有一个简单的动画展示了原始移动逻辑的工作方式:

我没有录制原始解决方案的实际操作,因此我创建了这个简单的动画,向您展示旧的移动逻辑。知道这一点,这种方法有什么问题?

  1. 它真的很慢
  2. 它使机器人占用大量空间,仅仅是为了到达一个特定点。这使得我们在多个 Triton 移动时很难使用这个解决方案。

那么,为什么会发生这种行为呢?问题在于 Triton 首先转动,改变其 alpha,直到它指向目标点在特定误差范围内。然后它会向前冲刺,当它的 theta 与目标的偏差达到特定量时,它会停止并再次开始转动,直到 alpha 在目标目标的可接受范围内。然后它再次冲刺,并不断这样做,直到到达目标点。此外,随着它越来越接近目标点,转动和冲刺的速度会变得非常慢,以确保它不会超出目标。这导致 Triton 的运动不自然,花费很长时间才能到达目标点,并且需要占用大量区域才能到达特定目标点。因此,考虑到所有这些问题,以及这个功能对 Triton 项目开发的重要性,当我开始在 HCR 实验室工作时,我的第一个任务是开发更有效的解决方案,使 Triton 更好地导航到目标点。

知道这一点,我花了很多时间研究解决这个问题的最佳方法。具有讽刺意味的是,我正在上一个名为 反馈控制系统导论 (EENG307) 的课程。在那门课的早期,我们学习了 开环控制器闭环控制器 的概念。知道这一点,并在与那门课的教授和我聪明的室友进行了一些讨论后,显然将 Triton 移动到目标点的目标是一个闭环系统问题。

白板控制系统图

现在,经过广泛的测试和研究,我为 Triton 开发了两种不同的控制器方法:

方法 1:距离-Theta 控制器

这种方法使用两个独立的比例控制器同时运行:

  • 距离控制器:计算到目标的欧几里得距离,并应用比例增益来确定前进/后退速度
  • Theta 控制器:计算机器人当前航向与目标的期望航向之间的角误差,应用单独的比例增益来确定旋转速度

该算法持续计算到目标的欧几里得距离和机器人当前航向与期望方向之间的角误差。应用两个独立的比例增益分别生成线性和角速度。

这使得 Triton 自然地朝着目标转动,同时向前移动,形成平滑的曲线路径。关键优势在于机器人始终保持其前面朝向目的地,这对于基于摄像头的应用至关重要。

方法 2:X-Y 坐标控制器

这种方法将机器人视为一个二维绘图仪,独立控制 X 和 Y 的运动:

  • X 控制器:根据 X 坐标误差直接控制东西方向的运动
  • Y 控制器:根据 Y 坐标误差直接控制南北方向的运动

该实现独立计算 X 和 Y 坐标误差,应用单独的比例增益,然后使用旋转矩阵将这些全局速度分量转换为机器人的局部坐标系。这个转换是必要的,因为机器人的全向轮驱动需要在其自身参考系中获得速度,而不是全局坐标。这种方法产生了最直接的目标路径,并且速度显著更快,但机器人的航向会漂移,因为没有明确的方向控制。

对于方法 #1,我在我的 移动海龟 (TurtleSim) 博客 中详细介绍了这种方法。我强烈建议您阅读这篇博客,以获取有关 PID 控制器如何工作的一切细节,以及方法 #1 的工作原理。我使用 ROS 的 TurtleSim 开发了方法 #1,然后将该代码转移到 Triton,并更新以考虑更真实的环境。

方法 #2 使用了完全不同但同样有效的方法。与其考虑机器人的方向和到目标的距离,这种方法将运动视为一个坐标平面问题。控制器持续独立计算 X 和 Y 方向的误差。例如,如果机器人需要从 (0,0) 移动到 (2,3),它会将其视为需要纠正 2 米的 X 误差和 3 米的 Y 误差。两个比例控制器同时工作:一个根据 X 误差调整机器人的 X 方向速度,而另一个根据 Y 误差处理 Y 方向的运动。这创造了更直接的目标路径,类似于 3D 打印机头的移动,并允许平滑的对角线运动。机器人不需要明确转向以面对其目标,使得这种方法在狭小空间或需要精确定位时特别有效。

这两种方法都被证明比原始方法显著更快且更可靠。要查看这些新方法的实际效果,请查看 Tritons in Action 播放列表,该播放列表展示了所有 Tritons 在新方法下的表现。

曾经需要 30-45 秒进行简单的点对点移动,现在只需大约 8-12 秒。更重要的是,Triton 现在可以在狭小空间中更有效地导航,这在我们的多机器人场景中变得非常有用。

开发挑战与调试

实现这些控制器并不简单,涉及几个重大调试挑战:

坐标系统转换:最棘手的方面之一是正确获取坐标转换。Optitrack 系统提供的数据在其自己的坐标系中,机器人有其局部坐标系,我需要准确地在它们之间进行转换。早期的实现中,机器人因我混淆了旋转矩阵计算而朝错误的方向移动。

现实世界与理想行为:最大挑战是考虑现实世界中在教科书控制理论中没有出现的因素。机器人的轮子具有不同的摩擦特性,电机的响应不完全相同,并且从 Optitrack 到控制软件再到机器人的 Arduino 的通信链中总是存在一些延迟。我花了几周时间调整比例增益并添加死区滤波器,以考虑这些物理现实。

振荡和稳定性问题:我最初的实现遭遇了振荡问题,机器人会超出目标并来回摇摆。这让我认识到 PID 控制器中导数项的重要性以及适当增益调节的必要性。我最终选择主要使用比例控制,并仔细调节增益,而不是完全使用 PID,因为系统的固有阻尼对于大多数应用来说已经足够。

多机器人干扰:当多个机器人同时操作时,我发现了意想不到的干扰模式。机器人有时会“争夺”同一空间,或产生死锁情况,导致彼此无限制地阻塞。这让我实施了协调机制和碰撞避免算法。

多 Triton 控制系统

一旦我解决了单个 Triton 的运动问题,实验室的下一个挑战就是让多个 Tritons 同时协同工作。这成为我主要关注的领域之一,并最终成为该项目的重要贡献。

原始系统只能控制一个 Triton,这严重限制了研究的可能性。实验室希望模拟多个自主车辆需要协调其运动的场景,比如自动驾驶汽车之间的通信,以优化交通流并创建更好的 SLAM(同时定位与地图构建)地图。

为了解决这个问题,我使用 Python 的多处理库实现了多处理方法。每个 Triton 都有自己的专用进程,可以独立运行,同时仍由中央控制系统进行协调。这使得多个 Tritons 可以同时移动,而不会干扰彼此的控制循环。

多机器人架构设计

我开发的系统架构由几个关键组件组成:

主控制器进程:作为中央协调者,处理用户界面交互、路径规划和机器人之间的高层协调。它维护全局状态并将命令分发给各个机器人进程。

个别机器人进程:每个 Triton 都有自己的专用 Python 进程,处理:

  • ~50Hz 的实时 PID 控制计算
  • 与机器人的硬件(Arduino/Jetson)通信
  • 本地路径执行和障碍物避免
  • 向主控制器报告状态

共享内存通信:我使用 Python 的 multiprocessing.shared_memory 和 Queue 对象来实现进程之间的高效通信。这使得实时协调成为可能,而无需网络通信的开销。

同步机制:为了防止多个机器人需要协调时发生冲突(如避免碰撞),我实现了信号量和锁,允许机器人请求对工作空间某些区域的独占访问。

挑战在于确保所有机器人能够独立运行其控制循环,同时仍保持全局协调。每个机器人进程运行自己的 PID 计算,并直接向硬件发送电机命令,而主进程处理更高层次的协调,如碰撞避免和路径规划。

多 Triton 交叉测试 早期多 Triton 设置

与无人机一起工作的 Triton 以进行未来的多智能体工作

多 Triton 系统开启了全新的研究可能性。我们现在可以模拟:

  • 车辆之间的通信场景
  • 协调路径规划与障碍物避免
  • 群体机器人行为
  • 多智能体 SLAM 映射
  • 阵型控制和跟随行为

这是实验室设置的样子,多个 Tritons 同时运行:

绿色网格上的机器人 机器人网格设置

我还开发了一个用户友好的界面,允许研究人员为每个 Triton 直观地定义路径。您可以字面上绘制每个机器人要遵循的路径,它们将完美协调地执行这些路径。这对于设置复杂实验非常有用,而无需手动编码每个运动。

该系统可以同时处理多达 5 个 Tritons,每个 Triton 运行自己的 PID 控制器,同时通过中央控制系统进行协调。性能令人印象深刻,所有机器人在作为团队协作时保持各自的准确性。

这是一个播放列表,展示了 Tritons 的实际操作,从单机器人控制到多机器人协调:Tritons in Action 播放列表

深度传感器集成与坐标修正

我所做的另一个重大进展涉及利用安装在每个 Triton 上的英特尔 RealSense D435 深度相机。虽然 Optitrack 系统为我们提供了极其精确的定位数据,但我想探索机器人如何利用其板载传感器来提高空间意识并修正坐标误差。

这个想法是 Tritons 可以使用其深度传感器检测其附近的其他 Tritons,并交叉参考它们的位置。这将服务于多个目的:

  1. 误差修正:如果 Optitrack 系统有任何校准漂移或临时遮挡,机器人可以使用彼此位置的视觉确认来保持准确的坐标系统。

  2. 增强 SLAM:通过让多个配备深度传感器的机器人协同工作,我们可以创建更丰富的环境地图,具有冗余数据点。

  3. 碰撞避免:实时深度感知将允许机器人检测并避免彼此,即使中央控制系统存在通信延迟。

我开始尝试一些算法,使 Tritons 能够:

  • 使用其独特的三角形形状和反射球标记检测其他 Tritons
  • 使用深度数据计算相对位置和方向
  • 将这些测量与 Optitrack 数据进行比较,以识别差异
  • 在实时中潜在地调整其坐标系统以保持准确性

计算机视觉实验

我花了相当多的时间实验一个计算机视觉管道,该管道分为几个阶段:

两个 Tritons 面对面进行计算机视觉测试 Triton 相机的特写
两个 Tritons 面对面进行测试
两个机器人面对面 两个 Tritons 即将比赛

深度数据处理:英特尔 RealSense D435 提供了 RGB 和深度数据流。我主要处理深度数据,该数据以 30Hz 的速度以 640x480 的距离测量数组形式提供。第一个挑战是过滤这些嘈杂的深度数据,以提取有意义的几何信息。

物体检测尝试:我尝试了多阶段检测算法。我在分割深度图像以识别地面水平的物体(过滤掉墙壁、天花板等)方面取得了一些成功,并寻找具有合适尺寸特征的物体,足迹大约为 0.3x0.3 米。我尝试使用边缘检测和几何分析来识别独特的 Triton 轮廓,结果喜忧参半。

标记识别实验:每个 Triton 上的三个反射球似乎是最有前景的检测特征。我尝试使用斑点检测算法来识别深度图像中三个亮点的特征三角形模式。在受控光照条件下,我取得了一些有希望的结果,尽管并不总是可靠。

坐标融合研究:我研究了将基于视觉的位置估计与 Optitrack 数据融合的方法,包括基本的卡尔曼滤波器实现。这个概念是,当 Optitrack 数据可用时给予更多权重,但在需要时回退到视觉,尽管在我离开实验室之前我没有完全实现这一点。

性能挑战:让所有这些处理与机器人的控制循环实时运行 proved to be challenging。我尝试了优化方法,以在不压倒 Jetson Nano 处理能力的情况下以大约 10-15Hz 的速度运行算法。

不幸的是,我不得不在完成这项计算机视觉工作之前离开实验室。虽然我有一些有希望的早期结果,并且学到了很多关于深度传感器处理的知识,但我没有将系统做到完全可靠的状态。这仍然是一个有趣的研究方向,其他人可能会在此基础上进行进一步的研究。

这是我测试计算机视觉算法的视频:

这是我实验期间深度传感器视图的样子:

虽然我没有完成深度传感器集成工作,但这个概念在模拟自动驾驶汽车场景等应用中显示出了潜力,在这些场景中,车辆需要意识到彼此,而不完全依赖外部基础设施。我开始探索的研究方向可能会为实验室未来的工作做出贡献。

文档和知识保存

我对 HCR 实验室最重要的贡献之一,也许是我最自豪的贡献,是组织和保存所有项目文档。当我加入实验室时,Triton 项目的知识分散在多个平台和格式中。关键信息分散在:

  • 不同学生的各种 Google Drive 账户中,这些学生已经毕业
  • 埋藏在收件箱中的旧电子邮件
  • 随机的 Dropbox 文件夹
  • 多个 GitHub 存储库
  • 组织不一致的 GitLab 存储库
  • 只有特定人员能够解读的手写笔记

这种碎片化的文档是一个巨大的问题。新学生花费数周时间仅仅是为了弄清楚如何开始,而有价值的知识在人员毕业或离开实验室时不断丢失。

我决定系统地解决这个问题。我花费了无数小时追踪与 Triton 项目相关的每一份文档、代码、视频和笔记。然后,我将所有内容整理到一个 集中式 GitLab 存储库 中,具有清晰、逻辑的结构。

桌上的 Triton 桌子上的多个 Tritons(总共 8 个,5 个正在组装中)

以良好角度展示的 Tritons

集中式文档包括:

  • 构建指南:从头开始组装 Tritons 的逐步说明
  • 软件设置:设置开发环境的完整指南
  • 代码文档:注释良好的代码,带有清晰的解释
  • 硬件规格:详细的零件清单、接线图和 PCB 设计
  • 故障排除指南:常见问题及其解决方案
  • 视频教程:我创建并上传了教学视频到 YouTube,包括详细的 Optitrack 校准教程:

我还建立了文档标准,以确保未来的贡献将是有组织和可访问的。我创建的存储库结构成为实验室后续所有工作的基础。

除了组织现有文档外,我还创建了几份原创指南和教程,填补了知识库中的关键空白。这些包括为新实验室成员提供的详细设置说明、全面的故障排除指南以及复杂程序的视频演示。

影响是立竿见影且持久的。新学生可以在几天内掌握,而不是几周。 我创建的文档存储库至今仍在实验室使用,几年后我离开了。它成为 Triton 项目的唯一真实来源,为未来的研究人员节省了无数小时/天的时间。

导师和知识转移

我在 HCR 实验室期间最有成就感的方面之一是有机会指导他人并分享我所获得的知识。随着我的工作进展,我对 Triton 系统的了解越来越深入,我承担了越来越多的责任来培训新团队成员。

指导实验室继任者

当我准备最终离开实验室,专注于完成我的学位和在 eBay 的工作时,我确保彻底培训了两位将在我离开后接管 Triton 项目的人。这不仅仅是向他们展示事情是如何运作的,而是确保他们真正理解基础原理,以便他们能够继续创新。

我花了几周时间与他们密切合作,讲解:

  • PID 控制系统的数学基础
  • 协调多个机器人的多处理架构
  • 深度传感器集成和计算机视觉算法
  • 文档系统及其维护方法
  • 调试技术和常见故障模式

知识转移非常彻底。我们一起进行了真实的调试会话,我让他们修改和扩展现有代码,并确保他们能够独立从头开始设置新的 Tritons。

高中导师计划

也许更有意义的是我通过实验室的外展计划指导一名高中生的经历。这是一个很好的机会,在他们教育的关键阶段向他们介绍机器人技术、计算机科学和研究。

我设计了一个全面的课程,涵盖:

计算机科学基础:

  • 使用 Python 作为主要语言的编程概念
  • 面向对象编程简介
  • 算法和数据结构的理解

机器人概念:

  • 传感器的工作原理及其接口
  • 执行器控制和电机系统
  • 自主系统和反馈控制的基础知识

ROS(机器人操作系统):

  • 理解发布/订阅消息系统
  • 创建节点和服务
  • 使用启动文件和参数服务器

动手项目工作:

  • 我们合作创建了一个 ROS 服务,控制 Triton 头部的 LED 系统
  • 她学会了编写干净、文档齐全的代码,与我们的现有系统集成
  • 她创建的 LED 控制服务成为 Triton 代码库的永久部分

这次指导特别特别的地方在于,看到她从几乎对编程一无所知到为一个活跃的研究项目贡献有意义的代码。她从问“什么是变量?”到独立调试 ROS 通信问题并编写自己的服务实现。

她开发的 LED 控制系统使研究人员能够通过简单的 ROS 命令轻松更改 Triton 头部 LED 的颜色和模式。这听起来可能很简单,但这需要理解 ROS 架构、硬件接口和适当的软件设计模式。她的贡献至今仍在实验室使用。

这段指导对我来说和对她一样具有教育意义。它迫使我将复杂的概念分解成易于理解的部分,并真正思考我们所做工作的基础。教导他人让我成为了更好的工程师和研究者。

与博士研究的合作

我在实验室期间最具职业回报的方面之一是与彭密切合作,他是一名专注于自动驾驶汽车算法的博士生。我对Triton系统所做的软件改进帮助支持了他的博士研究。

彭的研究需要精确、可靠的多机器人协调,以模拟自动驾驶汽车场景。在我对运动控制和多机器人系统进行改进之前,这些实验的进行要困难得多。机器人速度较慢,精度较低,无法有效协同工作。

我的贡献在多个领域帮助了彭的研究:

交叉口管理研究: 通过改进的PID控制器和多机器人协调,彭能够模拟多个“车辆”(Tritons)需要协调其运动的交叉口场景。更好的时机和定位使这些研究变得更加可行。

车辆间通信: 我开发的多处理框架使彭能够实现和测试模拟车辆之间的通信协议。每个Triton可以在与其他车辆协调的同时做出决策,类似于自动驾驶汽车可能需要的操作方式。

SLAM和映射研究: 深度传感器集成工作为彭的同时定位与地图构建研究提供了额外的数据。拥有多个具有协调感知能力的机器人使得更全面的映射实验成为可能。

我们合作的特别有价值之处在于,这不仅仅是我在帮助他的研究,而是真正的伙伴关系。彭对自动驾驶汽车理论方面的理解帮助我更好地实施实际操作。他的反馈和需求促使我使系统更加稳健和高效。

我们在实验室里一起花了很多小时,调试场景,讨论不同的控制策略,探索Triton平台可以实现的功能。彭不仅成为了我的同事,也成为了我的朋友,与他合作让我学到了很多关于学术研究实际运作的知识。

我构建的系统成为了彭论文工作中有用的一部分。看到我的实际工程贡献支持自动驾驶汽车技术的研究让我感到非常满足。这增强了我对扎实的工程和研究如何协同工作以创造有用成果的兴趣。

即使在我离开实验室后,彭和我仍然保持联系。知道我的工作在我离开后继续为重要研究做出贡献,这让我感到非常有成就感。

视角:LLM前的开发时代

值得注意的是,所有这些工作都是在LLM前的软件开发时代完成的。所有这些发生在2020年至2021年之间(主要是2021年),在ChatGPTClaudePerplexity或像Cursor IDE这样的AI驱动开发工具出现之前。

每一行代码都是从零开始编写的,每个算法都是通过学术论文和教科书进行研究的,每次调试会话都涉及传统方法,如打印语句、调试器和系统测试。当我在坐标变换或PID调优问题上遇到困难时,我不能仅仅请求AI助手来解释概念或帮助调试问题。

这使得开发过程显著更具挑战性,但也更具教育意义。我必须:

手动研究一切: 理解PID控制理论意味着阅读教科书和学术论文。弄清楚坐标变换需要手动计算每一个数学公式。每个概念在实施之前都必须完全理解。

在没有AI帮助的情况下调试: 当机器人朝意外方向移动或在目标周围振荡时,我必须系统地追踪逻辑,添加调试输出,并逐一测试假设。没有AI来建议潜在问题或帮助解释错误模式。

从第一原理学习: 由于无法快速询问“如何在Python中实现多处理以用于机器人技术?”,我必须深入理解基础概念。这迫使我在并发编程、控制系统和计算机视觉方面建立坚实的基础。

文档至关重要: 由于我无法依赖AI在后期解释代码,我必须编写极其清晰的文档和注释。这种纪律在将知识转移给他人时证明是无价的。

回顾过去,虽然现代AI工具会加速开发的许多方面,但没有它们的工作迫使我发展更深的解决问题的技能和对基础系统的更全面理解。想想如果有今天的开发工具,这个项目会有多么不同,真是令人着迷。

离开的艰难决定

尽管我非常喜欢在HCR实验室工作,但到2021年末,我面临着许多学生都会遇到的艰难决定:平衡多重机会和责任。我同时在eBay全职工作,完成我的计算机科学学位,并为HCR实验室的研究做出贡献。

eBay的机会非常重要;这是我第一个主要的软件工程角色,提供了宝贵的行业经验,并为我提供了稳定的收入。然而,试图维持全职工作、完成学位并对研究做出有意义的贡献显然是不可持续的。必须有所取舍。

当我向张博士提出可能减少课程负担以更多地专注于实验室工作时,他强烈反对。他的理由很有道理:完成学位应该是优先事项,而在eBay的行业经验对我的职业发展将是有价值的。他认为,放弃课程以专注于研究,虽然诱人,但可能不是最佳的长期决定。

因此,在2021年9月,在实验室工作了大约8个月后,我做出了艰难的决定,退出我的研究助理角色,专注于完成我的学位和在eBay的工作。这是我当时做出的更艰难的职业决定之一。

即使在正式离开实验室后,我仍然在任何人需要帮助时提供支持,帮助他们解决我构建的系统的问题。我根据需要更新文档,回答调试问题,并远程帮助排查问题。我建立的联系和对项目成功的投资并没有因为我不再是团队的正式成员而消失。

反思与回顾

现在,2025年,四年后,我发现自己对那段时间充满复杂的情感。我的职业道路让我深入到网页开发和AI/ML工程领域,这些领域极具回报,并提供了巨大的成长和影响机会。

从上往下看桌子上的Tritons

然而,我内心深处有一部分在想“如果”。机器人技术曾经是,老实说,现在仍然是我真正的热情所在。与物理系统合作,看到你的代码转化为现实世界的运动和行为,这种体验是网页开发甚至AI工作无法完全复制的。

我有时会想,如果我选择了不同的道路,会发生什么。如果我找到了一种方法继续从事机器人研究?如果我在完成本科学位后立即攻读研究生学位?如果我选择优先考虑实验室工作而不是行业经验?

但我也意识到,每条道路都有其权衡。我在网页开发和AI中发展出的技能是极其宝贵的。行业经验让我了解了大规模软件工程、用户体验设计以及构建数百万用户使用的产品的实际挑战。这些经历让我整体上成为了更好的工程师。

我在HCR实验室所做的工作继续影响我今天解决问题的方式。PID控制系统所需的系统思维在我设计软件系统中的反馈循环时显现出来。我所发展的文档和知识保存技能在此后的每个角色中都证明是无价的。指导和教学的经验塑造了我与初级开发者合作和促进团队知识共享的方式。

最重要的是,这段经历让我明白,当我在解决具有现实影响的挑战性技术问题时,我会茁壮成长。无论是优化机器人运动算法,还是构建帮助用户实现目标的AI系统,满足感来自于解决重要的难题。

持久的影响

回顾HCR实验室的经历,我感到在相对短的时间内取得了如此多的成就。 我构建的系统从根本上改变了Triton平台的操作方式,其中许多改进至今仍在使用。我创建的文档库成为整个项目的知识基础。我建立的指导关系对我合作过的人产生了持久的影响。

但也许最重要的是,这段经历让我看到了在我真正热爱的领域工作时我所能实现的能力。在那八个月里,我:

  • 改进了限制平台的机器人运动控制系统
  • 从零开始构建了一个多机器人协调系统
  • 集成了计算机视觉和传感器融合能力
  • 创建了一个全面的文档和知识管理系统
  • 指导了几个人并帮助知识转移
  • 支持了博士级别的自主车辆研究

不过,这不仅仅是关于技术成就,尽管这些对我来说是有意义的。这是关于学习到通过坚持和系统思考,即使作为一名本科生,你也可以做出有用的贡献。

未来与机器人技术

虽然我的职业生涯带我走向了其他方向,但我对机器人的热情并没有减弱。我仍然关注该领域的发展,对机器人学习和自主系统的进展感到兴奋,并且我偶尔在业余时间从事个人机器人项目。

谁知道未来会怎样呢?我在人工智能和机器学习方面所发展的技能与机器人技术的相关性日益增强。我获得的行业经验教会了我如何构建稳健、可扩展的系统。也许未来会有这些不同经验的线索以意想不到的方式结合在一起。

目前,我对在HCR实验室度过的时光和它所提供的经历心怀感激。这是一个塑造我技术技能和对我最有成就感的工作类型理解的形成时期。尽管我有时会怀念它,但我知道我所学到的教训和我所发展的方法继续影响着我所做的一切。

特里顿机器人仍然在那里,仍然为研究人员服务,仍然推动着重要的工作。这真是太棒了。