TurtleBot3 ROS2入门教程-12.SLAM

笔记

ü SLAM应该在远程PC上运行。

ü 在执行任何操作之前,请确保在TurtleBot3上启动Bringup

SLAM(同步定位与地图构建)是一种通过估算任意空间中的当前位置来绘制地图的技术。本视频展示了TurtleBot3使用SLAM技术绘制地图的精确度。

运行SLAM节点

如果BringupTurtleBot3 SBC上未运行,请先启动Bringup。如果您之前已启动 Bringup,请跳过此步骤。

使用Ctrl+Alt+T从远程PC打开一个新终端,并使用其IP地址连接到Raspberry Pi。默认密码是ubuntu

ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}

请在burgerwafflewaffle_pi之间使用适当的关键字作为TURTLEBOT3_MODEL参数。

[TurtleBot3 SBC]

export TURTLEBOT3_MODEL=burger

ros2 launch turtlebot3_bringup robot.launch.py

使用Ctrl+Alt+T在远程电脑上打开一个新终端并启动SLAM节点。Cartographer是默认的SLAM方法。

[远程PC]

export TURTLEBOT3_MODEL=burger

ros2 launch turtlebot3_cartographer cartographer.launch.py

如何保存TURTLEBOT3_MODEL参数?

运行遥控节点

一旦SLAM节点成功启动并运行,TurtleBot3将使用远程操作探索地图上的未知区域。务必避免剧烈运动,例如过快地改变线速度和角速度。使用TurtleBot3 构建地图时,最好扫描地图的每个角落。

打开一个新终端,并从远程PC运行遥操作节点。请在burgerwafflewaffle_pi

之间使用适当的关键字作为TURTLEBOT3_MODEL参数。

[远程PC]

export TURTLEBOT3_MODEL=burger

ros2 run turtlebot3_teleop teleop_keyboard

Control Your TurtleBot3!

---------------------------

Moving around:

       w

  a    s    d

       x

 

w/x : increase/decrease linear velocity

a/d : increase/decrease angular velocity

space key, s : force stop

 

CTRL-C to quit

开始探索并绘制地图。

调优指南

ROS2中的SLAM使用Cartographer ROS,它通过Lua文件提供配置选项。

文件中定义了以下选项turtlebot3_cartographer/config/turtlebot3_lds_2d.lua。有关每个选项的更多详细信息,请参阅Cartographer ROS 官方文档。

MAP_BUILDER.使用_trajectory_builder_2d

此选项设置SLAM的类型。

轨迹构建器_2D.最小范围

此选项设置激光雷达传感器的最小可用范围。

轨迹生成器_2D.max_range

此选项设置激光雷达传感器的最大可用范围。

TRAJECTORY_BUILDER_2D.缺失数据射线长度

2D中,CartographerTRAJECTORY_BUILDER_2D.missing_data_ray_length替换超过 max_range 的范围。

轨迹生成器_2D.使用imu数据

如果您使用2D SLAM,则可以实时处理范围数据而无需额外的信息源,因此您可以选择是否希望Cartographer 使用IMU

TRAJECTORY_BUILDER_2D.使用在线相关扫描匹配

本地SLAM:可以根据传感器的可靠性切换RealTimeCorrelativeScanMatcher

TRAJECTORY_BUILDER_2D.运动过滤器.最大角度弧度

局部SLAM:为了避免在每个子图上插入太多扫描,如果运动不超过某个角度,则会丢弃扫描。

POSE_GRAPH.优化每个n个节点

全局SLAM:将 POSE_GRAPH.optimize_every_n_nodes 设置为0是禁用全局 SLAM并专注于本地SLAM行为的便捷方法。

POSE_GRAPH.constraint_builder.min_score

全局SLAM:扫描匹配分数的阈值,低于该阈值则不视为匹配。分数低表示扫描结果与地图看起来不相似。

POSE_GRAPH.constraint_builder.global_localization_min_score

全局SLAM:低于该阈值的全局定位将不受信任。

注:约束可以在RViz中可视化,这对于全局SLAM的调优非常方便。您还可以切换POSE_GRAPH.constraint_builder.log_matches以获取以直方图格式呈现的约束构建器定期报告。

保存地图

地图是根据机器人的里程计、延时和扫描信息绘制的。这些地图数据是在 TurtleBot3行驶过程中绘制在RViz窗口中的。在创建所需区域的完整地图后,将地图数据保存到本地驱动器以供后续使用。

启动nav2_map_server包中的map_saver_cli

节点来创建地图文件。地图文件保存在map_saver_cli节点启动的目录中。

除非指定特定文件名,否则将使用map作为默认文件名并创建map.pgmmap.yaml

[远程PC]

ros2 run nav2_map_server map_saver_cli -f ~/map

-f选项指定要保存文件的文件夹位置和文件名。

使用上述命令,map.pgm文件map.yaml将保存在主文件夹~/(/home/${username}) 中。

地图

地图采用ROS中常用的二维Occupancy Grid MapOGM)。保存的地图如下图所示,白色区域表示无碰撞区域,黑色区域表示已占用且无法进入的区域,灰色区域表示未知区域。此地图用于导航。

下图是使用TurtleBot3创建大地图的结果,创建一张行驶距离约350米的地图大约需要1个小时。