主要内容

控制服务

避免使用矢量场直方图

描述

控制服务System Object™使您的车辆能够使用矢量场直方图(VFH)避免基于范围传感器数据的障碍。给定激光扫描读数和朝向目标的目标方向,对象计算无障碍的转向方向。

控制服务专门使用VFH+算法来计算无障碍方向。首先,该算法从激光扫描数据中获取范围和角度,并为障碍物位置构建极性直方图。然后,使用输入直方图阈值来计算指示占据和自由方向的二进制直方图。最后,该算法计算一个蒙版直方图,该直方图是根据车辆的最小转圈从二元直方图计算的。

该算法根据开放空间和可能的驱动方向选择多个转向说明。具有与先前,当前和目标方向相对应的重量功能,可以计算不同可能的方向的成本。然后,该物体以最低的成本返回无障碍方向。使用无障碍方向,您可以输入命令以朝着该方向移动车辆。

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

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

  1. 创建控制服务对象并设置其属性。

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

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

创建

描述

例子

VFH= ContranceervFH返回一个矢量字段直方图对象,该对象可以使用VFH+算法。

VFH= contrantervFH(姓名,,,,价值返回一个矢量字段直方图对象,其中一个或多个指定的其他选项名称,价值成对。名称是属性名称,值是相应的值。名称必须出现在单引号中('')。您可以按任何顺序指定几个名称值对参数NAME1,Value1,...,Namen,Valuen。未指定的属性保留其默认值。

特性

展开全部

向量场直方图中的角扇区数量,指定为标量。该属性定义了用于创建直方图的垃圾箱的数量。该属性是不可荷的。您只能在初始化对象时设置此。

范围读数的限制,指定为2个元素向量,其元素以米为单位。仅当对象落在距离限制之内时,请考虑调用对象时指定的范围读数。使用较低距离极限忽略较低范围传感器性能的误报。使用上限忽略离车辆太远的障碍物。

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

车辆周围的安全距离,指定为标量米。这是一个安全距离,除了值的值外,Robotradius范围。车辆半径和安全距离的总和用于计算无障碍方向。

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

朝目标方向移动的成本函数重量,指定为标量。要遵循目标方向,将此重量设置为高于当前重量级前重量级特性。要忽略目标方向成本,请将此重量设置为零。

成本函数重量用于在当前的标量方向上移动机器人,该方向指定为标量。该体重的较高值会产生有效的路径。要忽略当前方向成本,请将此重量设置为零。

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

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

利用利达尔扫作为扫描输入的对象,指定为真的或者错误的

用法

描述

例子

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

要启用此语法,您必须设置Uselidarscan财产为真的。例如:

mcl =蒙特卡洛定位('Uselidarscan',真的);...[iSuped,姿势,协方差] = mcl(odompose,扫描);

Steeringdir= vfh(范围,,,,角度,,,,TargetDir用两个向量定义激光扫描:范围角度

输入参数

展开全部

激光扫描读数,指定为利达尔扫目的。

依赖性

要使用此参数,您必须设置Uselidarscan财产为真的

mcl.uselidarscan = true;

扫描数据的范围值,指定为米为米。这些范围值是在给定的传感器的距离角度。向量必须与相应的长度相同角度向量。

扫描数据的角度值,指定为弧度中的向量。这些角度值是给定的特定角度范围。向量必须与相应的长度相同范围向量。

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

输出参数

展开全部

车辆的转向方向,指定为弧度标量。该无障碍方向是根据VFH+算法计算的。车辆的向前方向被认为是零弧度,逆时针逆时针测得。

对象功能

要使用对象函数,请将系统对象指定为第一个输入参数。例如,释放名称的系统对象的系统资源OBJ,使用此语法:

释放(OBJ)

展开全部

节目 展示矢量场组织图图窗口中的信息
系统对象算法
发布 释放资源并允许更改系统对象属性值和输入特征
重置 重置内部状态系统对象

例子

全部收缩

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

创建一个控制服务目的。设置Uselidarscan财产为真的

vfh = contrantervFH;vfh.uselidarscan = true;

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

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

创建一个利达尔扫通过指定范围和角度来对象。

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

计算无障碍的转向方向。

SteeringDir = VFH(扫描,targetDir);

可视化矢量场组织图计算。

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

参考

[1] Borenstein,J。和Y. Koren。“矢量场直方图 - 移动机器人的快速障碍物避免。”IEEE机器人和自动化杂志。卷。7,第3期,1991年,第278-88页。

[2] Ulrich,I。和J. Borenstein。“ VFH:快速移动机器人的可靠障碍。”程序。1998 IEEE机器人技术国际会议。(1998):1572–1577。

扩展功能

版本历史记录

在R2019b中引入