跳到主要内容

5.4.1 SLAM 建图

功能介绍​

SLAM 指即时定位与地图构建(Simultaneous Localization and Mapping,简称 SLAM)。 本章节使用 ROS2 的 SLAM-Toolbox 作为建图算法,在 Gazebo 中控制小车行驶建立地图,并通过 Rviz2 观察建图效果。 其中 SLAM-Toolbox 运行在 RDK 上,Gazebo 和 Rviz2 运行在与 RDK 同一网段的 PC 上。

支持平台​

平台运行方式
RDK X3, RDK X3 Module,Ubuntu 20.04 (Foxy), Ubuntu 22.04 (Humble)
RDK X5, RDK X5 ModuleUbuntu 22.04 (Humble)
RDK S100, RDK S100PUbuntu 22.04 (Humble)
RDK S600Ubuntu 24.04 (Jazzy)

准备工作​

RDK 平台​

  1. RDK 已烧录好 Ubuntu 系统镜像。

  2. RDK 已成功安装 TogetheROS.Bot。

  3. tros.b 成功安装后,安装 SLAM-Toolbox

# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
sudo apt-get install ros-${ROS_DISTRO}-slam-toolbox
信息

如果安装失败,并且报错如下:

  The following packages have unmet dependencies:
ros-foxy-slam-toolbox : Depends: ros-foxy-nav2-map-server but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

请执行以下命令后再安装:

apt update

sudo apt install libwebp6=0.6.1-2ubuntu0.20.04.3

注意

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q10: apt update 命令执行失败或报错如何处理? 解决。

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q10: apt update 命令执行失败或报错如何处理? 解决。

注意

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q6: apt update 命令执行失败或报错如何处理? 解决。

如果 sudo apt update 命令执行失败或报错,请查看常见问题章节的 Q6: apt update 命令执行失败或报错如何处理? 解决。

:::

  1. 和 RDK 在同一网段的 PC,PC 已安装 Ubuntu 系统、ROS2 桌面版和仿真环境 Gazebo,数据可视化工具 Rviz2。
source /opt/ros/foxy/setup.bash

Ubuntu 20.04 系统和ROS2 Foxy 桌面版

source /opt/ros/humble/setup.bash

Ubuntu 22.04 系统和ROS2 Humble 桌面版

source /opt/ros/jazzy/setup.bash

Ubuntu 24.04 系统和ROS2 Jazzy 桌面版

PC 的 ROS2 安装成功后安装 Gazebo 和 Turtlebot3 相关的功能包,安装方法为:

sudo apt-get install ros-${ROS_DISTRO}-gazebo-*
sudo apt install ros-${ROS_DISTRO}-turtlebot3
sudo apt install ros-${ROS_DISTRO}-turtlebot3-bringup
sudo apt install ros-${ROS_DISTRO}-turtlebot3-simulations
sudo apt install ros-${ROS_DISTRO}-teleop-twist-keyboard

使用介绍​

RDK 平台​

本小节介绍如何使用 RDK 运行 SLAM 算法,并使用 PC 观察建图效果。

PC 端启动仿真环境:

source /opt/ros/foxy/setup.bash
source /opt/ros/humble/setup.bash
source /opt/ros/jazzy/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
信息

如果启动失败,并且报错 [ERROR] [gzclient-2]: process has died ,请执行命令 source /usr/share/gazebo/setup.sh 后再启动。

仿真环境如下图所示:

SLAM 示例中 Gazebo 仿真环境启动后的场景

PC 端开启另外一个控制台,启动 Rviz2 用于观察建图效果:

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

打开 Rviz2 后,需要添加 “map” 可视化选项,用于展示建立的地图,步骤如下所示:

在 RViz2 中添加 map 可视化选项以展示建图结果的配置步骤

RDK 板端运行 SLAM-Toolbox:

# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
#启动SLAM launch文件
ros2 launch slam_toolbox online_sync_launch.py

PC 端开启另外一个控制台,PC 端启动控制工具,通过键盘控制小车运动,控制方法见控制台打印的 log,在此不再赘述:

source /opt/ros/foxy/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
source /opt/ros/humble/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
source /opt/ros/jazzy/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -p stamped:=True

控制小车行驶,随着小车雷达探测到更多的环境信息,SLAM 算法也建立起环境地图,可以在 Rviz2 上观察到建图效果。

小车行驶过程中 RViz2 上逐步建立的环境地图效果

结果分析​

在 RDK 板端运行终端输出如下信息:

[INFO] [launch]: All log files can be found below /root/.ros/log/2022-06-10-06-40-34-204213-ubuntu-5390
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [sync_slam_toolbox_node-1]: process started with pid [5392]
[sync_slam_toolbox_node-1] [INFO] [1654843239.403931058] [slam_toolbox]: Node using stack size 40000000
[sync_slam_toolbox_node-1] [INFO] [1654843240.092340814] [slam_toolbox]: Using solver plugin solver_plugins::CeresSolver
[sync_slam_toolbox_node-1] [INFO] [1654843240.096554433] [slam_toolbox]: CeresSolver: Using SCHUR_JACOBI preconditioner.
[sync_slam_toolbox_node-1] Info: clipped range threshold to be within minimum and maximum range!
[sync_slam_toolbox_node-1] [WARN] [1654843589.431524393] [slam_toolbox]: maximum laser range setting (20.0 m) exceeds the capabilities of the used Lidar (3.5 m)
[sync_slam_toolbox_node-1] Registering sensor: [Custom Described Lidar]