(STVL) 使用外部代价图插件
概述
本教程演示了如何加载和使用外部插件。该示例使用了`Spatio Temporal Voxel Layer <https://github.com/SteveMacenski/spatio_temporal_voxel_layer/>`_ (STVL)代价图`pluginlib <http://wiki.ros.org/pluginlib/>`_插件作为示例。STVL是一个演示性的pluginlib插件,同样的过程也适用于其他代价图插件以及插件规划器、控制器和行为。
在完成本教程之前,请查看之前的两个关于在仿真和实际硬件中导航的教程(如果有的话)。本教程假设您已经了解导航和基本的代价地图理解。
注解
对于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 和 STVL
Costmap 2D是我们用于将传感器信息缓冲到机器人将用于创建计划和控制工作的全局视图中的数据对象。在Costmap2D
然而,这些只是基本实现提供的示例插件。Navigation2 中 Costmap2D 的另一个可用的 pluginlib 插件是 STVL。
STVL是另一个类似于体素层(Voxel Layer)的3D感知插件。关于其工作原理的更详细概述可以在 该存储库中 找到。然而,它从深度相机、声纳、激光雷达等设备中缓冲3D数据,并将其存储为稀疏体素化的世界模型,通过传感器模型和基于时间的过期机制逐渐移除体素。这对于在高度动态环境中的机器人尤其有用,并且可以将3D传感器处理的资源利用率减少高达2倍。STVL还将3D激光雷达和雷达视为一等公民提供支持。有关STVL的ROSCon演讲可以在 该视频中 找到。
教程步骤
1- 安装 STVL
可以通过ROS Build Farm在ROS 2中安装STVL:
sudo apt install ros-<ros2-distro>-spatio-temporal-voxel-layer
也可以通过将存储库克隆到Navigation2工作空间并进行源代码编译来安装STVL:
git clone -b <ros2-distro>-devel git@github.com:stevemacenski/spatio_temporal_voxel_layer
3- RVIZ
在打开 RViz 并设置 publish_voxel_map: true 后,可以使用 {local, global}_costmap/voxel_grid 主题可视化底层数据结构的 3D 网格。注意:建议在 RViz 中将 PointCloud2 的大小设置为你的体素大小,并将样式设置为 Boxes,使用中性颜色进行最佳可视化。