SLAM: Robot định vị và xây dựng bản đồ
Hiểu odometry, data association, loop closure và lý do bản đồ phụ thuộc vào ước lượng pose.
SLAM đồng thời ước lượng trạng thái robot và bản đồ môi trường từ quan sát. Robot dùng bản đồ để hiểu nó ở đâu, trong khi chính pose ước lượng quyết định quan sát được đặt vào bản đồ thế nào.
Mục tiêu học tập
- Phân biệt localization, mapping, odometry và SLAM.
- Giải thích drift và loop closure.
- Nhận ra gauge freedom, scale và data-association failure.
Biết mình ở đâu khi bản đồ chưa có
Đi trong một tòa nhà lạ, bạn nhớ các góc rẽ và dấu mốc. Mỗi bước ước lượng hơi lệch khiến vị trí tích lũy sai. Khi nhận ra hành lang đã đi qua, bạn có thêm thông tin để chỉnh lại đường đã nhớ.
Ẩn dụ này chỉ diễn giải vòng phụ thuộc pose–map. Robot không “nhận ra” như người; nó cần thuật toán ghép quan sát và một cách xử lý độ không chắc chắn.
Odometry ước lượng chuyển động tương đối; mapping tích hợp quan sát thành bản đồ; localization tìm pose trong bản đồ đã biết. SLAM tối ưu pose và map cùng nhau. Front-end trích xuất hoặc ghép quan sát; back-end kết hợp các ràng buộc.
Camera, lidar và IMU cung cấp các loại tín hiệu khác nhau. ORB-SLAM là ví dụ feature-based monocular SLAM, không phải kiến trúc duy nhất và không đại diện mọi thiết bị.
Một biểu diễn xác suất là : quỹ đạo x và map m có điều kiện theo quan sát z và tín hiệu chuyển động u. Chọn mô hình noise và independence ảnh hưởng chất lượng suy luận.
Các hệ graph-based thường giữ keyframe và ràng buộc tương đối. State có thể nằm trên SE(2) hoặc SE(3); phép cộng vector Euclid trực tiếp cho rotation không luôn đúng.
Drift và loop closure
Sai số nhỏ ở mỗi đoạn có thể làm bản đồ hành lang không khép kín. Loop closure thêm một ràng buộc “đây là nơi cũ”, giúp chỉnh nhiều pose liên quan. Nếu nhận nhầm hai hành lang giống nhau, phép chỉnh có thể làm hỏng cả bản đồ.
Loop detection tạo candidate; geometric verification kiểm tra trước khi thêm ràng buộc. Back-end tối ưu các pose để phù hợp odometry và loop closure. Robust losses hoặc cơ chế loại outlier có thể giảm tác động phép ghép sai nhưng không loại mọi lỗi.
Một mục tiêu thường gặp là , với residual r, information matrix Ω và robust penalty ρ. Đây là dạng tổng quát, không phải toàn bộ thuật toán của một hệ SLAM cụ thể.
Cần cố định một gauge, chẳng hạn pose đầu tiên, vì ràng buộc tương đối không xác định gốc tọa độ toàn cục. Monocular SLAM hình học thường có scale ambiguity nếu không có nguồn thang đo bổ sung.
Kiểm tra quỹ đạo trước khi nhìn bản đồ đẹp
Bắt đầu với đường đi ngắn trong dữ liệu ghi sẵn. So lúc quay lại điểm đầu và tìm đoạn drift lớn. Đừng đánh giá chỉ bằng hình point cloud nhìn có vẻ thẳng.
Kiểm tra calibration, sync, frame convention và lost-tracking events. ATE và relative pose error đo các khía cạnh khác nhau; alignment SE(3) khác alignment có scale. Báo cách alignment cùng metric.
Mã dưới chỉ đổi một chuyển động local 2D sang world frame; không ước lượng pose từ sensor. Nó giúp kiểm tra convention trước khi ghép subsystem. Trong benchmark SLAM, tránh dùng ground truth để điều chỉnh tham số sau mỗi test trajectory.
Workflow & kiến trúc
Ứng dụng & giới hạn
- Ước lượng quỹ đạo robot trong môi trường chưa biết.
- Tạo map cho navigation hoặc khảo sát có kiểm chứng.
Điểm mạnh
Kết hợp quan sát nhiều thời điểm để ràng buộc pose và môi trường.
Giới hạn cần nhớ
Cảnh ít texture, vật thể động, calibration sai hoặc false loop closure có thể làm mất theo dõi hoặc méo bản đồ.
Thử trong một project nhỏ
Vẽ graph bốn pose quanh một hình vuông. Đánh dấu cạnh odometry và loop closure; giải thích vì sao cần cố định một pose và vì sao loop sai nguy hiểm.
from math import cos, sin, pi
def move_local(x, y, heading, dx, dy):
return (x + cos(heading)*dx - sin(heading)*dy,
y + sin(heading)*dx + cos(heading)*dy)
x, y = move_local(0.0, 0.0, pi/2, 1.0, 0.0)
assert abs(x) < 1e-12 and abs(y - 1.0) < 1e-12
print(x, y)Rigid transform 2D với góc radian và khoảng cách cùng đơn vị; chưa có sensor fusion, loop closure hay SLAM thực.
