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
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.
Ứ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ế
- 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)
- 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
- Test recovery behavior: Robot sẽ bị kẹt — cấu hình spin, backup và wait recovery trong behavior tree
- 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.