

Camera Calibration
Mục tiêu: lấy fx, fy, cx, cy (camera matrix) và hệ số distortion để nhập vào pipeline AprilTag.
Chuẩn bị
In chessboard (bảng ô cờ), ví dụ 9x6 inner corners (tức 10×7 squares hoặc ngược lại — chọn pattern nhất quán). Mẫu tham khảo: [https://github.com/opencv/opencv/blob/master/doc/pattern.png]
Chuẩn bị ít nhất 15–25 ảnh chessboard chụp ở nhiều góc, độ nghiêng, khoảng cách khác nhau. Dùng chính camera và độ phân giải mà bạn dự định dùng trong OpMode.
Example (OpenCV)
(Lưu ảnh vào folder calib_images/)

Chú ý: Bạn phải cài thư viện opencv-python.
Output

Lấy các giá trị:
fx = camera_matrix[0][0]
fy = camera_matrix[1][1]
cx = camera_matrix[0][2]
cy = camera_matrix[1][2]
Nhập vào AprilTagDetectionPipeline.
Một số lưu ý
Chụp ảnh ở nhiều góc & khoảng cách; tránh phản xạ/ánh sáng chói trên chessboard.
Dùng đúng square_size_m (khoảng cách cạnh ô thực tế) để calibration trả về đúng đơn vị mét.
Ghi rõ resolution ảnh khi chụp (sẽ dùng cùng resolution khi startStreaming).
Công trình liên quan
Hệ thống định vị trực quan (visual fiducial system) sử dụng thẻ chứa mã 2D để cung cấp vị trí và hướng (pose) của marker đối với camera. Trong robotics, các marker này được ưa chuộng vì chi phí thấp, chỉ cần camera và thẻ in giấy.
AprilTag, được Olson giới thiệu năm 2011, vượt trội hơn các hệ thống trước (ARTag, CALTag) về phát hiện, độ chính xác và khả năng chống che khuất. Nhiều nghiên cứu đã ứng dụng AprilTag trong:
Điều hướng và nội kiểm (gắn tag trong tòa nhà, dùng cho robot và AR cầm tay, kết hợp cảm biến quán tính).
Theo dõi và hạ cánh tự động UAV/UGV/tàu thủy.
Hiệu chỉnh đa camera và LiDAR (hợp nhất dữ liệu để tăng độ chính xác pose).
Đánh giá hệ thống (tạo dữ liệu chuẩn cho odometry, định vị thị giác, điều khiển PD, so sánh kỹ thuật robot).
Ứng dụng thực tế như cứu hộ bằng swarm UAV, robot công nghiệp, mô hình động học và quỹ đạo, định vị phương tiện dưới nước.
Ưu điểm:
Đơn giản, chi phí thấp.
Độ chính xác cao, dùng rộng rãi trong AR và robotics.
Có thể làm chuẩn dữ liệu đánh giá hệ thống.
Nhược điểm và thách thức:
Độ chính xác bị ảnh hưởng bởi góc nhìn, khoảng cách, độ xoay.
Hạn chế ngoài trời (camera RGB-D thất bại dưới ánh sáng mặt trời, không thể đặt nhiều tag trên diện rộng).
Hướng tính toán còn nhiễu, cần hợp nhất dữ liệu từ nhiều thẻ và kỹ thuật như Kalman Filter.
Kết luận: AprilTag đã chứng minh tính mạnh mẽ trong nhiều ứng dụng robotics và AR, nhưng việc cải thiện độ chính xác (đặc biệt ngoài trời) để trở thành giải pháp dữ liệu chuẩn vẫn là vấn đề mở.
Các nguồn tham khảo
Edwin Olson, AprilTag: A robust and flexible visual fiducial system (paper). https://april.eecs.umich.edu/pdfs/olson2011tags.pdf
AprilRobotics / apriltag (repo chính): https://github.com/AprilRobotics/apriltag
OpenFTC — EasyOpenCV (repo & docs): https://github.com/OpenFTC/EasyOpenCV
OpenFTC — AprilTag plugin (EOCV AprilTag Plugin repo): https://github.com/OpenFTC/EOCV-AprilTag-Plugin
OpenCV — calibration docs & tutorials: https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html
FIRST / FTC docs (vision guides, game manual references): https://ftc-docs.firstinspires.org/ & https://www.firstinspires.org/
OpenCV example chessboard pattern (sample image): https://github.com/opencv/opencv/blob/master/doc/pattern.png

