HCR 实验室机器人研究
Table of Contents
本文回顾了我的机器人之旅,从在高中期间在FRC中发现对机器人的热情 2015 年起,到我在科罗拉多矿业学院的以人为本的机器人实验室 (HCR) 实验室担任研究助理的时期 2021年2月到2021年9月。请注意,自 2022年末 起,HCR 实验室 已从科罗拉多矿业学院迁至马萨诸塞大学阿默斯特分校,其网站也从hcr.mines.edu迁至hcr.cs.umass.edu。
背景
我于2018年秋季学期在科罗拉多矿业学院开始本科学习。我的专业是计算机科学,重点是机器人与智能系统。我于2022年春季毕业。
我很幸运在早期就找到了我的热情。在高中期间,我花了大量时间去弄清自己喜欢什么以及擅长什么。经过一些反复尝试,我发现我的热情是计算机科学。但同样在这段时间,我也发现自己对通过代码进行构建有着强烈的热爱。
在矿业学院,我有机会在张浩博士的指导下于矿业学院的以人为本的机器人实验室 (HCR) 工作。我第一次在2020年春季通过他的课程“以人为本的机器人”(CSCI473)认识张浩博士,随后在COVID的混乱和课程压力之后,我于2021年春初进入他的实验室工作。
以人为本的机器人(CSCI473)课程
科罗拉多矿业学院的以人为本的机器人(CSCI473)是我大学经历中为数不多的对我产生深远影响的课程之一。该课程由张浩博士授课。我们的最终成绩完全由三个项目组成,每个项目都提出了一个具有挑战性的问题,介绍了机器人学的核心概念。这些项目包括:
- 学习机器人操作系统 (ROS)
- 强化学习用于机器人墙壁跟随
- 机器人使用基于骨架的表示理解人类行为
🧩 学习机器人操作系统 (ROS)
这是我们被分配的第一个项目。该项目包括三个任务:
- 设置开发环境
- 了解 Gazebo 模拟器
- 编写 ROS “Hello World”
对于任务 1 和 2,我们只需设置开发环境并遵循 Gazebo 入门教程。这包括:
- 设置 ROS Melodic,我在我的 2011 年 HP 笔记本上完成,足够使用
- 安装和配置 ROS 与 Gazebo
- 浏览 gazebosim 的教程 和 e-manual 的教程。
另一方面,任务 3 是一个真正的挑战。任务是使用turtlesim让乌龟绘制矿业学院的“M”标志:
![]() |
![]() |
虽然这个任务听起来很简单,但实际上比看上去更困难。该项目最终让我了解了开环和闭环系统的概念。您可以在ROS Move Turtle项目页面了解更多关于此项目及我的解决方案。
🧩 强化学习用于机器人墙壁跟随
这是我们被分配的第二个项目,也是我在大学期间参与的最困难的项目之一。项目描述如下:
在本项目中,学生将设计并实现强化学习算法,以教会自主移动机器人沿墙行驶并避免碰撞障碍物。学生将使用 ROS Melodic 中的 Gazebo 仿真来模拟名为 Triton 的全向移动机器人,并使用提供的环境地图。学生将在机器人上使用激光测距仪进行感知和学习,机器人通过转向和速度指令进行控制。学生需要使用 C++ 或 Python 在运行 Ubuntu 18.04 LTS 的 ROS Melodic 环境中编程(即与项目 1 相同的开发环境)。此外,学生还需使用 LATEX 撰写符合标准 IEEE 机器人会议格式的报告。
对于强化学习算法,我们被指示使用Q-Learning。我们还使用了课堂提供的 Stingray Gazebo 仿真环境。Stingray 包含 Triton 模型和物理逻辑。我们还获得了一个供机器人跟随的迷宫。总体而言,环境如下所示:
欲查看完整的项目描述,请查看csci473-p2.pdf。我从未将我的解决方案发布到 GitHub 或网络,因为它并不理想且存在严重缺陷。此外,使代码在正确的环境中运行相当困难且令人烦恼。不过,我有一段提交给课堂的演示视频,展示了我的解决方案。您可以在此观看:
🧩 机器人使用基于骨架的表示理解人类行为
对于第三个项目,项目描述如下:
在本项目中,学生将实现若干基于骨架的表示(交付物 1),并使用支持向量机 (SVM)(交付物 2)对使用 Kinect V1 传感器收集的公共活动数据集中的人类行为进行分类。此外,学生还需在交付物 3 中使用 LATEX 撰写符合标准 IEEE 机器人会议格式的报告。
该项目具有挑战性,但没有第二个项目那么困难。主要目标是使用来自MSR Daily Activity 3D 数据集的Kinect V1传感器数据,以及支持向量机来分类特定的人类动作/行为。您可以在使用 LIBSVM 预测人类动作项目页面了解更多关于此项目及我的解决方案。
CSCI473 结论
CSCI473 是我在矿业学院本科学习期间所修的最佳课程之一(如果不是的话)。所有这些项目让我学到了很多,并让我拥有一个很棒的项目目录,可在简历中展示和引用。这也是我第一次感到如鱼得水的课程,因为我从不是擅长考试的学生,却在完成项目方面表现出色。正是通过这门课,我认识了张浩博士,他最终帮助我获得了在矿业学院以人为本的机器人实验室 (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 以及如何进行开发。
挑战
In this project there were a lot of challenges. But the biggest challenge we faced was not having access to a real world robot for testing. This was due to COVID making everything remote and preventing us from working in the Lunar Outpost’s lab/buildings. Due to this, we had to use simulations.
Also, we went through some academic research from the WVU Navigation Lab to get an idea of how the Wheel Slippage problem could get solved for Lunar Outpost’s use case. Which, for us, as undergraduate sophomores and juniors, was more difficult than we expected.
Another challenge we faced was the amount of time we had to work on this project. CSCI370 is a one month class. But the problem itself is a massive problem that many companies and academics have been trying to solve/perfect for decades. So one month is far from enough time to solve this issue. But, despite all these challenges we pushed through and made sure to deliver.
结论
After working through all the research and development, we determined that it is almost impossible to simulate proper moon physics digitally, so really trying this algorithm in a simulation is no good and not going to yield any meaningful research in wheel slippage detection in space and on the moon. We concluded that setting up a proper test environment using something like sand and real hardware, like a Husky robot, is far more important for this type of research. We did update the wheel slippage detection code to work as a ROS node and it functioned properly and could easily be imported into real hardware for testing. This project allowed me to take a leadership role, educate my peers on ROS development, and gain experience with Python, ROS, and Gazebo while tackling a complex problem I had never encountered before. Most importantly, this experience further solidified my passion for robotics and reinforced my desire to pursue research in the field, setting the stage for what would come next in my robotics journey.
开始于 HCR 实验室
After completing CSCI473, my CS Field Session in the summer of 2020, and my Fall 2020 semester, I decided to pursue research in robotics. I had such great experiences with both CSCI473 and the CS Field Session that I decided I wanted to do research for the HCR Lab. Since I had met Dr. Zhang the year prior, I decided to email him and ask about any opportunities the lab might have in January 2021. Within about 2 weeks, Dr. Zhang expressed interest, presented me with research options, and offered me a role in the lab. I then started working for the lab in February 2021.
介绍视频
Here’s my introduction video that I recorded a few months into my time in the HCR Lab. It was recorded in May 2021 and covers the research I would focus on in the HCR Lab during the summer of 2021:
我的项目
Throughout my time in the HCR Lab, I mainly focused on the Triton project. The Triton project is a mobile robot developed by the Human Centered Robotics Lab at the Colorado School of Mines. It’s a triangular omni-wheel ground robot powered by NVIDIA’s Jetson Nano.
The Triton, in a simple overview, consisted of the following parts:
- NVIDIA Jetson Nano
- NVIDIA 的 Seed Studio A205 承载板
- Arduino Mega
- 64 GB Micro SD 卡
- 定制 3D 打印机体
- 3 个全向轮
- 1 块 AR 电池
- 用于优化电源分配和布线的定制电路
- Intel 的 Realsense D435 相机
- 一些 LED
It was designed, built, and manufactured around 2018-2020 as a robot for educational purposes. By the time I joined, the Triton was pretty established, and the lab was considering making a new version of it. However, the main issue with the Triton was its software. The Triton could move, charge, and function in a basic sense but did not really do anything intelligent. It even lacked the ability to make more advanced movements.
![]() |
![]() |
![]() |
![]() |
To start addressing this, the lab set up an area where we could keep track of the Triton. To do this, they created a 2-meter by 2-meter area with 8 Optitrack Flex (Infrared Red) Cameras in a square-like shape about 6-7 feet above the floor.
![]() |
![]() |
Along with having this area built, each Triton had three gray sphere balls attached at the top of their bodies.
With this setup, we had effectively built our own small-scale GPS system that allowed us to get the exact coordinates in meters of a Triton in our area of interest. By using the Optitrack infrared cameras and the Optitrack gray spheres in a triangular shape, we could pinpoint the exact coordinates of a Triton in our area. This allowed us to apply a closed-loop system for better accuracy in movement.
The Optitrack system provided position and orientation data at about 120Hz with sub-millimeter accuracy when properly calibrated. Each Triton’s three reflective markers formed a unique triangular pattern that the system could track as a rigid body. The coordinate system was calibrated so that (0,0) was at the center of the tracking area, with X and Y axes aligned to the room’s geometry. But despite this precise positioning data, the Triton still struggled with movement.
With this setup, one core feature we wanted to provide the Triton was the ability to move to a specific coordinate. The user, or their software, could provide a (x, y) coordinate within their area of interest. Then the robot would move to that coordinate as fast, accurately, and seamlessly as possible. When I joined, this feature existed but it wasn’t working very well. Here is a simple animation showing how the original moving logic worked:
I did not record the original solution in action, so I created this simple animation showing you the old moving logic in action. Knowing this, what are the issues with this method?
- 它非常慢
- 为了到达特定点,机器人占用了大量空间。这使得在多个 Triton 同时移动时难以使用此方案。
So why was this behavior happening? The issue was that the Triton first turned, changing its alpha, until it pointed toward the target point within a specific margin of error. Then it would sprint forward, and after its theta was off from the target by a specific amount, it would stop and start turning again until the alpha was within that acceptable range for the target goal. Then it sprints again and keeps doing this until it gets to the point. Also, as it got closer and closer to the goal point, the turning and sprinting speed would get much slower to make sure it didn’t overshoot. This resulted in the Triton having unnatural movement, taking forever to get to a target point, and requiring so much area just to get to a specific target point. So with all of these issues, and given how essential this feature was for the development of the Triton project, when I started working at the HCR Lab, my first task was to develop more effective solutions that would allow the Triton to better navigate to a goal point.
Knowing this, I spent a lot of time doing research on the best possible way of addressing this problem. Ironically, I was taking a class called Introduction to Feedback Control Systems (EENG307) at Mines. Early in that class, we learned about the concept of Open-loop controllers and Closed-loop controllers. Knowing this, and after some discussion I had with the professor of that class and my smart roommate, it became clear that this goal of getting the Triton to a goal point was a closed-loop system problem.
Now, after extensive testing and research, I developed two distinct controller approaches for the Tritons:
方法 1:距离-Theta 控制器
This approach used two separate proportional controllers running simultaneously:
- Distance Controller: 计算到目标的欧氏距离,并应用比例增益来确定前后速度
- Theta Controller: 计算机器人当前朝向与目标期望朝向之间的角误差,使用单独的比例增益来决定旋转速度
The algorithm continuously calculated the Euclidean distance to the target and the angular error between the robot’s current heading and the desired direction. Two separate proportional gains were applied to generate linear and angular velocities respectively.
This resulted in the Triton naturally turning toward the goal while simultaneously moving forward, creating smooth curved paths. The key advantage was that the robot always kept its front face oriented toward the destination, which was crucial for camera-based applications.
方法 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 数据可用时给予更大权重,必要时回退到视觉,但在我离开实验室前未能完全实现。
性能挑战: 让所有这些处理在机器人控制回路的实时运行中同步运行非常困难。我尝试了优化方法,使算法以约 10-15Hz 的频率运行,而不至于超出 Jetson Nano 的处理能力。
不幸的是,我在实验室的时间结束前未能完成深度传感器集成工作。虽然我取得了一些有前景的早期结果并学到了大量关于深度传感器处理的知识,但系统仍未达到完全可靠的状态。这仍是一个有趣的研究方向,其他人可以在此基础上进一步构建。
以下是我测试计算机视觉算法的视频:
以下是我实验期间深度传感器视图的样子:
虽然我没有完成深度传感器的集成工作,但该概念在诸如模拟自动驾驶汽车场景的应用中显示出潜力,在这些场景中车辆需要在不完全依赖外部基础设施的情况下感知彼此。我开始探索的研究方向可能会对实验室的未来工作有所贡献。
文档与知识保存
我在 HCR 实验室最重要的贡献之一,也许是我最自豪的,就是组织并保存所有项目文档。当我加入实验室时,Triton 项目的知识散落在多个平台和格式中。关键的信息分布在:
- 属于不同已毕业学生的多个 Google Drive 账户
- 收件箱中埋藏的旧邮件
- 随机的 Dropbox 文件夹
- 多个 GitHub 仓库
- 组织结构不一致的 GitLab 仓库
- 只有特定人员能解读的手写笔记
这些碎片化的文档是一个巨大的问题。新学生需要花数周时间才弄清楚如何入手,而有价值的知识在人员毕业或离开实验室时不断流失。
我决定系统性地解决这个问题。我花了无数小时追踪每一份与 Triton 项目相关的文档、代码、视频和笔记。随后,我将所有内容组织到一个集中式 GitLab 仓库中,并采用清晰、合乎逻辑的结构。
![]() |
![]() |
集中式文档包括:
- 构建指南:从零开始组装 Tritons 的逐步说明
- 软件设置:完整的开发环境搭建指南
- 代码文档:带有清晰解释的良好注释代码
- 硬件规格:详细的零件清单、接线图和 PCB 设计
- 故障排除指南:常见问题及其解决方案
- 视频教程:我创建并上传到 YouTube 的教学视频,包括详细的 Optitrack 校准教程:
我还制定了文档标准,以确保未来的贡献能够有序且易于访问。我创建的仓库结构成为实验室后续所有工作的基础。
除了组织已有文档,我还编写了若干原创指南和教程,填补了知识库中的关键空白。这些包括为新实验室成员准备的详细设置说明、全面的故障排除指南以及复杂流程的视频演示。
其影响立竿见影且持久。新学生可以在几天内上手,而不是数周。我创建的文档仓库至今仍被实验室使用,已成为 Triton 项目的唯一真实来源,为后续研究人员节省了无数小时/天的时间。
指导与知识转移
我在 HCR 实验室期间最有价值的方面之一是有机会指导他人并分享我所获得的知识。随着我的工作进展并对 Triton 系统变得更加熟练,我承担了越来越多的培训新成员的责任。
指导实验室继任者
在我准备最终离开实验室以专注于完成学位和在 eBay 的工作时,我确保彻底培训了两位将在我离职后接手 Triton 项目的人。这不仅仅是向他们展示如何操作,更是要确保他们真正理解底层原理,以便继续创新。
我花了数周时间与他们紧密合作,内容包括:
- PID 控制系统的数学基础
- 用于协调多机器人工作的多进程架构
- 深度传感器集成和计算机视觉算法
- 文档系统以及如何维护它
- 调试技术和常见故障模式
知识转移非常彻底。我们一起进行真实的调试会话,我让他们修改和扩展现有代码,并确保他们能够独立从零搭建新的 Tritons。
高中生指导项目
也许更令人欣慰的是我通过实验室的外展项目指导了一名高中生。这是一个在学生教育关键阶段向其介绍机器人、计算机科学和研究的绝佳机会。
我设计了一个涵盖以下内容的综合课程:
计算机科学基础:
- 使用 Python 作为主要语言的编程概念
- 面向对象编程入门
- 算法与数据结构的理解
机器人概念:
- 传感器的工作原理及其接口方式
- 执行器控制与电机系统
- 自主系统与反馈控制的基础
ROS(机器人操作系统):
- 理解发布/订阅消息系统
- 创建节点和服务
- 使用 launch 文件和参数服务器
动手项目实践:
- 我们合作创建了一个控制 Triton 头部 LED 系统的 ROS 服务
- 她学会编写干净、带有文档的代码,并与我们现有系统集成
- 她创建的 LED 控制服务成为 Triton 代码库的永久组成部分
这段指导之所以特别,是因为我看到她从几乎对编程一无所知,成长为能够为活跃的研究项目贡献有意义代码的过程。她从“变量是什么?”的提问,发展到能够独立调试 ROS 通信问题并编写自己的服务实现。
她开发的 LED 控制系统使研究人员能够通过简单的 ROS 命令轻松更改 Triton 头部 LED 的颜色和模式。这听起来或许简单,但它需要理解 ROS 架构、硬件接口以及恰当的软件设计模式。她的贡献至今仍在实验室使用。
The mentorship was as educational for me as it was for her. It forced me to break down complex concepts into digestible pieces and really think about the fundamentals of what we were doing. Teaching someone else made me a better engineer and researcher.
与博士研究的合作
One of the most professionally rewarding aspects of my time in the lab was working closely with Peng, a PhD student whose research focused on self-driving car algorithms. The software improvements I had made to the Triton system helped support his doctoral research.
Peng’s research required precise, reliable multi-robot coordination to simulate self-driving car scenarios. Before my improvements to the movement control and multi-robot systems, these experiments were much more difficult to conduct. The robots were slower, less accurate, and couldn’t work together as effectively.
My contributions helped Peng’s research in several areas:
交叉口管理研究: With the improved PID controllers and multi-robot coordination, Peng could simulate intersection scenarios where multiple “vehicles” (Tritons) needed to coordinate their movements. The better timing and positioning helped make these studies more feasible.
车与车通信: The multi-processing framework I developed allowed Peng to implement and test communication protocols between simulated vehicles. Each Triton could make decisions while still coordinating with others, similar to how self-driving cars might need to operate.
SLAM 与制图研究: The depth sensor integration work provided Peng with additional data for his simultaneous localization and mapping research. Having multiple robots with coordinated sensing capabilities allowed for more comprehensive mapping experiments.
What made our collaboration particularly valuable was that it wasn’t just me helping his research, it was a genuine partnership. Peng’s understanding of the theoretical aspects of autonomous vehicles helped inform my practical implementations. His feedback and requirements pushed me to make the systems more robust and capable.
We spent many hours in the lab together, debugging scenarios, discussing different control strategies, and exploring what the Triton platform could accomplish. Peng became both a colleague and a friend, and working with him taught me a lot about how academic research actually works.
The systems I built became a useful part of Peng’s dissertation work. Seeing my practical engineering contributions support research in autonomous vehicle technology was really fulfilling. It reinforced my interest in how solid engineering and research can work together to create useful outcomes.
Even after I left the lab, Peng and I stayed in touch. Knowing that my work continued to contribute to important research even after my departure was extremely rewarding.
视角:LLM 之前的开发时代
It’s worth noting that all of this work was accomplished during the pre-LLM era of software development. All of this took place between 2020 to 2021 (mainly 2021), before ChatGPT, Claude, Perplexity, or AI-powered development tools like Cursor IDE existed.
Every line of code was written from scratch, every algorithm was researched through academic papers and textbooks, and every debugging session involved traditional methods like print statements, debuggers, and methodical testing. When I got stuck on a coordinate transformation or PID tuning problem, I couldn’t just ask an AI assistant to explain the concept or help debug the issue.
This made the development process significantly more challenging but also more educational. I had to:
手动研究所有内容: Understanding PID control theory meant reading textbooks and academic papers. Figuring out coordinate transformations required working through the math by hand. Every concept had to be fully understood before implementation.
在没有 AI 帮助的情况下调试: When robots moved in unexpected directions or oscillated around targets, I had to methodically trace through the logic, add debug outputs, and test hypotheses one by one. There was no AI to suggest potential issues or help interpret error patterns.
从第一原理学习: Without the ability to quickly ask “我如何在 Python 中为机器人实现多进程?” I had to understand the underlying concepts deeply. This forced me to build a solid foundation in concurrent programming, control systems, and computer vision.
文档至关重要: Since I couldn’t rely on AI to explain code later, I had to write extremely clear documentation and comments. This discipline proved invaluable when transferring knowledge to others.
Looking back, while modern AI tools would have accelerated many aspects of the development, working without them forced me to develop deeper problem-solving skills and a more thorough understanding of the underlying systems. It’s fascinating to think how different this project might have been with today’s development tools available.
离开的艰难决定
As much as I loved working in the HCR Lab, by late 2021 I faced a difficult decision that many students encounter: balancing multiple opportunities and responsibilities. I was simultaneously working full-time as a software engineer at eBay, finishing my computer science degree at Mines, and contributing to research at the HCR Lab.
The eBay opportunity was significant; it was my first major software engineering role, provided invaluable industry experience, and provided me with a solid income. However, trying to maintain full-time work, complete my degree, and contribute meaningfully to research was simply unsustainable. Something had to give.
When I approached Dr. Zhang about potentially reducing my course load to focus more on the lab work, he strongly advised against it. His reasoning was sound: completing my degree should be the priority, and the industry experience at eBay would be valuable for my career development. He felt that dropping classes to focus on research, while tempting, might not be the best long-term decision.
So in September 2021, after about 8 months of intensive work in the lab, I made the difficult decision to step back from my research assistant role to focus on completing my degree and my work at eBay. It was one of the harder professional decisions I’ve had to make at the time.
Even after officially leaving the lab, I continued to provide support whenever anyone needed help with the systems I had built. I updated documentation as needed, answered questions about debugging, and helped troubleshoot issues remotely. The connections I had made and the investment I had in the project’s success didn’t just disappear because I was no longer officially part of the team.
反思与回顾
Now, in 2025, four years later, I find myself reflecting on that time with complex emotions. My career path took me deep into web development and AI/ML engineering, areas that have been incredibly rewarding and provided tremendous opportunities for growth and impact.
Yet there’s a part of me that wonders “what if.” Robotics was, and honestly still is, my true passion. There’s something about working with physical systems, seeing your code translate into real-world movement and behavior, that web development and even AI work can’t quite replicate.
I sometimes wonder what might have happened if I had taken a different path. What if I had found a way to stay in robotics research? What if I had pursued graduate school immediately after finishing my undergraduate degree? What if I had chosen to prioritize the lab work over the industry experience?
But I also recognize that every path has its trade‑offs. The skills I developed in web development and AI have been incredibly valuable. The industry experience taught me about software engineering at scale, user experience design, and the practical challenges of building products that millions of people use. These experiences have made me a better engineer overall.
The work I did in the HCR Lab continues to influence how I approach problems today. The systematic thinking required for PID control systems shows up in how I design feedback loops in software systems. The documentation and knowledge preservation skills I developed have been invaluable in every role since. The experience of mentoring and teaching has shaped how I work with junior developers and contribute to team knowledge sharing.
Most importantly, the experience taught me that I thrive when working on challenging technical problems that have real‑world impact. Whether that’s optimizing robot movement algorithms or building AI systems that help users accomplish their goals, the satisfaction comes from solving hard problems that matter.
持久影响
Looking back at the HCR Lab experience, I’m struck by how much I accomplished in a relatively short time. The systems I built fundamentally changed how the Triton platform operated, and many of those improvements are still being used today. The documentation repository I created became the knowledge base for the entire project. The mentorship relationships I formed had lasting impact on the people I worked with.
But perhaps most significantly, the experience showed me what I’m capable of when working on problems I’m truly passionate about. In those eight months, I:
- 改进了限制平台的机器人运动控制系统
- 从零构建了多机器人协同系统
- 集成了计算机视觉和传感器融合能力
- 创建了全面的文档和知识管理系统
- 指导了多位人员并帮助知识转移
- 支持了博士级别的自动驾驶车辆研究
这不仅仅是关于技术成就,尽管那些对我而言意义重大。更在于认识到,只要坚持和系统性思考,即使作为本科生也能做出有价值的贡献。
未来与机器人技术
虽然我的职业生涯已经走向其他方向,但我对机器人的热情依然未减。我仍然关注该领域的发展,对机器人学习和自主系统的进步感到兴奋,并且偶尔在业余时间从事个人机器人项目。
谁能预料未来会怎样?我在人工智能和机器学习方面培养的技能正变得与机器人技术日益相关。我所获得的行业经验教会了我如何构建稳健、可扩展的系统。也许未来会有一种情形,让我这些不同的经验线索以意想不到的方式交织在一起。
目前,我对在 HCR 实验室度过的时光以及它提供的经历心怀感激。那是一个塑造我技术技能和对最有成就感工作类型认知的关键时期。虽然我有时会想念它,但我知道所学的教训和形成的方法仍在影响我的一切行动。
机器人依然在那儿,继续为研究人员服务,推动重要工作。这真是相当美好。