(STVL)使用外部 Costmap 插件

概述

本教程展示了如何加载和使用外部插件。 本示例使用 Spatio Temporal Voxel Layer (STVL) costmap pluginlib 插件作为示例。 STVL 是一个演示性的 pluginlib 插件,其他 costmap 插件以及插件规划器、控制器和行为可以遵循相同的过程。

在完成本教程之前,请查看前两个关于模拟和物理硬件导航的教程(如果有)。 本教程假设您了解导航并对 costmap 有基本的了解。

Note

对于 2021 年 12 月之前的 Ubuntu 20.04 用户,OpenVDB 及其二进制文件存在 libjmalloc 的已知问题。如果您看到诸如 Could not load library LoadLibrary error: /usr/lib/x86_64-linux-gnu/libjemalloc.so.2: cannot allocate memory in static TLS block``之类的错误,则可以使用 ``export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 来解决,直到 OpenVDB 发布新的二进制文件。

Costmap2D and STVL

Costmap 2D 是我们用来将传感器信息缓冲到全局视图中的数据对象,机器人将使用该数据对象来制定计划和控制工作。 在 Costmap2D 中,有 pluginlib 插件接口可用于创建可在运行时加载的自定义行为。 Costmap2D 包含的 pluginlib 插件示例包括障碍物层、体素层、静态层和膨胀层。

但是,这些只是基本实现提供的示例插件。 Navigation2 中另一个可用于 Costmap2D 的 pluginlib 插件是 STVL。

STVL 是另一个类似于体素层的 3D 感知插件。 有关其工作原理的更详细概述可以在 此 repo 中找到,但是它将来自深度相机、声纳、激光雷达等的 3D 数据缓冲到稀疏体积世界模型中,并随着时间的推移与传感器模型和基于时间的到期成比例地移除体素。 这对于高度动态环境中的机器人特别有用,并将 3D 传感器处理的资源利用率降低多达 2 倍。 STVL 还将 3D 激光雷达和雷达视为支持的一等公民。 STVL 的 ROSCon 演讲可以在 此视频 中找到。

教程步骤

0- 设置

按照与 入门指南 中相同的流程安装和设置机器人以进行硬件测试或模拟(如适用)。确保已安装 ROS 2、Navigation2 和 Gazebo。

1- 安装STVL

STVL 可以通过 ROS Build Farm 安装在 ROS 2 中:

  • sudo apt install ros-<ros2-distro>-spatio-temporal-voxel-layer

它也可以通过将存储库克隆到 Navigation2 工作区来从源代码构建:

  • git clone -b <ros2-distro>-devel git@github.com:stevemacenski/spatio_temporal_voxel_layer

2- 启动 Navigation2

按照与 入门指南 中相同的过程,使用 Navigation2 在 Gazebo 中启动模拟机器人。 Navigation2 现在使用 STVL 作为其 3D 感知成本图层。

3- RVIZ

在 RViz 打开且 publish_voxel_map: true 的情况下,您可以使用 {local, global}_costmap/voxel_grid 主题可视化底层数据结构的 3D 网格。 注意:建议在 RViz 中将 PointCloud2 大小设置为您的体素大小,并将样式设置为具有中性色的 Boxes ,以获得最佳可视化效果。