【ROS2】 Jazzy + TurtleBot3 自动建图完整指南

这篇指南将带你从零开始,在 ROS2 Jazzy 环境下,使用 TurtleBot3 完成自动探索建图。我们将从源码编译 explore_lite 包开始,解决常见的依赖和编译问题,并最终实现机器人的全自动建图。

🛠️ 第一步:获取源码并清理环境

首先,我们需要获取专为 ROS2 适配的 explore_lite 源码,并清理掉任何可能引起冲突的旧文件。

# 1. 进入工作空间的 src 目录
cd ~/turtlebot3_ws/src

# 2. 删除旧的或错误的包,确保环境干净
rm -rf m-explore m-explore-ros2 explore_lite

# 3. 使用国内镜像加速,克隆 ROS2 版本的 explore_lite
git clone https://ghfast.top/https://github.com/robo-friends/m-explore-ros2.git
🔨 第二步:安装依赖并重新编译

这是解决“找不到包”或“消息包丢失”等报错的核心步骤。我们将彻底清理缓存,安装依赖,并正确编译。

# 1. 返回工作空间根目录
cd ~/turtlebot3_ws

# 2. 强制删除旧的构建产物和日志,防止缓存干扰
rm -rf build/explore_lite build/explore_lite_msgs \
       install/explore_lite install/explore_lite_msgs \
       log

# 3. 安装系统依赖 (如果提示 rosdep 未找到,请先运行: sudo apt install python3-rosdep)
rosdep install --from-paths src --ignore-src -r -y

# 4. 编译 explore_lite 及其消息包
colcon build --packages-select explore_lite_msgs explore_lite

# 5. 编译成功后,刷新当前终端的环境变量
source install/setup.bash
🚀 第三步:启动自动建图(四终端法)

现在,环境已经准备就绪。请打开 4个 新的终端,并按顺序执行以下命令。

终端 1:启动 Gazebo 仿真环境

export TURTLEBOT3_MODEL=waffle_pi
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

终端 2:启动 SLAM 建图

# 修正点:直接使用 slam_toolbox 的原生启动文件,更稳定
ros2 launch slam_toolbox online_async_launch.py use_sim_time:=true

终端 3:启动 Nav2 导航栈

作用:提供代价地图 (/global_costmap/costmap),这是 explore_lite 能够工作的先决条件。

ros2 launch nav2_bringup navigation_launch.py use_sim_time:=true

终端 4:启动自动探索节点

ros2 run explore_lite explore --ros-args -p costmap_topic:=/global_costmap/costmap
📊 第四步:启动 RViz 进行监控

最后,打开第五个终端,启动 RViz 来可视化整个过程。

rviz2

在 RViz 中,你需要手动添加以下显示项来观察效果:

  • Map: 话题为 /map,查看 SLAM 构建的地图。
  • LaserScan: 话题为 /scan,查看雷达数据。
  • Map: 话题为 /global_costmap/costmap,查看导航用的代价地图。
  • RobotModel: 显示机器人模型。

💡 一键启动脚本

每次手动打开四个终端确实很麻烦。下面是一个 Bash 脚本,可以帮你一键启动所有节点。

1. 创建脚本文件

在你的主目录下创建一个名为 start_auto_mapping.sh 的文件。

nano ~/start_auto_mapping.sh
2. 粘贴脚本内容

将以下内容复制并粘贴到文件中,然后按 Ctrl+O 保存,再按 Ctrl+X 退出。

#!/bin/bash

# 脚本功能:一键启动 TurtleBot3 自动建图所需的所有节点
# 使用方法:在终端中运行 source ~/start_auto_mapping.sh

echo "----------------------------------------"
echo "正在启动 TurtleBot3 自动建图环境..."
echo "请确保你已经在 ~/turtlebot3_ws 中编译并 source 过环境。"
echo "----------------------------------------"

# 设置模型
export TURTLEBOT3_MODEL=waffle_pi

# 启动 Gazebo 仿真 (终端 1)
gnome-terminal --tab --title="Gazebo Sim" --command="bash -c 'source /opt/ros/jazzy/setup.bash; source ~/turtlebot3_ws/install/setup.bash; ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py; exec bash'"

# 等待几秒,让 Gazebo 有时间初始化
sleep 5

# 启动 SLAM (终端 2)
gnome-terminal --tab --title="SLAM Toolbox" --command="bash -c 'source /opt/ros/jazzy/setup.bash; source ~/turtlebot3_ws/install/setup.bash; ros2 launch slam_toolbox online_async_launch.py use_sim_time:=true; exec bash'"

# 启动 Nav2 (终端 3)
gnome-terminal --tab --title="Nav2 Stack" --command="bash -c 'source /opt/ros/jazzy/setup.bash; source ~/turtlebot3_ws/install/setup.bash; ros2 launch nav2_bringup navigation_launch.py use_sim_time:=true; exec bash'"

# 启动 Explore Lite (终端 4)
gnome-terminal --tab --title="Explore Lite" --command="bash -c 'source /opt/ros/jazzy/setup.bash; source ~/turtlebot3_ws/install/setup.bash; ros2 run explore_lite explore --ros-args -p costmap_topic:=/global_costmap/costmap; exec bash'"

echo "----------------------------------------"
echo "所有节点已启动!"
echo "现在,请手动打开一个新的终端并运行 'rviz2' 来查看效果。"
echo "----------------------------------------"
3. 赋予脚本执行权限
chmod +x ~/start_auto_mapping.sh
4. 如何使用

以后,你只需要在任意终端中运行以下命令,所有四个终端就会自动弹出并启动相应程序:

source ~/start_auto_mapping.sh

注意:这个脚本假设你使用的是 gnome-terminal。如果你使用的是其他终端(如 konsolexterm),需要相应地修改脚本中的命令。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐