我的机器人研究章节
Table of Contents
这篇文章回顾了我的机器人之旅,从我在2015年高中期间通过 FRC 发现自己对机器人的热情开始,到我在 2021年2月至2021年9月 作为 科罗拉多矿业学院 以人为中心机器人(HCR)实验室 的研究助理的那段时间。请注意,自 2022年末 起,HCR 实验室 已从科罗拉多矿业学院迁至 马萨诸塞大学阿默斯特分校,其网站也从 hcr.mines.edu 迁至 hcr.cs.umass.edu。
背景
我于 2018 年秋季学期开始在科罗拉多矿业学院攻读本科学位。我的专业是计算机科学,方向是机器人与智能系统。我于 2022 年春季毕业。
我很幸运,在人生很早的时候就找到了自己的热情。在高中期间,我花了相当多的时间来弄清楚自己喜欢什么,以及自己擅长什么。经过一些反复尝试后,我终于发现我的热情是计算机科学。但也正是在这段时间里,我发现自己对通过代码进行构建有着压倒性的热爱。
在 Mines,我有机会在 张浩博士 的指导下,在 Mines 的以人为中心机器人(HCR)实验室工作。我最初是在 2020 年春季通过他的课程“以人为中心机器人”(CSCI473)认识张博士的,在经历了 COVID 和课程作业的混乱之后,我于 2021 年春季初开始在他的实验室工作。
以人为中心机器人(CSCI473)课程
Mines 的以人为中心机器人(CSCI473)是我大学经历中少数几门对我产生深远影响的课程之一。这门课由张浩博士授课。我们整门课程的成绩只由三个项目组成,而每个项目都提出了一个具有挑战性的问题,并引入了机器人学的核心概念。这些项目包括:
- 学习机器人操作系统(ROS)
- 用于机器人沿墙跟随的强化学习
- 使用基于骨架的表示理解人类行为的机器人
学习机器人操作系统(ROS)
这是我们被分配的第一个项目。该项目由三个任务组成:
- 搭建开发环境
- 理解 Gazebo 模拟器
- 编写一个 ROS “Hello World”
对于任务 1 和 2,我们只需要搭建开发环境并跟随一个 Gazebo 入门教程。这包括:
- 安装 ROS Melodic,我是在我的 2011 年 HP 笔记本上完成的,性能足够
- 安装并配置 ROS 和 Gazebo
- 跟着 gazebosim 的教程 和 e-manual 的教程 进行学习。
另一方面,任务 3 是一个真正的挑战。该任务要求使用 turtlesim 并让乌龟画出 Mines 的 “M” 标志:
![]() |
![]() |
这个任务虽然听起来很简单,但实际上比看上去要困难得多。这个项目最终让我接触到了开环和闭环系统的概念。完整的项目描述请查看 csci473-p1.pdf,或者你也可以在 ROS 移动乌龟 项目页面了解更多关于这个项目以及我的解决方案。
用于机器人沿墙跟随的强化学习
这是我们被分配的第二个项目,也是我在大学里做过的最难的项目之一。项目描述如下:
在这个项目中,学生将设计并实现强化学习算法,教会一台自主移动机器人沿着墙壁行驶并避免撞上障碍物。学生将使用 ROS Melodic 中的 Gazebo 模拟来模拟一台名为 Triton 的全向移动机器人,并使用提供给你的环境地图。学生将使用机器人上的激光测距扫描器进行感知和学习,其中机器人通过转向和速度命令进行控制。学生需要在 Ubuntu 18.04 LTS 上运行的 ROS Melodic 中使用 C++ 或 Python 来编写这个项目(即与项目 1 中使用的相同开发环境)。此外,学生还需要按照标准 IEEE 机器人会议的格式使用 LATEX 撰写报告。
对于强化学习算法,我们被要求使用 Q 学习。我们还使用了课堂提供的 Stingray Gazebo 模拟环境。Stingray 由 Triton 模型和物理逻辑组成。我们还得到了一张供机器人跟随的迷宫地图。总的来说,环境看起来是这样的:
我从未把我的解决方案发布到 GitHub 或网上,因为它并不是很好,而且存在很多缺陷。此外,让代码在正确的环境中运行相当困难,而且很烦人。不过,我确实有一段提交给课程的演示视频,展示了我的解决方案。你可以在这里观看:
完整的项目描述请查看 csci473-p2.pdf
使用基于骨架的表示理解人类行为的机器人
对于第三个项目,项目描述如下:
在这个项目中,学生将实现若干基于骨架的表示(交付物 1),并使用支持向量 机(SVM)(交付物 2)来利用从 Kinect V1 传感器收集的公共活动数据集对人类行为进行分类。此外,学生还需要撰写一份报告, 并在交付物 3 中按照标准 IEEE 机器人会议的格式使用 LATEX。
这个项目具有挑战性,但没有第二个项目那么难。主要目标是使用 Kinect V1 传感器数据,来自 MSR 日常活动 3D 数据集,以及 支持向量机 来对某些人类动作/行为进行分类。完整的项目描述请查看 csci473-p3.pdf,或者你也可以在 使用 LIBSVM 预测人类动作 博客文章中了解更多关于这个项目以及我的解决方案。
CSCI473 总结
CSCI473 是我在 Mines 本科学习期间所上过的最好的课程之一,甚至可以说是最好的课程。这些项目教会了我很多,也让我拥有了一个很酷的项目目录,可以在简历中回顾和引用。这也是我第一次觉得自己如鱼得水,因为我一直不是一个擅长考试的人,但在完成项目方面表现出色。也是通过这门课,我认识了张浩博士,而他最终帮助我在 Mines 的以人为中心机器人(HCR)实验室获得了一份研究助理职位。
CS 实地课程(2020 年夏季)
在 2020 年夏季,在完成 CSCI473 并加入 HCR 实验室之前,我在科罗拉多矿业学院的计算机科学本科项目中选修了 CSCI370,即“高级软件工程”。CSCI370 是一门让学生为某家公司设计、实现并记录软件相关解决方案的课程。它使学生能够将课堂知识应用到现实世界的计算机科学问题中。你可以在这里了解更多关于这门课程的信息。
在这门课程中,你可以决定要与哪个项目/公司合作。课程提供了详细说明每个项目和公司的 PDF。最终,我决定参与一家名为 Lunar Outpost 的公司发布的一个项目,名为“用于增强月球导航的实时轮滑检测与误差校正”。由于这个名字很长,我们把这个项目简称为“轮滑检测”。
问题
Lunar Outpost 是一家试图制造自主月球车的初创公司。在月球上,有大量月尘,这些月尘众所周知会导致大量轮子打滑。这并不理想,因为轮胎打滑会使自主系统丢失对其真实世界位置的跟踪。在地球上,这个问题通过使用 GPS 数据来纠正由轮滑引起的任何偏移来解决。但 GPS 的问题在于,它只有在有 30 多颗 导航卫星持续绕地球轨道运行并传输独特信号,从而允许计算机计算其位置时才有效。但在月球上,目前并不存在 GPS。因此,必须使用除 GPS 之外的另一种方法来检测轮滑。关于该项目问题的更详细报告可以在这里查看。
团队
这个项目并不是一个简单的项目,因此必须以团队形式完成。团队由五位同样来自科罗拉多矿业学院的学生组成:
这个项目并不是一个简单的项目,因此必须以团队形式完成。这个团队由 Mehmet Yilmaz(我)、Kane Bruce、Braedon O’Callaghan、Liam Williams 和 Kevin Grant 组成。
这个项目要求我们了解一些 ROS、C++、Python、Linux、Raspberry Pi 和 Arduino。我们中的大多数人都对其中一种或多种技术有经验,但我是唯一一个有 ROS 经验的人,因为我在 2020 年春季学期的以人为中心机器人(CSCI473)课程中使用过 ROS。因此,在项目早期,我帮助大家尽快熟悉 ROS 以及如何为它进行开发。
挑战
在这个项目中,我们遇到了很多挑战。但我们面临的最大挑战是没有办法使用真实世界中的机器人进行测试。这是由于 COVID 让一切都变成了远程形式,并阻止我们在 Lunar Outpost 的实验室/建筑中工作。由于这个原因,我们不得不使用仿真。
此外,我们还查阅了来自 WVU Navigation Lab 的一些学术研究,以了解轮胎打滑问题在 Lunar Outpost 的使用场景中可能如何被解决;对于我们这些本科大二和大三学生来说,这比我们预期的要困难得多。
我们面临的另一个挑战是用于这个项目的时间量。CSCI370 是一门为期一个月的课程。但是问题本身是一个巨大的问题,几十年来许多公司和学者一直在尝试解决/完善它。所以一个月远远不足以解决这个问题。但是,尽管有这些挑战,我们还是坚持了下来,并确保完成交付。
结论
在完成所有研究和开发之后,我们确定几乎不可能在数字环境中正确模拟月球物理,因此真正把这个算法放到仿真中去尝试是没有意义的,也不会在太空和月球上的轮胎打滑检测方面产生任何有意义的研究。我们得出的结论是,使用类似沙子和真实硬件(比如 Husky 机器人)来搭建一个合适的测试环境,对于这类研究来说要重要得多。我们确实把轮胎打滑检测代码更新为可作为 ROS 节点运行,它运行良好,并且可以很容易地导入到真实硬件中进行测试。这个项目让我承担了领导角色,向同伴讲解 ROS 开发,并在处理一个我以前从未遇到过的复杂问题时,获得了 Python、ROS 和 Gazebo 方面的经验。最重要的是,这段经历进一步坚定了我对机器人技术的热情,并强化了我继续在该领域开展研究的愿望,为我机器人之旅接下来会发生的事情奠定了基础。
从 HCR 实验室开始
在完成 CSCI473、2020 年夏天的 CS Field Session,以及 2020 年秋季学期之后,我决定投身机器人研究。我在 CSCI473 和 CS Field Session 中都获得了非常棒的经历,因此我决定我想在 HCR 实验室做研究。由于我在前一年已经认识了张博士,我决定给他发邮件,询问 2021 年 1 月实验室是否有任何机会。大约两周内,张博士表达了兴趣,向我介绍了研究选项,并为我提供了在实验室中的一个职位。然后我于 2021 年 2 月开始为实验室工作。
介绍视频
这是我在 HCR 实验室工作的几个月后录制的介绍视频。它录制于 2021 年 5 月,内容涵盖了我在 2021 年夏天于 HCR 实验室中将重点进行的研究:
我的项目
在我于 HCR 实验室工作的整个期间,我主要专注于 Triton 项目。Triton 项目是由科罗拉多矿业学院 Human Centered Robotics Lab 开发的一款移动机器人。它是一个三角形的全向轮地面机器人,由 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 可以移动、充电,并在基本意义上正常运行,但并没有真正做任何智能的事情。它甚至缺乏执行更高级动作的能力。
![]() |
![]() |
![]() |
![]() |
为了开始解决这个问题,实验室设置了一个区域,我们可以在其中跟踪 Triton。为此,他们创建了一个 2 米乘 2 米的区域,在距离地面约 6-7 英尺的高度,以方形类似的形状安装了 8 个 Optitrack Flex(红外)摄像头。
![]() |
![]() |
除了建立这个区域之外,每个 Triton 的机身顶部还固定了三个灰色球体标记。
有了这个设置,我们实际上就建立了自己的小型 GPS 系统,使我们能够获得 Triton 在我们感兴趣区域中的精确米级坐标。通过使用 Optitrack 红外摄像头和三角形排列的 Optitrack 灰色球体,我们可以精确定位 Triton 在我们区域中的坐标。这使我们能够应用闭环系统以获得更高的运动精度。
Optitrack 系统在正确校准时可提供约 120Hz 的位置和姿态数据,并具有亚毫米级精度。每个 Triton 的三个反光标记形成一个独特的三角形模式,系统可以将其作为刚体进行跟踪。坐标系被校准为 (0,0) 位于跟踪区域中心,X 和 Y 轴与房间几何结构对齐。但尽管有如此精确的定位数据,Triton 在运动方面仍然很吃力。
有了这个设置,我们希望为 Triton 提供的一个核心功能就是能够移动到特定坐标。用户,或他们的软件,可以提供其感兴趣区域内的一个 (x, y) 坐标。然后机器人会尽可能快速、准确、无缝地移动到该坐标。当我加入时,这个功能已经存在,但它运行得并不太好。下面是一个简单的动画,展示原始移动逻辑是如何工作的:
我没有记录原始方案实际运行的画面,所以我制作了这个简单动画来向你展示旧的移动逻辑是如何工作的。了解这一点后,这种方法有哪些问题呢?
- 它真的很慢
- 它会让机器人仅仅为了到达某个特定点而占用大量空间。这使得我们在多个 Triton 同时移动时很难使用这个方案。
那么,为什么会出现这种行为呢?问题在于 Triton 首先会转向,改变它的 alpha,直到它在某个特定误差范围内朝向目标点。然后它会向前冲刺,等到它的 theta 与目标相差达到某个特定值时,它就会停下来并再次开始转向,直到 alpha 落在目标所允许的范围内。然后它又冲刺一次,并不断重复这个过程,直到到达目标点。此外,当它离目标点越来越近时,转向和冲刺速度会变得越来越慢,以确保它不会越过目标。这导致 Triton 的运动显得不自然,到达目标点花费了非常长的时间,并且仅仅为了到达某个特定目标点就需要占用如此大的区域。因此,鉴于这些问题,以及这个功能对于 Triton 项目开发的重要性,当我开始在 HCR 实验室工作时,我的第一个任务就是开发更有效的解决方案,使 Triton 能够更好地导航到目标点。
了解这些之后,我花了大量时间研究解决这个问题的最佳方法。具有讽刺意味的是,我当时正在 Mines 上一门叫做 反馈控制系统导论(EENG307) 的课程。在这门课的前期,我们学习了 开环控制器 和 闭环控制器 的概念。在了解到这些之后,再加上我与那门课的教授以及我聪明的室友进行了一些讨论,我逐渐明白,让 Triton 到达目标点这个目标本质上是一个闭环系统问题。
现在,在进行了大量测试和研究之后,我为 Triton 开发了两种不同的控制器方法:
方法 1:距离-Theta 控制器
这种方法同时使用两个独立的比例控制器:
- 距离控制器:计算到目标的欧几里得距离,并应用比例增益来确定前进/后退速度
- Theta 控制器:计算机器人当前朝向与指向目标的期望朝向之间的角度误差,并应用单独的比例增益来确定旋转速度
该算法持续计算到目标的欧几里得距离以及机器人当前朝向与期望方向之间的角度误差。分别应用两个独立的比例增益来生成线速度和角速度。
这样做的结果是,Triton 会自然地朝向目标转动,同时向前移动,从而形成平滑的曲线路径。其关键优势在于,机器人始终保持前方朝向目的地,这对于基于摄像头的应用来说至关重要。
方法 2:X-Y 坐标控制器
这种方法把机器人当作一个二维绘图仪来处理,对 X 和 Y 方向的运动进行独立控制:
- X 控制器:基于 X 坐标误差直接控制东西方向运动
- Y 控制器:基于 Y 坐标误差直接控制南北方向运动
该实现会分别计算 X 和 Y 坐标误差,施加独立的比例增益,然后使用旋转矩阵将这些全局速度分量转换到机器人的局部坐标系中。这个转换是必要的,因为机器人的全向轮底盘需要的是自身参考系中的速度,而不是全局坐标中的速度。该方法生成了到目标点的最直接路径,速度也明显更快,但由于没有显式的姿态控制,机器人的朝向会发生漂移。
对于方法 #1,我在我的 Move Turtle (TurtleSim) 博客 中对这种方法做了完整的详细说明。我强烈建议你阅读这篇博客,以了解 PID 控制器总体是如何工作的,以及方法 #1 是如何工作的。我使用 ROS 的 TurtleSim 开发了方法 #1,然后将那段代码移植到 Triton,并进行了更新,使其适配更真实的环境。
方法 #2 采用了一种相当不同但同样有效的方式。它不去考虑机器人的朝向和到目标点的距离,而是把运动看作一个坐标平面问题。控制器会持续分别计算 X 和 Y 两个方向上的误差。例如,如果机器人需要从 (0,0) 移动到 (2,3),它会把这看作需要修正 X 方向 2 米的误差和 Y 方向 3 米的误差。两个比例控制器同时工作:一个根据 X 误差调整机器人在 X 方向上的速度,另一个根据 Y 误差处理 Y 方向的运动。这会形成一条更直接的到目标路径,类似于 3D 打印机喷头的移动方式,并且允许平滑的对角线运动。机器人不需要显式地转向面对目标点,这使得这种方法在狭窄空间中或需要精确定位时尤其有效。
这两种方法都被证明比最初的方法快得多,也可靠得多。想看看这些新方法的实际运行效果,请查看 Tritons in Action 播放列表,其中展示了所有 Triton 采用新方法运行的情况。
原本一个简单的点到点移动需要 30-45 秒,现在只需大约 8-12 秒。更重要的是,Triton 现在可以在狭窄空间中更高效地导航,这对我们的多机器人场景变得非常有用。
开发挑战与调试
实现这些控制器并不简单,其中涉及若干重大的调试挑战:
坐标系变换:最棘手的方面之一是把坐标变换弄正确。Optitrack 系统提供的是其自身坐标系中的数据,机器人有自己的局部坐标系,而我需要在它们之间准确转换。早期实现中,机器人会朝错误的方向移动,因为我把旋转矩阵的计算弄混了。
现实行为与理想行为:最大的挑战是要考虑教材式控制理论中不会出现的现实因素。机器人的轮子具有不同的摩擦特性,电机的响应并不完全相同,而且从 Optitrack 到控制软件再到机器人 Arduino 的通信链路中总会有一定延迟。我花了数周时间调节比例增益并添加死区滤波器,以应对这些物理现实。
振荡与稳定性问题:我的第一版实现存在振荡问题,机器人会越过目标点并来回摆动。这让我认识到 PID 控制器中微分项的重要性,以及合理调节增益的必要性。最终,我选择了主要使用比例控制并配合精心调节的增益,而不是完整的 PID,因为系统本身的固有阻尼对于大多数应用已经足够。
多机器人干扰:当多个机器人同时运行时,我发现了意想不到的干扰模式。机器人有时会在同一空间上“争抢”,或者形成死锁,彼此无限期阻塞。这促使我实现了协调机制和避碰算法。
多 Triton 控制系统
在我解决了单个 Triton 的运动问题后,实验室接下来的挑战是让多个 Triton 同时协同工作。这成为我的主要关注点之一,并最终成为对项目的重要贡献。
最初的系统一次只能控制一个 Triton,这严重限制了研究的可能性。实验室希望模拟多个自主载具需要协调运动的场景,比如自动驾驶汽车之间相互通信,以优化交通流并创建更好的 SLAM(同步定位与地图构建)地图。
为了解决这个问题,我使用 Python 的 multiprocessing 库实现了多进程方案。每个 Triton 都有自己专用的进程,可以独立运行,同时又受一个中央控制系统协调。这样多个 Triton 就能够同时移动,而不会干扰彼此的控制环。
多机器人架构设计
我开发的系统架构由几个关键组件组成:
主控制器进程:它作为中央协调器,处理用户界面交互、路径规划以及机器人之间的高层协调。它维护全局状态,并向各个机器人进程分发命令。
单个机器人进程:每个 Triton 都有自己专用的 Python 进程,负责处理:
- 约 50Hz 的实时 PID 控制计算
- 与机器人硬件(Arduino/Jetson)的通信
- 本地路径执行和避障
- 将状态报告回主控制器
共享内存通信:我使用 Python 的 multiprocessing.shared_memory 和 Queue 对象来实现进程之间的高效通信。这使得实时协调成为可能,而无需网络通信带来的开销。
同步机制:为防止多个机器人需要协同时发生冲突(例如避免碰撞),我实现了信号量和锁,使机器人能够请求对工作空间某些区域的独占访问权限。
挑战在于,既要确保所有机器人能够独立运行自己的控制环,又要保持全局协调。每个机器人进程运行自己的 PID 计算并直接向硬件发送电机指令,而主进程则处理更高层级的协调,例如避碰和路径规划。
![]() |
![]() |
多 Triton 系统开启了全新的研究可能性。我们现在可以模拟:
- 车与车通信场景
- 带避障的协同路径规划
- 群体机器人行为
- 多智能体 SLAM 建图
- 队形控制与跟随行为
下面是多个 Triton 同时运行时实验室设置的样子:
![]() |
![]() |
我还开发了一个用户友好的界面,使研究人员可以为每个 Triton 可视化地定义路径。你真的可以直接画出你希望每个机器人跟随的路径,它们就会以完美的协调执行这些路径。这对于搭建复杂实验非常有用,而无需手动编写每一个动作的代码。
该系统最多可以同时处理 5 个 Triton,每个都运行自己的 PID 控制器,同时通过中央控制系统进行协调。其性能令人印象深刻,所有机器人在作为一个团队协同工作时,仍能保持各自的精度。
这里有一个播放列表,展示 Triton 从单机器人控制到多机器人协调的实际运行情况:Tritons in Action 播放列表
深度传感器集成与坐标校正
我所做的另一项重大进展涉及利用安装在每个 Triton 上的 Intel RealSense D435 深度相机。虽然 Optitrack 系统为我们提供了极其精确的位置数据,但我希望探索机器人如何利用自身传感器来改善空间感知并校正坐标误差。
这个想法是,Triton 可以使用其深度传感器来检测周围的其他 Triton,并交叉参考它们的位置。这将有多重用途:
-
误差校正:如果 Optitrack 系统存在任何校准漂移或临时遮挡,机器人可以通过视觉确认彼此的位置来保持准确的坐标系。
-
增强的 SLAM:通过让多个配备深度传感器的机器人协同工作,我们可以利用冗余数据点创建更丰富的环境地图。
-
碰撞避免:实时深度感知将使机器人即使在中央控制系统存在通信延迟的情况下,也能够检测并避开彼此。
我开始尝试一些算法,让 Tritons 能够:
- 使用其独特的三角形外形和反射球标记来检测其他 Tritons
- 利用深度数据计算相对位置和姿态
- 将这些测量结果与 Optitrack 数据进行比较,以识别差异
- 在实时中潜在地调整它们的坐标系以保持准确性
计算机视觉实验
我花了相当多的时间试验一个分几个阶段运行的计算机视觉管线:
![]() |
![]() |
![]() |
![]() |
![]() |
深度数据处理:Intel RealSense D435 同时提供 RGB 和深度数据流。我主要处理深度数据,它以 640x480 的距离测量数组形式提供,频率为 30Hz。第一个挑战是过滤这些噪声很大的深度数据,以提取有意义的几何信息。
目标检测尝试:我尝试了多阶段检测算法。我在分割深度图像以识别处于地面高度的物体(过滤掉墙壁、天花板等)并寻找具有正确尺寸特征、足迹大约为 0.3x0.3 米的物体方面取得了一些成功。我尝试使用边缘检测和几何分析来识别 Triton 独特的轮廓,但结果喜忧参半。
标记识别实验:每个 Triton 上的三个反射球似乎是最有前途的检测特征。我尝试使用斑点检测算法,在深度图像中识别由三个亮点组成的特征三角形模式。在受控照明条件下我取得了一些有希望的结果,不过它并不始终可靠。
坐标融合研究:我研究了将基于视觉的位置估计与 Optitrack 数据融合的方法,包括基本的卡尔曼滤波实现。其概念是在可用时更重视 Optitrack 数据,但在需要时回退到视觉方法,不过在我离开实验室之前,这一系统我并没有完全实现。
性能挑战:要让所有这些处理与机器人的控制循环同时实时运行,事实证明颇具挑战。我尝试了优化方法,以便在不压垮 Jetson Nano 处理能力的情况下,使这些算法以大约 10-15Hz 的频率运行。
不幸的是,在我完成这项计算机视觉工作之前,我不得不离开实验室。虽然我获得了一些有希望的早期结果,并学到了很多关于深度传感器处理的知识,但我没能让系统达到完全可靠的状态。它仍然是一个有趣的研究方向,其他人或许可以在此基础上继续推进。
这是我测试计算机视觉算法的视频:
这是我实验期间深度传感器视图的样子:
虽然我没有完成深度传感器集成工作,但这一概念在诸如模拟自动驾驶汽车场景之类的应用中显示出了潜力,在这些场景中,车辆需要在不完全依赖外部基础设施的情况下感知彼此。我开始探索的这条研究方向,未来可能对实验室的后续工作有所贡献。
文档整理与知识保存
我对 HCR 实验室最重要的贡献之一,也许也是我最引以为豪的一项,就是整理并保存了所有项目文档。当我加入实验室时,Triton 项目的知识分散在多个平台和格式中。关键信息散落在以下各处:
- 属于不同已毕业学生的各种 Google Drive 账号
- 埋没在收件箱中的旧电子邮件
- 随意散落的 Dropbox 文件夹
- 多个 GitHub 仓库
- 组织方式不一致的 GitLab 仓库
- 只有特定人员才能解读的手写笔记
这种碎片化的文档状况是一个巨大问题。新学生往往要花上数周时间,只是为了弄清楚如何开始,而每当有人毕业或离开实验室时,宝贵的知识就不断流失。
我主动系统地解决了这个问题。我花了无数小时追踪与 Triton 项目相关的每一份文档、代码、视频和笔记。然后,我将所有内容整理进一个集中式 GitLab 仓库,并采用清晰、合理的结构。
![]() |
![]() |
集中式文档包括:
- 构建指南:从零组装 Triton 的逐步说明
- 软件设置:设置开发环境的完整指南
- 代码文档:带有清晰说明的注释良好的代码
- 硬件规格:详细的零件清单、布线图和 PCB 设计
- 故障排除指南:常见问题及其解决方案
- 视频教程:我制作并上传了教学视频到 YouTube,其中包括详细的 Optitrack 校准教程:
我还制定了文档标准,以确保未来的贡献能够有条理且便于访问。我创建的仓库结构成为实验室此后所有工作的基础。
除了整理现有文档之外,我还创建了几份原创指南和教程,填补了知识库中的关键空白。这些内容包括面向新实验室成员的详细设置说明、全面的故障排除指南,以及复杂流程的视频演示。
其影响是立竿见影且持久的。新学生如今可以在几天内而不是几周内上手。我创建的文档仓库至今仍在被实验室使用,即使在我离开多年之后也是如此。它成为 Triton 项目的唯一事实来源,并为未来的研究人员节省了无数小时/天。
指导与知识传递
我在 HCR 实验室期间最有成就感的方面之一,是有机会指导他人并分享我所获得的知识。随着我的工作推进,以及我对 Triton 系统越来越熟悉,我承担起了越来越多培训新团队成员的责任。
指导实验室接任者
在我准备最终离开实验室、专注于完成学位以及我在 eBay 的工作时,我确保对两位将于我离开后接手 Triton 项目的人进行了全面培训。这不仅仅是教他们事情如何运作,更是确保他们真正理解背后的基本原理,以便他们能够继续创新。
我花了数周时间与他们密切合作,内容包括:
- PID 控制系统的数学基础
- 用于协调多机器人运行的多进程架构
- 深度传感器集成与计算机视觉算法
- 文档系统及其维护方法
- 调试技术和常见故障模式
知识传递的过程极其彻底。我们一起进行了真实的调试会,我让他们修改并扩展现有代码,并确保他们能够独立从零开始搭建新的 Triton。
高中生指导项目
也许更有成就感的是,我通过实验室的外展项目指导了一名高中生。这是一个在她教育形成阶段向她介绍机器人、计算机科学和研究的绝佳机会。
我设计了一套全面的课程,涵盖:
计算机科学基础:
- 使用 Python 作为主要语言的编程概念
- 面向对象编程导论
- 对算法与数据结构的理解
机器人概念:
- 传感器如何工作以及如何与之接口
- 执行器控制和电机系统
- 自主系统与反馈控制的基础
ROS(机器人操作系统):
- 理解发布/订阅消息系统
- 创建节点和服务
- 使用启动文件和参数服务器
动手项目工作:
- 我们合作创建了一个控制 Triton 头部 LED 系统的 ROS 服务
- 她学会了编写清晰、有文档的代码,并与我们现有系统集成
- 她创建的 LED 控制服务成为 Triton 代码库的永久组成部分
这段指导经历特别特别之处在于,看着她从几乎不了解编程成长到为一个活跃的研究项目贡献有意义的代码。她从问“变量是什么?”到能够独立调试 ROS 通信问题,并编写自己的服务实现。
她开发的 LED 控制系统使研究人员能够通过简单的 ROS 命令轻松更改 Triton 头部 LED 的颜色和模式。这听起来可能很简单,但它需要理解 ROS 架构、硬件接口以及正确的软件设计模式。她的贡献至今仍在实验室使用。
我的导师经历对我来说和对她一样具有教育意义。它迫使我把复杂的概念拆解成易于消化的部分,并真正思考我们所做事情的基本原理。教别人让我成为了更好的工程师和研究人员。
与博士研究协作
我在实验室期间最让人觉得职业上收获丰厚的方面之一,是与 Peng 密切合作;他是一名博士生,研究重点是自动驾驶汽车算法。我对 Triton 系统所做的软件改进帮助支持了他的博士研究。
Peng 的研究需要精确、可靠的多机器人协调,以模拟自动驾驶汽车场景。在我改进运动控制和多机器人系统之前,这些实验要开展起来困难得多。机器人更慢、精度更低,而且不能像现在这样有效地协同工作。
我的贡献在多个方面帮助了 Peng 的研究:
路口管理研究: 借助改进后的 PID 控制器和多机器人协调,Peng 可以模拟多个“车辆”(Triton)需要协调其运动的路口场景。更好的时序和定位使这些研究更可行。
车对车通信: 我开发的多进程框架使 Peng 能够实现并测试模拟车辆之间的通信协议。每个 Triton 都可以在与其他 Triton 协调的同时做出决策,类似于自动驾驶汽车可能需要的运行方式。
SLAM 与建图研究: 深度传感器集成工作为 Peng 的同时定位与地图构建研究提供了额外数据。拥有具备协调感知能力的多台机器人,使得更全面的建图实验成为可能。
我们的合作之所以特别有价值,在于它不只是我在帮助他的研究,而是真正的伙伴关系。Peng 对自动驾驶汽车理论层面的理解帮助我完善了实践实现。他的反馈和需求推动我让这些系统变得更稳健、更强大。
我们一起在实验室里度过了许多小时,调试场景、讨论不同的控制策略,并探索 Triton 平台能够实现什么。Peng 既成了我的同事,也成了我的朋友;与他共事让我学到了很多关于学术研究实际如何运作的东西。
我构建的这些系统后来成了 Peng 论文工作中很有用的一部分。看到我在工程实践上的贡献支持了自动驾驶汽车技术研究,真的很令人满足。这进一步强化了我对扎实工程与研究如何协同创造有用成果的兴趣。
即使在我离开实验室之后,Peng 和我仍然保持联系。知道即便在我离开之后,我的工作仍继续为重要研究作出贡献,这让我感到非常有成就感。
视角:LLM 时代之前的开发时期
值得注意的是,这一切工作都是在软件开发的 LLM 时代之前完成的。所有这些都发生在 2020 到 2021 年之间(主要是 2021 年),那时 ChatGPT、Claude、Perplexity,或者像 Cursor IDE 这样的 AI 驱动开发工具都还不存在。
每一行代码都是从零开始编写的,每一个算法都通过学术论文和教科书进行研究,每一次调试会话都依赖于传统方法,比如打印语句、调试器和有条不紊的测试。当我卡在坐标变换或 PID 调参问题上时,我不能直接问一个 AI 助手去解释概念或帮助调试问题。
这使得开发过程显著更具挑战性,但也更有教育意义。我必须:
手动研究一切:理解 PID 控制理论意味着阅读教科书和学术论文。弄清坐标变换需要手工推导数学过程。每个概念都必须在实现之前被彻底理解。
在没有 AI 协助的情况下调试:当机器人朝意想不到的方向移动,或者在目标附近振荡时,我必须有条不紊地追踪逻辑,添加调试输出,并逐一测试假设。没有 AI 来建议潜在问题或帮助解读错误模式。
从第一性原理学习:如果不能迅速询问“我该如何为机器人技术在 Python 中实现多进程?”,我就必须深入理解底层概念。这迫使我在并发编程、控制系统和计算机视觉方面打下坚实基础。
文档至关重要:由于我不能依赖 AI 之后来解释代码,我必须写出极其清晰的文档和注释。这种纪律在后来向他人传递知识时证明非常有价值。
回头看,尽管现代 AI 工具会加速开发的许多方面,但在没有它们的情况下工作,迫使我培养了更深层的问题解决能力,以及对底层系统更全面的理解。想到如果今天的开发工具可用,这个项目会有多么不同,确实很有意思。
离开的艰难决定
虽然我非常喜欢在 HCR 实验室工作,但到 2021 年底,我面临着许多学生都会遇到的一个艰难决定:平衡多重机会与责任。我当时同时在 eBay 全职担任软件工程师、在 Mines 完成计算机科学学位,并在 HCR 实验室参与研究。
eBay 的机会意义重大;那是我第一个重要的软件工程职位,提供了极其宝贵的行业经验,也为我提供了稳定的收入。然而,试图同时维持全职工作、完成学位并对研究作出有意义的贡献,确实难以持续。总得有所取舍。
当我向 Zhang 博士提出是否可以减少课程负担以便更专注于实验室工作时,他强烈建议不要这样做。他的理由很充分:完成学位应该是优先事项,而在 eBay 的行业经验会对我的职业发展很有价值。他认为,为了研究而放弃课程虽然诱人,但从长期来看可能不是最佳决定。
所以在 2021 年 9 月,在实验室进行了大约 8 个月的高强度工作之后,我做出了一个艰难的决定:退出研究助理岗位,把重点放在完成学位和 eBay 的工作上。这是我当时做过的最困难的职业决定之一。
即使在正式离开实验室之后,只要有人需要帮助维护我所构建的系统,我仍然会继续提供支持。我会在需要时更新文档,回答调试方面的问题,并远程协助排查问题。我建立起来的人际联系,以及我对项目成功所投入的心力,并不会因为我不再正式属于团队而消失。
回顾与反思
如今到了 2025 年,四年过去了,我发现自己在复杂的情绪中回望那段时光。我的职业道路后来深入到了网页开发和 AI/ML 工程领域,这些领域都极具回报,也提供了巨大的成长和影响机会。
然而,我心里仍然会问一句“如果当初……”机器人技术是,而且说实话至今仍是,我真正的热情所在。与物理系统共事,看到自己的代码转化为现实世界中的运动和行为,这其中有一种网页开发甚至 AI 工作都无法完全复制的东西。
我有时会想,如果我走了一条不同的路,会发生什么。如果我曾找到办法继续待在机器人研究领域,会怎样?如果我在完成本科学位后立刻攻读研究生,会怎样?如果我选择优先投入实验室工作,而不是行业经验,会怎样?
但我也认识到,每条路都有其取舍。我在网页开发和 AI 方面培养的技能极其宝贵。行业经验教会了我大规模软件工程、用户体验设计,以及构建数百万人使用的产品时所面临的实际挑战。这些经历总体上让我成为了更好的工程师。
我在 HCR 实验室所做的工作,至今仍在影响我今天解决问题的方式。PID 控制系统所需的系统性思维,体现在我如何为软件系统设计反馈回路中。我所培养的文档编写和知识保存技能,在此后的每一个岗位中都极其有用。指导和教学的经历,也塑造了我与初级开发者合作以及参与团队知识共享的方式。
最重要的是,这段经历教会了我:当我在解决具有现实影响、且具有挑战性的技术问题时,我会表现得最好。无论是优化机器人运动算法,还是构建帮助用户实现目标的 AI 系统,那种满足感都来自于解决真正重要的难题。
持久的影响
回顾 HCR 实验室这段经历,我惊讶于自己在相对较短的时间里完成了多少事情。我构建的系统从根本上改变了 Triton 平台的运行方式,而这些改进中的许多至今仍在使用。我创建的文档仓库成了整个项目的知识库。我建立的导师关系对我合作过的人产生了持久影响。
但也许最重要的是,这段经历让我看到了当我从事自己真正充满热情的问题时,我能做到什么。在那八个月里,我:
- 改进了曾限制该平台的机器人运动控制系统
- 从零开始构建了一个多机器人协调系统
- 集成了计算机视觉和传感器融合能力
- 创建了一个全面的文档和知识管理系统
- 指导了几个人并帮助进行了知识传递
- 支持了自主车辆方向的博士级研究
不过,这不仅仅关乎这些技术成就,尽管它们对我来说很有意义。更重要的是,我学到了只要有毅力和系统性思维,即使作为一名本科生,你也能做出有用的贡献。
未来与机器人
虽然我的职业生涯后来走向了其他方向,但我对机器人技术的热情并没有减弱。我仍然关注该领域的发展,我对机器人学习和自主系统的进步感到兴奋,而且我偶尔会在空闲时间做一些个人机器人项目。
谁知道未来会怎样呢?我正在培养的 AI 和机器学习技能与机器人技术的相关性正变得越来越强。我获得的行业经验教会了我如何构建稳健、可扩展的系统。也许未来会有这样一个时刻:我这些不同的经历线索会以意想不到的方式汇聚在一起。
就目前而言,我很感激自己在 HCR 实验室度过的时光,以及它所提供的经历。那是一段塑造了我技术能力和我对什么样的工作最能带给我满足感的理解的形成期。尽管我有时会想念那段时光,但我知道我所学到的经验教训以及我所形成的方法,仍然在影响着我所做的一切。
Triton 机器人依然在那里,依然在为研究人员服务,依然在推动重要工作的开展。而这真的很棒。

















