< >
Home » ROS与navigation教程 » ROS与navigation教程-obstacle层

ROS与navigation教程-obstacle层

ROS与navigation教程-obstacle层

说明:

  • 介绍obstacle层的概念和相关知识。

概要

  • obstacle和voxel层包含了 PointClouds 或者 LaserScans 形式的传感器消息。

  • 障碍物层用于二维追踪,体素层用于三维追踪。

Marking and Clearing

  • 代价地图自动订阅传感器主题并自动更新。

  • 每个传感器用于标记操作(将障碍物信息插入到代价地图中),清除操作(从代价地图中删除障碍物信息)或两者操作都执行。

  • 如果使用的是体素层,每一列上的障碍信息需要先进行投影转化成二维之后才能放入代价地图中。

ROS API

( 1 ) Subscribed Topics

<point_cloud_topic> ([sensor_msgs/PointCloud][3]) 
  • 对于observe_sources参数列表中列出的每个“PointCloud”源,其信息用于更新代价地图。
<point_cloud2_topic> ([sensor_msgs/PointCloud2][4]) 
  • 对于observe_sources参数列表中列出的每个“PointCloud2”源,其信息用于更新代价地图。
<laser_scan_topic> ([sensor_msgs/LaserScan][5]) 
  • 对于observe_sources参数列表中列出的每个“LaserScan”源,其信息用于更新代价地图。

    "map" (nav_msgs/OccupancyGrid)

  • 代价地图可以从用户生成的静态地图中进行初始化(参考static_map参数)。

  • 如果选择此选项,则costmap将调用map_server以获取此地图。

( 2 ) Sensor management parameters

~<name>/observation_sources (string, default: "") 
  • 观察源列表以空格分割表示,定义了下面参数中每一个 <source_name> 命名空间。

observe_sources中的每个source_name定义了可设置参数的命名空间:

~<name>/<source_name>/topic (string, default: source_name) 
  • 传感器数据来源的话题。

  • 默认为该源的名称。

~<name>/<source_name>/sensor_frame (string, default: "") 
  • 指定传感器原点坐标系。

  • 默认设为空,则从传感器数据读取坐标系。

  • 可以从sensor_msgs / LaserScan,sensor_msgs / PointCloud和sensor_msgs / PointCloud2消息读取该坐标系。

~<name>/<source_name>/observation_persistence (double, default: 0.0) 
  • 传感器读数保存多长时间,单位为 seconds 。

  • 若设为0.0,则为保存最新读数信息。

~<name>/<source_name>/expected_update_rate (double, default: 0.0) 
  • 读取传感器数据的频率,单位为 seconds 。

  • 若设为0.0,则为不断续地读取传感器数据。

  • 当传感器发生故障时,该参数用作故障保护来让导航堆栈不能命令机器人。其应该被设置为比传感器的实际速率稍多的值。

  • 如果每0.05秒进行一次激光扫描,可以将此参数设置为0.1秒,以提供大量的缓冲区并占用一定的系统延迟。

~<name>/<source_name>/data_type (string, default: "PointCloud") 
  • 指定主题相关的数据类型, 目前可用数据类型有 "PointCloud", "PointCloud2", 和 "LaserScan"。
~<name>/<source_name>/clearing (bool, default: false) 
  • 这种观察源是否应用于清除自由空间。
~<name>/<source_name>/marking (bool, default: true) 
  • 这种观察源是否应用于标记障碍。
~<name>/<source_name>/max_obstacle_height (double, default: 2.0) 
  • 传感器读数的最大有效高度,单位为 meters。

  • 通常设置为略高于机器人的高度。将此参数设置为大于全局max_obstacle_height参数的值,则为无效;设置为小于全局max_obstacle_height的值将过滤掉高于该高度的该传感器的点。

~<name>/<source_name>/min_obstacle_height (double, default: 0.0) 
  • 传感器读数的最大有效高度,单位为 meters。

  • 传感器读数的最小高度(以米为单位)被认为有效。 这通常设置为地面高度,但可以根据传感器的噪声模型设置更高或更低。

~<name>/<source_name>/obstacle_range (double, default: 2.5) 

-将障碍物插入代价地图的最大范围,单位为 meters 。

~<name>/<source_name>/raytrace_range (double, default: 3.0) 
  • 从地图中扫描出障碍物的最大范围,单位为 meters 。
~<name>/<source_name>/inf_is_valid (bool, default: false) 
  • 允许使用在“LaserScan”观察消息中的值。

  • Inf值被转换为激光最大范围。

  • Allows for Inf values in "LaserScan" observation messages. The Inf values are converted to the laser maximum range.

( 3 ) Global Filtering Parameters

以下参数适用于所有传感器。

~<name>/max_obstacle_height (double, default: 2.0) 
  • 插入代价地图中的障碍物的最大高度,单位为 meter 。

  • 该参数应设置为略高于机器人的高度。

~<name>/obstacle_range (double, default: 2.5) 
  • 距离机器人的默认最大距离,以该距离为半径的范围来为代价地图插入障碍物,单位为 meters 。

  • 这可以在每个传感器的基础上进行覆盖。

~<name>/raytrace_range (double, default: 3.0) 
  • 从地图中扫描出障碍物的默认范围,单位为 meters 。

  • 这可以在每个传感器的基础上进行覆盖。

( 4 ) ObstacleCostmapPlugin

以下参数适用于ObstacleCostmapPlugin

~<name>/track_unknown_space (bool, default: false) 
  • 但若为 flase ,每个像素都有2个状态之一:lethal obstacle或自由;若为 ture ,每个像素都有3个状态之一:lethal obstacle,自由或未知。
~<name>/footprint_clearing_enabled (bool, default: true) 
  • 但若为 ture ,机器人会将其在移动中经过的空间标记为自由空间。

( 5 ) VoxelCostmapPlugin

以下参数适用于VoxelCostmapPlugin

~<name>/origin_z (double, default: 0.0)
  • The z resolution of the map in meters/cell.
~<name>/z_resolution (double, default: 0.2) 
  • The z resolution of the map in meters/cell.
~<name>/z_voxels (int, default: 10) 
  • The number of voxels to in each vertical column, the height of the grid is z_resolution * z_voxels.
~<name>/unknown_threshold (int, default: ~<name>/z_voxels) 
  • 在被认为是“known”的列中,允许存在的未知单元格的数量。

  • The number of unknown cells allowed in a column considered to be "known"

~<name>/mark_threshold (int, default: 0) 
  • The maximum number of marked cells allowed in a column considered to be "free".
~<name>/publish_voxel_map (bool, default: false) 
  • 是否发布底层的体素栅格,其主要用于可视化。

ObservationBuffer

costmap_2d :: ObservationBuffer用于从传感器接收点云,并使用tf将其转换为所需的坐标系,并将其存储直到它们被请求为止。大多数用户使用costmap_2d::Costmap2DROS自动创建的costmap_2d::ObservationBuffer即可满足需求,但为了某些特殊需求可能需要自己创建costmap_2d::ObservationBuffer。

( 1 ) API Stability

  • C++ API 是稳定的。

( 2 ) C++ API

  • 有关costmap_2d::ObservationBuffer类的C++文档,请参阅 ObservationBuffer

参考资料

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

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


标签: ros与navigation教程