【ROS2】 Jazzy + TurtleBot3 自动建图完整指南
【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 自动建图终极修复版 (解决 No frontiers found)
# ==========================================
echo "----------------------------------------"
echo "🚀 正在初始化环境..."
export TURTLEBOT3_MODEL=waffle_pi
source /opt/ros/jazzy/setup.bash
source ~/turtlebot3_ws/install/setup.bash
# --- 第一步:启动 Gazebo 仿真 ---
echo "[1/4] 启动 Gazebo 世界..."
gnome-terminal --tab --title="1. Gazebo World" -- bash -c '
source /opt/ros/jazzy/setup.bash;
source ~/turtlebot3_ws/install/setup.bash;
export TURTLEBOT3_MODEL=waffle_pi;
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py;
exec bash'
sleep 8
# --- 第二步:启动 SLAM Toolbox ---
echo "[2/4] 启动 SLAM Toolbox (Mapping模式)..."
gnome-terminal --tab --title="2. SLAM Toolbox" -- 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'
sleep 3
# --- 第三步:启动 Nav2 (SLAM模式) ---
echo "[3/4] 启动 Nav2 (启用 SLAM 模式)..."
gnome-terminal --tab --title="3. Nav2 Stack" -- bash -c '
source /opt/ros/jazzy/setup.bash;
source ~/turtlebot3_ws/install/setup.bash;
export TURTLEBOT3_MODEL=waffle_pi;
# 核心:必须使用 bringup_launch.py + slam:=True
ros2 launch nav2_bringup bringup_launch.py \
use_sim_time:=true \
slam:=True \
params_file:=$(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/params/nav2_params.yaml;
exec bash'
echo "⏳ 等待 Nav2 完全初始化 (15秒)..."
sleep 15
# --- 第四步:启动 RViz2 ---
echo "[4/4] 启动 RViz2 可视化..."
gnome-terminal --tab --title="4. RViz2 View" -- bash -c '
source /opt/ros/jazzy/setup.bash;
source ~/turtlebot3_ws/install/setup.bash;
rviz2 -d $(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/rviz/nav2_default_view.rviz;
exec bash'
sleep 2
# --- 第五步:启动 Explore Lite (关键修复) ---
echo "[5/5] 启动 Explore Lite 自动探索 (带边界检测优化)..."
gnome-terminal --tab --title="5. Explore Lite (AUTO)" -- bash -c '
source /opt/ros/jazzy/setup.bash;
source ~/turtlebot3_ws/install/setup.bash;
# 关键参数修复:
# 1. min_frontier_size: 防止小边界被忽略
# 2. frontier_timeout: 避免因短暂无边界而停止
# 3. costmap_updates_topic: 确保接收地图更新
ros2 run explore_lite explore \
--ros-args \
-p use_sim_time:=true \
-p robot_base_frame:=base_link \
-p costmap_topic:=/global_costmap/costmap \
-p costmap_updates_topic:=/global_costmap/costmap_updates \
-p min_frontier_size:=0.5 \
-p frontier_timeout:=5.0 \
-p visualize:=true;
exec bash'
echo "----------------------------------------"
echo "✅ 所有节点已启动!"
echo "💡 操作提示:"
echo "1. 如果机器人不动,在 RViz 中点击 '2D Goal Pose' 给个初始方向"
echo "2. 观察 Costmap 中是否有灰色未知区域(必须有!)"
echo "----------------------------------------"
3. 赋予脚本执行权限
chmod +x ~/start_auto_mapping.sh
4. 如何使用
以后,你只需要在任意终端中运行以下命令,所有四个终端就会自动弹出并启动相应程序:
source ~/start_auto_mapping.sh
注意:这个脚本假设你使用的是
gnome-terminal。如果你使用的是其他终端(如konsole或xterm),需要相应地修改脚本中的命令。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)