< >
Home » ROS2与Navigation2入门教程 » ROS2与Navigation2入门教程-使用外部的STVL成本地图插件进行导航

ROS2与Navigation2入门教程-使用外部的STVL成本地图插件进行导航

说明:

  • 介绍如何使用外部的STVL成本地图插件进行导航

概述:

  • 本教程将会说明如何加载和使用外部插件。

  • 本示例将会使用时空体素(即体积像素Volume Pixel)图层(STVL,Spatio Temporal Voxel Layer)成本地图插件库(pluginlib)插件作为示例。

  • 在本教程中,STVL 是一个示范性的插件库插件,其它成本地图插件以及规划器、控制器和恢复器插件都可以遵循相同的过程。

  • 在进行本教程之前,请阅读前面两个关于仿真和物理机器人硬件(如果有的话)导航的教程。

  • 本教程假定您具备导航知识和对成本地图有基本的了解。

Costmap2D和STVL

  • Costmap2D是用于将传感器信息缓冲到全局视图中的数据对象,机器人会使用该全局视图创建路径规划和控制工作。

  • 在Costmap2D中,有可用的插件库(pluginlib)插件界面来创建可在运行时加载的自定义行为。

  • Costmap2D中包含的插件库插件示例包括Obstacle Layer(障碍物图层)插件、Voxel Layer(体素图层)插件、Staic Layer(静态图层)插件和Inflation Layer(膨胀图层)插件。

  • 但是,这些只是Costmap2D基本实现中提供的示例插件。

  • Navigation2中Costmap2D的另一个可用插件库插件就是STVL。

  • STVL是另一个类似于Voxel Layer(体素图层)插件的3D感知插件。

  • 可以在这个存储库中找到有关其工作原理的更详细概述,而STVL会将来自深度相机、声纳、激光雷达等的3D数据缓冲到一个稀疏体积世界模型中,并且会随着时间流逝以与传感器模型和时间到期成比例地移除体素。

  • 这对位于高度动态环境中的机器人尤其有用,并且可以将3D传感器处理的资源利用率降低多达2倍。

  • STVL还对3D激光雷达和雷达提供最高级别的支持

具体步骤

  • 设置
  • 按照与“开始使用Nav2”教程中相同的过程安装和设置用于硬件测试(如果有硬件的话)或者仿真的机器人。
  • 请确保已经安装好了ROS 2、Navigation2和Gazebo软件。

安装STVL

  • 在ROS 2中,可以通过ROS Build Farm来安装STVL,命令为:
sudo apt install ros-<ros2-distro>-spatio-temporal-voxel-layer
  • 也可以从源代码编译构建STVL,这里采用源代码编译安装方法,这需要将其存储库克隆到您的Navigation2工作空间src目录中:
git clone https://github.com/SteveMacenski/spatio_temporal_voxel_layer.git --branch foxy-devel
  • 然后退回到src目录的上一级目录,并执行colcon build命令:
colcon build --symlink-install --packages-select spatio_temporal_voxel_layer
  • 编译安装过程中可能会提示尚未安装pcl_conversions和OpenVDB软件包,如果在本地机器上尚未安装这两个软件包的话。

  • 这样,需要先从源代码编译安装这两个软件包,其中pcl_conversions目前已经包含在perception_pcl元软件包中

  • 因此需要先编译安装其依赖包pcl_msgs然后再编译安装perception_pcl。

  • 而OpenVDB的安装方法可以在其官网https://www.openvdb.org/download/上找到,

  • 在Linux系统中从源代码编译安装的命令如下(先安装依赖包Boost、TBB和Blosc,再编译构建OpenVDB):

apt-get install -y libboost-iostreams-dev
apt-get install -y libboost-system-dev
apt-get install -y libtbb-dev
git clone https://github.com/Blosc/c-blosc.git
cd c-blosc
git checkout tags/v1.5.0 -b v1.5.0
mkdir build
cd build
cmake ..
make -j4
make install
cd ../..

git clone https://github.com/AcademySoftwareFoundation/openvdb.git
cd openvdb
mkdir build
cd build
cmake ..
make -j4
make install
  • 此时再执行colcon build命令来编译安装STVL就应该能成功了。

修改Navigation2参数

  • 在Costmap2D中,与所有其它插件一样,STVL也是一个可选插件。在ROS 2 Foxy及更高版本的发行版中,Navigation2中的成本地图插件是在其各自成本地图中以plugins变量(早期发行版则为plugin_names和plugin_types两个变量)来加载的。

  • 例如,下面的配置会分别将静态图层插件和障碍物图层插件加载到名称static_layer和obstacle_layer中:

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:
  • 对于Foxy发行版或者更高版本,plugin_names和 plugin_types已被替换为用于插件名称的单个plugins字符串向量。

  • 现在插件类型是在“plugins”字段的plugin_name命名空间中定义的(例如 plugin: MyPlugin::Plugin)。

  • 代码块中的行内注释将帮助指导您完成此一点。

  • 要加载STVL插件,必须添加新的插件名称和类型。

  • 例如,如果应用程序需要的是STVL图层而不是障碍物图层,则该文件将会如下所示:

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
  • 与体素图层插件Voxel Layer类似,注册该插件后,可以在命名空间stvl_layer下添加STVL图层插件的配置。
  • 一个STVL配置的完整描述参数化示例如下所示:
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
  • 请将上面配置中带有plugins(或者plugin_names和plugin_types)注册项的文本复制粘贴到您的nav2_params.yaml文件中,以在您的应用程序中启用 STVL。

  • 请确保同时更改该文件中的local_costmap和global_costmap部分。

  • Navigation2的其他服务器(如规划器、恢复器和控制器)的插件库插件也可以采用同样的方式进行设置。

启动Navigation2

  • 请按照与“开始使用Nav2”教程中相同的过程在启动Navigation2(启用SLAM制图功能)的同时在Gazebo中启动仿真机器人。
  • 启动命令为:
ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True
  • 现在Navigation2就会使用STVL作为其3D传感成本地图图层插件。

RVIZ

  • 在STVL配置中将publish_voxel_map字段设置为True的情况下,执行上面的命令打开RViz后,就可以使用RViz中的{local, global}_costmap/voxel_grid话题对底层数据结构的3D网格进行可视化。

  • 注意:建议在RViz中将PointCloud2大小设置为您的体素大小即size变量(上面的STVL完整参数配置示例中为0.05),并将样式(style)设置为具有中性颜色(例如[125,125,125])的“Boxes”以获得最佳的可视化效果。

参考: 

  • https://navigation.ros.org/tutorials/docs/navigation2_with_stvl.html

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与navigation2入门教程