Thử thách AgBot 2019

Trường Trung học East

Trong thời gian tôi học tại Trường Trung học East ở Denver, Colorado (2014-2018), tôi tham gia rất nhiều vào các hoạt động sau giờ học, trong đó có tác động lớn nhất là câu lạc bộ robot, AngelBotics. Mãi đến năm hai tôi mới tham gia, do lúc đầu tôi tập trung vào bóng đá. Câu lạc bộ chủ yếu tham gia FIRST Robotics Competition (FRC), cho phép tôi khám phá kỹ thuật cơ khí và điện, cũng như lập trình. Thông qua AngelBotics, tôi học cách sử dụng các công cụ CAD, máy in 3D và các thiết bị kỹ thuật khác, được tiếp xúc với các khái niệm STEM vốn thường dành cho sinh viên đại học. Ban đầu tôi mơ ước trở thành một Nhà Vật Lý Lượng Tử, nhưng trải nghiệm của tôi trong môn Vật lý AP và robotics cho tôi thấy rằng tôi không giỏi vật lý lắm và từ đó khiến tôi rẽ khỏi con đường kỹ thuật cơ khí.

Thay vào đó, tôi tìm thấy lĩnh vực phù hợp của mình trong lập trình, bắt đầu từ việc tôi viết mã Python cho chiếc Raspberry Pi đầu tiên của mình và được củng cố qua các dự án Java trong môn Khoa học Máy tính AP. Dù gặp khó khăn trong các kỳ thi, giáo viên của tôi, ông Nagel, đã khuyến khích tôi theo đuổi phát triển phần mềm, nhấn mạnh giá trị của các dự án hơn là điểm số bài kiểm tra. Điều đó khiến tôi tập trung vào khoa học máy tính làm ngành học ở đại học với ước mơ trở thành một kỹ sư phần mềm và sau này là một nhà sáng lập trong sự nghiệp của mình.

Mặc dù tôi không tham gia nhiều vào AngelBotics do khối lượng môn học nặng và đường cong học tập dốc, nó vẫn khơi dậy trong tôi niềm đam mê với robotics suốt đời. Vì vậy, khi bắt đầu đại học, tôi quyết tâm tham gia một câu lạc bộ robotics ở trường và một ngày nào đó xây dựng một công ty giải quyết các vấn đề thực tế bằng robotics.

Trường Mỏ

Sau khi tốt nghiệp Trường Trung học East, tôi bắt đầu học Cử nhân Khoa học Máy tính tại Colorado School of Mines (2018-2022). Trong học kỳ đầu tiên của mình, tôi tìm hiểu các câu lạc bộ robotics của Mines và phát hiện ra một nhóm robotics hoàn toàn mới tên là AgBot.

AgBot là một câu lạc bộ robotics mới được thành lập với mục tiêu chế tạo một robot để thi đấu trong 2019 agBots Weed and Feed Competition. Cuộc thi này có hai thử thách chính:

  1. Nhận diện và tiêu diệt sâu bệnh và cỏ dại
  2. Tạo ra các phương pháp thu hoạch mới thông qua robotics

Đội của chúng tôi chọn tập trung vào thử thách đầu tiên. Đây là lần đầu tiên Mines tham gia cuộc thi agBot, và cũng là lần đầu tiên một câu lạc bộ robotics của Mines làm bất cứ điều gì liên quan đến nông nghiệp. Điều đó khiến mọi thứ trở nên mới mẻ.

Tôi bị cuốn hút ngay lập tức bởi dự án này. Gia đình tôi ở Thổ Nhĩ Kỳ đã làm nông qua nhiều thế hệ, cho đến thế hệ của bố tôi. Vì vậy AgBot mang lại cảm giác gần gũi với tôi đồng thời kết hợp niềm đam mê robotics và lập trình của tôi. Ý tưởng xây dựng một robot có thể giúp những người nông dân như ông bà tôi thật sự rất thú vị.

Phát triển

Là một phần của đội AgBot là một trong những trải nghiệm đại học đáng nhớ nhất của tôi. Nó cũng là một trong những điều khó nhất mà tôi đã làm cho đến thời điểm đó. Dự án này là lần đầu tiên tôi thực sự đi sâu vào Python, Ubuntu và ROS. Trong FRC, mọi thứ đều bằng Java, nên đây hoàn toàn là lãnh địa mới đối với tôi. Tôi đã từng dùng Python và Ubuntu trước đó, nhưng tôi chưa bao giờ chạm vào ROS. Học cách ROS hoạt động là một cuộc chiến gian nan. Hồi đó tôi thậm chí còn không biết môi trường Python là gì.

Tôi dành phần lớn thời gian để cố gắng làm cho một Lidar gửi dữ liệu hữu ích vào một nút ROS mà tôi đang viết. Nhiệm vụ của tôi là triển khai một nút ROS có tên end_detector có thể phát hiện khi robot đến cuối một hàng cây trồng bằng dữ liệu Lidar. Nghe có vẻ đơn giản bây giờ, nhưng khi đó nó cảm thấy rất lớn.

Tôi mất khoảng hai tuần gỡ lỗi để làm cho Lidar giao tiếp được với mã của mình. Toàn bộ mã được viết bằng C++ hoặc Python, chủ yếu là Python. Vì vậy, phần việc của tôi trong nhiệm vụ này chỉ là Python. Khi thứ đó hoạt động, tôi bắt đầu kiểm thử logic bằng những mảng cây ngẫu nhiên mà tôi tìm thấy trong khuôn viên trường. Tôi sẽ đẩy một giá đỡ giữ Lidar đi ngang qua chúng và xem liệu mã có thể biết khi nào chúng tôi chạm đến cuối hàng hay không. Sau nhiều giờ và nhiều lần gỡ lỗi, cuối cùng tôi cũng làm cho mọi thứ hoạt động được ít nhất trong môi trường kiểm thử của mình. Khi chúng tôi cố gắng kết hợp tất cả lại thì lại là một câu chuyện khác.

Phần lớn thời gian của tôi được dùng để làm cho phần cứng và phần mềm giao tiếp với nhau. Logic thực tế để phát hiện điểm cuối của hàng cây đứng thứ hai. Nhưng đó là một trải nghiệm học tập tuyệt vời. Tôi đã đi từ chỗ gần như không hiểu ROS đến việc viết và gỡ lỗi các nút trên một bo Jetson với dữ liệu Lidar trực tiếp. Cũng chính trong khoảng thời gian này, tôi chuyển từ việc chủ yếu mặc định dùng Java làm ngôn ngữ lập trình của mình sang mặc định dùng Python. Và tính đến năm 2025, tôi vẫn chưa thực sự dùng Java cho bất kỳ dự án nào của mình hay cho các cơ sở mã liên quan đến công việc.

Đội ngũ và ngăn xếp công nghệ

Chúng tôi chạy Ubuntu 16.04 với ROS Kinetic và Python 2.7 trên một Nvidia Jetson TX2 giao tiếp với một Lidar Hokuyo URG 04LX UG01. Chúng tôi có Arduino(s) cho các đầu vào cảm biến như cảm biến đo khoảng cách siêu âm. Mã của chúng tôi xử lý nhận thức, điều hướng, điều khiển và phun xịt. Bạn có thể xem kho mã ở đây: Kho GitHub. Mã cụ thể mà tôi viết có thể được tìm thấy trong end_detector.py. Đây là danh sách phần lớn các thành phần tạo nên robot:

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Lidar Hokuyo URG-04LX-UG01
  • Arduino Uno & Mega
  • Động cơ DC, bộ mã hóa, bộ điều khiển động cơ, pin, v.v.

Chúng tôi không có một đội quá lớn, nhưng có vài cái tên nổi bật:

Tyler là người lãnh đạo và là người sáng lập câu lạc bộ. Khi đó tôi rất kính trọng anh ấy và đến hôm nay vẫn vậy. Zachary là người dẫn dắt phát triển phần mềm cho câu lạc bộ và đã giúp tôi học rất nhiều về phát triển phần mềm và ROS, điều mà tôi đến tận bây giờ vẫn biết ơn.

Cũng có những thành viên khác, như Kevin Barnard và Amit Rotem. Nhưng thật đáng tiếc tôi không nhớ tên và liên hệ của tất cả các thành viên ban đầu vì câu lạc bộ đã kết thúc hơn 5 năm rồi.

Phần lớn quá trình phát triển robot diễn ra vào cuối tuần và kéo dài đến đêm muộn sau khi hầu hết các lớp học của chúng tôi kết thúc. Vừa theo đuổi bằng kỹ thuật vừa làm AgBot quả thật rất vất vả, nhưng chúng tôi vẫn kiên trì vượt qua.

Chuyến đi và sự hỗn loạn

Một phần của toàn bộ trải nghiệm này mà tôi sẽ không bao giờ quên là chính chuyến đi. Cuộc thi được tổ chức ở West Lafayette, Indiana, gần khuôn viên Đại học Purdue. Và toàn bộ cuộc thi diễn ra ngay sau khi tuần thi cuối kỳ ở Mines kết thúc, nên chúng tôi không có thời gian để hồi phục sau tuần địa ngục đó.

Chúng tôi lái xe từ Golden, Colorado đến Indiana bằng xe bán tải của Tyler, đồng thời chở cả robot và tất cả công cụ của chúng tôi. Điều buồn cười là chúng tôi bắt đầu đi đúng nghĩa là chỉ một ngày trước tuần thi đấu. Chúng tôi đóng gói tất cả những gì mình có, robot, dụng cụ, pin, máy tính, mọi thứ, rồi lái từ Golden, Colorado đến West Lafayette, Indiana. Trên giấy tờ đó là quãng đường lái 18 giờ. Nhưng thực tế chúng tôi mất gần 20 hoặc 22 giờ vì dừng đổ xăng và nghỉ vệ sinh.

Tyler lái suốt cả chặng, sống nhờ nước tăng lực Coffee Monster. Một đồng đội khác, xin lỗi tôi quên tên cô ấy nhưng cô ấy có trong ảnh, thỉnh thoảng thay anh ấy lái. Trên đường đi, trời bắt đầu đổ mưa như trút. Chúng tôi phải tấp vào một trạm xăng ngẫu nhiên đã đóng cửa và lấy một tấm bạt để che robot. Nó cẩu thả, nó hỗn loạn, nó là robotics sinh viên đại học. Bằng cách nào đó, chúng tôi vẫn đến nơi.

Khi đến nơi, chúng tôi dựng mái che trên sân và sắp xếp tất cả công cụ. Tôi tập trung hoàn thiện phần mã và làm cho nó chạy. Trong phần lớn cuộc thi, chúng tôi chủ yếu làm việc để gỡ lỗi robot và khiến nó hoạt động tốt, đồng thời xem các bản chế tạo robot tuyệt vời của các đội khác.

Vậy chúng tôi có thắng không?

Không

Nhìn lại, chúng tôi chỉ là một nhóm sinh viên cố gắng xây dựng một thứ vượt xa trình độ kinh nghiệm của mình. Các đội khác ở một đẳng cấp hoàn toàn khác. Một số đến từ các startup. Một số đến từ các phòng thí nghiệm nghiên cứu. Một số nhận được sự hỗ trợ học thuật đầy đủ. Chúng tôi chỉ là một nhóm nhỏ sinh viên đại học thức trắng đêm, hy vọng Python sẽ biến dữ liệu Lidar thành thứ gì đó hữu ích.

Robot của chúng tôi có nhiều lỗi. Nó cẩu thả. Và thật lòng mà nói, đến lúc chúng tôi tới cuộc thi thì nó hầu như chỉ vừa hoạt động. Nhiều người trong đội bắt đầu bỏ cuộc khi họ nhận ra có lẽ chúng tôi sẽ không kịp hoàn thành. Một số thậm chí còn không xuất hiện. Kỳ thi cuối kỳ đã kết thúc, robot chưa sẵn sàng, và tinh thần thì khá thấp.

Nhưng vài người trong chúng tôi vẫn bám trụ

Tôi không bỏ cuộc… Tyler không bỏ cuộc… Và những người trong bức ảnh, họ cũng không bỏ cuộc!

Mặc dù chúng tôi không thắng, thậm chí không có một robot hoạt động hoàn chỉnh, tôi cũng sẽ không đánh đổi trải nghiệm đó lấy bất cứ thứ gì. Tôi đã học về ROS, gỡ lỗi phần cứng, xây dựng hệ thống dưới áp lực, và tôi đã học về lòng trung thành. Tôi nhận ra việc theo đuổi mọi việc đến cùng quan trọng đến mức nào.

Suy ngẫm, tính đến năm 2025

Sau mùa giải 2019, AgBot đã đóng cửa. Điều này chủ yếu là do COVID xuất hiện gần 1 năm sau đó, khiến tất cả các câu lạc bộ ở Mines phải ngừng hoạt động trong 1-2 năm và đến lúc thế giới bắt đầu trở lại trạng thái “bình thường” thì tôi đã tốt nghiệp.

Bây giờ là năm 2025, và nhìn lại AgBot, tôi xem đó là khởi đầu của mọi thứ đối với mình. Nó đã cho tôi trải nghiệm thực sự đầu tiên với robot học và dạy tôi cách hợp tác với một đội ngũ kỹ thuật. Nó đã đặt tôi lên một con đường dẫn đến những cơ hội tuyệt vời.

Kể từ đó, tôi đã làm việc với vai trò kỹ sư backend tại eBay, triển khai các dịch vụ thu thập hàng triệu chỉ số trên khắp các trung tâm dữ liệu. Thành lập công ty khởi nghiệp đầu tiên của mình, tập trung vào việc xây dựng kiểm thử xâm nhập an ninh mạng tự động bằng AI. Ra mắt Notify Cyber, dự án đã thu hút hàng chục nghìn lượt truy cập. Tôi đã viết phần mềm cho Docker, Kubernetes, Postgres, và hạ tầng AI tiên tiến.

Nhưng AgBot vẫn nổi bật là một trong những trải nghiệm tuyệt vời nhất trong đời tôi. Nó hỗn loạn, căng thẳng, và đôi khi có cảm giác bất khả thi, nhưng nó dạy tôi nhiều hơn bất kỳ lớp học hay hướng dẫn nào từng có thể. Tôi đã học được rằng ngay cả khi bạn không có một kế hoạch hoàn hảo, không đủ kinh phí, hay phần cứng tốt nhất, bạn vẫn có thể xây dựng điều gì đó, học được rất nhiều, và gặp gỡ những con người phi thường trên suốt chặng đường.

Gửi tất cả mọi người trong đội AgBot năm 2019, xin cảm ơn. Gửi chuyến đi đường năm 2019 đó, tấm bạt chúng tôi nhặt ở một cây xăng đã đóng cửa, và những đêm không ngủ, xin cảm ơn. Các bạn đã cho tôi sự bền bỉ để theo đuổi những dự án lớn với sự tự tin, bất kể chúng trông có vẻ bất khả thi đến mức nào.

Tài nguyên và Liên kết

Thư viện ảnh

Đội AgBot của Mine, chúng tôi

GetStoredImage-1.jpeg GetStoredImage.jpeg IMG_9005.jpeg IMG_9006.jpeg
IMG_9663.jpeg IMG_9684.jpeg IMG_9685.jpeg IMG_9686.jpeg
IMG_9687.jpeg IMG_9688.jpeg IMG_9691.jpeg

Robot AgBot của chúng tôi

IMG_8854.jpeg IMG_8855.jpeg IMG_8856.jpeg IMG_8867.jpeg
IMG_8976.jpeg IMG_8977.jpeg IMG_9007.jpeg IMG_9008.jpeg
IMG_9037.jpeg IMG_9038.jpeg IMG_9039.jpeg IMG_9040.jpeg
IMG_9695.jpeg r1.jpeg r3.jpeg r5.jpeg
r6.jpeg r7.jpeg r9.jpeg

Video/GIF

Các cánh đồng của cuộc thi

IMG_8848.jpeg IMG_8849.jpeg IMG_8850.jpeg IMG_8851.jpeg
IMG_9042.jpeg IMG_9666.jpeg IMG_9668.jpg land.jpeg

Các đội khác tại các cuộc thi

IMG_8827.jpeg IMG_8828.jpeg IMG_8857.jpeg IMG_8858.jpeg
IMG_8880.jpeg IMG_9651.jpeg IMG_9669.jpeg IMG_9671.jpeg
IMG_9672.jpeg IMG_9673.jpeg IMG_9674.jpeg IMG_9675.jpeg
IMG_9677.jpeg IMG_9678.jpeg IMG_9679.jpeg IMG_9696.jpeg
IMG_9697.jpeg gpage_2019.jpeg robot.jpeg

FRC 1339 (2014-2017)

IMG_9629.jpeg IMG_9630.jpeg

Các hình ảnh ngẫu nhiên khác

IMG_8825.jpeg IMG_8826.jpeg IMG_8852.jpeg IMG_8853.jpeg
IMG_8980.jpeg IMG_8981.jpeg IMG_9002.jpeg IMG_9003.jpeg
IMG_9043.jpeg mines_logo.png