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 Module | Ubuntu 22.04 (Humble) |
| RDK S100, RDK S100P | Ubuntu 22.04 (Humble) |
| RDK S600 | Ubuntu 24.04 (Jazzy) |
准备工作
RDK 平台
-
RDK 已烧录好 Ubuntu 系统镜像。
-
RDK 已成功安装 TogetheROS.Bot。
-
tros.b 成功安装后,安装 SLAM-Toolbox
- Foxy
- Humble
- Jazzy
# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
- Humble
# 配置tros.b环境
source /opt/tros/humble/setup.bash
- Jazzy
# 配置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
:::
- 和 RDK 在同一网段的 PC,PC 已 安装 Ubuntu 系统、ROS2 桌面版和仿真环境 Gazebo,数据可视化工具 Rviz2。
- Foxy
- Humble
- Jazzy
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 桌面版
- Humble
source /opt/ros/humble/setup.bash
Ubuntu 22.04 系统和ROS2 Humble 桌面版
- Jazzy
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 端启动仿真环境:
- Foxy
- Humble
- Jazzy
source /opt/ros/foxy/setup.bash
source /opt/ros/humble/setup.bash
source /opt/ros/jazzy/setup.bash
- Humble
source /opt/ros/humble/setup.bash
- Jazzy
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 后再启动。
仿真环境如下图所示:
PC 端开启另外一个控制台,启动 Rviz2 用于观察建图效果:
- Foxy
- Humble
- Jazzy
source /opt/ros/foxy/setup.bash
source /opt/ros/humble/setup.bash
source /opt/ros/jazzy/setup.bash
- Humble
source /opt/ros/humble/setup.bash
- Jazzy
source /opt/ros/jazzy/setup.bash
ros2 launch turtlebot3_bringup rviz2.launch.py
打开 Rviz2 后,需要添加 “map” 可视化选项,用于展示建立的地图,步骤如下所示:
RDK 板端运行 SLAM-Toolbox:
- Foxy
- Humble
- Jazzy
# 配置tros.b环境
source /opt/tros/setup.bash
# 配置tros.b环境
source /opt/tros/humble/setup.bash
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
- Humble
# 配置tros.b环境
source /opt/tros/humble/setup.bash
- Jazzy
# 配置tros.b环境
source /opt/tros/jazzy/setup.bash
#启动SLAM launch文件
ros2 launch slam_toolbox online_sync_launch.py
PC 端开启另外一个控制台,PC 端启动控制工具,通过键盘控制小车运动,控制方法见控制台打印的 log,在此不再赘述:
- Foxy
- Humble
- Jazzy
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
- Humble
source /opt/ros/humble/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
- Jazzy
source /opt/ros/jazzy/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -p stamped:=True
控制小车行驶,随着小车雷达探测到更多的环境信息,SLAM 算法也建立起环境地图,可以在 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]