Dùng Raspberry Pi và thẻ AprilTag để robot nhận diện và dừng đúng trạm

1. Robot nhận diện trạm bằng AprilTag như thế nào?

AprilTag là dấu vuông có mã nhận dạng riêng. Camera trên robot ghi hình thẻ; Raspberry Pi xử lý ảnh để tìm mã thẻ và vị trí các góc của nó. Nhờ đó, robot có thể phân biệt trạm cần đến với các trạm khác và ước lượng vị trí của mình so với thẻ.

Trong bài thực hành này, robot chỉ dừng tại trạm có ID được chỉ định. Quy trình gồm bốn việc: nhận đúng ID, xác định robot còn cách vị trí dừng bao xa, căn hướng khi tiến đến gần và ra lệnh dừng cho bộ điều khiển động cơ.

2. Chuẩn bị robot và bố trí trạm

Bạn cần Raspberry Pi, camera tương thích, robot có bánh xe và mạch điều khiển động cơ, nguồn điện phù hợp, cùng một thẻ AprilTag in phẳng. Không nối động cơ trực tiếp vào chân GPIO; hãy dùng mạch điều khiển động cơ và nối dây theo hướng dẫn của phần cứng đang sử dụng.

Gắn camera chắc chắn ở phía trước robot. Dán thẻ lên mặt phẳng thẳng đứng tại trạm, ở độ cao camera nhìn thấy khi robot tiếp cận. Chọn một ID cho trạm đích và ghi lại kích thước cạnh thẻ theo quy ước đo của thư viện phát hiện thẻ. Giữ khu vực trước thẻ thông thoáng, tránh để thẻ bị che khuất hoặc phản sáng mạnh.

Đánh dấu một vị trí dừng trên sàn, cách trạm một khoảng phù hợp với kích thước robot. Đây là vị trí cần đạt tới, không phải vị trí của thẻ: phần đầu robot và camera có thể nhô ra phía trước trục bánh xe.

3. Thiết lập camera và phát hiện đúng ID

Cài thư viện truy cập camera và thư viện phát hiện AprilTag phù hợp với Raspberry Pi. Cấu hình bộ phát hiện theo đúng họ thẻ đã in. Với mỗi khung hình, đọc ảnh, chuyển sang ảnh xám nếu thư viện yêu cầu, rồi lấy danh sách thẻ được phát hiện.

Chỉ chọn kết quả có ID trùng với ID trạm đích. Từ kết quả đó, lưu tọa độ tâm và bốn góc thẻ. Tâm thẻ cho biết thẻ đang lệch trái hay phải trong ảnh; kích thước thẻ trên ảnh cho biết robot đang tiến lại gần, nhưng không đủ để suy ra khoảng cách chính xác nếu chưa hiệu chuẩn.

Để tránh phản ứng với một khung hình nhiễu, chỉ coi thẻ là đã được xác nhận khi cùng ID xuất hiện qua một số khung hình liên tiếp. Nếu không thấy thẻ đích hoặc ảnh đã quá cũ, robot không được tiếp tục chạy dựa trên vị trí ước lượng trước đó.

4. Ước lượng vị trí so với thẻ

Nếu muốn ước lượng khoảng cách bằng hình học, hãy hiệu chuẩn camera để có thông số tiêu cự, tâm ảnh và độ méo ống kính. Kết hợp các thông số này với kích thước thẻ thực và tọa độ bốn góc trên ảnh, một thuật toán ước lượng tư thế có thể tính vị trí và hướng của thẻ so với camera.

Cần phân biệt khoảng cách từ camera tới thẻ với khoảng cách robot còn phải đi. Camera có thể đặt lệch khỏi tâm robot; thẻ cũng có thể nằm sau vạch dừng. Hãy tính đến các độ lệch lắp đặt này khi đặt ngưỡng dừng. Nếu chưa hiệu chuẩn camera, có thể dùng kích thước thẻ trên ảnh làm tín hiệu tiếp cận trong một mô hình thử nghiệm đơn giản, nhưng phải xác định ngưỡng bằng quan sát tại chính vị trí dừng đã đánh dấu.

Khi robot không đối diện thẳng với thẻ, chỉ nhìn vào độ lệch tâm trên ảnh có thể gây nhầm giữa lệch hướng và lệch vị trí. Với bài toán cần căn trạm chính xác hơn, hãy dùng cả góc quay và vị trí ước lượng của thẻ.

5. Lập quy tắc giảm tốc, căn chỉnh và dừng

Tổ chức chương trình thành các trạng thái: tìm thẻ, tiếp cận, căn chỉnh và dừng. Khi thẻ đích đã được xác nhận và còn xa, robot tiến chậm; nếu thẻ lệch khỏi vùng giữa ảnh, điều chỉnh tốc độ hai bánh để hướng về thẻ. Khi đến gần vị trí dừng, giảm tốc thêm trước khi ra lệnh dừng.

Một quy tắc điều khiển đơn giản là: chỉ cho phép tiến khi ID đúng, dữ liệu còn mới và thẻ nằm trong giới hạn căn chỉnh; khi khoảng cách ước lượng đạt ngưỡng đã chọn, đưa tốc độ mục tiêu về 0. Duy trì trạng thái dừng cho đến khi có lệnh khởi hành mới, thay vì để dao động của phép đo khiến robot liên tục tiến rồi dừng.

Ngưỡng ra lệnh dừng cần chừa chỗ cho quãng đường robot tiếp tục lăn do độ trễ xử lý và khả năng hãm của động cơ. Hãy bắt đầu ở tốc độ thấp, đo vị trí dừng thực tế và điều chỉnh ngưỡng; không giả định robot sẽ đứng yên ngay khi chương trình đặt tốc độ bằng 0.

6. Thử nghiệm từng bước và xử lý khi mất thẻ

Trước tiên, đặt robot đứng yên ở nhiều vị trí và kiểm tra chương trình đọc đúng ID trạm, nhận ra khi thẻ lệch trái hoặc phải, và cho kết quả khoảng cách thay đổi hợp lý khi di chuyển camera. Sau đó cho robot chạy ở tốc độ thấp trên đoạn đường trống, quan sát vị trí dừng so với dấu đã đặt trên sàn.

Lặp lại phép thử khi robot bắt đầu ở các góc tiếp cận khác nhau và khi có thẻ mang ID khác trong tầm nhìn. Nếu robot dừng quá muộn, hãy tăng khoảng cách bắt đầu giảm tốc hoặc ra lệnh dừng sớm hơn. Nếu robot thường mất thẻ lúc đến gần, kiểm tra góc nhìn camera, chiều cao lắp thẻ và kích thước thẻ trong khung hình.

Đặt quy tắc an toàn cho trường hợp camera ngừng cấp ảnh, mất thẻ đích, kết quả nhận dạng không ổn định hoặc phép ước lượng vị trí không hợp lệ: robot giảm tốc rồi dừng ở trạng thái an toàn. Khi thực hành, dùng không gian thoáng, giữ tốc độ thấp và chuẩn bị cách ngắt chuyển động độc lập với chương trình nhận diện.