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 hoạt động ngoại khóa, đáng kể nhất là câu lạc bộ robotics, AngelBotics. Mãi đến năm học lớp 10 tôi mới tham gia, vì ban đầu tôi tập trung vào bóng đá. Câu lạc bộ chủ yếu tham gia vào 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, tiếp xúc với các khái niệm STEM thường dành cho sinh viên đại học. Ban đầu tôi khao khát trở thành một Nhà Vật Lý Lượng Tử, nhưng trải nghiệm trong AP Physics và robotics cho tôi thấy tôi không giỏi vật lý đến mức đó và từ đó đã rẽ tôi khỏi con đường kỹ thuật cơ khí.

Thay vào đó, tôi tìm thấy sở trường của mình ở lập trình, bắt đầu bằng việc viết mã Python cho Raspberry Pi đầu tiên của tôi và được củng cố thông qua các dự án Java trong AP Computer Science. Mặc dù gặp khó khăn với các kỳ thi, thầy giáo 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 điểm thi. Điều này khiến tôi quyết định 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 kỹ sư phần mềm và cuối cùng là nhà sáng lập trong sự nghiệp của mình.

Mặc dù tôi không quá tham gia nhiều vào AngelBotics do khối lượng học tập nặng và đường cong học tập dốc, nó vẫn châm ngòi cho một niềm đam mê robotics suốt đời. Vì vậy khi bắt đầu đại học, tôi quyết tâm gia nhập 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 tiễn bằng robotics.

Trường Mines

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, tôi đã tìm hiểu về các câu lạc bộ robotics ở Mines và phát hiện 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 xây dựng một con robot để thi đấu trong Cuộc thi Weed and Feed agBots 2019. Cuộc thi này có hai thử thách chính:

  1. Xác định và Loại bỏ Sâu Bệnh và Cỏ Dại
  2. Tạo 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 Mines tham gia cuộc thi agBot, và cũng là lần đầu một câu lạc bộ robotics ở Mines làm việc về bất cứ thứ gì liên quan đến nông nghiệp. Điều đó làm cho mọi thứ cảm thấy rất mới mẻ.

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

Phát triển

Tham gia độ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 việc khó khăn nhất tôi từng làm cho đến thời điểm đó. Dự án này là lần đầu tôi thực sự đắm mình vào Python, Ubuntu và ROS. Trong FRC, mọi thứ đều bằng Java, nên tất cả đây đều là lãnh thổ mới đối với tôi. Tôi đã từng dùng Python và Ubuntu trước đó, nhưng chưa bao giờ chạm đến ROS. Học cách ROS hoạt động là một chặng đường gian nan. Lúc đó tôi 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 khiến một Lidar gửi dữ liệu sử dụng được vào một node ROS mà tôi đang viết. Nhiệm vụ của tôi là triển khai một ROS Node có tên end_detector có thể phát hiện khi robot đến cuối hàng cây sử dụng dữ liệu Lidar. Nghe có vẻ đơn giản bây giờ, nhưng lúc đó nó cảm thấy rất lớn lao.

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

Thời gian của tôi chủ yếu dành để khiến phần cứng và phần mềm nói chuyện với nhau. Logic thực sự để phát hiện cuối hàng đến sau. Nhưng đó là một trải nghiệm học tập tuyệt vời. Tôi đã từ hiểu mơ hồ về ROS đến viết và gỡ lỗi các node trên một board Jetson với dữ liệu Lidar trực tiếp. Cũng trong thời gian này, tôi chuyển từ việc mặc định dùng Java làm ngôn ngữ lập trì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 hoặc codebase công việc nào của mình.

Đội 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 Hokuyo URG 04LX UG01 Lidar. Chúng tôi có Arduino(s) cho các đầu vào cảm biến như cảm biến 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. Bạn có thể xem kho mã ở đây: Kho lưu trữ GitHub. Mã cụ thể tôi viết có thể được tìm thấy trong end_detector.py. Dưới đây là danh sách hầu hết các thành phần tạo nên robot:

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Hokuyo URG-04LX-UG01 Lidar
  • 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 lớn, nhưng có vài cái tên nổi bật:

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

Còn những thành viên khác nữa, như Kevin Barnard và Amit Rotem. Nhưng tôi tiếc là không nhớ tên và liên hệ của tất cả các thành viên gốc vì đã hơn 5 năm kể từ khi câu lạc bộ kết thúc.

Hầu hết việc phát triển robot diễn ra vào cuối tuần và tới khuya sau khi hầu hết các lớp học kết thúc. Vừa học một bằng kỹ thuật vừa làm AgBot thật sự rất vất vả, nhưng chúng tôi đã kiên trì vượt qua.

Chuyến Đi và 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ỳ kết thúc ở Mines, vì vậy chúng tôi không có thời gian để phục hồi sau tuần địa ngục đó.

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

Tyler lái suốt, sống nhờ đồ uống 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, thi thoảng thay anh lái. Trên đường, 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 cửa bất kỳ và lấy một tấm bạt để che robot. Nó tạm bợ, hỗn loạn, đúng chất robotics đại học. Bằng cách nào đó, chúng tôi đến nơi.

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

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 trẻ con cố gắng xây dựng điều gì đó vượt quá trình độ kinh nghiệm của mình. Các đội khác ở một đẳng cấp 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ố có hỗ trợ học thuật đầy đủ. Chúng tôi là một nhóm ít sinh viên đại học thức suốt đê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ó lỗi. Nó tạm bợ. Và thật lòng mà nói, nó gần như không hoạt động vào thời điểm chúng tôi đến cuộc thi. Nhiều người trong đội bắt đầu bỏ cuộc khi họ nhận ra có thể chúng tôi sẽ không hoàn thành kịp. Một số thậm chí không xuất hiện. Thi cuối kỳ đã kết thúc, robot chưa sẵn sàng, và tinh thần xuống rất thấp.

Nhưng một vài người chúng tôi đã kiên trì

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

Mặc dù chúng tôi không thắng hay thậm chí không có một con robot hoạt động đầy đủ, tôi sẽ không đổi trải nghiệm đó lấy bất cứ điều gì. Tôi học đượ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 được về lòng trung thành. Tôi nhận ra tầm quan trọng của việc kiên trì đến cùng.

Suy Ngẫm, Tính Đến Năm 2025

Sau mùa 2019, AgBot đã đóng cửa. Điều này chủ yếu do COVID bùng phát gần một năm sau đó, khiến tất cả các câu lạc bộ tại Mines phải ngừng hoạt động trong 1-2 năm và đến khi thế giới bắt đầu trở lạ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 thấy nó như khởi đầu của mọi thứ đối với tôi. Nó đã cho tôi trải nghiệm thực sự đầu tiên với ngành robot và dạy tôi cách hợp tác với một đội ngũ kỹ thuật. Nó đã đặt tôi trên một con đường dẫn tới những cơ hội tuyệt vời.

Kể từ đó, tôi đã làm việc như một 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 các trung tâm dữ liệu. Thành lập công ty khởi nghiệp đầu tiên của tôi tập trung vào 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, đã tiếp cận 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 như một trong những trải nghiệm tốt nhất của cuộc đời tôi. Nó hỗn loạn, căng thẳng, và đôi khi cảm thấy không thể, 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ó kế hoạch hoàn hảo hoặc đủ tài trợ hay phần cứng tốt nhất, bạn vẫn có thể xây dựng một thứ gì đó, học được rất nhiều, và gặp gỡ những người tuyệt vời trong suốt hành trình.

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

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

Thư viện Ảnh

Đội AgBot của Mines, 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/GIFs

IMG_6724.gif NEHE1091.gif demo.gif random_demo.gif
rogo_hardware.gif

Các Sân Thi Đấu 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.png 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 Ả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