主要内容

controllerVFH3D

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

描述

controllerVFH3DSystem object™通过使用3D矢量场直方图(3DVFH),使无人机能够基于传感器数据避开障碍物。物体使用基于传感器数据的障碍物位置、UAV位置、UAV方向和目标位置计算无障碍方向。

controllerVFH3D使用3DVFH+算法计算无障碍方向。

找到一个没有障碍的方向:

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

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

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

创建

描述

例子

vfh3D= controllerVFH3D返回一个三维矢量场直方图对象,vfh3D,它使用3DVFH+算法计算所需方向、所需偏航和状态输出。

vfh3D= controllerVFH3D (名称=值返回一个矢量字段直方图对象,其属性由一个或多个名称-值参数指定。未指定的属性保留其默认值。

属性

全部展开

除非另有说明,否则属性是nontunable,这意味着在调用对象之后不能更改它们的值。对象在调用时被锁定,而释放函数将它们解锁。

如果一个属性可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见利用系统对象在MATLAB中进行系统设计

直方图网格分辨率,指定为13.5610151830.45,或60。所有的值都是度数。

例子:HistogramResolution = 10

数据类型:|

直方图窗口大小,指定为正奇数。直方图窗口大小决定了无障碍开口在方位角和高程方向上的角宽度。这个值是无单位的。

例子:WindowSize = 3

数据类型:|

计算直方图的阈值,指定为正整数。此值指定直方图单元格中必须存在的最小障碍点数,以便将该单元格视为障碍。如果一个单元格包含的障碍点少于这个数目,则认为该单元格无障碍。

例子:HistogramThreshold = 2

数据类型:|

记住的障碍点的最大年龄,指定为数字标量。该值指定对象在当前步骤之前记住障碍物点的时间步数。

例子:MaxAge = 1

数据类型:|

范围传感器的极限,指定为形式的矢量最小值马克斯,单位为米。

例子:DistanceLimits = 0.3 [15]

数据类型:|

水平视场的范围传感器的限制,指定为矢量的形式最小值马克斯,用度数表示。

例子:HorizontalSensorFOV = 50 [-50]

数据类型:|

垂直视场限制的范围传感器,指定为矢量的形式最小值马克斯,用度数表示。

例子:VerticalSensorFOV = 20 [-20]

数据类型:|

传感器安装在无人机上的位置,以矢量的形式指定xyz,单位为米。

例子:SensorLocation=[0 0 0]

数据类型:|

传感器安装在无人机上的方向,指定为矢量的形式球场偏航,用度数表示。

例子:SensorOrientation=[0 0 0]

数据类型:|

无人机的半径,以米为单位的数字标量指定。该值指定可以限定无人机的最小圆的半径。该对象在计算无障碍方向时使用车辆半径来考虑车辆大小。

例子:VehicleRadius = 0.5

数据类型:|

无人机与障碍物之间的安全距离,以米为单位的数字标量表示。除了车辆半径之外,该值还指定了无人机和障碍物之间的空间。该目标同时使用车辆半径和安全距离来计算无障碍方向。

例子:SafetyDistance = 2

数据类型:|

在目标方向上移动的代价函数权重,用数字标量指定。要优先考虑遵循目标方向,请将此权重设置为大于之和的值CurrentDirectionWeightPreviousDirectionWeight。若要在代价函数中不考虑目标方向,请将此权重设置为0

例子:TargetDirectionWeight = 0

数据类型:|

在当前方向上移动的代价函数权重,指定为数字标量。该权重值越高,可以产生更有效的路径。若要在代价函数中不考虑当前方向,请将此权重设置为0

例子:CurrentDirectionWeight = 0

数据类型:|

在前一个方向上移动的代价函数权重,以数字标量指定。该权重值越高,产生的路径越平滑。若要从成本函数中删除前一个方向,请将此权重设置为0

例子:PreviousDirectionWeight = 1

数据类型:|

使用

描述

例子

desiredDirectiondesiredYaw状态= vhf3D(位置取向obstaclePointstargetPosition使用3DVFH+算法,为输入无人机位置、无人机方向、基于传感器数据的障碍物位置和目标位置寻找无障碍方向和偏航。该语法还返回状态状态无障碍的方向。

输入参数

全部展开

UAV的位置,指定为形式的矢量xyz,单位是米。

例子:(1;1;1]

数据类型:|

UAV的方向,指定为形式的四元数向量wxyz

例子:(1;0;0;0]

数据类型:|

障碍物的位置,用an表示N- × 3矩阵,行是这样的xyz,单位是米。N为障碍点的数量。

例子:[1 1 1];[22]

数据类型:|

目标位置,以形式的矢量指定xyz,单位是米。

例子:[2;3;4)

数据类型:|

输出参数

全部展开

期望的方向,作为形式的矢量返回xyz,单位是米。

数据类型:|

所需偏航,作为范围内的数字标量返回(π-π,),单位为弧度。

数据类型:|

无障碍方向的状态,返回为012,或3.

  • 0—物体找到一个无障碍的方向。

  • 1—物体没有找到一个无障碍的方向。

  • 2—物体找到一个无障碍物的方向,但该方向靠近障碍物。

  • 3.—物体没有找到无障碍方向,且该方向接近障碍物。

数据类型:uint8

对象的功能

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

发行版(obj)

全部展开

显示 显示3D矢量场直方图
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特性
重置 的内部状态复位系统对象

例子

全部折叠

创建一个controllerVFH3D对象。

vfh3D = controllerVFH3D;

制造障碍。

Az = [-60:-20 20:60]*(pi/180);El = (-30:30)*(pi/180);[El,Az] = meshgrid(El,Az);

指定障碍物到传感器的距离,并转换为笛卡尔坐标。

obstledist = linspace(15,20,numel(:)));[xSensor,ySensor,zSensor] = sph2cart(Az(:),El(:), obstledist ');

对齐传感器和直方图帧。

vfh3D。SensorOrientation = [-180 0 0];

指定传感器范围限制。

vfh3D。DistanceLimits = [0.2 25];

指定当前UAV的位置和方向、障碍物的位置和UAV的目标位置。

uavPosition = [0;0;0);uavOrientation = [1;0;0;0);sensorPoints = [xSensor ySensor zSensor];targetPosition = [20;0; 0];

计算无人机的无障碍方向和期望偏航,并返回无障碍方向的状态。

[desiredDirection, desireddyaw,status] = vfh3D(uavPosition,...uavOrientation,...sensorPoints,...targetPosition);

可视化计算方向的默认直方图。

显示(vfh3D)轴平等的

图包含一个轴对象。标题为3D Histogram的轴对象包含11个类型为patch, line的对象。这些对象表示期望方向,上一个方向,当前方向。

可视化2D内存直方图、2D膨胀直方图和成本矩阵。

图ax(1) = subplot(3,1,1);Ax (2) = subplot(3,1,2);Ax (3) = subplot(3,1,3);显示(vfh3D...父母= ax,...PlotsToShow = [“二维记忆直方图”“2D膨胀直方图”“成本矩阵”])轴(ax,“平等”) xlim (ax,“紧”

图中包含3个轴对象。标题为2D Memory Histogram的坐标轴对象1包含113个类型为line, patch的对象。这些对象表示Desired, Target。标题为2D膨胀直方图的轴对象2包含113个类型为line, patch的对象。这些对象表示Desired, Target。标题为成本矩阵的轴对象3包含112个类型为line, patch的对象。该对象表示最小值。

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

在R2022b中引入

另请参阅

对象

功能

Baidu
map