【ROS2实战指南】从零部署TurtleBot3仿真环境
1. 环境准备搭建ROS2开发基础在开始TurtleBot3仿真之前我们需要先准备好ROS2的开发环境。我推荐使用Ubuntu 22.04 LTS作为操作系统这是目前ROS2 Humble Hawksbill最稳定的支持平台。如果你使用的是其他Linux发行版可能需要额外处理依赖问题。首先安装ROS2 Humble版本。打开终端依次执行以下命令sudo apt update sudo apt upgrade -y sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo sh -c echo deb [arch$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main /etc/apt/sources.list.d/ros2.list sudo apt update sudo apt install ros-humble-desktop安装完成后记得设置环境变量。我建议把这行命令添加到~/.bashrc文件中这样每次打开终端都会自动加载ROS2环境echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc为了验证安装是否成功可以尝试运行一个简单的demo节点ros2 run demo_nodes_cpp talker在另一个终端运行ros2 run demo_nodes_py listener如果能看到talker发送消息listener接收消息说明ROS2基础环境已经准备就绪。接下来我们需要安装一些必要的工具比如colcon构建工具和rosdep依赖管理工具sudo apt install python3-colcon-common-extensions python3-rosdep2 sudo rosdep init rosdep update2. 核心功能包安装构建仿真环境现在我们来安装TurtleBot3仿真所需的核心功能包。这些包将提供机器人模型、传感器仿真、导航算法等关键功能。我建议按照以下顺序安装这样可以避免一些常见的依赖问题。首先是Gazebo仿真环境。虽然ROS2 Humble默认会安装Gazebo Fortress但为了确保完整功能我们最好安装全套插件sudo apt install ros-humble-gazebo-ros-pkgs ros-humble-gazebo-plugins ros-humble-gazebo-ros接下来安装Cartographer SLAM算法。Cartographer是Google开源的激光SLAM算法在室内建图方面表现优异。我们可以直接安装二进制包sudo apt install ros-humble-cartographer ros-humble-cartographer-ros然后是Navigation2导航栈。这是ROS2中的标准导航解决方案包含了路径规划、避障等核心功能sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup最后安装TurtleBot3相关包。这里需要注意TurtleBot3有Burger和Waffle两种模型我们安装完整包会包含两者sudo apt install ros-humble-turtlebot3-gazebo ros-humble-turtlebot3-navigation2 ros-humble-turtlebot3-teleop安装完成后我们需要设置一个重要的环境变量告诉系统我们使用的是哪种TurtleBot3模型。我建议使用Waffle Pi模型因为它配备了更多的传感器echo export TURTLEBOT3_MODELwaffle_pi ~/.bashrc source ~/.bashrc3. 启动仿真环境让机器人动起来一切准备就绪后我们就可以启动仿真环境了。我习惯先启动Gazebo仿真世界这里TurtleBot3提供了几个预置的环境比如house、world等。我们先启动house环境ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py这个命令会启动Gazebo并加载一个模拟的房屋环境同时在其中放置一个TurtleBot3机器人。第一次启动可能会比较慢因为需要下载模型文件。如果Gazebo卡在下载模型的状态可以手动下载并放置到~/.gazebo/models目录下。在另一个终端我们启动Cartographer SLAM节点ros2 launch turtlebot3_cartographer cartographer.launch.py现在我们需要一个方式来控制机器人移动以便进行建图。打开第三个终端启动键盘控制节点ros2 run teleop_twist_keyboard teleop_twist_keyboard按照终端上的提示使用键盘控制机器人移动。建议先让机器人缓慢移动逐步探索整个环境。你会看到Cartographer正在实时构建环境地图。4. 地图构建与保存完成SLAM过程当机器人探索完整个环境后我们需要保存构建好的地图。首先结束当前的轨迹ros2 service call /finish_trajectory cartographer_ros_msgs/srv/FinishTrajectory {trajectory_id: 0}然后保存地图状态到文件。我建议在home目录下创建一个bags文件夹来存放地图数据mkdir -p ~/bags ros2 service call /write_state cartographer_ros_msgs/srv/WriteState {filename: /home/$USER/bags/mymap.pbstream}最后我们需要将.pbstream格式的地图转换为ROS导航更常用的.pgm和.yaml格式cd /opt/ros/humble/lib/cartographer_ros ./cartographer_pbstream_to_ros_map -map_filestem${HOME}/bags/mymap -pbstream_filename${HOME}/bags/mymap.pbstream -resolution0.05这会在~/bags目录下生成mymap.pgm和mymap.yaml两个文件。你可以用图像查看器打开.pgm文件查看构建的地图。5. 自主导航测试验证完整功能有了地图后我们可以测试机器人的自主导航功能。首先关闭之前的所有终端然后重新启动仿真环境ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py在新的终端启动Navigation2导航栈这次要指定我们刚刚创建的地图ros2 launch turtlebot3_navigation2 navigation2.launch.py map:~/bags/mymap.yaml启动后我们需要先让机器人进行定位。在RViz界面中使用2D Pose Estimate工具告诉机器人它在地图中的大致位置。然后你可以使用2D Nav Goal工具指定目标位置观察机器人如何规划路径并自主导航到目标点。如果在导航过程中遇到问题比如机器人卡住或者定位丢失可以尝试调整Navigation2的参数。参数文件通常位于/opt/ros/humble/share/turtlebot3_navigation2/param目录下。我建议先复制这些文件到你的工作空间再进行修改这样不会影响系统默认配置。