Nav2与TurtleBot3局部规划器离线测试指南 1. Nav2与TurtleBot3导航系统概述移动机器人导航系统通常由全局规划器和局部规划器两部分组成。Nav2作为ROS2生态中的导航框架提供了完整的导航解决方案。TurtleBot3作为一款广泛使用的教育研究平台机器人与Nav2的结合能够快速验证各类导航算法。在真实场景中机器人会遇到动态障碍物、狭窄通道等复杂环境。这时全局规划器生成的路径可能不再适用需要局部规划器实时调整运动轨迹。我们这次要测试的就是Nav2中的局部规划器模块重点考察其在离线状态下的路径跟踪和避障能力。提示离线测试是指在不连接实际机器人硬件的情况下通过仿真环境验证算法可行性。这种方式能大幅降低开发风险和时间成本。2. 测试环境搭建与配置2.1 硬件准备清单一台安装Ubuntu 20.04/22.04的计算机至少4GB内存推荐8GB以上独立显卡用于Gazebo仿真渲染TurtleBot3 Burger/Waffle模型文件2.2 软件依赖安装sudo apt install ros-humble-desktop sudo apt install ros-humble-turtlebot3* sudo apt install ros-humble-nav2*2.3 工作空间初始化mkdir -p ~/nav2_ws/src cd ~/nav2_ws/src git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git cd .. rosdep install --from-paths src --ignore-src -r -y colcon build --symlink-install3. 局部规划器核心原理剖析3.1 规划器工作流程接收全局路径来自全局规划器实时处理激光雷达/深度相机数据计算最优局部轨迹输出速度指令到底盘控制器3.2 Nav2默认规划器对比规划器类型算法原理适用场景参数敏感度DWB动态窗口法动态环境高TEB时间弹性带狭窄空间中RPP随机路径简单环境低3.3 关键参数解析controller_server: ros__parameters: desired_linear_vel: 0.26 # 最大线速度(m/s) lookahead_dist: 0.6 # 前瞻距离(m) min_obstacle_dist: 0.25 # 最小避障距离(m) inflation_radius: 0.3 # 膨胀半径(m)4. 离线测试实施步骤4.1 启动仿真环境export TURTLEBOT3_MODELburger ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py4.2 加载导航节点ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:true4.3 RVIZ可视化配置添加Map显示层话题设置为/map添加RobotModel显示层添加Path显示层全局路径话题为/global_plan局部路径为/local_plan添加LaserScan显示层话题设置为/scan5. 典型测试场景设计5.1 静态障碍规避测试在Gazebo中添加若干立方体障碍物设置起点和终点形成穿障路径观察局部路径的动态调整过程5.2 狭窄通道通过测试构建宽度略大于机器人直径的通道测试不同规划器的通过成功率记录轨迹偏移量和完成时间5.3 动态避障测试添加移动障碍物速度0.1-0.5m/s评估避障响应时间和安全距离保持检查急停后的恢复能力6. 性能评估指标6.1 定量指标路径跟踪误差RMSE任务完成时间速度变化平滑度计算耗时ms/cycle6.2 定性评估突发障碍反应速度复杂地形通过能力轨迹振荡程度目标点到达精度7. 常见问题排查指南7.1 规划器无输出检查/tf树是否完整确认激光雷达数据正常发布验证costmap是否生成查看规划器日志级别调整为DEBUG7.2 路径跟踪不稳定# 调整DWB参数示例 ros2 param set /controller_server xy_goal_tolerance 0.1 ros2 param set /controller_server yaw_goal_tolerance 0.27.3 避障过于保守减小inflation_radius不低于0.2调整cost_scaling_factor建议0.5-1.5检查传感器数据精度8. 进阶调试技巧8.1 实时参数调优ros2 run rqt_reconfigure rqt_reconfigure8.2 性能分析工具ros2 run nav2_util lifecycle_bringup --node-name controller_server8.3 自定义规划器开发继承nav2_core::Controller接口实现computeVelocityCommands方法在nav2_params.yaml注册新规划器在Gazebo中测试时我发现当机器人接近目标点时有时会出现绕圈现象。这通常是由于目标容差参数设置不当导致的。通过以下命令可以快速修正ros2 param set /controller_server xy_goal_tolerance 0.05 ros2 param set /controller_server yaw_goal_tolerance 0.1