Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

controllerVFH

Evite obstáculos usando el histograma de campo vectorial

Desde R2019b

Descripción

El controllerVFH System object™ permite que su vehículo evite obstáculos según los datos del sensor de distancia utilizando histogramas de campo vectorial (VFH). Dadas las lecturas del escaneo láser y una dirección objetivo hacia la cual conducir, el objeto calcula una dirección de dirección libre de obstáculos.

controllerVFH utiliza específicamente el algoritmo VFH+ para calcular una dirección libre de obstáculos. Primero, el algoritmo toma los rangos y ángulos de los datos del escaneo láser y construye un histograma polar para las ubicaciones de los obstáculos. Luego, los umbrales del histograma de entrada se utilizan para calcular un histograma binario que indica las direcciones ocupadas y libres. Finalmente, el algoritmo calcula un histograma enmascarado, que se calcula a partir del histograma binario en función del radio de giro mínimo del vehículo.

El algoritmo selecciona múltiples direcciones de dirección en función del espacio abierto y las posibles direcciones de conducción. Una función de coste, con ponderaciones correspondientes a las direcciones anterior, actual y objetivo, calcula el coste de diferentes direcciones posibles. Luego, el objeto regresa a una dirección libre de obstáculos con un coste mínimo. Usando la dirección libre de obstáculos, puede ingresar comandos para mover su vehículo en esa dirección.

Para utilizar este objeto para su propia aplicación y entorno, debe ajustar las propiedades del algoritmo. Los valores de las propiedades dependen del tipo de vehículo, el sensor de distancia y el hardware que utilice.

Para encontrar una dirección de dirección libre de obstáculos:

  1. Cree el objeto controllerVFH y establezca sus propiedades.

  2. Llame al objeto con argumentos, como si fuera una función.

Para obtener más información sobre cómo funcionan los System objects, consulte What Are System Objects?

Creación

Descripción

ejemplo

VFH = controllerVFH devuelve un objeto de histograma de campo vectorial que calcula la dirección de dirección libre de obstáculos utilizando el algoritmo VFH+ .

VFH = controllerVFH(Name,Value) devuelve un objeto de histograma de campo vectorial con opciones adicionales especificadas por uno o más pares Name,Value . Name es el nombre de la propiedad y Value es el valor correspondiente. El nombre debe aparecer entre comillas simples (' '). Puede especificar varios argumentos de pares nombre-valor en cualquier orden como Name1,Value1,...,NameN,ValueN. Las propiedades no especificadas conservan sus valores predeterminados.

Propiedades

expandir todo

Número de sectores angulares en el histograma del campo vectorial, especificado como escalar. Esta propiedad define el número de contenedores utilizados para crear los histogramas. Esta propiedad no es ajustable. Solo puede configurar esto cuando se inicializa el objeto.

Límites para lecturas de rango, especificados como un vector de 2 elementos con elementos medidos en metros. Las lecturas de alcance especificadas al llamar al objeto se consideran solo si se encuentran dentro de los límites de distancia. Utilice el límite de distancia inferior para ignorar falsos positivos debidos a un rendimiento deficiente del sensor en rangos inferiores. Utilice el límite superior para ignorar obstáculos que estén demasiado lejos del vehículo.

Radio del vehículo en metros, especificado como escalar. Esta dimensión define el círculo más pequeño que puede circunscribir su vehículo. El radio del vehículo se utiliza para tener en cuenta el tamaño del vehículo al calcular la dirección libre de obstáculos.

Distancia de seguridad alrededor del vehículo, especificada en escalar en metros. Esta es una distancia de seguridad a dejar alrededor de la posición del vehículo además del valor del parámetro RobotRadius . La suma del radio del vehículo y la distancia de seguridad se utiliza para calcular la dirección libre de obstáculos.

Radio de giro mínimo en metros para el vehículo que se mueve a su velocidad actual, especificado como escalar.

Peso de la función de coste para moverse hacia la dirección objetivo, especificado como un escalar. Para seguir una dirección objetivo, establezca este peso para que sea mayor que la suma de las propiedades CurrentDirectionWeight y PreviousDirectionWeight . Para ignorar el coste de dirección objetivo, establezca este peso en cero.

Peso de la función de coste para mover el robot en la dirección del rumbo actual, especificado como un escalar. Los valores más altos de este peso producen rutas eficientes. Para ignorar el coste de dirección actual, establezca este peso en cero.

Peso de la función de coste para moverse en la dirección de dirección seleccionada previamente, especificado como un escalar. Los valores más altos de este peso producen rutas más suaves. Para ignorar el coste de dirección anterior, establezca este peso en cero.

Umbrales para el cálculo del histograma binario, especificados como un vector de 2 elementos. El algoritmo utiliza estos umbrales para calcular el histograma binario a partir de la densidad de obstáculos polares. Los valores de densidad de obstáculos polares superiores al umbral superior se representan como espacio ocupado (1) en el histograma binario. Los valores menores que el umbral inferior se representan como espacio libre (0). Los valores que se encuentran entre los límites se establecen en los valores del histograma binario anterior, siendo el valor predeterminado el espacio libre (0).

Utilice el objeto lidarScan como entrada de escaneo, especificado como true o false.

Uso

Descripción

ejemplo

steeringDir = vfh(scan,targetDir) encuentra una dirección de dirección libre de obstáculos utilizando el algoritmo VFH+ para la entrada lidarScan objeto, scan. Se proporciona una dirección de destino en función de la ubicación del objetivo.

Para habilitar esta sintaxis, debe establecer la propiedad UseLidarScan en true. Por ejemplo:

mcl = monteCarloLocalization('UseLidarScan',true);
...
[isUpdated,pose,covariance] = mcl(odomPose,scan);

steeringDir = vfh(ranges,angles,targetDir) define el escaneo lidar con dos vectores: ranges y angles.

Argumentos de entrada

expandir todo

Lecturas de escaneo Lidar, especificadas como un objeto lidarScan .

Dependencias

Para utilizar este argumento, debe establecer la propiedad UseLidarScan en true.

mcl.UseLidarScan = true;

Valores de rango de los datos de escaneo, especificados como un vector en metros. Estos valores de rango son distancias desde un sensor en un angles dado. El vector debe tener la misma longitud que el vector angles correspondiente.

Valores de ángulo de datos de escaneo, especificados como un vector en radianes. Estos valores de ángulos son los ángulos específicos del ranges dado. El vector debe tener la misma longitud que el vector ranges correspondiente.

Dirección de destino del vehículo, especificada como escalar en radianes. La dirección de avance del vehículo se considera cero radianes, con ángulos positivos medidos en sentido contrario a las agujas del reloj.

Argumentos de salida

expandir todo

Dirección de dirección del vehículo, especificada como escalar en radianes. Esta dirección libre de obstáculos se calcula según el algoritmo VFH+. La dirección de avance del vehículo se considera cero radianes, con ángulos positivos medidos en sentido contrario a las agujas del reloj.

Funciones del objeto

Para utilizar una función de objeto, especifique System object como primer argumento de entrada. Por ejemplo, para liberar recursos del sistema de un System object llamado obj, use esta sintaxis:

release(obj)

expandir todo

showMostrar información de VectorFieldHistogram en la ventana de la figura
stepEjecutar el algoritmo System object
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Ejemplos

contraer todo

Este ejemplo muestra cómo calcular una dirección de dirección basándose en los datos de entrada del escaneo láser.

Cree un objeto controllerVFH . Establezca la propiedad UseLidarScan en true.

vfh = controllerVFH;
vfh.UseLidarScan = true;

Introduzca los datos del escaneo láser y la dirección del objetivo.

ranges = 10*ones(1,500);
ranges(1,225:275) = 1.0;
angles = linspace(-pi,pi,500);
targetDir = 0;

Cree un objeto lidarScan especificando los rangos y ángulos.

scan = lidarScan(ranges,angles);

Calcule una dirección de dirección libre de obstáculos.

steeringDir = vfh(scan,targetDir);

Visualice el cálculo de VectorFieldHistogram .

h = figure;
set(h,'Position',[50 50 800 400])
show(vfh)

Referencias

[1] Borenstein, J., and Y. Koren. "The Vector Field Histogram - Fast Obstacle Avoidance for Mobile Robots." IEEE Journal of Robotics and Automation. Vol. 7, Number 3, 1991, pp.278–88.

[2] Ulrich, I., and J. Borenstein. "VFH : Reliable Obstacle Avoidance for Fast Mobile Robots." Proceedings. 1998 IEEE International Conference on Robotics and Automation. (1998): 1572–1577.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b