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_MODEL=burger 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显示层,话题设置为/scan
5. 典型测试场景设计
5.1 静态障碍规避测试
- 在Gazebo中添加若干立方体障碍物
- 设置起点和终点形成穿障路径
- 观察局部路径的动态调整过程
5.2 狭窄通道通过测试
- 构建宽度略大于机器人直径的通道
- 测试不同规划器的通过成功率
- 记录轨迹偏移量和完成时间
5.3 动态避障测试
- 添加移动障碍物(速度0.1-0.5m/s)
- 评估避障响应时间和安全距离保持
- 检查急停后的恢复能力
6. 性能评估指标
6.1 定量指标
- 路径跟踪误差(RMSE)
- 任务完成时间
- 速度变化平滑度
- 计算耗时(ms/cycle)
6.2 定性评估
- 突发障碍反应速度
- 复杂地形通过能力
- 轨迹振荡程度
- 目标点到达精度
7. 常见问题排查指南
7.1 规划器无输出
- 检查
/tf树是否完整 - 确认激光雷达数据正常发布
- 验证costmap是否生成
- 查看规划器日志级别调整为DEBUG
7.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