Mapping thực tế: quy trình quét bản đồ và các lỗi hay gặp
Atlasbot · 17/8/2026 · 11 phút đọc
Các bài trước — SLAM là gì?, slam_toolbox, Cartographer — đều là lý thuyết thuật toán. Bài này là quy trình thực hành: cầm điều khiển, chạy robot quét thật một khu vực, và những lỗi hay gặp khiến bản đồ ra méo dù thuật toán hoàn toàn đúng.
Khái niệm chính
Quy trình quét bản đồ cơ bản gồm 3 bước:
ros2 launch <package> slam_toolbox_online.launch.py # hoặc cartographer
ros2 run teleop_twist_keyboard teleop_twist_keyboard # điều khiển tay
# ... đi hết khu vực cần quét ...
ros2 run nav2_map_server map_saver_cli -f my_map # lưu bản đồ
map_saver_cli là bước cuối, xuất bản đồ hiện tại (đang giữ trong bộ nhớ của node SLAM) ra file .pgm/.yaml (bài Map) để dùng lại về sau qua map_server. Hai yếu tố quyết định chất lượng bản đồ nhiều hơn bất kỳ tham số thuật toán nào: tốc độ di chuyển lúc quét, và có đi thành vòng khép kín hay không.
Nguyên lý hoạt động
Scan matching (bài LiDAR SLAM) cần đủ độ chồng lấp giữa các scan liên tiếp để khớp đúng — di chuyển quá nhanh khiến độ chồng lấp giảm mạnh, thuật toán dễ mất phương hướng hoặc khớp sai:
Đi thẳng: chậm rãi, đều tốc độ — tránh tăng/giảm tốc đột ngột
Xoay: xoay CHẬM hơn nhiều so với tốc độ đi thẳng bình thường
(xoay nhanh làm scan thay đổi góc quá lớn giữa 2 lần quét liên tiếp)
Bài SLAM là gì? đã nói loop closure sửa được sai số trôi tích luỹ — nhưng chỉ khi robot thực sự quay lại một vị trí đã đi qua. Quy trình quét tốt nên có chủ đích đi thành các vòng khép kín (loop) thay vì chỉ đi các đường thẳng một chiều rồi dừng — mỗi vòng khép kín là một cơ hội để back-end sửa lại sai số của toàn bộ đoạn đường vừa đi qua.
Tóm lại: "Quét bản đồ nhanh cho xong" là sai lầm phổ biến nhất của người mới — chất lượng bản đồ tỉ lệ nghịch với tốc độ di chuyển lúc quét, không phải tỉ lệ thuận với thời gian bỏ ra. Đi chậm 10 phút cho một bản đồ sạch luôn tốt hơn đi nhanh 3 phút rồi phải quét lại.
Kiến thức kỹ thuật
Công thức
Độ chồng lấp giữa 2 scan liên tiếp phụ thuộc trực tiếp vào tốc độ di chuyển và tần số quét LiDAR:
Quãng_đường_giữa_2_scan = v / tần_số_quét_LiDAR
VD: v = 0.5 m/s, LiDAR quét 10Hz
Quãng_đường_giữa_2_scan = 0.5 / 10 = 0.05m (5cm) — độ chồng lấp cao, tốt
VD: v = 2.0 m/s (quá nhanh), cùng LiDAR 10Hz
Quãng_đường_giữa_2_scan = 2.0 / 10 = 0.2m (20cm) — độ chồng lấp thấp hơn nhiều,
nguy cơ scan matching mất phương hướng tăng đáng kể
Thông số
| Triệu chứng | Kiểm tra trước tiên |
|---|---|
| Bản đồ méo hình chữ S | Calibration odometry (bán kính bánh, khoảng cách 2 bánh) |
| Vùng trắng/hố đen lớn | Đã đi qua khu vực đó chưa — không phải lỗi tham số |
| Tường đôi/bóng mờ (double wall) | Đi quá nhanh, hoặc thiếu loop closure ở khu vực đó |
| Bản đồ "nhảy" đột ngột | Mất dữ liệu scan/odometry tạm thời (kiểm tra kết nối) |
Ứng dụng thực tế
Lỗi bản đồ bị méo hình chữ S — các đoạn tường thẳng trong thực tế hiện ra cong nhẹ dạng chữ S trên bản đồ — nguyên nhân phổ biến nhất là sai lệch calibration giữa odometry và encoder thực tế (bán kính bánh xe khai sai, hoặc khoảng cách 2 bánh khai sai trong công thức đã học ở bài Differential Drive). Vì SLAM dùng odometry làm điểm khởi tạo cho scan matching, sai lệch hệ thống (không phải nhiễu ngẫu nhiên) trong odometry sẽ in dấu lên toàn bộ bản đồ theo một khuôn mẫu nhất quán — đây là lý do trước khi đổ lỗi cho tham số SLAM, nên kiểm tra lại độ chính xác odometry cơ bản trước.
Ví dụ thực tế
Kịch bản debug: bản đồ quét ra có "hố đen" (vùng unknown) lớn ở giữa,
dù đã đi qua khu vực đó nhiều lần theo cảm giác
Kiểm tra theo bảng debug:
1. Xem lại đường đi thực tế qua rviz/rosbag — phát hiện robot chỉ đi
VÒNG QUANH khu vực đó, chưa từng đi XUYÊN QUA giữa
2. Nguyên nhân: người điều khiển tưởng đã quét đủ vì đi quanh khu vực,
nhưng LiDAR chỉ quét được viền, không có tia nào xuyên tới giữa
khu vực trống lớn (ngoài tầm quét hiệu quả hoặc bị che khuất)
Giải pháp: cho robot đi cắt ngang qua khu vực đó ít nhất 1 lần,
không chỉ đi vòng quanh — không phải lỗi tham số SLAM
Không phải lỗi thuật toán — chỉ đơn giản là chưa quét đủ. Cần quay lại đi qua khu vực đó, không có tham số SLAM nào "đoán" được nội dung một vùng chưa từng quan sát.
Lỗi thường gặp
- Di chuyển quá nhanh khi quét, đặc biệt khi xoay — như tính ở mục Công thức, giảm độ chồng lấp giữa các scan liên tiếp, tăng nguy cơ scan matching mất phương hướng.
- Đổ lỗi cho tham số SLAM khi bản đồ méo hình chữ S — như đã nêu, nguyên nhân thường nằm ở calibration odometry cơ bản, không phải tham số thuật toán SLAM.
- Chỉ đi vòng quanh khu vực rộng thay vì đi cắt ngang — như ví dụ trên, để lại vùng "hố đen" chưa từng được LiDAR quét tới dù người điều khiển tưởng đã quét đủ.
- Không chủ đích tạo vòng khép kín trong tuyến quét — bỏ lỡ cơ hội loop closure sửa sai số trôi tích luỹ, đặc biệt quan trọng với khu vực rộng, quãng đường quét dài.
Kết luận
Lý thuyết SLAM đúng không đảm bảo bản đồ đẹp — tốc độ di chuyển chậm và đều, tuyến quét có chủ đích tạo vòng khép kín, và calibration odometry chính xác ảnh hưởng chất lượng bản đồ cuối cùng nhiều hơn bất kỳ tham số thuật toán tinh chỉnh nào. Đây là bài cuối của chuyên mục SLAM — sau khi có bản đồ chất lượng tốt từ quy trình này, chuyên mục Localization tiếp theo đi vào cách robot định vị chính xác trên chính bản đồ đó.