Ubuntu 22.04 + ROS 2 Humble 下 SLAM 建图 + 导航(Nav2 + slam_toolbox) 的完整教程

一、准备工作(环境搭建)

1. 安装 ROS 2 Humble

Ubuntu 22.04 上支持 ROS 2 Humble 的二进制安装,先安装基础环境并更新系统(参考 ROS 官方说明)

复制代码
sudo apt update
sudo apt install ros-humble-desktop

确保环境变量在 shell 中自动加载:

复制代码
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

二、安装必要导航与 SLAM 软件包

在安装完成 ROS2 Humble 后,继续安装导航系统和 SLAM 工具:

复制代码
sudo apt update
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup
sudo apt install ros-humble-slam-toolbox

上述命令会安装:

  • Navigation2(Nav2) --- ROS2 主流导航栈

  • slam_toolbox --- 实时 2D SLAM 建图工具

三、准备机器人模型(以 TurtleBot3 为例)

使用仿真结构(Gazebo),推荐安装 TurtleBot3:

复制代码
sudo apt install ros-humble-turtlebot3*

并设置机器人模型:

复制代码
echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc
source ~/.bashrc

四、SLAM 建图

1) 启动机器人仿真(Gazebo)

在一个终端中启动机器人仿真:

复制代码
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

此命令会启动 Gazebo、机器人模型,以及相关传感器仿真。

2) 启动 SLAM 工具

在另一个终端里运行 slam_toolbox 来实时建图:

复制代码
ros2 launch slam_toolbox online_sync_launch.py

这个节点将处理传入的 /scan 激光数据,增量生成地图(Occupancy Grid)。

3) 在 RViz2 可视化地图

在另一个终端启动 RViz2:

复制代码
rviz2

在 RViz 中:

  • 选择 Fixed Frame 为 map

  • 显示 LaserScan 映射(/scan)

  • 显示 OccupancyGrid(地图)

  • 使用 2D Pose Estimate 估计机器人初始位姿

这样你可以看到实时的地图在生成。

五、保存生成的地图

当你完成地图生成并且满意时,可以保存地图文件(包括 .pgm 和 .yaml):

复制代码
ros2 run nav2_map_server map_saver_cli -f ~/my_map

运行后,在你的主目录下会得到:

复制代码
my_map.pgm
my_map.yaml

地图被保存后可用于后续导航定位。

六、启动导航(定位 + 自动导航)

复制代码
ros2 launch nav2_bringup navigation_launch.py map:=~/my_map.yaml

该启动文件会启动:

  • AMCL 定位节点

  • 全局/局部规划

  • 生成速度控制指令

2) 在 RViz2 中发送目标导航命令

在 RViz2 中:

  1. 使用 2D Pose Estimate(初始定位)

  2. 使用 2D Nav Goal(目标位置)

此时 Nav2 会自动规划路径并发布 /cmd_vel,机器人将自动导航到指定目标位置。

七、总结流程图

相关推荐
Dawn-bit1 天前
Linux文本处理三剑客之sed详解
linux·运维·服务器·云计算·运维开发
杰瑞学AI1 天前
一个回答需要10分钟:飞书问答机器人踩坑实录——纯Agent自由检索,差点让我们的机器人“难产”
人工智能·机器人·prompt·transformer·飞书·ai-native
dok121 天前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (9)manual_cdev
linux·运维·驱动开发
Cx330❀1 天前
【Linux网络】深入 HTTP 协议(五):从 Cookie/Session 原理到 C++ 源码实战
linux·运维·服务器·开发语言·网络·c++·http
小小、码农1 天前
Linux进程概念
linux·服务器·网络
Nebula嵌入式1 天前
【C语言】09-深入解析main函数
linux·c语言·开发语言·嵌入式
Dxy12393102161 天前
Linux 编译安装 Python 3.12.10(多版本共存,不破坏系统Python)
linux·运维·python
xz驱动分享2 天前
Linux DMA 子系统学习笔记
linux·dma·rk3588·嵌入式软件
w67820072 天前
Prisma不能优雅的支持DTO,试试Vona ORM吧
linux·运维·ubuntu
Darkwanderor2 天前
Linux系统编程实战项目:模拟实现shell
linux·c++