Atlas Robotics
SLAMTrung bình

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

Mapping thực tế: quy trình quét bản đồ và các lỗi hay gặp
Quy trình quét bản đồ tốt: chậm, đường khép kín, tránh xoay gấp

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ứngKiểm tra trước tiên
Bản đồ méo hình chữ SCalibration 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ộtMấ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 đồ đó.

Mapping thực tế: quy trình quét bản đồ và các lỗi hay gặp — Atlasbot