
1. 项目概述在机器人开发领域SLAM同步定位与地图构建和自主导航是两大核心技术。本文将详细介绍如何在Ubuntu 24.04系统中使用ROS 2 Kilted版本配合TurtleBot3机器人实现完整的SLAM建图与Nav2导航功能。这个方案非常适合想要快速上手ROS 2机器人开发的工程师和学生。我选择这套技术栈有几个重要原因Ubuntu 24.04是最新的LTS版本提供长期稳定的系统支持ROS 2 Kilted是当前最新的ROS 2发行版包含最新的功能改进TurtleBot3是ROS官方推荐的入门机器人平台硬件成本低且社区支持完善slam_toolbox和Nav2是目前最成熟的ROS 2建图和导航解决方案2. 环境准备2.1 系统要求建议使用以下配置操作系统Ubuntu 24.04 LTS64位内存至少8GB16GB更佳存储至少50GB可用空间显卡支持OpenGL 3.0及以上用于Gazebo仿真提示虽然可以在虚拟机中运行但由于Gazebo对3D加速要求较高建议直接在物理机上安装Ubuntu系统以获得最佳性能。2.2 ROS 2 Kilted安装首先设置软件源并安装ROS 2 Kiltedsudo apt update sudo apt install curl gnupg2 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu noble main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install ros-kilted-desktop安装完成后设置环境变量echo source /opt/ros/kilted/setup.bash ~/.bashrc source ~/.bashrc2.3 必要工具安装安装一些开发常用工具sudo apt install python3-colcon-common-extensions python3-rosdep2 sudo rosdep init rosdep update3. TurtleBot3仿真环境搭建3.1 TurtleBot3软件包安装安装TurtleBot3相关软件包sudo apt install ros-kilted-turtlebot3* ros-kilted-gazebo-ros-pkgs设置默认机器人模型本文使用waffle_pi型号echo export TURTLEBOT3_MODELwaffle_pi ~/.bashrc source ~/.bashrc3.2 Gazebo环境配置确保Gazebo模型路径正确echo export GAZEBO_MODEL_PATH/opt/ros/kilted/share/turtlebot3_gazebo/models ~/.bashrc source ~/.bashrc测试Gazebo是否能正常运行gazebo --verbose /opt/ros/kilted/share/turtlebot3_gazebo/worlds/empty.world如果Gazebo启动正常你应该能看到一个空白的世界。4. SLAM建图实战4.1 安装slam_toolboxslam_toolbox是ROS 2中功能强大的SLAM解决方案sudo apt install ros-kilted-slam-toolbox4.2 启动仿真环境我们使用house场景进行建图演示ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py这个命令会启动Gazebo仿真环境加载house场景TurtleBot3机器人模型必要的ROS 2节点如机器人状态发布器、传感器驱动等4.3 启动slam_toolbox新建终端启动SLAM节点ros2 launch slam_toolbox online_async_launch.py use_sim_time:True关键参数说明use_sim_time:True使用仿真时间而非系统时间online_async模式适合在建图过程中实时更新地图4.4 RViz可视化配置再新建一个终端启动RVizros2 run rviz2 rviz2在RViz中需要进行以下配置将Fixed Frame设置为map添加Map显示话题设置为/map添加LaserScan显示话题设置为/scan添加TF显示4.5 控制机器人建图新建终端启动键盘控制ros2 run turtlebot3_teleop teleop_keyboard按照提示使用键盘控制机器人移动前进W左转A后退S右转D停止空格建图技巧尽量让机器人走之字形路线确保激光雷达能扫描到所有区域遇到复杂区域时适当放慢速度确保所有区域都被扫描到特别是角落和狭窄通道4.6 保存地图当建图完成后保存地图ros2 run nav2_map_server map_saver_cli -f ~/map这会生成两个文件map.pgm地图图像文件map.yaml地图元数据文件地图参数说明resolution: 0.050每个像素代表0.05米origin: [-0.938, -2.073, 0]地图原点坐标occupied_thresh: 0.65占据概率阈值free_thresh: 0.196空闲概率阈值5. Nav2导航实现5.1 安装Nav2安装Nav2相关软件包sudo apt install ros-kilted-navigation2 ros-kilted-nav2-bringup5.2 启动仿真环境使用之前建图时的相同场景ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py5.3 启动Nav2导航新建终端启动Nav2并加载之前保存的地图ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:True map:~/map.yaml5.4 RViz导航配置启动RVizros2 run rviz2 rviz2 -d /opt/ros/kilted/share/nav2_bringup/rviz/nav2_default_view.rviz在RViz中需要进行初始定位点击工具栏中的2D Pose Estimate按钮在地图上点击机器人实际所在位置拖动鼠标设置机器人朝向5.5 设置导航目标在RViz中点击工具栏中的Nav2 Goal按钮在地图上点击目标位置拖动鼠标设置目标朝向机器人将自动规划路径并开始移动过程中会实时避障。6. 核心组件深度解析6.1 slam_toolbox工作原理slam_toolbox采用基于图优化的SLAM算法主要流程包括前端处理激光数据预处理和扫描匹配位姿图构建建立机器人位姿之间的约束关系后端优化使用稀疏位姿调整(SPA)优化位姿图地图更新将优化后的位姿用于地图构建关键参数调优建议max_laser_range: 设置与激光雷达实际参数一致minimum_time_interval: 控制地图更新频率transform_publish_period: 影响TF发布频率6.2 Nav2导航栈剖析Nav2采用模块化设计主要组件包括规划器服务器(Planner Server)负责全局路径规划控制器服务器(Controller Server)负责局部路径规划和运动控制恢复服务器(Recovery Server)处理导航异常情况行为树导航器(BT Navigator)协调整个导航流程性能优化建议调整代价地图参数以适应不同环境根据机器人运动能力设置合理的速度和加速度限制针对特定场景定制行为树逻辑7. 常见问题与解决方案7.1 建图问题排查问题1地图出现重影或错位可能原因里程计误差累积解决方案确保机器人运动模型参数正确降低移动速度问题2地图边界不清晰可能原因激光雷达参数设置不当解决方案检查max_laser_range和minimum_time_interval参数7.2 导航问题排查问题1机器人无法准确定位可能原因初始位姿估计不准确解决方案在RViz中重新设置2D Pose Estimate问题2导航路径不合理可能原因代价地图参数不当解决方案调整inflation_radius和cost_scaling_factor参数问题3机器人卡在障碍物处可能原因局部规划器参数不当解决方案调整controller_frequency和max_vel_x参数8. 进阶应用与扩展8.1 多机器人协同建图可以通过以下步骤实现为每个机器人分配唯一的命名空间使用tf_prefix处理坐标变换合并各个机器人的地图数据8.2 真实机器人部署将仿真环境迁移到真实TurtleBot3的步骤确保硬件连接正确激光雷达、IMU等调整传感器参数匹配实际硬件测试各个功能模块是否正常工作8.3 自定义导航行为通过修改行为树可以实现定点巡逻功能动态避障策略多目标点连续导航9. 性能优化建议硬件加速启用GPU加速可显著提升Gazebo性能export LIBGL_ALWAYS_SOFTWARE0资源分配为ROS 2节点分配合理的CPU资源网络优化在多机系统中优化ROS 2通信配置日志管理合理配置日志级别以减少系统开销10. 项目总结与经验分享在实际部署这套系统时我总结了以下几点经验参数调优是一个迭代过程需要耐心测试不同配置建图质量直接影响导航效果要确保地图准确完整仿真环境虽然方便但与真实环境存在差异需要针对性调整合理使用RViz的可视化工具能极大提高调试效率对于想要深入学习ROS 2机器人开发的读者我建议从官方文档和教程开始建立扎实的基础多参与ROS社区讨论学习他人经验尝试修改和扩展现有功能加深理解保持代码和文档的良好习惯方便后期维护