Chương Nghiên Cứu Robotics Của Tôi
Table of Contents
Bài viết này kể lại hành trình robotics của tôi, bắt đầu từ việc khám phá niềm đam mê với robotics trong FRC trong thời trung học vào 2015 cho đến thời gian tôi làm trợ lý nghiên cứu tại Phòng thí nghiệm Human Centered Robotics (HCR) của Colorado School of Mines (HCR Lab) từ tháng Hai 2021 đến tháng Chín 2021. Lưu ý rằng kể từ cuối năm 2022, HCR Lab đã chuyển từ Colorado School of Mines sang Đại học Massachusetts Amherst, cùng với trang web của nó từ hcr.mines.edu sang hcr.cs.umass.edu.
Bối Cảnh
Tôi bắt đầu chương trình đại học tại Colorado School of Mines vào học kỳ Mùa Thu 2018. Ngành của tôi là Khoa học Máy tính với trọng tâm là Robotics & Hệ Thống Thông Minh. Và tôi tốt nghiệp vào Mùa Xuân 2022.
Tôi may mắn khi tìm thấy đam mê của mình từ rất sớm trong cuộc đời. Trong thời trung học, tôi đã dành khá nhiều thời gian để tìm ra điều mình thích và điều mình có thể làm tốt. Sau một số lần thử và sai, tôi nhận ra rằng đam mê của mình là khoa học máy tính. Nhưng cũng chính trong khoảng thời gian này, tôi phát hiện ra mình có một tình yêu mãnh liệt đối với việc xây dựng thông qua mã nguồn.
Tại Mines, tôi có cơ hội làm việc ở Phòng thí nghiệm Human Centered Robotics (HCR) của Mines dưới sự hướng dẫn của Tiến sĩ Hao Zhang. Tôi gặp Tiến sĩ Zhang lần đầu vào Mùa Xuân 2020 thông qua lớp “Human Centered Robotics” (CSCI473) của ông, và sau sự hỗn loạn của COVID cùng việc học trên lớp, tôi đã được làm việc trong phòng thí nghiệm của ông vào đầu Mùa Xuân 2021.
Lớp Human Centered Robotics (CSCI473)
Human Centered Robotics (CSCI473) của Mines là một trong số ít môn học trong quãng đời đại học của tôi có ảnh hưởng sâu sắc đến tôi. Lớp học được giảng dạy bởi Tiến sĩ Hao Zhang. Toàn bộ điểm số của chúng tôi cho môn học chỉ gồm ba dự án, mỗi dự án đưa ra một vấn đề đầy thách thức và giới thiệu các khái niệm cốt lõi của robotics. Các dự án này gồm có:
- Học Hệ Điều Hành Robot (ROS)
- Học Tăng cường cho Bám Tường bằng Robot
- Robot Hiểu Hành Vi Con Người Bằng Biểu Diễn Dựa Trên Bộ Xương
Học Hệ Điều Hành Robot (ROS)
Đây là dự án đầu tiên chúng tôi được giao. Dự án gồm ba nhiệm vụ:
- Thiết lập Môi trường Phát triển
- Hiểu Trình mô phỏng Gazebo
- Viết một “Hello World” cho ROS
Đối với nhiệm vụ 1 và 2, chúng tôi chỉ cần thiết lập môi trường phát triển và làm theo một hướng dẫn giới thiệu về Gazebo. Việc này bao gồm:
- Thiết lập ROS Melodic, việc mà tôi đã làm trên chiếc laptop HP đời 2011 của mình và như vậy là đủ tốt
- Cài đặt và cấu hình ROS và Gazebo
- Làm theo hướng dẫn của gazebosim và hướng dẫn của e-manual.
Nhiệm vụ 3, ngược lại, là một thử thách thực sự. Nhiệm vụ là sử dụng turtlesim và để chú rùa vẽ logo chữ “M” của Mines:
![]() |
![]() |
Nhiệm vụ này, dù nghe có vẻ đơn giản, lại khó hơn nhiều so với vẻ bề ngoài. Dự án này cuối cùng đã giới thiệu cho tôi khái niệm về hệ Open-Loop và Closed-Loop. Để xem mô tả đầy đủ của dự án, hãy xem csci473-p1.pdf hoặc bạn có thể tìm hiểu thêm về dự án này và giải pháp của tôi trên trang dự án ROS Move Turtle.
Học Tăng cường cho Bám Tường bằng Robot
Đây là dự án thứ hai chúng tôi được giao, và là một trong những dự án khó nhất mà tôi từng làm ở đại học. Mô tả dự án như sau:
Trong dự án này, sinh viên sẽ thiết kế và triển khai các thuật toán học tăng cường để dạy một robot di động tự hành bám theo một bức tường và tránh va vào chướng ngại vật. Sinh viên sẽ sử dụng mô phỏng Gazebo trong ROS Melodic để mô phỏng một robot di động đa hướng tên là Triton, và sử dụng một bản đồ môi trường được cung cấp cho bạn. Sinh viên sẽ sử dụng một máy quét khoảng cách laser trên robot để thực hiện cảm biến và học tập, trong đó robot được điều khiển bằng các lệnh lái và vận tốc. Sinh viên được yêu cầu lập trình dự án này bằng C++ hoặc Python trong ROS Melodic chạy trên Ubuntu 18.04 LTS (tức là cùng môi trường phát triển được dùng trong Dự án 1). Ngoài ra, sinh viên được yêu cầu viết một báo cáo theo định dạng của các hội nghị robotics IEEE tiêu chuẩn bằng LATEX.
Đối với thuật toán học tăng cường, chúng tôi được hướng dẫn sử dụng Q-Learning. Chúng tôi cũng sử dụng môi trường mô phỏng Gazebo Stingray được cung cấp bởi lớp học. Stingray gồm mô hình Triton và logic vật lý. Chúng tôi cũng được cung cấp một mê cung để robot đi theo. Tóm lại, môi trường trông như thế này:
Tôi chưa bao giờ đăng giải pháp của mình lên GitHub hay lên web vì nó không quá tốt và có nhiều lỗi nghiêm trọng. Ngoài ra, việc khiến mã chạy được trong đúng môi trường là khá khó khăn và phiền phức. Tuy nhiên, tôi có một video demo mà tôi đã nộp cho lớp, cho thấy giải pháp của tôi. Bạn có thể xem nó tại đây:
Để xem mô tả đầy đủ của dự án, hãy xem csci473-p2.pdf
Robot Hiểu Hành Vi Con Người Bằng Biểu Diễn Dựa Trên Bộ Xương
Đối với dự án thứ ba, mô tả dự án như sau:
Trong dự án này, sinh viên sẽ triển khai một số biểu diễn dựa trên bộ xương (Deliverable 1) và sử dụng Máy hỗ trợ vectơ (SVMs) (Deliverable 2) để phân loại các hành vi của con người bằng một bộ dữ liệu hoạt động công khai được thu thập từ cảm biến Kinect V1. Ngoài ra, sinh viên được yêu cầu viết một báo cáo theo định dạng của các hội nghị robotics IEEE tiêu chuẩn bằng LATEX trong Deliverable 3.
Dự án này đầy thử thách nhưng không khó bằng dự án thứ hai. Mục tiêu chính là sử dụng dữ liệu cảm biến Kinect V1, từ MSR Daily Activity 3D Dataset, và Máy hỗ trợ vectơ để phân loại một số hành động/hành vi của con người. Để xem mô tả đầy đủ của dự án, hãy xem csci473-p3.pdf hoặc bạn có thể tìm hiểu thêm về dự án này và giải pháp của tôi trên bài đăng blog Dự đoán Hành Động Con Người Bằng LIBSVM.
Kết Luận Về CSCI473
CSCI473 là một trong những, nếu không muốn nói là môn học tốt nhất mà tôi đã học trong quá trình đại học tại Mines. Tất cả những dự án này đã dạy tôi rất nhiều và cho phép tôi có một bộ sưu tập dự án rất hay để nhìn lại và tham khảo trên sơ yếu lý lịch của mình. Đây cũng là lớp học đầu tiên mà tôi cảm thấy mình thực sự đúng chỗ, vì tôi chưa bao giờ là người làm bài kiểm tra tốt nhưng lại xuất sắc trong việc hoàn thành các dự án. Cũng chính qua lớp học này mà tôi gặp Tiến sĩ Hao Zhang, người sau đó đã giúp tôi có được vị trí trợ lý nghiên cứu tại Phòng thí nghiệm Human-Centered Robotics (HCR) của Mines.
Phiên Thực Địa Khoa Khoa Học Máy Tính (Mùa Hè 2020)
Trong Mùa Hè năm 2020, giữa lúc hoàn thành CSCI473 và gia nhập HCR Lab, tôi đã học CSCI370 hay “Kỹ Thuật Phần Mềm Nâng Cao” như một phần của chương trình đại học ngành CS tại Colorado School of Mines. CSCI370 là một môn học yêu cầu sinh viên thiết kế, triển khai và tài liệu hóa các giải pháp liên quan đến phần mềm cho một công ty. Môn học cho phép sinh viên áp dụng kiến thức đã học vào các vấn đề khoa học máy tính trong thế giới thực. Bạn có thể tìm hiểu thêm về môn học tại đây.
Trong môn học, bạn được quyền quyết định sẽ làm dự án/công ty nào. Môn học cung cấp các PDF mô tả chi tiết từng dự án và công ty. Cuối cùng tôi quyết định làm một dự án do một công ty tên là Lunar Outpost đăng tải, có tên “Real Time Wheel Slip Detection and Error Corrections for Enhanced Lunar Navigation”. Vì tên này quá dài, hãy gọi dự án này bằng một biệt danh là “Phát Hiện Trượt Bánh Xe”.
Vấn Đề
Lunar Outpost là một công ty khởi nghiệp đang cố tạo ra các xe tự hành trên Mặt Trăng. Trên Mặt Trăng, có rất nhiều bụi Mặt Trăng, vốn nổi tiếng vì gây ra rất nhiều hiện tượng trượt bánh xe. Điều này không lý tưởng vì trượt bánh xe có thể khiến các hệ thống tự hành mất dấu vị trí thực tế của chúng. Trên Trái Đất, điều này được giải quyết bằng cách sử dụng dữ liệu GPS để hiệu chỉnh bất kỳ độ lệch nào do trượt bánh xe gây ra. Nhưng vấn đề với GPS là nó chỉ hoạt động bằng cách có 30+ vệ tinh dẫn đường liên tục quay quanh Trái Đất trên quỹ đạo và truyền các tín hiệu riêng biệt cho phép máy tính tính toán vị trí của chúng. Nhưng trên Mặt Trăng, hiện tại không có thứ gì như GPS. Biết điều này, phải dùng một phương pháp khác ngoài GPS để phát hiện trượt bánh xe. Một báo cáo chi tiết hơn về vấn đề của dự án có thể được xem tại đây.
Nhóm
Dự án này không phải là một dự án đơn giản, vì vậy nó phải được thực hiện theo nhóm. Nhóm gồm năm sinh viên khác của Colorado School of Mines:
Dự án này không phải là một dự án đơn giản, vì vậy nó phải được thực hiện theo nhóm. Nhóm này gồm Mehmet Yilmaz (tôi), Kane Bruce, Braedon O’Callaghan, Liam Williams, và Kevin Grant.
Dự án yêu cầu chúng tôi phải biết một số về ROS, C++, Python, Linux, Raspberry Pi, và Arduino. Hầu hết chúng tôi đều có kinh nghiệm với một hoặc nhiều công nghệ này nhưng tôi là người duy nhất có kinh nghiệm với ROS vì tôi đã dùng ROS trong lớp Human Centered Robotics (CSCI473) của mình trong học kỳ Mùa Xuân 2020. Do đó, ngay từ đầu, tôi đã giúp mọi người bắt kịp về ROS và cách phát triển cho nó.
Thử Thách
Trong dự án này có rất nhiều thách thức. Nhưng thách thức lớn nhất mà chúng tôi đối mặt là không có quyền truy cập vào một robot ngoài đời thực để thử nghiệm. Điều này là do COVID khiến mọi thứ chuyển sang làm việc từ xa và ngăn chúng tôi làm việc trong phòng thí nghiệm/tòa nhà của Lunar Outpost. Vì vậy, chúng tôi buộc phải dùng mô phỏng.
Ngoài ra, chúng tôi đã xem qua một số nghiên cứu học thuật từ WVU Navigation Lab để có ý tưởng về cách giải quyết vấn đề trượt bánh xe cho trường hợp sử dụng của Lunar Outpost, điều mà đối với chúng tôi, với tư cách là sinh viên năm hai và năm ba đại học, còn khó hơn chúng tôi mong đợi.
Một thách thức khác mà chúng tôi gặp phải là lượng thời gian có để làm dự án này. CSCI370 là một môn học kéo dài một tháng. Nhưng bản thân vấn đề là một vấn đề cực kỳ lớn mà nhiều công ty và giới học thuật đã cố gắng giải quyết/hoàn thiện trong nhiều thập kỷ. Vì vậy một tháng còn lâu mới đủ để giải quyết vấn đề này. Tuy nhiên, bất chấp tất cả những thách thức đó, chúng tôi vẫn kiên trì và đảm bảo hoàn thành.
Kết luận
Sau khi đi qua toàn bộ quá trình nghiên cứu và phát triển, chúng tôi xác định rằng gần như không thể mô phỏng đúng vật lý của Mặt Trăng bằng kỹ thuật số, nên việc thực sự thử thuật toán này trong mô phỏng là không có ích và sẽ không mang lại bất kỳ nghiên cứu có ý nghĩa nào về phát hiện trượt bánh xe trong không gian và trên Mặt Trăng. Chúng tôi kết luận rằng việc thiết lập một môi trường thử nghiệm phù hợp bằng cách sử dụng thứ gì đó như cát và phần cứng thật, như robot Husky, quan trọng hơn nhiều đối với loại nghiên cứu này. Chúng tôi đã cập nhật mã phát hiện trượt bánh xe để hoạt động như một nút ROS và nó hoạt động đúng cách, đồng thời có thể dễ dàng được đưa vào phần cứng thật để kiểm thử. Dự án này cho phép tôi đảm nhận vai trò lãnh đạo, hướng dẫn các bạn học của mình về phát triển ROS, và tích lũy kinh nghiệm với Python, ROS và Gazebo khi giải quyết một vấn đề phức tạp mà trước đó tôi chưa từng gặp. Quan trọng hơn cả, trải nghiệm này càng củng cố niềm đam mê của tôi với robot và tăng thêm quyết tâm theo đuổi nghiên cứu trong lĩnh vực này, đặt nền móng cho những gì sẽ đến tiếp theo trong hành trình robotics của tôi.
Bắt đầu tại phòng thí nghiệm HCR
Sau khi hoàn thành CSCI473, đợt Field Session môn CS của tôi vào mùa hè năm 2020, và học kỳ mùa thu 2020, tôi quyết định theo đuổi nghiên cứu trong lĩnh vực robot. Tôi đã có những trải nghiệm rất tuyệt vời với cả CSCI473 và Field Session môn CS nên tôi quyết định muốn làm nghiên cứu cho phòng thí nghiệm HCR. Vì tôi đã gặp Dr. Zhang từ năm trước, tôi quyết định gửi email cho ông ấy và hỏi về bất kỳ cơ hội nào mà phòng thí nghiệm có thể có vào tháng 1 năm 2021. Chỉ trong khoảng 2 tuần, Dr. Zhang bày tỏ sự quan tâm, đưa cho tôi các lựa chọn nghiên cứu, và đề nghị tôi một vị trí trong phòng thí nghiệm. Sau đó tôi bắt đầu làm việc cho phòng thí nghiệm vào tháng 2 năm 2021.
Video giới thiệu
Đây là video giới thiệu của tôi mà tôi đã quay vài tháng sau khi bắt đầu ở phòng thí nghiệm HCR. Video được quay vào tháng 5 năm 2021 và trình bày nghiên cứu mà tôi sẽ tập trung vào tại phòng thí nghiệm HCR trong mùa hè năm 2021:
Dự án của tôi
Trong suốt thời gian ở phòng thí nghiệm HCR, tôi chủ yếu tập trung vào dự án Triton. Dự án Triton là một robot di động do Human Centered Robotics Lab tại Colorado School of Mines phát triển. Nó là một robot mặt đất omni-wheel hình tam giác được cung cấp năng lượng bởi Jetson Nano của NVIDIA.
Triton, ở một cái nhìn tổng quan đơn giản, bao gồm các bộ phận sau:
- NVIDIA Jetson Nano
- Bo mạch chủ Seed Studio A205 của NVIDIA
- Arduino Mega
- Thẻ Micro SD 64 GB
- Thân máy in 3D tùy chỉnh
- 3 bánh mecanum
- 1 pin AR
- Mạch tùy chỉnh để tối ưu hóa phân phối nguồn và đi dây
- Camera Realsense D435 của Intel
- Một số đèn LED
Nó được thiết kế, chế tạo và sản xuất vào khoảng năm 2018-2020 như một robot phục vụ mục đích giáo dục. Đến khi tôi tham gia, Triton đã khá hoàn thiện, và phòng thí nghiệm đang cân nhắc tạo ra một phiên bản mới của nó. Tuy nhiên, vấn đề chính của Triton là phần mềm. Triton có thể di chuyển, sạc và hoạt động ở mức cơ bản nhưng thực sự không làm được gì thông minh. Nó thậm chí còn thiếu khả năng thực hiện các chuyển động nâng cao hơn.
![]() |
![]() |
![]() |
![]() |
Để bắt đầu giải quyết điều này, phòng thí nghiệm đã thiết lập một khu vực nơi chúng tôi có thể theo dõi Triton. Để làm điều đó, họ tạo ra một khu vực 2 mét x 2 mét với 8 camera Optitrack Flex (hồng ngoại) được bố trí theo hình gần giống hình vuông, cao khoảng 6-7 feet so với sàn.
![]() |
![]() |
Cùng với việc xây dựng khu vực này, mỗi Triton đều có ba quả cầu màu xám được gắn ở phía trên thân máy.
Với thiết lập này, về cơ bản chúng tôi đã xây dựng được hệ thống GPS thu nhỏ của riêng mình, cho phép chúng tôi lấy được tọa độ chính xác tính bằng mét của một Triton trong khu vực quan tâm của chúng tôi. Bằng cách sử dụng các camera hồng ngoại Optitrack và các quả cầu xám của Optitrack theo dạng tam giác, chúng tôi có thể xác định chính xác tọa độ của một Triton trong khu vực của mình. Điều này cho phép chúng tôi áp dụng hệ thống vòng kín để đạt độ chính xác di chuyển tốt hơn.
Hệ thống Optitrack cung cấp dữ liệu vị trí và hướng với tần số khoảng 120Hz và độ chính xác dưới milimét khi được hiệu chuẩn đúng cách. Ba dấu phản quang của mỗi Triton tạo thành một mẫu tam giác độc nhất mà hệ thống có thể theo dõi như một vật thể rắn. Hệ tọa độ được hiệu chuẩn sao cho (0,0) ở giữa khu vực theo dõi, với các trục X và Y thẳng hàng với hình học của căn phòng. Nhưng mặc dù có dữ liệu định vị chính xác như vậy, Triton vẫn gặp khó khăn trong việc di chuyển.
Với thiết lập này, một tính năng cốt lõi mà chúng tôi muốn cung cấp cho Triton là khả năng di chuyển đến một tọa độ cụ thể. Người dùng, hoặc phần mềm của họ, có thể cung cấp một tọa độ (x, y) trong khu vực quan tâm của họ. Sau đó robot sẽ di chuyển đến tọa độ đó nhanh nhất, chính xác nhất và mượt mà nhất có thể. Khi tôi tham gia, tính năng này đã tồn tại nhưng hoạt động không tốt lắm. Sau đây là một hoạt ảnh đơn giản cho thấy logic di chuyển ban đầu hoạt động như thế nào:
Tôi không ghi lại giải pháp ban đầu đang hoạt động, nên tôi tạo hoạt ảnh đơn giản này để cho bạn thấy logic di chuyển cũ hoạt động ra sao. Biết điều này, đâu là vấn đề của phương pháp này?
- Nó thực sự chậm
- Nó khiến robot chiếm rất nhiều không gian chỉ để đi đến một điểm cụ thể. Điều này khiến chúng tôi khó sử dụng giải pháp này khi nhiều Triton cùng di chuyển xung quanh.
Vậy tại sao hành vi này lại xảy ra? Vấn đề là Triton trước tiên quay, thay đổi alpha của nó, cho đến khi nó chỉ về phía điểm mục tiêu trong một biên sai số nhất định. Sau đó nó sẽ lao nhanh tới, và sau khi theta của nó lệch khỏi mục tiêu một lượng nhất định, nó sẽ dừng lại và bắt đầu quay lại cho đến khi alpha nằm trong khoảng chấp nhận được cho mục tiêu. Rồi nó lại lao tới và cứ tiếp tục như vậy cho đến khi đến được điểm. Ngoài ra, khi nó càng lúc càng gần điểm đích, tốc độ quay và tốc độ lao tới sẽ chậm dần để đảm bảo nó không vượt quá mục tiêu. Điều này khiến Triton có chuyển động thiếu tự nhiên, mất rất lâu để đến được điểm mục tiêu, và cần một không gian rất lớn chỉ để tới được một điểm đích cụ thể. Vì vậy, với tất cả những vấn đề đó, và xét đến việc tính năng này quan trọng đến mức nào đối với sự phát triển của dự án Triton, khi tôi bắt đầu làm việc tại phòng thí nghiệm HCR, nhiệm vụ đầu tiên của tôi là phát triển các giải pháp hiệu quả hơn để giúp Triton điều hướng tốt hơn đến một điểm đích.
Biết điều này, tôi đã dành rất nhiều thời gian nghiên cứu cách tốt nhất để giải quyết vấn đề này. Trớ trêu thay, tôi đang học một lớp gọi là Introduction to Feedback Control Systems (EENG307) tại Mines. Ngay đầu lớp học đó, chúng tôi học về khái niệm bộ điều khiển vòng hở và bộ điều khiển vòng kín. Biết điều này, và sau một số cuộc thảo luận tôi có với giáo sư của lớp đó và người bạn cùng phòng thông minh của tôi, trở nên rõ ràng rằng mục tiêu đưa Triton đến một điểm đích là một bài toán hệ thống vòng kín.
Giờ đây, sau quá trình kiểm thử và nghiên cứu sâu rộng, tôi đã phát triển hai cách tiếp cận bộ điều khiển riêng biệt cho các Triton:
Phương pháp 1: Bộ điều khiển Khoảng cách-Theta
Cách tiếp cận này sử dụng hai bộ điều khiển tỷ lệ riêng biệt chạy đồng thời:
- Bộ điều khiển Khoảng cách: Tính khoảng cách Euclid đến mục tiêu và áp dụng một hệ số khuếch đại tỷ lệ để xác định vận tốc tiến/lùi
- Bộ điều khiển Theta: Tính sai số góc giữa hướng hiện tại của robot và hướng mong muốn tới mục tiêu, áp dụng một hệ số khuếch đại tỷ lệ riêng cho vận tốc quay
Thuật toán liên tục tính khoảng cách Euclid đến mục tiêu và sai số góc giữa hướng hiện tại của robot và hướng mong muốn. Hai hệ số khuếch đại tỷ lệ riêng biệt được áp dụng để tạo ra vận tốc tuyến tính và vận tốc góc tương ứng.
Điều này khiến Triton tự nhiên quay về phía mục tiêu trong khi đồng thời di chuyển về phía trước, tạo ra các quỹ đạo cong mượt mà. Ưu điểm chính là robot luôn giữ mặt trước của mình hướng về phía đích đến, điều này rất quan trọng cho các ứng dụng dựa trên camera.
Phương pháp 2: Bộ điều khiển tọa độ X-Y
Cách tiếp cận này xem robot như một bộ vẽ đồ thị 2D, với khả năng điều khiển độc lập chuyển động theo X và Y:
- Bộ điều khiển X: Điều khiển trực tiếp chuyển động đông-tây dựa trên sai số tọa độ X
- Bộ điều khiển Y: Điều khiển trực tiếp chuyển động bắc-nam dựa trên sai số tọa độ Y
Việc triển khai tính toán sai số tọa độ X và Y một cách độc lập, áp dụng các hệ số khuếch đại tỉ lệ riêng biệt, rồi sau đó biến đổi các thành phần vận tốc toàn cục này sang hệ tọa độ cục bộ của robot bằng các ma trận quay. Sự biến đổi này là cần thiết vì bộ truyền động omni-wheel của robot yêu cầu các vận tốc trong hệ quy chiếu của chính nó, chứ không phải trong tọa độ toàn cục. Phương pháp này tạo ra các quỹ đạo trực tiếp nhất đến mục tiêu và nhanh hơn đáng kể, nhưng hướng của robot sẽ bị trôi vì không có điều khiển định hướng rõ ràng.
Đối với phương pháp #1, tôi đã đi vào chi tiết đầy đủ về phương pháp này trong bài blog Move Turtle (TurtleSim) của tôi. Tôi rất khuyến nghị bạn đọc bài blog này để nắm tất cả chi tiết về cách bộ điều khiển PID hoạt động nói chung, cũng như cách phương pháp #1 hoạt động. Tôi đã phát triển phương pháp #1 bằng TurtleSim của ROS, sau đó chuyển đoạn mã đó sang Triton và cập nhật nó để phù hợp hơn với một môi trường thực tế hơn.
Phương pháp #2 sử dụng một cách tiếp cận khá khác nhưng cũng hiệu quả không kém. Thay vì nghĩ về hướng của robot và khoảng cách đến mục tiêu, phương pháp này xem chuyển động như một bài toán trên mặt phẳng tọa độ. Bộ điều khiển liên tục tính toán sai số theo cả hai hướng X và Y một cách riêng biệt. Ví dụ, nếu robot cần di chuyển từ (0,0) đến (2,3), nó sẽ hiểu điều này là cần hiệu chỉnh sai số 2 mét theo X và 3 mét theo Y. Hai bộ điều khiển tỉ lệ hoạt động đồng thời: một bộ điều chỉnh vận tốc của robot theo hướng X dựa trên sai số X, trong khi bộ còn lại xử lý chuyển động theo hướng Y dựa trên sai số Y. Điều này tạo ra một quỹ đạo trực tiếp hơn đến mục tiêu, tương tự như cách đầu in của một máy in 3D di chuyển, và cho phép các chuyển động chéo mượt mà. Robot không cần phải quay để hướng về mục tiêu một cách rõ ràng, khiến phương pháp này đặc biệt hiệu quả trong không gian hẹp hoặc khi cần định vị chính xác.
Cả hai phương pháp đều chứng minh được rằng nhanh hơn và đáng tin cậy hơn đáng kể so với cách tiếp cận ban đầu. Để xem các phương pháp mới này hoạt động, hãy xem Danh sách phát Tritons in Action, nơi cho thấy tất cả các Triton hoạt động với các phương pháp mới.
Những gì trước đây mất 30-45 giây cho một chuyển động điểm-đến-điểm đơn giản thì nay chỉ mất khoảng 8-12 giây. Quan trọng hơn, Triton giờ đây có thể điều hướng hiệu quả hơn trong không gian hẹp, điều này trở nên hữu ích cho các kịch bản nhiều robot của chúng tôi.
Thách thức phát triển và gỡ lỗi
Việc triển khai các bộ điều khiển này không hề đơn giản và liên quan đến nhiều thách thức gỡ lỗi quan trọng:
Biến đổi hệ tọa độ: Một trong những phần khó nhất là làm cho các phép biến đổi tọa độ trở nên chính xác. Hệ thống Optitrack cung cấp dữ liệu trong hệ tọa độ riêng của nó, robot có hệ tọa độ cục bộ của nó, và tôi cần chuyển đổi chính xác giữa chúng. Các triển khai ban đầu khiến robot đi sai hướng vì tôi đã nhầm lẫn trong việc tính toán ma trận quay.
Hành vi thực tế so với lý tưởng: Thách thức lớn nhất là tính đến các yếu tố thực tế không xuất hiện trong lý thuyết điều khiển trên sách vở. Bánh xe của robot có đặc tính ma sát khác nhau, các động cơ không phản ứng giống hệt nhau, và luôn có một độ trễ nào đó trong chuỗi truyền thông từ Optitrack đến phần mềm điều khiển rồi đến Arduino của robot. Tôi đã dành nhiều tuần để tinh chỉnh các hệ số khuếch đại tỉ lệ và thêm các bộ lọc vùng chết để tính đến những thực tế vật lý này.
Vấn đề dao động và ổn định: Các triển khai đầu tiên của tôi gặp vấn đề dao động, trong đó robot sẽ vượt quá mục tiêu rồi lắc qua lắc lại. Điều này dạy tôi về tầm quan trọng của các thành phần vi phân trong bộ điều khiển PID và nhu cầu tinh chỉnh hệ số phù hợp. Cuối cùng tôi quyết định chủ yếu dùng điều khiển tỉ lệ với các hệ số được tinh chỉnh cẩn thận thay vì PID đầy đủ, vì độ giảm chấn vốn có của hệ thống là đủ cho phần lớn ứng dụng.
Nhiễu giữa nhiều robot: Khi nhiều robot hoạt động đồng thời, tôi phát hiện ra các kiểu nhiễu bất ngờ. Robot đôi khi sẽ “tranh chấp” cùng một không gian hoặc tạo ra các tình huống bế tắc khiến chúng chặn nhau vô thời hạn. Điều này dẫn đến việc tôi triển khai các cơ chế phối hợp và thuật toán tránh va chạm.
Hệ thống điều khiển đa Triton
Sau khi tôi giải quyết được vấn đề di chuyển của một Triton đơn lẻ, thách thức tiếp theo của phòng thí nghiệm là làm cho nhiều Triton hoạt động cùng lúc. Đây trở thành một trong những trọng tâm chính của tôi và cuối cùng là một đóng góp đáng kể cho dự án.
Hệ thống ban đầu chỉ có thể điều khiển một Triton tại một thời điểm, điều này hạn chế nghiêm trọng các khả năng nghiên cứu. Phòng thí nghiệm muốn mô phỏng các kịch bản mà nhiều phương tiện tự hành cần phối hợp chuyển động, như các xe tự lái giao tiếp với nhau để tối ưu hóa lưu lượng giao thông và tạo ra các bản đồ SLAM (Định vị và Lập bản đồ Đồng thời) tốt hơn.
Để giải quyết điều này, tôi đã triển khai một cách tiếp cận đa xử lý bằng cách sử dụng thư viện multiprocessing của Python. Mỗi Triton có một tiến trình riêng dành riêng cho nó, có thể chạy độc lập nhưng vẫn được phối hợp bởi một hệ thống điều khiển trung tâm. Điều này cho phép nhiều Triton di chuyển đồng thời mà không can thiệp vào các vòng điều khiển của nhau.
Thiết kế kiến trúc đa robot
Kiến trúc hệ thống tôi phát triển bao gồm một số thành phần chính:
Tiến trình bộ điều khiển chính: Đây là bộ điều phối trung tâm, xử lý các tương tác giao diện người dùng, lập kế hoạch đường đi, và phối hợp cấp cao giữa các robot. Nó duy trì trạng thái toàn cục và phân phối lệnh đến các tiến trình robot riêng lẻ.
Các tiến trình robot riêng lẻ: Mỗi Triton có một tiến trình Python dành riêng để xử lý:
- Các phép tính điều khiển PID thời gian thực ở ~50Hz
- Giao tiếp với phần cứng của robot (Arduino/Jetson)
- Thực thi đường đi cục bộ và tránh chướng ngại vật
- Báo cáo trạng thái trở lại bộ điều khiển chính
Giao tiếp qua bộ nhớ dùng chung: Tôi sử dụng các đối tượng multiprocessing.shared_memory và Queue của Python để cho phép giao tiếp hiệu quả giữa các tiến trình. Điều này cho phép phối hợp theo thời gian thực mà không có chi phí của giao tiếp qua mạng.
Các cơ chế đồng bộ hóa: Để ngăn xung đột khi nhiều robot cần phối hợp (như tránh va chạm), tôi đã triển khai các semaphore và lock cho phép robot yêu cầu quyền truy cập độc quyền vào một số khu vực nhất định của không gian làm việc.
Thách thức là đảm bảo tất cả robot có thể vận hành các vòng điều khiển của chúng một cách độc lập trong khi vẫn duy trì sự phối hợp toàn cục. Mỗi tiến trình robot chạy các phép tính PID riêng và gửi lệnh động cơ trực tiếp đến phần cứng, trong khi tiến trình chính xử lý sự phối hợp ở mức cao hơn như tránh va chạm và lập kế hoạch đường đi.
![]() |
![]() |
Hệ thống đa Triton đã mở ra hoàn toàn những khả năng nghiên cứu mới. Giờ đây chúng tôi có thể mô phỏng:
- Các kịch bản giao tiếp giữa xe với xe
- Lập kế hoạch đường đi phối hợp với tránh chướng ngại vật
- Hành vi robot bầy đàn
- Lập bản đồ SLAM đa tác tử
- Điều khiển đội hình và các hành vi bám theo
Đây là hình ảnh thiết lập phòng thí nghiệm khi nhiều Triton chạy đồng thời:
![]() |
![]() |
Tôi cũng đã phát triển một giao diện thân thiện với người dùng cho phép các nhà nghiên cứu xác định đường đi cho từng Triton một cách trực quan. Bạn có thể буквально vẽ ra đường đi mà bạn muốn mỗi robot theo, và chúng sẽ thực thi những đường đi này với sự phối hợp hoàn hảo. Điều này cực kỳ hữu ích để thiết lập các thí nghiệm phức tạp mà không cần phải mã hóa thủ công mọi chuyển động.
Hệ thống có thể xử lý đồng thời tới 5 Triton, mỗi robot chạy các bộ điều khiển PID riêng trong khi được phối hợp thông qua hệ thống điều khiển trung tâm. Hiệu năng rất ấn tượng, với tất cả robot duy trì độ chính xác riêng của chúng trong khi làm việc cùng nhau như một đội.
Đây là một danh sách phát cho thấy Triton hoạt động, từ điều khiển một robot đến phối hợp nhiều robot: Danh sách phát Tritons in Action
Tích hợp cảm biến độ sâu và hiệu chỉnh tọa độ
Một tiến bộ lớn khác mà tôi thực hiện liên quan đến việc tận dụng các camera độ sâu Intel RealSense D435 được gắn trên mỗi Triton. Trong khi hệ thống Optitrack cho chúng tôi dữ liệu định vị cực kỳ chính xác, tôi muốn khám phá cách các robot có thể sử dụng cảm biến gắn trên mình để cải thiện nhận thức không gian và hiệu chỉnh sai số tọa độ.
Ý tưởng là các Triton có thể sử dụng cảm biến độ sâu để phát hiện các Triton khác trong vùng lân cận và đối chiếu chéo vị trí của chúng. Điều này sẽ phục vụ nhiều mục đích:
-
Hiệu chỉnh sai số: Nếu hệ thống Optitrack có bất kỳ độ trôi hiệu chuẩn hoặc che khuất tạm thời nào, các robot có thể sử dụng xác nhận bằng hình ảnh về vị trí của nhau để duy trì các hệ tọa độ chính xác.
-
SLAM nâng cao: Bằng cách có nhiều robot với cảm biến độ sâu hoạt động cùng nhau, chúng tôi có thể tạo ra các bản đồ môi trường phong phú hơn nhiều với các điểm dữ liệu dự phòng.
-
Tránh va chạm: Cảm biến độ sâu thời gian thực sẽ cho phép robot phát hiện và tránh nhau ngay cả khi hệ thống điều khiển trung tâm gặp độ trễ truyền thông.
Tôi bắt đầu thử nghiệm các thuật toán sẽ cho phép Tritons:
- Phát hiện các Tritons khác bằng cách sử dụng hình dạng tam giác đặc trưng và các mốc cầu phản chiếu của chúng
- Tính toán vị trí và hướng tương đối bằng dữ liệu độ sâu
- So sánh các phép đo này với dữ liệu Optitrack để xác định sai lệch
- Có khả năng điều chỉnh hệ tọa độ của chúng trong thời gian thực để duy trì độ chính xác
Các thử nghiệm thị giác máy tính
Tôi đã dành khá nhiều thời gian để thử nghiệm một quy trình thị giác máy tính hoạt động qua nhiều giai đoạn:
![]() |
![]() |
![]() |
![]() |
![]() |
Xử lý dữ liệu độ sâu: Intel RealSense D435 cung cấp cả luồng dữ liệu RGB và độ sâu. Tôi chủ yếu làm việc với dữ liệu độ sâu, vốn được đưa ra dưới dạng một mảng 640x480 các phép đo khoảng cách ở 30Hz. Thách thức đầu tiên là lọc dữ liệu độ sâu nhiễu này để trích xuất thông tin hình học có ý nghĩa.
Các thử nghiệm phát hiện đối tượng: Tôi đã thử nghiệm các thuật toán phát hiện nhiều giai đoạn. Tôi đã đạt được một số thành công trong việc phân đoạn ảnh độ sâu để xác định các đối tượng ở mức sàn (lọc bỏ tường, trần, v.v.) và tìm các đối tượng có đặc tính kích thước phù hợp, với diện tích đáy xấp xỉ 0.3x0.3 mét. Tôi đã thử dùng phát hiện biên và phân tích hình học để xác định hình dạng Triton đặc trưng, nhưng kết quả khá trái ngược.
Các thử nghiệm nhận dạng mốc: Ba quả cầu phản chiếu trên mỗi Triton dường như là đặc điểm phát hiện hứa hẹn nhất. Tôi đã thử nghiệm các thuật toán phát hiện blob để xác định mẫu tam giác đặc trưng của ba điểm sáng trong ảnh độ sâu. Tôi đã đạt được một số kết quả đầy hứa hẹn trong điều kiện ánh sáng được kiểm soát, mặc dù nó không đáng tin cậy một cách nhất quán.
Nghiên cứu hợp nhất tọa độ: Tôi đã nghiên cứu các phương pháp hợp nhất ước lượng vị trí dựa trên thị giác với dữ liệu Optitrack, bao gồm các triển khai bộ lọc Kalman cơ bản. Ý tưởng là đặt trọng số cao hơn cho dữ liệu Optitrack khi có sẵn nhưng chuyển sang thị giác khi cần, dù tôi chưa hoàn thiện được điều này trước khi thời gian của tôi ở phòng thí nghiệm kết thúc.
Thách thức về hiệu năng: Việc làm cho toàn bộ quá trình xử lý này chạy theo thời gian thực đồng thời với các vòng điều khiển của robot là một thách thức lớn. Tôi đã thử nghiệm các cách tối ưu hóa để chạy các thuật toán ở khoảng 10-15Hz mà không làm quá tải khả năng xử lý của Jetson Nano.
Đáng tiếc là tôi đã phải rời phòng thí nghiệm trước khi có thể hoàn thiện đầy đủ công việc thị giác máy tính này. Dù tôi đã có một số kết quả ban đầu đầy hứa hẹn và học được rất nhiều về xử lý cảm biến độ sâu, tôi vẫn chưa đưa hệ thống vào trạng thái hoàn toàn đáng tin cậy. Nó vẫn là một hướng nghiên cứu thú vị mà những người khác có thể tiếp tục phát triển.
Đây là một video tôi đang thử nghiệm các thuật toán thị giác máy tính:
Đây là hình ảnh giao diện nhìn từ cảm biến độ sâu trong các thử nghiệm của tôi:
Mặc dù tôi chưa hoàn thành công việc tích hợp cảm biến độ sâu, khái niệm này cho thấy tiềm năng cho các ứng dụng như mô phỏng các tình huống xe tự lái, nơi các phương tiện cần nhận biết lẫn nhau mà không chỉ dựa vào hạ tầng bên ngoài. Hướng nghiên cứu mà tôi bắt đầu khám phá có thể góp phần cho công việc tương lai trong phòng thí nghiệm.
Tài liệu và bảo tồn tri thức
Một trong những đóng góp quan trọng nhất của tôi cho HCR Lab, và có lẽ là điều mà tôi tự hào nhất, là tổ chức và bảo tồn toàn bộ tài liệu dự án. Khi tôi gia nhập phòng thí nghiệm, tri thức về dự án Triton bị phân tán trên nhiều nền tảng và định dạng khác nhau. Thông tin quan trọng rải rác ở:
- Nhiều tài khoản Google Drive thuộc về các sinh viên khác nhau đã tốt nghiệp
- Những email cũ bị chôn trong hộp thư đến
- Các thư mục Dropbox ngẫu nhiên
- Nhiều kho lưu trữ GitHub
- Các kho lưu trữ GitLab với cách tổ chức không nhất quán
- Những ghi chú viết tay mà chỉ những người cụ thể mới có thể hiểu
Tài liệu phân mảnh này là một vấn đề rất lớn. Sinh viên mới phải mất hàng tuần chỉ để tìm hiểu cách bắt đầu, và tri thức quý giá liên tục bị mất đi khi mọi người tốt nghiệp hoặc rời phòng thí nghiệm.
Tôi tự nhận trách nhiệm giải quyết vấn đề này một cách có hệ thống. Tôi đã dành vô số giờ để lần theo từng mẩu tài liệu, mã nguồn, video và ghi chú liên quan đến dự án Triton. Sau đó tôi tổ chức mọi thứ vào một kho lưu trữ GitLab tập trung với cấu trúc rõ ràng, hợp lý.
![]() |
![]() |
Tài liệu tập trung bao gồm:
- Hướng dẫn lắp ráp: Hướng dẫn từng bước để lắp ráp Triton từ đầu
- Thiết lập phần mềm: Hướng dẫn đầy đủ để thiết lập môi trường phát triển
- Tài liệu mã nguồn: Mã được chú thích tốt với các giải thích rõ ràng
- Thông số phần cứng: Danh sách linh kiện chi tiết, sơ đồ dây nối và thiết kế PCB
- Hướng dẫn khắc phục sự cố: Các vấn đề thường gặp và giải pháp của chúng
- Hướng dẫn video: Tôi đã tạo và tải lên các video hướng dẫn lên YouTube, bao gồm các hướng dẫn hiệu chuẩn Optitrack chi tiết:
Tôi cũng thiết lập các tiêu chuẩn tài liệu để đảm bảo những đóng góp trong tương lai sẽ được tổ chức và dễ tiếp cận. Cấu trúc kho lưu trữ mà tôi tạo ra đã trở thành nền tảng cho toàn bộ công việc tiếp theo trong phòng thí nghiệm.
Không chỉ tổ chức tài liệu hiện có, tôi còn tạo ra một số hướng dẫn và bài hướng dẫn gốc lấp đầy những khoảng trống quan trọng trong cơ sở tri thức. Những tài liệu này bao gồm hướng dẫn thiết lập chi tiết cho thành viên mới trong phòng thí nghiệm, các hướng dẫn khắc phục sự cố toàn diện, và các video trình bày từng bước những quy trình phức tạp.
Tác động là tức thì và lâu dài. Sinh viên mới có thể bắt nhịp trong vài ngày thay vì vài tuần. Kho lưu trữ tài liệu mà tôi tạo ra vẫn đang được phòng thí nghiệm sử dụng cho đến hôm nay, nhiều năm sau khi tôi rời đi. Nó trở thành nguồn sự thật duy nhất cho dự án Triton và đã tiết kiệm vô số giờ/ngày cho các nhà nghiên cứu trong tương lai.
Hướng dẫn và chuyển giao tri thức
Một trong những khía cạnh đáng giá nhất trong thời gian tôi ở HCR Lab là cơ hội hướng dẫn người khác và chia sẻ kiến thức mà tôi đã tích lũy. Khi công việc của tôi tiến triển và tôi ngày càng có nhiều kinh nghiệm với các hệ Triton, tôi đảm nhận trách nhiệm ngày càng lớn trong việc đào tạo các thành viên mới trong nhóm.
Hướng dẫn những người kế nhiệm trong phòng thí nghiệm
Khi tôi chuẩn bị rời phòng thí nghiệm để tập trung hoàn thành bằng cấp và công việc của mình tại eBay, tôi đã chắc chắn đào tạo kỹ lưỡng hai người sẽ tiếp quản dự án Triton sau khi tôi rời đi. Điều này không chỉ là chỉ cho họ cách mọi thứ vận hành, mà còn là đảm bảo họ thực sự hiểu các nguyên lý nền tảng để có thể tiếp tục đổi mới.
Tôi đã dành nhiều tuần làm việc sát cánh cùng họ, đi qua:
- Nền tảng toán học của các hệ điều khiển PID
- Kiến trúc đa xử lý để điều phối nhiều robot
- Tích hợp cảm biến độ sâu và các thuật toán thị giác máy tính
- Hệ thống tài liệu và cách duy trì nó
- Kỹ thuật gỡ lỗi và các chế độ lỗi thường gặp
Việc chuyển giao tri thức cực kỳ kỹ lưỡng. Chúng tôi cùng nhau thực hiện các phiên gỡ lỗi thực tế, tôi để họ sửa đổi và mở rộng mã nguồn hiện có, và tôi đảm bảo họ có thể tự độc lập thiết lập các Triton mới từ đầu.
Chương trình cố vấn học sinh trung học
Có lẽ còn đáng giá hơn nữa là trải nghiệm của tôi khi hướng dẫn một học sinh trung học thông qua chương trình tiếp cận cộng đồng của phòng thí nghiệm. Đây là một cơ hội tuyệt vời để giới thiệu ai đó với robotics, khoa học máy tính và nghiên cứu ở một giai đoạn định hình trong quá trình học tập của họ.
Tôi đã thiết kế một chương trình giảng dạy toàn diện bao gồm:
Nền tảng khoa học máy tính:
- Các khái niệm lập trình bằng Python là ngôn ngữ chính
- Giới thiệu về lập trình hướng đối tượng
- Hiểu về thuật toán và cấu trúc dữ liệu
Các khái niệm robotics:
- Cảm biến hoạt động như thế nào và cách giao tiếp với chúng
- Điều khiển cơ cấu chấp hành và hệ thống động cơ
- Những kiến thức cơ bản về hệ tự trị và điều khiển phản hồi
ROS (Robot Operating System):
- Hiểu hệ thống nhắn tin publish/subscribe
- Tạo nodes và services
- Làm việc với launch files và parameter servers
Công việc dự án thực hành:
- Chúng tôi đã hợp tác tạo một ROS service điều khiển hệ thống LED trên đầu của Triton
- Cô ấy học cách viết mã sạch, có tài liệu, tích hợp với các hệ thống hiện có của chúng tôi
- Dịch vụ điều khiển LED mà cô ấy tạo ra đã trở thành một phần cố định của mã nguồn Triton
Điều làm cho quá trình cố vấn này đặc biệt hơn cả là được chứng kiến sự tiến bộ của cô ấy từ chỗ hầu như không biết gì về lập trình đến việc đóng góp mã nguồn có ý nghĩa cho một dự án nghiên cứu đang hoạt động. Cô ấy đã đi từ việc hỏi “Biến là gì?” đến việc tự mình gỡ lỗi các vấn đề giao tiếp ROS và viết các triển khai service của riêng mình.
Hệ thống điều khiển LED mà cô ấy phát triển cho phép các nhà nghiên cứu dễ dàng thay đổi màu sắc và mẫu của đèn LED trên đầu Triton thông qua các lệnh ROS đơn giản. Điều này nghe có vẻ đơn giản, nhưng nó đòi hỏi hiểu kiến trúc ROS, giao tiếp với phần cứng, và các mẫu thiết kế phần mềm phù hợp. Đóng góp của cô ấy vẫn đang được sử dụng trong phòng thí nghiệm cho đến hôm nay.
Việc cố vấn vừa mang tính giáo dục đối với tôi như nó đã đối với cô ấy. Nó buộc tôi phải chia nhỏ các khái niệm phức tạp thành những phần dễ tiếp thu và thực sự suy nghĩ về những nền tảng của những gì chúng tôi đang làm. Việc dạy cho người khác đã khiến tôi trở thành một kỹ sư và nhà nghiên cứu giỏi hơn.
Hợp tác với Nghiên cứu Tiến sĩ
Một trong những khía cạnh mang lại sự hài lòng nghề nghiệp nhất trong thời gian tôi ở trong phòng thí nghiệm là làm việc chặt chẽ với Peng, một nghiên cứu sinh tiến sĩ có nghiên cứu tập trung vào các thuật toán xe tự hành. Những cải tiến phần mềm mà tôi đã thực hiện cho hệ thống Triton đã giúp hỗ trợ nghiên cứu tiến sĩ của anh ấy.
Nghiên cứu của Peng đòi hỏi sự phối hợp đa robot chính xác, đáng tin cậy để mô phỏng các kịch bản xe tự lái. Trước những cải tiến của tôi đối với điều khiển chuyển động và các hệ thống đa robot, những thí nghiệm này khó thực hiện hơn nhiều. Các robot chậm hơn, kém chính xác hơn và không thể làm việc cùng nhau hiệu quả như vậy.
Những đóng góp của tôi đã giúp ích cho nghiên cứu của Peng ở một số lĩnh vực:
Nghiên cứu Quản lý Giao lộ: Với các bộ điều khiển PID được cải tiến và sự phối hợp đa robot, Peng có thể mô phỏng các kịch bản giao lộ nơi nhiều “phương tiện” (Triton) cần phối hợp chuyển động của chúng. Việc định thời gian và định vị tốt hơn đã giúp những nghiên cứu này khả thi hơn.
Truyền thông Xe-đến-Xe: Khung đa xử lý mà tôi phát triển đã cho phép Peng triển khai và kiểm thử các giao thức truyền thông giữa các phương tiện mô phỏng. Mỗi Triton có thể đưa ra quyết định trong khi vẫn phối hợp với các Triton khác, tương tự như cách các xe tự hành có thể cần hoạt động.
Nghiên cứu SLAM và Lập bản đồ: Công việc tích hợp cảm biến độ sâu đã cung cấp cho Peng thêm dữ liệu cho nghiên cứu định vị và lập bản đồ đồng thời của anh ấy. Việc có nhiều robot với khả năng cảm biến được phối hợp cho phép thực hiện các thí nghiệm lập bản đồ toàn diện hơn.
Điều làm cho sự hợp tác của chúng tôi đặc biệt có giá trị là nó không chỉ đơn thuần là tôi giúp nghiên cứu của anh ấy, mà là một mối quan hệ hợp tác thực sự. Sự hiểu biết của Peng về các khía cạnh lý thuyết của xe tự hành đã giúp định hướng các triển khai thực tế của tôi. Phản hồi và các yêu cầu của anh ấy đã thúc đẩy tôi làm cho các hệ thống trở nên mạnh mẽ và có năng lực hơn.
Chúng tôi đã dành nhiều giờ trong phòng thí nghiệm cùng nhau, gỡ lỗi các kịch bản, thảo luận các chiến lược điều khiển khác nhau, và khám phá những gì nền tảng Triton có thể đạt được. Peng trở thành cả một đồng nghiệp lẫn một người bạn, và làm việc với anh ấy đã dạy tôi rất nhiều về cách nghiên cứu học thuật thực sự vận hành.
Những hệ thống tôi xây dựng đã trở thành một phần hữu ích trong công trình luận án của Peng. Nhìn thấy các đóng góp kỹ thuật thực tiễn của tôi hỗ trợ nghiên cứu về công nghệ xe tự hành thực sự mang lại cho tôi cảm giác mãn nguyện. Điều đó củng cố sự quan tâm của tôi đối với cách mà kỹ thuật vững chắc và nghiên cứu có thể cùng nhau tạo ra những kết quả hữu ích.
Ngay cả sau khi tôi rời phòng thí nghiệm, Peng và tôi vẫn giữ liên lạc. Biết rằng công việc của tôi vẫn tiếp tục đóng góp cho nghiên cứu quan trọng ngay cả sau khi tôi rời đi là một điều vô cùng đáng giá.
Góc nhìn: Kỷ nguyên Phát triển Trước LLM
Đáng chú ý là toàn bộ công việc này được hoàn thành trong kỷ nguyên trước LLM của phát triển phần mềm. Tất cả những điều này diễn ra trong giai đoạn từ 2020 đến 2021 (chủ yếu là 2021), trước khi ChatGPT, Claude, Perplexity, hay các công cụ phát triển được hỗ trợ bởi AI như Cursor IDE tồn tại.
Mỗi dòng mã đều được viết từ đầu, mọi thuật toán đều được nghiên cứu qua các bài báo học thuật và sách giáo trình, và mỗi phiên gỡ lỗi đều liên quan đến các phương pháp truyền thống như lệnh in ra màn hình, trình gỡ lỗi, và kiểm thử có phương pháp. Khi tôi bị mắc kẹt trong một vấn đề biến đổi tọa độ hoặc tinh chỉnh PID, tôi không thể chỉ hỏi một trợ lý AI để giải thích khái niệm hoặc giúp gỡ lỗi vấn đề.
Điều này làm cho quá trình phát triển trở nên thách thức hơn đáng kể nhưng cũng mang tính giáo dục hơn. Tôi đã phải:
Tự mình Nghiên cứu Mọi thứ: Hiểu lý thuyết điều khiển PID có nghĩa là đọc sách giáo trình và các bài báo học thuật. Tìm ra các phép biến đổi tọa độ đòi hỏi phải tự tay làm toán. Mọi khái niệm đều phải được hiểu đầy đủ trước khi triển khai.
Gỡ lỗi Không Có Sự Hỗ trợ của AI: Khi robot di chuyển theo những hướng không mong đợi hoặc dao động quanh các mục tiêu, tôi phải lần theo logic một cách có hệ thống, thêm các đầu ra gỡ lỗi và kiểm thử từng giả thuyết một. Không có AI để gợi ý các vấn đề tiềm ẩn hay giúp diễn giải các mẫu lỗi.
Học từ Những Nguyên lý Cơ bản: Không có khả năng nhanh chóng hỏi “làm sao tôi triển khai đa xử lý trong Python cho robot?” tôi phải hiểu sâu các khái niệm nền tảng. Điều này buộc tôi phải xây dựng một nền tảng vững chắc trong lập trình đồng thời, hệ thống điều khiển và thị giác máy tính.
Tài liệu Hóa Là Rất Quan Trọng: Vì tôi không thể dựa vào AI để giải thích mã sau này, tôi phải viết tài liệu và chú thích cực kỳ rõ ràng. Kỷ luật này tỏ ra vô cùng giá trị khi truyền đạt kiến thức cho người khác.
Nhìn lại, mặc dù các công cụ AI hiện đại có thể đã tăng tốc nhiều khía cạnh của quá trình phát triển, việc làm việc mà không có chúng đã buộc tôi phát triển kỹ năng giải quyết vấn đề sâu hơn và sự hiểu biết kỹ lưỡng hơn về các hệ thống nền tảng. Thật thú vị khi nghĩ rằng dự án này có thể đã khác đi như thế nào nếu các công cụ phát triển ngày nay có sẵn.
Quyết Định Khó Khăn Khi Rời Đi
Dù tôi rất yêu thích làm việc tại HCR Lab, đến cuối năm 2021 tôi phải đối mặt với một quyết định khó khăn mà nhiều sinh viên gặp phải: cân bằng nhiều cơ hội và trách nhiệm. Tôi đồng thời làm việc toàn thời gian như một kỹ sư phần mềm tại eBay, hoàn thành bằng khoa học máy tính tại Mines, và đóng góp cho nghiên cứu tại HCR Lab.
Cơ hội ở eBay là rất quan trọng; đó là vai trò kỹ sư phần mềm lớn đầu tiên của tôi, mang lại kinh nghiệm ngành vô giá, và cung cấp cho tôi một nguồn thu nhập ổn định. Tuy nhiên, cố gắng duy trì công việc toàn thời gian, hoàn thành bằng cấp của mình, và đóng góp một cách có ý nghĩa cho nghiên cứu đơn giản là không bền vững. Phải có một điều gì đó nhường chỗ.
Khi tôi trao đổi với Tiến sĩ Zhang về khả năng giảm tải môn học để tập trung nhiều hơn vào công việc trong phòng thí nghiệm, ông ấy đã mạnh mẽ khuyên tôi không nên làm vậy. Lý do của ông rất hợp lý: hoàn thành bằng cấp của tôi nên là ưu tiên hàng đầu, và kinh nghiệm trong ngành tại eBay sẽ có giá trị cho sự phát triển nghề nghiệp của tôi. Ông cảm thấy rằng bỏ bớt các lớp học để tập trung vào nghiên cứu, dù hấp dẫn, có thể không phải là quyết định tốt nhất về lâu dài.
Vì vậy, vào tháng 9 năm 2021, sau khoảng 8 tháng làm việc chuyên sâu trong phòng thí nghiệm, tôi đã đưa ra quyết định khó khăn là rút lui khỏi vai trò trợ lý nghiên cứu để tập trung hoàn thành bằng cấp và công việc của tôi tại eBay. Đó là một trong những quyết định nghề nghiệp khó khăn nhất mà tôi phải đưa ra vào thời điểm đó.
Ngay cả sau khi chính thức rời phòng thí nghiệm, tôi vẫn tiếp tục hỗ trợ bất cứ khi nào ai đó cần giúp đỡ với các hệ thống mà tôi đã xây dựng. Tôi cập nhật tài liệu khi cần, trả lời các câu hỏi về gỡ lỗi, và giúp xử lý sự cố từ xa. Những mối liên hệ tôi đã tạo dựng và sự đầu tư của tôi vào thành công của dự án đã không biến mất chỉ vì tôi không còn chính thức là một phần của đội nữa.
Suy Ngẫm và Nhìn Lại
Giờ đây, vào năm 2025, bốn năm sau, tôi thấy mình đang suy ngẫm về quãng thời gian đó với những cảm xúc phức tạp. Con đường sự nghiệp của tôi đã đưa tôi đi sâu vào phát triển web và kỹ thuật AI/ML, những lĩnh vực đã mang lại vô số phần thưởng và cơ hội phát triển cũng như tạo ảnh hưởng.
Tuy vậy, vẫn có một phần trong tôi tự hỏi “nếu như.” Robot, thành thật mà nói, vẫn là niềm đam mê thực sự của tôi. Có điều gì đó ở việc làm việc với các hệ thống vật lý, nhìn thấy mã của bạn chuyển thành chuyển động và hành vi trong thế giới thực, mà phát triển web và thậm chí cả công việc AI cũng không thể tái hiện trọn vẹn.
Đôi khi tôi tự hỏi điều gì có thể đã xảy ra nếu tôi đi theo một con đường khác. Nếu tôi đã tìm được cách ở lại trong nghiên cứu robot thì sao? Nếu tôi theo học cao học ngay sau khi hoàn thành bậc đại học thì sao? Nếu tôi chọn ưu tiên công việc trong phòng thí nghiệm hơn là kinh nghiệm ngành thì sao?
Nhưng tôi cũng nhận ra rằng mọi con đường đều có sự đánh đổi. Những kỹ năng tôi phát triển trong phát triển web và AI đã vô cùng giá trị. Kinh nghiệm ngành đã dạy tôi về kỹ thuật phần mềm ở quy mô lớn, thiết kế trải nghiệm người dùng, và những thách thức thực tiễn của việc xây dựng các sản phẩm mà hàng triệu người sử dụng. Những trải nghiệm này đã khiến tôi trở thành một kỹ sư giỏi hơn nói chung.
Công việc tôi làm ở HCR Lab vẫn tiếp tục ảnh hưởng đến cách tôi tiếp cận vấn đề ngày nay. Tư duy có hệ thống cần thiết cho các hệ thống điều khiển PID xuất hiện trong cách tôi thiết kế các vòng phản hồi trong các hệ thống phần mềm. Kỹ năng tài liệu hóa và lưu giữ tri thức mà tôi phát triển đã vô cùng hữu ích trong mọi vai trò sau đó. Trải nghiệm cố vấn và giảng dạy đã định hình cách tôi làm việc với các nhà phát triển trẻ hơn và đóng góp vào việc chia sẻ kiến thức trong nhóm.
Quan trọng nhất, trải nghiệm đó đã dạy tôi rằng tôi phát triển mạnh nhất khi làm việc trên những vấn đề kỹ thuật đầy thách thức nhưng có tác động thực tế. Dù đó là tối ưu hóa các thuật toán chuyển động của robot hay xây dựng các hệ thống AI giúp người dùng đạt được mục tiêu của họ, sự thỏa mãn đến từ việc giải quyết những vấn đề khó nhưng có ý nghĩa.
Tác Động Lâu Dài
Nhìn lại trải nghiệm ở HCR Lab, tôi ấn tượng bởi tôi đã đạt được bao nhiêu trong một khoảng thời gian tương đối ngắn. Những hệ thống tôi xây dựng đã thay đổi căn bản cách nền tảng Triton vận hành, và nhiều cải tiến trong số đó vẫn đang được sử dụng ngày nay. Kho lưu trữ tài liệu mà tôi tạo ra đã trở thành cơ sở tri thức cho toàn bộ dự án. Những mối quan hệ cố vấn mà tôi hình thành đã tạo ra ảnh hưởng lâu dài lên những người tôi đã làm việc cùng.
Nhưng có lẽ đáng kể nhất, trải nghiệm này đã cho tôi thấy tôi có thể làm được gì khi làm việc trên những vấn đề mà tôi thực sự đam mê. Trong tám tháng đó, tôi:
- Cải thiện hệ thống điều khiển chuyển động của robot vốn đã hạn chế nền tảng
- Xây dựng từ đầu một hệ thống phối hợp đa robot
- Tích hợp các khả năng thị giác máy tính và hợp nhất cảm biến
- Tạo ra một hệ thống tài liệu và quản lý tri thức toàn diện
- Hướng dẫn một số người và giúp chuyển giao kiến thức
- Hỗ trợ nghiên cứu trình độ tiến sĩ về xe tự hành
Tuy nhiên, điều đó không chỉ là về những thành tựu kỹ thuật, dù chúng có ý nghĩa đối với tôi. Đó còn là về việc học rằng với sự kiên trì và tư duy hệ thống, bạn có thể đóng góp hữu ích ngay cả khi còn là một sinh viên đại học.
Tương lai và Robot học
Mặc dù sự nghiệp của tôi đã rẽ sang những hướng khác, niềm đam mê của tôi đối với robot học vẫn không hề giảm sút. Tôi vẫn theo dõi các phát triển trong lĩnh vực này, tôi hào hứng trước những tiến bộ trong học máy cho robot và các hệ thống tự hành, và thỉnh thoảng tôi vẫn làm các dự án robot cá nhân vào thời gian rảnh.
Ai mà biết tương lai sẽ mang lại điều gì? Những kỹ năng tôi đang phát triển trong AI và học máy ngày càng trở nên có liên quan đến robot học. Kinh nghiệm trong ngành mà tôi tích lũy được đã dạy tôi cách xây dựng các hệ thống mạnh mẽ, có khả năng mở rộng. Có lẽ sẽ có một tương lai nơi những mạch kinh nghiệm khác nhau này của tôi hội tụ theo những cách không ngờ tới.
Trước mắt, tôi biết ơn khoảng thời gian tôi đã ở HCR Lab và những trải nghiệm mà nó mang lại. Đó là một giai đoạn hình thành, đã định hình cả các kỹ năng kỹ thuật lẫn sự hiểu biết của tôi về kiểu công việc nào mang lại cho tôi nhiều sự thỏa mãn nhất. Mặc dù đôi khi tôi nhớ nó, tôi biết rằng những bài học tôi học được và những cách tiếp cận tôi phát triển được vẫn tiếp tục ảnh hưởng đến mọi việc tôi làm.
Những robot Triton vẫn ở đó, vẫn phục vụ các nhà nghiên cứu, vẫn cho phép những công việc quan trọng được thực hiện. Và điều đó thật tuyệt vời.

















