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.

occupancyMap3D

Crear mapa de ocupación en 3D

Descripción

El objeto occupancyMap3D almacena un mapa 3-D e información del mapa. El mapa se almacena como valores probabilísticos en un octree data structure. La clase maneja entornos arbitrarios y expande su tamaño dinámicamente en función de las entradas de observación. Puede agregar observaciones como nubes de puntos o como ubicaciones específicas de xyz. Estas observaciones actualizan los valores de probabilidad. Los valores probabilísticos representan la ocupación de ubicaciones. La estructura de datos octree recorta los datos de manera adecuada para seguir siendo eficiente tanto en la memoria como en el disco.

Creación

Descripción

omap = occupancyMap3D crea un mapa de ocupación tridimensional vacío sin observaciones y con valores de propiedad predeterminados.

omap = occupancyMap3D(res) especifica una resolución de mapa en celdas/metro y establece la propiedad Resolution .

ejemplo

omap = occupancyMap3D(res,Name,Value) especifica propiedades utilizando uno o más argumentos de nombre-valor. Por ejemplo, "FreeThreshold",0.25 establece el umbral para considerar celdas libres de obstáculos como un valor de probabilidad de 0,25.

Propiedades

expandir todo

Resolución de cuadrícula en celdas por metro, especificada como escalar. Especificar resolución sobre construcción. Las observaciones insertadas con precisiones superiores a este valor se redondean hacia abajo y se aplican a esta resolución.

Umbral para considerar las células como libres de obstáculos, especificado como un escalar positivo. Los valores de probabilidad por debajo de este umbral se consideran libres de obstáculos.

Umbral para considerar celdas ocupadas, especificado como un escalar positivo. Los valores de probabilidad superiores a este umbral se consideran ocupados.

Límites de saturación en valores de probabilidad, especificados como un vector [min max] . Los valores por encima o por debajo de estos valores de saturación se establecen en los valores min o max . Esta propiedad reduce la sobresaturación de las células cuando se incorporan múltiples observaciones.

Funciones del objeto

checkOccupancyConsultar si las localidades están libres u ocupadas
getOccupancyObtener probabilidad de ocupación de ubicaciones
inflateAgrandar cada ubicación ocupada
insertPointCloudInserte puntos 3D o observaciones de nubes de puntos en el mapa
rayIntersectionEncuentra puntos de intersección de rayos y celdas de mapa ocupadas.
setOccupancyEstablecer probabilidad de ocupación de ubicaciones
showMostrar mapa de ocupación en 3D
updateOccupancyActualizar probabilidad de ocupación en ubicaciones

Ejemplos

contraer todo

El objeto occupancyMap3D almacena obstáculos en el espacio tridimensional, utilizando observaciones de sensores para mapear un entorno. Cree un mapa y agregue puntos desde una nube de puntos para identificar obstáculos. Luego infle los obstáculos en el mapa para garantizar un espacio operativo seguro alrededor de los obstáculos.

Cree un objeto occupancyMap3D con una resolución de mapa de 10 celdas/metro.

map3D = occupancyMap3D(10);

Defina un conjunto de puntos 3-D como una observación desde una pose [x y z qw qx qy qz]. Esta pose es para el sensor que observa estos puntos y está centrado en el origen. Defina dos conjuntos de puntos para insertar múltiples observaciones.

pose = [ 0 0 0 1 0 0 0];

points = repmat((0:0.25:2)', 1, 3);
points2 = [(0:0.25:2)' (2:-0.25:0)' (0:0.25:2)'];
maxRange = 5;

Inserte el primer conjunto de puntos usando insertPointCloud. La función utiliza la pose del sensor y los puntos dados para insertar observaciones en el mapa. Los colores mostrados se correlacionan con la altura del punto sólo con fines ilustrativos.

insertPointCloud(map3D,pose,points,maxRange)
show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains an object of type patch.

Inserte el segundo conjunto de puntos. El rayo entre la posición del sensor (origen) y estos puntos se superpone a los puntos de la inserción anterior. Por tanto, el espacio libre entre el sensor y los nuevos puntos se actualiza y marca como espacio libre.

insertPointCloud(map3D,pose,points2,maxRange)
show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains an object of type patch.

Infle el mapa para agregar una zona de amortiguamiento para una operación segura alrededor de obstáculos. Defina el radio del vehículo y la distancia de seguridad y utilice la suma de estos valores para definir el radio de inflación para el mapa.

vehicleRadius = 0.2;
safetyRadius = 0.3;
inflationRadius = vehicleRadius + safetyRadius;
inflate(map3D, inflationRadius);

show(map3D)

Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains an object of type patch.

Algoritmos

expandir todo

Referencias

[1] Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss, and Wolfram Burgard. "OctoMap: an efficient probabilistic 3D mapping framework based on octrees." Autonomous Robots 34, no. 3 (April 2013): 189–206. https://doi.org/10.1007/s10514-012-9321-0.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b