controllerVFH

使用向量场直方图避免障碍物

描述

controllerVFHSystem Object™使您的车辆能够避免使用矢量字段直方图(VFH)基于范围传感器数据的障碍物。给定激光扫描读数和朝向的目标方向朝向,物体计算出无障碍的转向方向。

controllerVFH具体使用VFH +算法来计算无障碍方向。首先,该算法从激光扫描数据中获取范围和角度,并为障碍物位置构建极性直方图。然后,输入直方图阈值用于计算指示占用和自由方向的二进制直方图。最后,算法计算屏蔽直方图,基于车辆的最小转弯半径从二进制直方图计算。

该算法基于开路空间和可能的驱动方向选择多个转向方向。具有对应于先前的电流和目标方向的重量的成本函数计算不同可能的方向的成本。然后,对象以最小的成本返回无障碍方向。使用无障碍方向,您可以输入命令以将车辆移动到该方向。

要将此对象用于您自己的应用程序和环境,您必须调优算法的属性。属性值取决于车辆的类型、距离传感器和所使用的硬件。

找到一个无障碍的方向:

  1. 创建controllerVFH对象并设置其属性。

  2. 使用参数调用对象,就像它是一个函数。

要了解关于System对象如何工作的更多信息,请参见什么是系统对象?

创建

描述

例子

VFH= ContractervFH.返回一个矢量字段直方图对象,使用该对象计算无障碍的转向方向VFH +算法。

VFH= controllerVFH (名称价值返回一个向量字段直方图对象,该对象具有由一个或多个指定的附加选项名称,值对。名称是属性名称和值是相应的值。名称必须出现在单引号内('').可以按如下顺序指定几个名称-值对参数Name1, Value1,…,的家.未指定的属性保留其默认值。

特性

全部展开

矢量字段直方图中的角扇区数,指定为标量。此属性定义用于创建直方图的频体数。此属性是不可调音的。您只能在初始化对象时设置此项。

量程读数的极限,指定为以米为单位测量的2元矢量。调用对象时指定的范围读数只有在它们落在距离限制内时才被考虑。使用较低的距离限制忽略较低范围内传感器性能较差的假阳性。使用上限忽略离车辆太远的障碍物。

车辆的半径,单位是米,用标量表示。这个尺寸定义了可以包围您的车辆的最小圆。在计算无障碍方向时,车辆半径用于考虑车辆大小。

车辆周围的安全距离,以米为单位。这是在车辆周围留下的安全距离之外的位置值Robotradius.参数。车辆半径与安全距离之和用于计算无障碍方向。

以标量表示的以当前速度移动的车辆的最小转弯半径,单位为米。

成本函数重量用于向目标方向移动,指定为标量。要遵循目标方向,请将此重量设置为高于CurrentDirectionweight.PreviousDirectionWeight特性。要忽略目标方向成本,请将此权重设置为零。

机器人在当前方向上移动的代价函数权值,指定为标量。该权重值越高,产生的路径越有效。若要忽略当前的方向开销,请将该权值设置为零。

在以前选择的转向方向上移动的成本函数重量,指定为标量。这种重量的更高值会产生更平滑的路径。要忽略先前的方向成本,请将此权重设置为零。

二进制直方图计算的阈值,指定为2元素向量。该算法使用这些阈值来计算来自极性障碍密度的二进制直方图。高于上阈值的极性障碍物密度值在二进制直方图中表示为占用空间(1)。小于较低阈值的值表示为自由空间(0)。落在限制之间的值被设置为先前二进制直方图中的值,其中默认是自由空间(0)。

使用lidarScan对象作为扫描输入,指定为真正的或者

使用

描述

例子

转向迪尔= vfh (扫描TargetDir.使用VFH +算法为输入找到无障碍的转向方向lidarScan目的,扫描.基于目标位置给出目标方向。

要启用此语法,必须设置USELIDARSCAN.财产真正的.例如:

制程= monteCarloLocalization ('USELIDARSCAN',真的);......[ISUPDATED,POSE,协方差] = MCL(履历,扫描);

转向迪尔= vfh (范围TargetDir.用两个向量定义激光雷达扫描:范围

输入参数

全部展开

LIDAR扫描读数,指定为alidarScan目的。

依赖性

要使用此参数,必须设置USELIDARSCAN.财产真正的

恢复期。使用LidarScan = true;

扫描数据的范围值,指定为以米为单位的向量。这些范围值是来自给定的传感器的距离.这个向量必须和对应的向量一样长向量。

扫描数据的角度值,指定为以弧度为单位的矢量。这些角度值是给定的特定角度范围.这个向量必须和对应的向量一样长范围向量。

车辆的目标方向,以弧度为标量指定。车辆的向前方向被认为是零弧度,逆时针测量正方角。

输出参数

全部展开

用于车辆的转向方向,指定为弧度的标量。基于VFH +算法计算这种无障碍方向。车辆的向前方向被认为是零弧度,逆时针测量正方角。

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj,使用以下语法:

发行版(obj)

全部展开

表演 展示VectorFieldHistogram图形窗口中的信息
一步 跑步系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特性
重置 重置内部状态系统对象

例子

全部折叠

该示例显示了如何基于输入激光扫描数据计算转向方向。

创建一个controllerVFH目的。设定USELIDARSCAN.财产真正的

vfh = controllerVFH;vfh。使用LidarScan = true;

输入激光扫描数据和目标方向。

范围= 10 * =(1,500);范围(1,225:275)= 1.0;角度= linspace(-pi,pi,500);targetDir = 0;

创建一个lidarScan通过指定范围和角度来指定对象。

扫描= lidarScan(范围、角度);

计算无障碍转向方向。

steeringdir = vfh(扫描,targetdir);

可视化VectorFieldHistogram计算。

h =图;套(h,'位置',[50 50 800 400])显示(VFH)

参考

Borenstein, J.和Y. Koren。矢量场直方图-移动机器人快速避障IEEE机器人与自动化杂志。第7卷,第3期,1991,页278 - 88。

[2] Ulrich,I.和J. Borenstein。“VFH:快速移动机器人的可靠障碍避免。”诉讼程序。1998年IEEE机器人和自动化国际会议.(1998): 1572 - 1577。

扩展能力

在R2019B中介绍