2019 AgBot 挑战
东高中
在我于科罗拉多州丹佛市就读东高中期间(2014-2018),我非常积极地参与课外活动,其中影响最大的是机器人社团 AngelBotics。直到高二我才加入,因为起初我把重点放在足球上。该社团主要参加 FIRST 机器人竞赛(FRC),这让我有机会探索机械与电气工程,以及编程。通过 AngelBotics,我学会了使用 CAD 工具、3D 打印机和其他工程设备,接触到了通常只属于大学生的 STEM 概念。最初我立志成为一名量子物理学家,但我在 AP 物理和机器人方面的经历让我明白自己并不擅长物理,进而也让我偏离了机械工程这条道路。
相反,我找到了自己在编程方面的兴趣所在——这一切始于我为我的第一台 Raspberry Pi 编写 Python 代码,并在 AP 计算机科学的 Java 项目中得到巩固。尽管我在考试中表现不佳,我的老师 Nagel 先生还是鼓励我从事软件开发,强调项目成果比考试分数更有价值。这促使我在大学里选择计算机科学作为我的专业,并怀着成为软件工程师、最终创业成为创始人的梦想。
虽然由于繁重的课程和陡峭的学习曲线,我在 AngelBotics 参与得并不算多,但它仍然点燃了我对机器人技术的终身热情。所以当我开始上大学时,我下定决心要加入一个大学机器人社团,并在某一天创办一家公司,用机器人技术解决现实世界的问题。
矿业学院
从东高中毕业后,我开始在科罗拉多矿业学院攻读计算机科学学士学位(2018-2022)。在我的第一个学期里,我查看了矿院机器人社团,并发现了一个全新的机器人团队,叫做 AgBot。
AgBot 是一个新成立的机器人社团,其目标是打造一台机器人,参加 2019 agBots Weed and Feed 竞赛。这项竞赛有两个主要挑战:
- 害虫与杂草识别和清除
- 通过机器人技术创造新的收获方法
我们的团队选择专注于第一个挑战。这是矿院第一次参加 agBot 竞赛,也是矿院机器人社团第一次涉足农业相关项目。这让整个事情都显得耳目一新。
我立刻被这个项目吸引住了。我的家族在土耳其世代务农,直到我父亲那一代。于是 AgBot 让我感觉很亲切,同时也把我对机器人和编程的热情结合了起来。打造一台可能帮助像我祖父母那样的农民的机器人,这个想法真的让我非常兴奋。
开发
成为 AgBot 团队的一员,是我大学时期最难忘的经历之一。它也是在那之前我做过的最艰难的事情之一。这个项目是我第一次真正深入接触 Python、Ubuntu 和 ROS。在 FRC 中,一切都用 Java,所以这对我来说都是全新的领域。我以前用过 Python 和 Ubuntu,但从未接触过 ROS。学习 ROS 的工作原理是一场艰苦的拉锯战。那时我甚至都不知道 Python 环境是什么。
我大部分时间都在试图让一个 Lidar 把可用数据发送到我正在编写的 ROS 节点中。我的任务是实现一个名为 end_detector 的 ROS 节点,它可以利用 Lidar 数据检测机器人何时到达作物行的末端。现在听起来很简单,但当时感觉非常庞大。
我花了大约两周时间调试,才让 Lidar 和我的代码成功通信。整个代码要么用 C++ 编写,要么用 Python 编写,主要是 Python。所以,这个任务里我的代码就是 Python。等这部分能跑起来后,我开始使用我在校园里找到的随机植物地块来测试逻辑。我会推着一个支架,支架上装着 Lidar,从那些植物旁边经过,看看代码能否判断我们什么时候到达末端。经过许多小时的调试后,我最终让一切至少在测试环境里正常工作了。但当我们尝试把所有东西整合在一起时,情况就完全不同了。
我大部分时间都花在让硬件和软件彼此通信上。检测行尾的实际逻辑反而是第二位的。但这确实是一次很棒的学习经历。我从几乎不理解 ROS,进步到能够在 Jetson 板上编写和调试节点,并处理实时 Lidar 数据。也正是在这段时间里,我的编程语言偏好从主要默认使用 Java,转变为默认使用 Python。而且截至 2025 年,我还没有真正把 Java 用在任何项目或工作相关的代码库中。
团队与技术栈
我们在一台 Nvidia Jetson TX2 上运行 Ubuntu 16.04、ROS Kinetic 和 Python 2.7,并通过它连接一个 Hokuyo URG 04LX UG01 Lidar。我们还使用了 Arduino 作为超声波测距仪等传感器输入。我们的代码处理感知、导航、控制和喷洒。你可以在这里查看仓库:GitHub Repo。我编写的具体代码可以在 end_detector.py 中找到。以下是构成这台机器人的大部分组件列表:
- Ubuntu 16.04 Xenial
- ROS Kinetic Kame
- Python 2.7
- Nvidia Jetson TX2
- Hokuyo URG-04LX-UG01 Lidar
- Arduino Uno & Mega
- 直流电机、编码器、电机控制器、电池等
我们的团队并不大,但有几个名字格外突出:
Tyler 是社团的领导者和创始人。那时我非常尊敬他,直到今天依然如此。Zachary 是社团软件开发的负责人,并帮助我学到了很多关于软件开发和 ROS 的知识,对此我至今仍心怀感激。
还有其他成员,比如 Kevin Barnard 和 Amit Rotem。可惜的是,我不记得所有最初成员的姓名和联系方式了,因为社团结束已经超过 5 年了。
机器人开发的大部分工作都发生在周末,以及课程结束后的深夜。在攻读工程学位的同时还要做 AgBot,这非常耗费精力,但我们还是坚持了下来。
旅途与混乱
这段经历中我永远不会忘记的一部分,就是那次旅程本身。比赛在印第安纳州西拉法叶举行,靠近普渡大学校园。而整个比赛恰好就在矿院期末周结束后举行,所以我们根本没有时间从那地狱般的一周中恢复过来。
我们开着 Tyler 的卡车从科罗拉多州戈尔登前往印第安纳州,同时还要运送机器人和我们所有的工具。有意思的是,我们实际上是在比赛周的前一天才出发的。我们把所有东西——机器人、工具、电池、电脑、所有一切——都装上车,然后从科罗拉多州戈尔登开到印第安纳州西拉法叶。按地图算这是一段 18 小时车程。但算上加油和上厕所休息,我们实际上花了接近 20 到 22 个小时。
Tyler 全程驾驶,靠 Coffee Monster 饮料撑着。另一位队友——抱歉我忘了她的名字,但她出现在照片里——有时会接替他开车。一路上,开始下起了倾盆大雨。我们不得不停在一个随机的、已经关闭的加油站,找来一块防水布保护机器人。整个过程很简陋,混乱不堪,但这就是大学机器人。无论如何,我们还是到了。
抵达后,我们把遮阳棚搭在场地上,并摆好我们所有的工具。我主要负责完成代码并让它运行。在比赛的大部分时间里,我们主要是在调试机器人、让它更好地工作,同时也顺便看看其他队伍那些很酷的机器人设计。
所以我们赢了吗?
没有
回头看,我们只是一群孩子,试图做出远远超出我们经验水平的东西。其他队伍完全处在另一个层次。有些来自创业公司,有些来自研究实验室,还有些得到了全面的学术支持。我们只是一个小小的本科生团队,通宵达旦地熬夜,希望 Python 能把 Lidar 数据变成有用的东西。
我们的机器人有缺陷。它很粗糙。老实说,等我们到了比赛现场时,它几乎都还没法正常工作。队里很多人在意识到我们可能无法按时完成时就开始退出。有些人甚至根本没有出现。期末考试结束了,机器人还没准备好,士气也相当低落。
但我们当中还是有几个人坚持了下来
我没有放弃…… Tyler 没有放弃…… 照片里的那些人,也没有放弃!
尽管我们没有赢,甚至没有一台完全功能正常的机器人,但我绝不会用任何东西去交换那段经历。我学到了 ROS、硬件调试、在压力下构建系统,也学到了忠诚。我意识到,把事情坚持到底是多么重要。
反思,截止到 2025 年
2019 赛季之后,AgBot 关闭了。主要原因是 COVID 大约在一年后开始蔓延,导致矿院的所有社团都关闭了 1-2 年,而等世界开始恢复到“正常”时,我已经毕业了。
现在已经是 2025 年,回顾 AgBot,我把它看作是我一切的起点。它让我第一次真正体验了机器人技术,并教会了我如何与技术团队协作。它让我走上了一条道路,而这条道路又带来了令人惊叹的机会。
从那以后,我曾在 eBay 担任后端工程师,部署能够在数据中心之间接收数百万指标的服务。创办了我的第一家初创公司,专注于构建用于 AI 自动化网络安全渗透测试的系统。推出了 Notify Cyber,它的访问量达到了数万名访客。我还为 Docker、Kubernetes、Postgres,以及先进的 AI 基础设施编写过软件。
但 AgBot 仍然是我生命中最好的经历之一。它混乱、压力很大,而且有时感觉不可能完成,但它教给我的东西,比任何课程或教程都多。我学到,即使你没有完美的计划、足够的资金,或者最好的硬件,你仍然可以做出一些东西,学到很多,并在这一路上遇见了不起的人。
致 2019 年 AgBot 团队的每一位成员,谢谢你们。致那次 2019 年的公路旅行、我们在一家已经关门的加油站拿到的防水布,以及那些不眠之夜,谢谢你们。你们给了我勇气,让我有信心去追求宏大的项目,无论它们看起来多么不可能。
资源和链接
- 科罗拉多矿业学院机器人俱乐部主网站
- AgBot 2019 代码库
- 普渡 AgBot 文章
- 普渡视觉回顾文章
- DTN Progressive Farmer 文章
- AgBot 的 Twitter/X 账号
- AgBot 官方网站
- Zach 的 GitHub
- Kevin 的 GitHub
- Tyler 的 GitHub
照片集
矿院 AgBot 团队,我们
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
我们的 AgBot 机器人
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
视频/GIF
比赛场地
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
比赛中的其他队伍
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
FRC 1339(2014-2017)
![]() |
![]() |
其他随机图片
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |































































