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

七、总结流程图

相关推荐
AlfredZhao1 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
A小辣椒5 天前
TShark:基础知识
linux
AlfredZhao5 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao5 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334666 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
zzzzzz3106 天前
假如我是掘金管理员,我先给评论区装个'代码审查'系统
python·程序员·机器人