
前言温故而知新可以为师矣。最近又在搞一些导航相关是真车实战啦然后看到之前好像都是一些代码部分本章重点梳理一些理论知识点。Navigation2是ROS2 官方的移动机器人自主导航框架专门给轮式机器人做自主行走导航。实现给一个目标点机器人自己规划路线、避障、走到目的地。Nav2架构框图上层下发导航目标点 → BT 行为树总调度 → 全局规划出路线 → 局部控制器跟踪路线输出速度指令 → 底盘执行运动。1. Waypoint Follower上层接口在 RViz2 或者代码调用它下发动作NavigateToPose导航到目标点/NavigateThroughPoses航点序列给BT Navigator Server。2. BT Navigator Server行为树导航服务器加载 XML 格式Behavior Tree行为树指挥后面三个 Server 干活发生异常也由行为树决定该做什么恢复动作。CP ComputePathToPose请求 PlannerServer 计算全局路径FP FollowPath请求 ControllerServer 跟踪这条路径3. Planner Server 全局规划服务器输入地图map、激光雷达传感器数据生成Global Costmap全局代价地图功能A* / Smac 等算法规划从起点到终点一条完整全局路径。4. Controller Server 局部控制器服务器维护Local Costmap局部代价地图只看机器人周围一小片区域实时融合激光雷达新障碍物接收全局路径使用 DWB/TEB 控制器输出/cmd_velTwist 消息线速度 角速度发给底盘5. Recovery Server 故障恢复服务器机器人卡住、被障碍物堵住时执行脱困动作原地旋转、后退、清除代价地图等恢复行为。6. Robot Base Controller机器人底盘控制器接收cmd_vel控制真实硬件电机 / 舵机运动。建图SLAM全称Simultaneous Localization And Mapping同步定位与建图机器人一边搞清楚自己现在在哪定位一边同时把周围环境地图建出来。定位AMCL全称Adaptive Monte Carlo Localization自适应蒙特卡洛定位是ROS2 Nav2 标配的 2D 粒子滤波定位节点。原理是撒一大把粒子每一个粒子代表机器人的一个猜测位置。一开始不知道机器人在哪粒子随机铺满整张地图。读取里程计 IMU所有粒子跟着小车运动一起移动。拿当前激光雷达数据和地图做比对如果某个粒子假设的位置上激光扫描和地图墙壁很匹配 →这个粒子权重变高保留不匹配的粒子权重变低被淘汰删掉根据高权重粒子重新采样生成一批新粒子。反复迭代粒子慢慢收敛聚集到机器人真实位置。粒子簇中心就是机器人估计位姿。完整工作流程Cartographer/SLAM‑Toolbox 建图产出 pgm 地图文件Nav2 加载地图 AMCL 定位获取机器人当前位姿RViz2 / 代码下发导航目标点BT 行为树调度 Planner 生成全局路径Controller 持续跟踪路径、避障输出cmd_vel发给底盘遇到障碍卡死触发 Recovery 恢复行为到达目标结束任务