跳到主要内容

5.5.1 SLAM建图

简介

SLAM(Simultaneous Localization and Mapping)即同时定位与建图,通过传感器数据对环境进行实时建模并构建地图,同时估计机器人的位置和姿态,为机器人导航提供感知信息。

本示例演示在仿真环境与实车运行两种场景下实现SLAM建图。

仿真建图

本小节基于仿真机器人小车模型,使用SLAM算法进行建图,并通过Gazebo与rviz观察机器人小车运行与建图效果。

其中SLAM算法运行在SpaceMiT RISC-V系列板子上,仿真机器人小车模型、Gazebo仿真环境、rviz可视化运行在与板子同一网段的PC上。

SpaceMiT板子上已配置了slam_gmapping、slam_toolbox、cartographer三种SLAM算法的一键启动流程,可任选其一实现建图功能。

三种SLAM算法的对比:

对比项slam_gmappingslam_toolboxcartographer
建图精度
图优化/回环检测
重定位支持
资源占用中等
适用地图范围中等
适用机器人类型小型中/大型中/大型
累计误差

准备工作

(1)SpaceMiT板子烧录 bianbu desktop 24.04 系统镜像,安装 Bianbu Robot SDK 。

(2)PC端安装ros-humble、Bianbu Robot SDK。

使用介绍

启动仿真环境

在PC端打开终端,输入以下命令安装机器人小车模型与Gazebo仿真环境。

sudo apt install ros-humble-gazebo*
sudo apt install ros-humble-turtlebot3
sudo apt install ros-humble-turtlebot3-gazebo
sudo apt install ros-humble-turtlebot3-bringup
sudo apt install ros-humble-turtlebot3-simulations

安装完毕后,输入以下命令加载机器人模型,并启动Gazebo仿真环境。

source /opt/ros/humble/setup.bash
source /usr/share/gazebo/setup.sh
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

成功启动后,仿真环境如下图所示:

PC端打开另一个终端,输入以下命令启动rviz可视化运行。

source /opt/ros/humble/setup.bash
ros2 launch turtlebot3_bringup rviz2.launch.py
rviz2

按照下图所示顺序,依次点击add、选择map、修改话题格式为/map:

机器人仿真环境启动完毕后,在SpaceMit板子上根据需求选择任一SLAM算法进行建图,三种SLAM算法的启动方式如下。

slam_gmapping建图

gmapping是一种基于粒子滤波(Particle Filter)的2D SLAM算法,基于激光雷达数据在未知环境中构建地图,同时估计机器人位姿。

github地址:https://github.com/ros-perception/slam_gmapping

slam_gmapping算法已预装在Spacemit板子内,直接打开SpaceMit板子终端输入以下命令启动slam_gmapping建图

source /opt/bros/humble/setup.bash
ros2 launch br_localization slam_gmapping_sim.launch.py

slam_toolbox建图

slam_toolbox 是一套用于 ROS 2 的 2D 同时定位与建图(SLAM)工具包,适合实时建图、离线优化、闭环检测和持久地图管理。

github地址:https://github.com/SteveMacenski/slam_toolbox

SpaceMit板子打开终端输入以下命令安装slam_toolbox算法

sudo apt install ros-humble-slam-toolbox

输入以下命令启动slam_toolbox建图

source /opt/bros/humble/setup.bash
ros2 launch br_localization slam_toolbox_sim.launch.py

cartographer建图

Cartographer是Google开源的一个可跨多个平台和传感器配置,以2D和3D形式提供实时同时定位和建图的系统。

github地址:https://github.com/cartographer-project/cartographer

SpaceMit板子打开终端输入以下命令安装cartographer算法

sudo apt install ros-humble-cartographer
sudo apt install ros-humble-cartographer-ros

输入以下命令启动cartographer建图

source /opt/bros/humble/setup.bash
ros2 launch br_localization slam_cartographer_sim.launch.py

PC端可视化

使用以上任一算法启动SLAM建图,观察PC端rviz窗口,可以看到已经有了初始地图:

PC端打开一个新终端,运行键盘控制节点

sudo apt install ros-humble-teleop-twist-keyboard
source /opt/ros/humble/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard

使用u i o j k l m , . 控制小车运动,在rviz中可以观察到建图效果:

实车建图

本小节基于搭载了SpaceMiT RISC-V系列板子的实车机器人进行SLAM建图,并通过PC端rviz可视化建图效果。

准备工作

(1)SpaceMiT板子烧录 bianbu desktop 24.04 系统镜像,安装 Bianbu Robot SDK 。

(2)PC端安装ros-humble、Bianbu Robot SDK。

使用介绍

按照以下命令,即可一键启动实车机器人模型参数配置文件与相应的SLAM建图算法

slam_gmapping建图

source /opt/bros/humble/setup.bash
ros2 launch br_localization slam_gmapping.launch.py

slam_toolbox建图

source /opt/bros/humble/setup.bash
ros2 launch br_localization slam_toolbox.launch.py

cartographer建图

source /opt/bros/humble/setup.bash
ros2 launch br_localization slam_cartographer.launch.py

PC端可视化

使用以上任一算法启动SLAM建图,PC端打开终端,运行键盘控制节点

sudo apt install ros-humble-teleop-twist-keyboard
source /opt/ros/humble/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard

打开一个新终端,运行以下命令启动rviz,通过键盘节点控制小车运动,即可在rviz中可视化查看建图效果

source /opt/ros/humble/setup.bash
source ~/ros2_demo_ws/install/setup.bash
ros2 launch br_visualization display_slam.launch.py

保存地图

建图完成后,SpaceMit板子打开终端运行以下命令,将构建的环境地图保存至br_navigation/map目录下

sudo apt install ros-humble-nav2-map-server
cd ~/opt/bros/humble/share/br_navigation/map
source /opt/bros/humble/setup.bash
ros2 run nav2_map_server map_saver_cli -t map -f spacemit_map1

成功运行后,我们可以得到以下两个文件

.
├── spacemit_map1.pgm
└── spacemit_map1.yaml

0 directories, 2 files

其中,spacemit_map1.pgm为地图文件,spacemit_map1.yaml为地图配置文件。

通过SLAM我们构建了机器人导航所需的环境地图信息,接下来即可配置navigation2进行导航。