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,机器人将自动导航到指定目标位置。

七、总结流程图

相关推荐
一码当前18 小时前
【全志】 OKT153(sun8iw22) 启动链全流程详解
linux
键盘上的猫头鹰19 小时前
【Linux 基础教程(一)】概述、安装与网络配置:VMware + CentOS + NAT + XShell 远程连接
linux·网络·centos
小烤箱19 小时前
什么是 ROS2:机器人软件的数据加工工业园区
人工智能·机器人·ros
枳实-叶19 小时前
【Linux驱动开发】第18天:I2C驱动深度解析
linux·运维·驱动开发
shandianchengzi19 小时前
【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程
linux·运维·ubuntu
陳103019 小时前
Linux:信号
linux·运维·服务器
承渊政道19 小时前
【MySQL数据库学习】(MySQL数据类型)
数据库·学习·mysql·ubuntu·bash·数据库开发·数据库系统
小此方19 小时前
Re:Linux系统篇(二十五)进程篇·十:深度硬核!Linux 进程等待,从 task_struct 源码到位图状态解构
linux·运维·驱动开发
z2023050819 小时前
RDMA之DCQCN (14)
linux·服务器·网络·人工智能·ai
zh路西法19 小时前
【ROS2相机标定】基于棋盘格的单目标定法
linux·c++