Mobot#
Bài viết bởi Cosku Acay, Edwin Cho, Kenneth Li, và Nishant Pol. PDF.
Mô Tả Dự Án#
Trong cuộc thi Mobot của Carnegie Mellon, các robot phải đi qua một loạt 14 cổng được đặt trên một đường cong màu trắng dài 255 foot trên một vỉa hè ngoài trời. Đường đua bao gồm hai đoạn dốc và một khu vực điểm quyết định nơi robot phải chọn tuyến đường chính xác để đi qua 14 cổng theo thứ tự nối tiếp. Vì đường đi ở ngoài trời và dưới thời tiết của Pittsburgh, robot phải hoạt động trong nhiều điều kiện khác nhau. Năm nay ngày thi đấu trời mưa và có gió. Có thể tìm thấy thêm thông tin tại http://www.cs.cmu.edu/mobot/mobot.html


Giải pháp với CMUcam4#
Chúng tôi chọn tiếp cận tác vụ dò theo đường bằng CMUcam4 vì nó yêu cầu phần cứng tối thiểu và có một giao diện rất phù hợp để theo dõi một đường.

CMUcam4 chụp một ảnh của đường ở 30 khung hình mỗi giây và cấp ảnh theo dõi màu tới Arduino Mega qua một trong ba đường Serial. Arduino Mega sau đó xử lý ảnh này (vui lòng xem Mô Tả Phần Mềm bên dưới) và cung cấp các lệnh tốc độ động cơ và rẽ tới bộ điều khiển PID qua một đường Serial khác. Bộ điều khiển PID lần lượt cung cấp cho Arduino Mega số đếm encoder cho cả bánh xe phải và trái, cho phép chúng tôi theo dõi vị trí và hướng của mình so với cổng 0.
Bộ điều khiển PID (MD-25) được sản xuất bởi Robot-Electronics tại Anh. Nó điều khiển hai động cơ chổi than DC có hộp số với các encoder từ trên trục động cơ. Màn hình LCD dùng cho mục đích gỡ lỗi. Chúng tôi có hai đường nguồn, 12V cho động cơ và 5V cho logic, dùng chung một ground và cả hai đều được cấp từ một pin sạc 12V duy nhất.
Ban đầu chúng tôi dự định làm một nguyên mẫu từ một đế gỗ để nhanh chóng đi vào giai đoạn lập trình, sau đó làm việc trên một đế nhanh hơn, đáng tin cậy hơn như một xe RC. Tuy nhiên, chúng tôi thấy rằng nguyên mẫu rất đáng tin cậy và dễ làm việc, nên chúng tôi giữ nó cho thiết kế cuối cùng. Việc chống thấm nước cho thân bao gồm một lớp giấy bóng kính dưới một lớp băng keo đóng gói. Tuy nhiên mưa rò rỉ qua băng keo đóng gói nhưng may mắn không qua giấy bóng kính. Camera được che bởi một miếng nhựa vuông từ một túi Ziploc vì chúng tôi thấy rằng "bộ lọc" cải thiện khả năng của camera trong việc bỏ qua các mảng nhỏ của đường mà, đối với camera, trông giống như nền bê tông.
Mô Tả Thuật Toán#
Bối Cảnh#
Chúng tôi sử dụng CMUcam4 ở chế độ theo dõi màu với chế độ YUV được bật, điều này cho chúng tôi một biểu diễn ảnh nhị phân của đường. Phần mềm camera lọc ra bất cứ thứ gì không phải màu trắng (tức là nền) và đặt một pixel "bật" nơi có một đường (nơi nó màu trắng). Chúng tôi sử dụng chế độ YUV để việc theo dõi màu không nhạy với cường độ ánh sáng, để robot của chúng tôi có thể hoạt động trong nhiều điều kiện đa dạng bao gồm trong nhà và ngoài trời.
Dò Theo Đường#
CMUcam4 cung cấp cho chip Arduino của chúng tôi một ảnh nhị phân 80 x 60. Chúng tôi lấy mẫu 10 hàng pixel cách đều nhau từ ảnh và tính toán trọng tâm của các pixel "bật" (xem tại đây: https://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points). Sau đó chúng tôi giả định rằng đường nằm trên trọng tâm. Bằng cách làm điều này trên 10 hàng khác nhau trong ảnh, chúng tôi có được một xấp xỉ tốt của đường bằng cách nối các điểm. Sau đó chúng tôi có thể sử dụng dữ liệu này bằng cách tìm mỗi điểm trên đường cách bao xa so với đường thẳng đứng nằm ở trung tâm của ảnh để có được một giá trị biểu thị mức độ cong của đường. Điều này có thể được xem như việc tìm diện tích giữa đường tiếp tuyến và một đường cong và sử dụng diện tích đó để xác định chúng tôi cần rẽ bao nhiêu. Dấu xác định việc rẽ là trái hay phải, trong khi độ lớn xác định chúng tôi cần rẽ bao nhiêu để dò theo đường. Như bạn mong đợi, nếu chúng tôi đo được diện tích bằng không, thì đường nằm ngay trước robot và là một đường thẳng. Nếu độ lớn của diện tích lớn, thì robot cần rẽ để duy trì nỗ lực giảm thiểu độ lớn của diện tích này.
Điểm Quyết Định#
Để xác định liệu robot có ở điểm quyết định hay không, chúng tôi lấy dữ liệu mà camera thu thập từ việc dò theo đường và kiểm tra xem có bao nhiêu điểm trung tâm trung bình xuất hiện trong không gian đen. Điều này hoạt động dựa trên giả định rằng điểm trung bình giữa hai đường không nên nằm trên bất kỳ đường nào, trừ khi các đường là cùng một đường. Nếu robot phát hiện nhiều điểm trung bình trong không gian đen, nó có thể kết luận rằng phải có hai đường ở đây. Sau đó nó chọn cú rẽ thích hợp và thiên hướng rẽ về hướng đó cho đến khi nó chỉ thấy một đường.
Vui lòng đi tới https://github.com/cacay/Mobot để xem một phiên bản đơn giản hóa của mã của chúng tôi hoặc tại đây để có một bản sao cục bộ.

