Kiến thức robot bằng tiếng Việt
Blog
Bài viết kỹ thuật về lập trình nhúng, ROS 2, SLAM, Nav2 và AMR/AGV — viết từ kinh nghiệm làm robot thật.
28 bài viết · ROS2 Navigation / Nav2
AMCL trong Nav2: cấu hình thực tế cho package amcl
Bài AMCL là gì? giải thích particle filter ở mức lý thuyết. Bài này là phần thực hành: node amcl trong Nav2 cấu hình ra sao, và bước 'Set Pose' quan trọng thế nào khi khởi động.
EKF trong Nav2: mô hình 2 tầng Local và Global
Bài EKF (Extended Kalman Filter) giải thích thuật toán ở mức tổng quát. Trong kiến trúc Nav2 thực tế, một pattern phổ biến là chạy HAI EKF riêng biệt — một cho odom, một cho map — không phải một EKF duy nhất.
RF2O: tính odometry từ LiDAR, không cần encoder bánh xe
Encoder bánh xe không phải nguồn odometry duy nhất có thể — RF2O ước lượng chuyển động robot trực tiếp từ hai lần quét LiDAR liên tiếp, hữu ích chính xác khi bánh xe trượt và encoder nói dối.
Hợp nhất Odometry: kết hợp Encoder, IMU, và RF2O trong một node
Ba bài trước giới thiệu ba nguồn odometry riêng biệt: Encoder, IMU (qua EKF), và RF2O. Bài này ghép cả ba vào một cấu hình robot_localization thực tế, với nguyên tắc chọn trường dữ liệu tin nguồn nào.
TF Tree: debug cây hệ toạ độ khi Nav2 báo lỗi transform
Bài Transform giải thích lý thuyết nối chuỗi phép biến đổi. Đây là phần thực hành: khi Nav2 báo lỗi 'could not transform', hai công cụ view_frames và tf2_echo là nơi bắt đầu tìm nguyên nhân, không phải đoán mò trong code.
Cấu hình Nav2 cho robot 2 bánh vi sai: từ params.yaml tới launch
Các bài trong chuyên mục này giải thích từng khái niệm Nav2 riêng lẻ — Planner, Controller, Costmap. Bài này ghép chúng lại thành một file params.yaml thực tế, khởi động được một robot vi sai thật.
Planner trong Nav2: NavFn, SmacPlanner, ThetaStar
Bài Path Planning giải thích A* và Dijkstra ở mức thuật toán tổng quát. planner_server trong Nav2 là nơi các thuật toán đó trở thành plugin thay thế được — mỗi plugin một đánh đổi khác nhau.
Controller trong Nav2: DWB và MPPI bám đường bằng cách khác nhau
Bài Path Following giới thiệu Pure Pursuit đơn giản. controller_server trong Nav2 dùng các thuật toán phức tạp hơn nhiều — DWB và MPPI — để vừa bám path vừa né vật cản động cùng lúc.
Costmap: từ Occupancy Grid thô ra bản đồ chi phí nhiều lớp
Occupancy Grid chỉ có 3 giá trị (free/occupied/unknown). Costmap thêm một khái niệm quan trọng: vùng gần vật cản 'nguy hiểm' hơn vùng xa, dù cả hai đều free — bằng lớp Inflation.
Behavior Tree: cách bt_navigator điều phối toàn bộ Nav2
Planner tính đường, Controller bám đường — nhưng ai quyết định 'nếu bám đường thất bại thì làm gì tiếp theo'? Behavior Tree là bộ não điều phối cấp cao, ghép Planner/Controller/Recovery thành một luồng xử lý có logic rõ ràng.
Recovery Behaviors: robot phải làm gì khi bị kẹt
Planner không tìm được đường, Controller báo kẹt — Nav2 không dừng lại chờ người can thiệp ngay. Recovery Behaviors là tập hành vi 'thử lại theo cách khác' trước khi thực sự báo lỗi cho tầng ứng dụng.
Waypoint Follower: đi qua nhiều điểm liên tiếp, có hoặc không dừng lại
NavigateToPose chỉ đi tới đúng 1 điểm. Robot giao hàng cần ghé qua nhiều điểm liên tiếp trong một nhiệm vụ — Waypoint Follower và action NavigateThroughPoses giải quyết đúng bài toán này.