Atlas Robotics
Navigation cơ bảnCơ bản

Localization trong Navigation: vì sao cần 3 loại vị trí khác nhau

Atlasbot · 17/8/2026 · 11 phút đọc

Localization trong Navigation: vì sao cần 3 loại vị trí khác nhau
Localization cần Map làm đầu vào, xuất ra vị trí cho Path Planning

Bài Navigation là gì? đặt Localization là mảnh ghép thứ hai. Lý thuyết chi tiết (Odometry, IMU, Sensor Fusion, EKF, AMCL) đã có đầy đủ ở chuyên mục Localization thuộc Robotics Fundamentals — bài này chỉ nối chúng vào đúng vị trí trong luồng Navigation.

Khái niệm chính

Khác với Odometry (dead reckoning thuần, không cần biết gì về môi trường — bài Odometry trong Localization), Localization trong ngữ cảnh Navigation cụ thể là AMCL — định vị trên một bản đồ đã có sẵn (bài Map vừa nói). Không có bản đồ, AMCL không có gì để so khớp scan LiDAR vào, không hoạt động được.

Nguyên lý hoạt động

Map (đã lưu sẵn) + Scan LiDAR (thời gian thực) + Odometry (thời gian thực)
    → AMCL → Pose ước lượng (x, y, θ) trong hệ map

Path Planning (bài tiếp theo) cần biết chính xác "robot đang ở đâu trên bản đồ" để tính đường đi từ đó tới đích — chuỗi phụ thuộc Map → Localization → Path Planning đã nói ở bài Navigation là gì? chính xác là đường đi này.

SLAM và Localization không chạy cùng lúc trong vận hành bình thường — SLAM (chưa có map) vừa dựng map vừa định vị đồng thời, đắt tính toán hơn nhiều; Localization/AMCL (map đã có) chỉ định vị, nhẹ hơn nhiều. Quy trình chuẩn của một AMR: chạy SLAM một lần để dựng và lưu bản đồ khu vực, sau đó chuyển hẳn sang AMCL cho các phiên vận hành tiếp theo — không chạy SLAM liên tục suốt vòng đời robot trừ khi môi trường thực sự thay đổi thường xuyên.

Tóm lại: Trong ngữ cảnh Navigation, "Localization" hầu như luôn đồng nghĩa với AMCL — bộ định vị hoạt động trên một bản đồ tĩnh đã biết trước, khác với SLAM (chuyên mục riêng) vừa dựng bản đồ vừa định vị đồng thời. Đọc thêm lý thuyết đầy đủ ở bài AMCL là gì?, và cấu hình thực tế trong ROS2 ở bài AMCL trong Nav2 (chuyên mục Localization).

Kiến thức kỹ thuật

Công thức

Robot không nên bắt đầu điều hướng khi AMCL chưa hội tụ đủ — độ phân tán (variance) của các hạt (particle) ước lượng vị trí là thước đo độ tin cậy dùng để quyết định thời điểm này:

Đã hội tụ khi: variance(x, y, θ) của tập particle < ngưỡng cho phép

Trước khi hội tụ: particle phân tán rộng khắp bản đồ (robot "chưa biết mình ở đâu")
Sau khi hội tụ: particle tụ lại quanh 1 vị trí (robot "tự tin" về vị trí của mình)

Chi phí tính toán giữa 2 giai đoạn SLAM và AMCL khác nhau về bản chất: SLAM phải cập nhật toàn bộ bản đồ mỗi bước (chi phí tỉ lệ với số ô grid), trong khi AMCL chỉ cập nhật trọng số của tập particle cố định (chi phí tỉ lệ với số particle, thường vài trăm tới vài nghìn) — đây là lý do AMCL nhẹ hơn SLAM đáng kể dù cả hai đều dùng chung dữ liệu scan LiDAR.

Thông số

Giai đoạnĐầu vàoChi phí tính toánKhi nào dùng
SLAMScan + Odometry (chưa có map)Cao (cập nhật toàn bộ map mỗi bước)Dựng bản đồ lần đầu, hoặc môi trường thay đổi lớn
AMCL (Localization)Scan + Odometry + Map có sẵnThấp hơn (chỉ cập nhật trọng số particle)Vận hành bình thường, bản đồ đã ổn định

Ứng dụng thực tế

Trong vận hành AMR thực tế, thứ tự khởi động chuẩn luôn là: nạp bản đồ đã lưu → cung cấp ước lượng vị trí ban đầu (initial pose, qua nút "2D Pose Estimate" trong RViz hoặc toạ độ đặt sẵn nếu robot luôn khởi động cùng một vị trí cố định như trạm sạc) → chờ AMCL hội tụ → mới bắt đầu nhận lệnh điều hướng. Bỏ qua bước cung cấp vị trí ban đầu khiến AMCL phải tự dò tìm trong toàn bộ không gian bản đồ, tốn thời gian hội tụ lâu hơn nhiều, đặc biệt trong không gian lớn nhiều đối xứng (dễ nhầm giữa các hành lang giống nhau).

Ví dụ thực tế

# Kiểm tra AMCL đã hội tụ chưa qua covariance của pose ước lượng
ros2 topic echo /amcl_pose --once

# covariance nhỏ (gần 0) ở các phần tử đường chéo chính -> đã hội tụ tốt
# covariance lớn -> AMCL vẫn còn phân tán, chưa nên bắt đầu điều hướng
Kịch bản khởi động AMR tại trạm sạc cố định:

1. Nạp bản đồ đã lưu từ trước qua map_server
2. Cung cấp initial pose = toạ độ trạm sạc đã biết trước (không cần "2D Pose Estimate" thủ công)
3. AMCL hội tụ nhanh (vài giây) vì đã biết gần đúng vị trí ban đầu
4. Bắt đầu nhận lệnh điều hướng khi covariance dưới ngưỡng cho phép

So với không cung cấp initial pose: AMCL phải dò toàn bản đồ,
có thể mất 30 giây tới vài phút tuỳ độ đối xứng của không gian

Lỗi thường gặp

  • Bắt đầu điều hướng ngay khi AMCL chưa hội tụ — robot di chuyển dựa trên ước lượng vị trí sai lệch, dễ đâm vào vật cản hoặc đi lạc hướng hoàn toàn.
  • Không cung cấp initial pose khi robot khởi động ở vị trí đã biết trước — như ví dụ trên, bỏ lỡ cơ hội hội tụ nhanh, đặc biệt tốn thời gian trong không gian lớn nhiều đối xứng.
  • Chạy SLAM liên tục thay vì chuyển sang AMCL sau khi có bản đồ ổn định — tốn tài nguyên tính toán không cần thiết, như đã nêu ở mục Công thức, SLAM đắt hơn AMCL đáng kể cho cùng một scan LiDAR đầu vào.
  • Nhầm lẫn Localization trong Navigation (luôn cần Map) với Odometry/IMU thuần — dẫn tới kỳ vọng sai rằng "định vị" có thể hoạt động ngay cả khi chưa có bản đồ nào, trong khi thực chất đó là bài toán SLAM khác hẳn.

Kết luận

Localization trong bức tranh Navigation luôn ngụ ý AMCL — định vị trên bản đồ tĩnh đã biết trước, khác hẳn SLAM đang đồng thời dựng bản đồ. Cung cấp đúng vị trí ban đầu và chờ độ tin cậy (covariance) đạt ngưỡng trước khi điều hướng là thực hành vận hành quan trọng, không chỉ vấn đề lý thuyết. Bài tiếp theo trong chuyên mục đi vào Path Planning — bước tính đường đi dựa trên chính vị trí AMCL vừa ước lượng được.

Localization trong Navigation: vì sao cần 3 loại vị trí khác nhau — Atlasbot