主要内容

controllerVFH

使用矢量场直方图避开障碍物

描述

controllerVFH系统对象™使您的车辆能够使用矢量场直方图(VFH)根据距离传感器数据避开障碍物。给定激光扫描读数和目标方向,该物体计算一个无障碍的转向方向。

controllerVFH具体使用VFH+算法计算一个无障碍方向。首先,该算法从激光扫描数据中获取距离和角度,建立障碍物位置的极坐标直方图;然后,使用输入直方图阈值来计算指示占用方向和空闲方向的二进制直方图。最后,算法根据车辆转弯半径最小的二值直方图计算出屏蔽直方图。

该算法根据开放空间和可能的行驶方向选择多个转向方向。代价函数,其权重对应于前一个、当前和目标方向,计算不同可能方向的代价。然后该对象以最小的代价返回一个无障碍的方向。使用无障碍方向,您可以输入命令将车辆朝该方向移动。

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

要找到一个无障碍的转向方向:

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

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

例子

VFH= controllerVFH方法计算无障碍转向方向的向量场直方图对象VFH +算法。

VFH= controllerVFH (的名字价值返回一个向量字段直方图对象,其中包含一个或多个指定的附加选项名称,值对。Name是属性名,Value是对应的值。名称必须出现在单引号内(' ').您可以以任意顺序指定多个名称-值对参数Name1, Value1,…,的家.未指定的属性保留其默认值。

属性

全部展开

矢量场直方图中的角扇区数,指定为标量。此属性定义用于创建直方图的箱的数量。此属性不可调。只能在对象初始化时设置此值。

范围读数的极限,指定为2元素向量,元素以米为单位。当调用对象时指定的范围读数仅在距离限制内时才会被考虑。使用较低的距离限制来忽略较低范围内传感器性能差造成的假阳性。使用上限来忽略距离车辆太远的障碍物。

车辆的半径,以米为单位,指定为标量。这个维度定义了可以限定车辆的最小圆。在计算无障碍方向时,车辆半径用于考虑车辆尺寸。

车辆周围的安全距离,以米为单位的标量指定。这是车辆周围留下的安全距离值之外的位置RobotRadius参数。利用车辆半径与安全距离之和来计算无障碍方向。

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

向目标方向移动的代价函数权重,指定为标量。若要遵循目标方向,请将此权重设置为高于各权重的和CurrentDirectionWeight而且PreviousDirectionWeight属性。若要忽略目标方向成本,请将此权重设置为零。

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

在先前选定的转向方向上移动的成本函数权重,指定为标量。该权重值越高,路径越平滑。要忽略之前的方向代价,请将此权重设置为零。

用于二进制直方图计算的阈值,指定为2元素向量。该算法使用这些阈值来计算极性障碍密度的二元直方图。在二元直方图中,高于上阈值的极性障碍密度值表示为已占用空间(1)。小于下限阈值的值表示为空闲空间(0)。介于下限之间的值设置为前面的二进制直方图中的值,默认为空闲空间(0)。

使用lidarScan对象作为扫描输入,可以任意指定真正的

使用

描述

例子

steeringDir= vfh (扫描targetDir使用VFH+算法为输入找到一个无障碍的转向方向lidarScan对象,扫描.根据目标位置给出目标方向。

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

mcl = monteCarloLocalization(“UseLidarScan”,真正的);...[isUpdated,pose,covariance] = mcl(odomPose,scan);

steeringDir= vfh (范围targetDir用两个向量定义激光雷达扫描:范围而且

输入参数

全部展开

激光雷达扫描读数,指定为alidarScan对象。

依赖关系

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

恢复期。使用LidarScan = true;

扫描数据的范围值,指定为以米为单位的矢量。这些范围值是到给定传感器的距离.向量的长度必须与对应的向量相同向量。

来自扫描数据的角度值,以弧度为单位指定为矢量。这些角度值是给定物体的特定角度范围.向量的长度必须与对应的向量相同范围向量。

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

输出参数

全部展开

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

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

显示 显示VectorFieldHistogram图窗口信息
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

本例展示了如何根据输入激光扫描数据计算转向方向。

创建一个controllerVFH对象。设置UseLidarScan财产真正的

vfh =控制器vfh;vfh。使用LidarScan = true;

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

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

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

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

计算一个无障碍转向方向。

steeringDir = vfh(扫描,targetDir);

可视化VectorFieldHistogram计算。

H =数字;集(h,“位置”,[50 50 800 400]) show(vfh)

参考文献

[1]博伦斯坦,J.和Y.科伦。矢量场直方图——移动机器人快速避障IEEE机器人与自动化杂志。第7卷第3期,1991年,第278 - 88页。

[2]乌尔里希,我,和J.博伦斯坦。VFH:快速移动机器人的可靠避障1998年IEEE机器人与自动化国际会议论文集.(1998): 1572 - 1577。

扩展功能

版本历史

R2019b引入