navigationamrslamnavigation

SLAM và Navigation: Cách robot tự định vị và di chuyển

Tìm hiểu cách robot sử dụng SLAM để xây dựng bản đồ, tự định vị và lập kế hoạch đường đi với ROS 2 Nav2 stack.

Nguyễn Anh Tuấn1 tháng 7, 20254 phút đọc
SLAM và Navigation: Cách robot tự định vị và di chuyển

SLAM là gì?

SLAM (Simultaneous Localization and Mapping) là bài toán kinh điển trong robotics: robot phải đồng thời xây dựng bản đồ môi trường xung quanh và xác định vị trí của chính mình trên bản đồ đó. Đây là nền tảng để robot tự hành hoạt động trong không gian chưa biết trước.

Bài toán này khó vì hai yếu tố phụ thuộc lẫn nhau — muốn định vị chính xác cần bản đồ tốt, nhưng muốn bản đồ tốt lại cần định vị chính xác.

Các phương pháp SLAM phổ biến

LiDAR SLAM

Sử dụng cảm biến laser để quét môi trường 2D hoặc 3D. Các thuật toán phổ biến:

  • GMapping: SLAM 2D dựa trên particle filter, phù hợp cho robot di chuyển trong nhà. Xem thêm về LiDAR và 3D mapping cho ứng dụng nâng cao
  • Cartographer (Google): hỗ trợ cả 2D và 3D, xử lý tốt loop closure
  • RTAB-Map: kết hợp LiDAR và camera RGB-D, tạo bản đồ 3D chi tiết

Visual SLAM

Chỉ cần camera, chi phí thấp hơn LiDAR nhiều lần:

  • ORB-SLAM3: hỗ trợ monocular, stereo và RGB-D camera
  • VINS-Fusion: visual-inertial SLAM, kết hợp camera với IMU
  • OpenVSLAM: mã nguồn mở, dễ tích hợp với ROS 2

Robot tự hành sử dụng SLAM để mapping và navigation

ROS 2 Nav2 Stack

Nav2 là bộ navigation hoàn chỉnh cho ROS 2, bao gồm toàn bộ pipeline từ SLAM đến điều khiển chuyển động.

Kiến trúc Nav2

Sensor Data → SLAM → Map
                       ↓
Goal Position → Planner → Controller → Motor Commands
                       ↑
                  Costmap (obstacle layer + inflation layer)

Cấu hình Nav2 cơ bản

File nav2_params.yaml là trung tâm cấu hình:

bt_navigator:
  ros__parameters:
    global_frame: map
    robot_base_frame: base_link
    default_bt_xml_filename: navigate_w_replanning_and_recovery.xml

controller_server:
  ros__parameters:
    controller_frequency: 20.0
    FollowPath:
      plugin: "dwb_core::DWBLocalPlanner"
      max_vel_x: 0.5
      min_vel_x: -0.1
      max_vel_theta: 1.0

Launch Nav2 với SLAM

# Khởi động SLAM (tạo bản đồ mới)
ros2 launch nav2_bringup slam_launch.py

# Hoặc dùng bản đồ đã lưu (localization mode)
ros2 launch nav2_bringup localization_launch.py map:=/path/to/map.yaml

# Khởi động navigation
ros2 launch nav2_bringup navigation_launch.py

Costmap và tránh vật cản

Nav2 sử dụng costmap — bản đồ chi phí phân lớp để quyết định đường đi:

  • Static Layer: bản đồ tĩnh từ SLAM
  • Obstacle Layer: vật cản phát hiện real-time từ sensor
  • Inflation Layer: vùng đệm an toàn quanh vật cản
  • Voxel Layer: vật cản 3D (nếu dùng camera depth)

Mỗi ô trên costmap có giá trị từ 0 (tự do) đến 254 (vật cản). Planner sẽ tìm đường đi có tổng chi phí thấp nhất.

Hệ thống cảm biến và costmap cho robot tự hành tránh vật cản

Ứng dụng thực tế tại Việt Nam

Robot giao hàng trong nhà máy: Sử dụng RPLiDAR A2 (khoảng 5 triệu VNĐ) kết hợp Nav2 để robot AMR di chuyển giữa các trạm sản xuất, là thành phần cốt lõi trong quản lý đội robot. Bản đồ nhà máy thường ổn định nên chỉ cần chạy SLAM một lần, sau đó chuyển sang chế độ localization.

Robot phục vụ nhà hàng: Visual SLAM với camera Intel RealSense D435 giúp giảm chi phí phần cứng đáng kể so với LiDAR, phù hợp cho môi trường có nhiều người di chuyển.

Mẹo triển khai thực tế

  1. Chọn sensor phù hợp: LiDAR cho môi trường công nghiệp (độ chính xác cao), camera cho ứng dụng tiêu dùng (chi phí thấp)
  2. Calibrate cẩn thận: Transform giữa sensor và base_link phải chính xác, sai 1-2 cm có thể gây drift nghiêm trọng
  3. Test recovery behavior: Robot sẽ bị kẹt — cấu hình spin, backup và wait recovery trong behavior tree
  4. Monitor bằng RViz2: Luôn visualize costmap và path planning khi debug

SLAM và navigation là hai kỹ năng cốt lõi cho bất kỳ robot tự hành nào. Với ROS 2 Nav2, bạn có thể triển khai hệ thống navigation hoàn chỉnh mà không cần viết lại từ đầu.

Bài viết liên quan

NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Bài viết liên quan

Deep Dive
Mobile Manipulation: Base di chuyển + Arms trên Mobile Robot
lerobotmobile-manipulationnavigationamrPhần 8

Mobile Manipulation: Base di chuyển + Arms trên Mobile Robot

Kết hợp navigation và manipulation trên mobile robot — action space mở rộng, whole-body coordination, và sim environments.

2/4/20269 phút đọc
Multi-robot Coordination: Thuật toán phân công task
fleetamrprogramming

Multi-robot Coordination: Thuật toán phân công task

Các thuật toán phân công nhiệm vụ cho đội robot — từ Hungarian algorithm, auction-based đến RL-based task allocation.

20/3/202612 phút đọc
Wheeled Humanoid: Tương lai robot logistics và warehouse
humanoidfleetamr

Wheeled Humanoid: Tương lai robot logistics và warehouse

Robot hình người trên bánh xe — tại sao thiết kế hybrid này đang thay đổi ngành logistics và vận hành kho hàng.

3/3/202611 phút đọc