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

Navigation là gì? Bốn mảnh ghép làm nên khả năng tự di chuyển

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

Navigation là gì? Bốn mảnh ghép làm nên khả năng tự di chuyển
Bốn mảnh ghép của bài toán Navigation

"Navigation" trong robot học không phải một thuật toán duy nhất — nó là tên gọi chung cho bốn bài toán con phải giải đồng thời để robot tự di chuyển từ điểm A đến điểm B mà không cần con người lái. Chuyên mục này lần lượt đi qua từng mảnh ghép, trước khi ghép chúng vào Nav2 (chuyên mục riêng).

Khái niệm chính

Bốn câu hỏi robot phải trả lời, mỗi câu ứng với một mảnh ghép riêng của bài toán Navigation:

1. Map           — môi trường xung quanh trông như thế nào?
2. Localization   — tôi đang ở đâu trong môi trường đó?
3. Path Planning  — đường đi nào từ đây tới đích?
4. Path Following — làm sao bám đúng đường đi đó khi đang di chuyển?

Mỗi mảnh ghép, một bài riêng trong chuyên mục này: Map (bản đồ occupancy grid lưu trữ ra sao), Localization (tổng quan cách robot tự định vị), Path Planning (thuật toán tìm đường Dijkstra/A*), Path Following (thuật toán bám đường Pure Pursuit).

Nguyên lý hoạt động

Bốn câu hỏi này phụ thuộc lẫn nhau theo một chuỗi rõ ràng: không có Map thì Localization vô nghĩa (định vị trên cái gì?); không có Localization thì Path Planning vô nghĩa (tính đường đi từ đâu?); không có Path Planning thì Path Following không có gì để bám theo.

Mỗi mảnh ghép giải quyết một bản chất bài toán khác hẳn nhau — Map là bài toán biểu diễn dữ liệu không gian, Localization là bài toán ước lượng xác suất (đã bàn ở bài AMCL), Path Planning là bài toán tìm kiếm trên đồ thị (graph search), Path Following là bài toán điều khiển thời gian thực (đã bàn ở chuyên mục Điều khiển Robot). Tách riêng cho phép mỗi mảnh dùng đúng công cụ toán học phù hợp nhất với bản chất bài toán của nó, thay vì gò ép vào một framework chung không phù hợp với tất cả.

Tóm lại: Map và Localization trả lời "tôi đang ở đâu, thế giới trông ra sao" — thuộc nhóm bài toán định vị. Path Planning và Path Following trả lời "tôi cần đi đâu, đi thế nào" — thuộc nhóm bài toán điều hướng. Nav2 (chuyên mục riêng) là framework ROS2 hiện thực hoá cả bốn cùng lúc trong một hệ thống thống nhất.

Kiến thức kỹ thuật

Công thức

Tần số chạy của mỗi mảnh ghép khác nhau rất nhiều, quyết định trực tiếp ngân sách tính toán cần phân bổ — mảnh nào chạy càng thường xuyên càng cần thuật toán nhẹ:

Map: tĩnh, gần như không đổi trong 1 phiên vận hành (trừ khi chạy SLAM lại)
Localization (AMCL): chạy khi có scan mới, thường 1-5Hz
Path Planning: chạy 1 lần khi có goal mới, hoặc khi đường đi hiện tại bị chặn
Path Following: chạy liên tục mỗi chu kỳ điều khiển, thường 10-50Hz

Path Following chạy tần số cao nhất trong 4 mảnh — đây là lý do thuật toán của nó (Pure Pursuit, DWB...) luôn được thiết kế nhẹ về tính toán, trong khi Path Planning có thể dùng thuật toán nặng hơn (A*, thậm chí các biến thể phức tạp) vì chỉ cần chạy khi có goal mới.

Thông số

Mảnh ghépBản chất bài toánCông cụ điển hình
MapBiểu diễn dữ liệu không gianOccupancy Grid
LocalizationƯớc lượng xác suấtAMCL, EKF
Path PlanningTìm kiếm trên đồ thịA*, Dijkstra
Path FollowingĐiều khiển thời gian thựcPure Pursuit, DWB, MPPI

Ứng dụng thực tế

Chuyên mục Navigation cơ bản này trình bày khái niệm tổng quát, không gắn với một framework cụ thể — các thuật toán A*, Dijkstra tồn tại từ trước ROS2 rất lâu, dùng trong game, robotics công nghiệp, GPS. Chuyên mục Nav2 sẽ đi tiếp vào cách ROS2 hiện thực hoá các khái niệm này thành planner_server, controller_server, và các plugin cụ thể — hiểu đúng 4 mảnh ghép tổng quát trước khi học Nav2 giúp phân biệt "đây là khái niệm nền tảng bất biến" với "đây là cách một framework cụ thể triển khai khái niệm đó".

Ví dụ thực tế

Theo dấu một lệnh "đi tới điểm giao hàng B" qua cả 4 mảnh ghép:

1. Map: robot đã có sẵn bản đồ kho hàng đã lưu từ trước (occupancy grid)
2. Localization: AMCL so khớp scan LiDAR hiện tại với bản đồ,
   xác định robot đang ở toạ độ (2.1, 0.8) trong hệ map
3. Path Planning: A* tính đường đi ngắn nhất từ (2.1, 0.8) tới điểm B,
   trả về chuỗi điểm waypoint
4. Path Following: mỗi 50ms, Pure Pursuit tính lệnh (v, ω) để bám
   theo chuỗi waypoint đó, gửi xuống Driver Layer điều khiển động cơ

Nếu robot dừng lại giữa đường không rõ lý do, việc biết đúng mảnh ghép nào phụ trách bước nào giúp debug nhanh hơn nhiều — kiểm tra AMCL có hội tụ đúng vị trí (Localization), rồi mới tới đường đi có hợp lý không (Path Planning), rồi mới tới robot có bám đúng đường không (Path Following).

Lỗi thường gặp

  • Nhảy thẳng vào học Nav2 mà bỏ qua 4 khái niệm nền tảng này — dễ nhầm lẫn giữa cái gì là bản chất toán học bất biến (A*, Pure Pursuit) và cái gì là cách Nav2 cụ thể triển khai nó (SmacPlanner, DWB) — gây khó khăn khi cần tinh chỉnh hoặc debug sâu hơn mức cấu hình bề mặt.
  • Coi 4 mảnh ghép là độc lập, không phụ thuộc nhau — như đã nêu ở phần Nguyên lý hoạt động, chuỗi phụ thuộc rất chặt (Map→Localization→Path Planning→Path Following) — lỗi ở một mảnh luôn ảnh hưởng dây chuyền tới các mảnh sau.
  • Không phân biệt tần số chạy khác nhau giữa các mảnh khi debug — nghi ngờ sai mảnh ghép (VD: nghĩ Path Planning sai khi thực chất là Path Following chạy liên tục bị nhiễu) khiến debug đi sai hướng.
  • Gộp Localization trong Navigation với Localization tổng quát (Odometry, IMU thuần) — trong ngữ cảnh Navigation, Localization gần như luôn ngụ ý AMCL (định vị trên bản đồ đã biết), khác với Odometry/IMU dead reckoning không cần bản đồ.

Kết luận

Navigation không phải một thuật toán, mà là bốn bài toán con phối hợp theo một chuỗi phụ thuộc rõ ràng — Map, Localization, Path Planning, Path Following. Nắm chắc bản chất từng mảnh ghép trước khi học Nav2 giúp phân biệt khái niệm nền tảng với cách một framework cụ thể triển khai nó, và debug đúng mảnh khi có sự cố. Bài tiếp theo trong chuyên mục đi vào Map — mảnh ghép đầu tiên, nơi mọi thứ khác đều dựa vào.

Navigation là gì? Bốn mảnh ghép làm nên khả năng tự di chuyển — Atlasbot