(STVL) 使用外部代价地图插件

概述

本教程演示如何加载和使用外部插件。此示例使用 Spatio Temporal Voxel Layer (STVL) costmap pluginlib 插件为例。STVL是指示pluginlib插件的过程也可以用于其他costmap插件以及插件planners、控制器和回收率。 [待校准@1407]

在完成本教程之前,请查看前两个关于在仿真环境和使用实物的导航教程 (如果有)。本教程假设读者已具有对导航知识和代价地图的基本理解。 [校准@greg]

备注

对于2021年12月之前的Ubuntu 20.04用户,OpenVDB及其带有 libjmalloc 的二进制文件存在一个已知问题。如果您看到诸如 “无法加载库LoadLibrary错误: /usr/lib/x86_64-linux-gnu/libjemalloc” 之类的错误。so.2: 无法在静态TLS块” 中分配内存,可以使用 export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 解析,直到OpenVDB释放新的二进制文件。 [待校准@1409]

代价地图2D和STVL [待校准@1410]

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

但是,这些只是基本实现提供的示例插件。导航2中代价地图2D的另一个可用插件是STVL。 [待校准@1412]

STVL是另一个3D感知插件类似体素层。更详细地概述如何它可以发现 in this repo ,但缓冲区3D数据深度相机,声纳,雷达,进入稀疏充气世界模型和删除像素时间比例传感器模型和基于时间过期。这可以有效机器人高动态马氏键方面降低资源利用3D传感器加工高达2x。STVL也对待3D激光雷达和雷达作为一等公民支持。的ROSCon聊STVL可以发现 in this video[待校准@1413]

Tutorial Steps

0-设置

遵循相同的过程在 入门 安装和设置机器人硬件测试或仿真适用。确保ROS 2,Navigation2,Gazebo安装。 [待校准@1415]

1-安装STVL [待校准@1416]

STVL可以安装ROS 2通过ROS构建农场: [待校准@1417]

  • sudo apt install ros-<ros2-distro>-spatio-temporal-voxel-layer [待校准@1418]

也可以通过将存储库克隆到您的Navigation2工作区中来从源代码构建它: [待校准@1419]

  • git clone -b <ros2-distro>-devel git@github.com:stevemacenski/spatio_temporal_voxel_layer [待校准@1420]

1- 修改Navigation2参数

STVL是一个可选插件,像所有插件一样,在代价地图2D中。导航2中的代价地图插件被加载到它们各自的成本图中的 plugin_namesplugin_types 变量中。例如,下面将静态和障碍层插件分别加载到名称 static_layerobstacle_layer 中: [待校准@1422]

global_costmap:
  global_costmap:
    ros__parameters:
      use_sim_time: True
      plugin_names: ["static_layer", "obstacle_layer"] # For Eloquent and earlier
      plugins: ["static_layer", "obstacle_layer"] # For Foxy and later
      plugin_types: ["nav2_costmap_2d::StaticLayer", "nav2_costmap_2d::ObstacleLayer"] # For Eloquent and earlier

备注

用Galactic或后, plugin_namesplugin_types 替换单个 plugins string载体插件名称。类型现在定义在 plugin_name 命名空间 ''plugin: `` field (e.g. `` 插件: MyPlugin: Plugin'')。内联注释代码块将帮助您通过这个。 [待校准@1423]

加载STVL插件,插件名称和类型必须添加。例如,如果应用需要STVL层无障碍层,文件将: [待校准@1424]

global_costmap:
  global_costmap:
    ros__parameters:
      use_sim_time: True
      plugin_names: ["static_layer", "stvl_layer"] # For Eloquent and earlier
      plugins: ["static_layer", "stvl_layer"] # For Foxy and later
      plugin_types: ["nav2_costmap_2d::StaticLayer", "spatio_temporal_voxel_layer/SpatioTemporalVoxelLayer"] # For Eloquent and earlier

类似体素层,后注册插件,我们可以添加配置STVL层命名空间 stvl_layer 。为例全描述参数化的STVL配置: [待校准@1425]

stvl_layer:
  plugin: "spatio_temporal_voxel_layer/SpatioTemporalVoxelLayer" # For Foxy and later
  enabled: true
  voxel_decay: 15.
  decay_model: 0
  voxel_size: 0.05
  track_unknown_space: true
  max_obstacle_height: 2.0
  unknown_threshold: 15
  mark_threshold: 0
  update_footprint_enabled: true
  combination_method: 1
  origin_z: 0.0
  publish_voxel_map: true
  transform_tolerance: 0.2
  mapping_mode: false
  map_save_duration: 60.0
  observation_sources: pointcloud
  pointcloud:
    data_type: PointCloud2
    topic: /intel_realsense_r200_depth/points
    marking: true
    clearing: true
    obstacle_range: 3.0
    min_obstacle_height: 0.0
    max_obstacle_height: 2.0
    expected_update_rate: 0.0
    observation_persistence: 0.0
    inf_is_valid: false
    voxel_filter: false
    clear_after_reading: true
    max_z: 7.0
    min_z: 0.1
    vertical_fov_angle: 0.8745
    horizontal_fov_angle: 1.048
    decay_acceleration: 15.0
    model_type: 0

请将上面带有 plugin_namesplugin_types 注册的文本复制粘贴到您的 nav2_params.yaml 中,以便在您的应用程序中启用STVL。确保同时更改本地和全球成本图。 [待校准@1426]

注意: Pluginlib插件其他Navigation2服务器规划、恢复和控制可以设置一样。 [待校准@1427]

2-Launch Navigation2

遵循相同的过程在 入门 启动模拟机器人凉亭Navigation2.Navigation2现在使用STVL为3D传感costmap层。 [待校准@1429]

3- RVIZ

带RViz开放 ”publish_voxel_map: true'',可以可视化底层数据结构的3D网格使用” {本地,全球} _ costmap/voxel_grid ”主题。注意: 建议在RViz设置 PointCloud2 大小你体素大小和风格 Boxes 中性色最佳可视化。 [待校准@1431]