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.

occupancyMap

Crear mapa de ocupación 2-D

Desde R2019b

Descripción

occupancyMap crea un objeto de mapa de cuadrícula de ocupación 2-D. Cada celda de la cuadrícula de ocupación tiene un valor que representa la probabilidad de ocupación de la celda. Los valores cercanos a 1 representan una alta probabilidad de que la celda contenga un obstáculo. Valores cercanos a 0 representan una alta probabilidad de que la celda no esté ocupada y libre de obstáculos.

Los mapas de ocupación se utilizan en algoritmos de navegación como la planificación de rutas (ver plannerRRT). También se utilizan en aplicaciones de mapeo para encontrar rutas libres de colisiones, evitar colisiones y calcular la localización (ver monteCarloLocalization). Puede modificar su mapa de ocupación para adaptarlo a su aplicación específica.

Los objetos occupancyMap admiten coordenadas locales, coordenadas mundiales e índices de cuadrícula. La primera ubicación de la cuadrícula con índice (1,1) comienza en la esquina superior izquierda de la cuadrícula.

Utilice la clase occupancyMap para crear mapas 2-D de un entorno con valores de probabilidad que representen diferentes obstáculos en su mundo. Puede especificar valores de probabilidad exactos de las células o incluir observaciones de sensores como escáneres láser.

Los valores de probabilidad se almacenan utilizando un filtro Bayes binario para estimar la ocupación de cada celda de la cuadrícula. Se utiliza una representación de probabilidades de registro, con valores almacenados como int16 para reducir el tamaño de almacenamiento del mapa y permitir aplicaciones en tiempo real.

Creación

Descripción

map = occupancyMap(width,height) crea un objeto de mapa de ocupación 2-D que representa un espacio mundial de width y height en metros. La resolución de cuadrícula predeterminada es 1 celda por metro.

ejemplo

map = occupancyMap(width,height,resolution) crea un mapa de ocupación con una resolución de cuadrícula especificada en celdas por metro. resolution establece la propiedad Resolution .

map = occupancyMap(rows,cols,resolution,'grid') crea un mapa de ocupación con el número especificado de filas y columnas y con la resolución en celdas por metro. Los valores de rows y cols establecen la propiedad GridSize .

map = occupancyMap(p) crea un mapa de ocupación a partir de los valores de la matriz p. El tamaño de la cuadrícula coincide con el tamaño de la matriz, y el valor de probabilidad de cada celda se interpreta a partir de la ubicación de la matriz.

ejemplo

map = occupancyMap(p,resolution) crea un mapa de ocupación a partir de la matriz especificada y la resolución en celdas por metro.

map = occupancyMap(sourcemap) crea un objeto usando valores de otro objeto occupancyMap .

map = occupancyMap(sourcemap,resolution) crea un objeto usando valores de otro objeto occupancyMap , pero vuelve a muestrear la matriz para tener la resolución especificada.

Argumentos de entrada

expandir todo

Ancho del mapa, especificado como escalar en metros.

Altura del mapa, especificada como escalar en metros.

Resolución de cuadrícula, especificada como escalar en celdas por metro.

Número de filas de la cuadrícula, especificadas como un entero escalar positivo.

Número de columnas de la cuadrícula, especificadas como un entero escalar positivo.

Cuadrícula de ocupación de entrada, especificada como una matriz de valores de probabilidad de 0 a 1. El tamaño de la cuadrícula coincide con el tamaño de la matriz. Cada elemento de la matriz corresponde a la probabilidad de que la ubicación de la celda de la cuadrícula esté ocupada. Los valores cercanos a 1 representan una alta certeza de que la celda contiene un obstáculo. Valores cercanos a 0 representan certeza de que la celda no está ocupada y libre de obstáculos.

Objeto de mapa de ocupación, especificado como un objeto occupancyMap .

Propiedades

expandir todo

Umbral por debajo del cual las celdas se consideran libres de obstáculos, especificado como un escalar entre 0 y 1 inclusive. Las celdas con valores de probabilidad por debajo de este umbral se consideran libres de obstáculos. Esta propiedad también define las ubicaciones libres para la planificación de rutas cuando se utilizan objetos como plannerRRT.

Tipos de datos: double

Umbral por encima del cual las celdas se consideran ocupadas, especificado como escalar. Las celdas con valores de probabilidad superiores a este umbral se consideran ocupadas.

Tipos de datos: double

Límites de saturación para la probabilidad, especificados como un vector de valor real de 1 por 2 de la forma [min max]. Los valores de probabilidad por debajo del valor min se saturarán a min y los valores de probabilidad por encima del max se saturarán a max. Esta propiedad reduce la sobresaturación de las células cuando se incorporan múltiples observaciones.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Número de filas y columnas de la cuadrícula, almacenado como un vector de valor real de 1 por 2 que representa el número de filas y columnas, en ese orden.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Resolución de la cuadrícula, almacenada como un escalar en celdas por metro que representa el número y el tamaño de las ubicaciones de la cuadrícula.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores mínimos y máximos de x-coordenadas en el marco local, almacenados como un vector horizontal de dos elementos de la forma [min max]. El marco local está definido por la propiedad LocalOriginInWorld .

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores mínimos y máximos de y-coordenadas en el marco local, almacenados como un vector horizontal de dos elementos de la forma [min max]. El marco local está definido por la propiedad LocalOriginInWorld .

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores de rango mundial mínimo y máximo de x-coordenadas, almacenados como un vector de 1 por 2 que representa los valores mínimo y máximo, en ese orden.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores de rango mundial mínimo y máximo de y-coordenadas, almacenados como un vector de 1 por 2 que representa los valores mínimo y máximo, en ese orden.

Tipos de datos: double

[x, y] coordenadas mundiales de la esquina inferior izquierda de la cuadrícula, especificadas como un vector de 1 por 2.

Tipos de datos: double

Ubicación del origen del marco local en coordenadas mundiales, especificada como un vector de dos elementos, [xLocal yLocal]. Utilice la función move para cambiar el marco local a medida que su vehículo se mueve.

Tipos de datos: double

Ubicación de la esquina inferior izquierda de la cuadrícula en coordenadas locales, especificada como un vector de dos elementos, [xLocal yLocal].

Tipos de datos: double

Valor predeterminado para ubicaciones de mapa no especificadas, incluidas áreas fuera del mapa, especificadas como un escalar entre 0 y 1 inclusive.

Tipos de datos: double

Funciones del objeto

checkOccupancyConsultar si las localidades están libres u ocupadas
copyCrear copia del mapa de ocupación 2-D
getOccupancyObtener probabilidad de ocupación de ubicaciones
grid2localConvertir los índices de la cuadrícula en coordenadas locales
grid2worldConvertir los índices de la cuadrícula en coordenadas del mundo real
inflateAgrandar cada ubicación ocupada
insertRayInsertar rayo de observación con escaneo láser.
local2gridConvertir coordenadas locales a índices de cuadrícula
moveMover mapa en el marco mundial
occupancyMatrixConvertir mapa de ocupación a matriz
raycastCalcular índices de celdas a lo largo de un rayo.
rayIntersectionEncuentra puntos de intersección de rayos y celdas de mapa ocupadas.
setOccupancyEstablecer probabilidad de ocupación de ubicaciones
showMostrar mapa de ocupación 2-D
syncWithSincronizar mapa con mapa superpuesto
updateOccupancyActualizar probabilidad de ocupación en ubicaciones
world2gridConvertir coordenadas mundiales a índices de cuadrícula
world2localConvertir coordenadas mundiales a coordenadas locales

Ejemplos

contraer todo

Cree un mapa de cuadrícula de ocupación vacío.

map = occupancyMap(10,10,20);

Especifique la pose del vehículo, los alcances, los ángulos y el alcance máximo del escaneo láser.

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

Cree un objeto lidarScan con los rangos y ángulos especificados.

scan = lidarScan(ranges,angles);

Inserte los datos del escaneo láser en el mapa de ocupación.

insertRay(map,pose,scan,maxrange);

Muestre el mapa para ver los resultados de insertar el escaneo láser.

show(map)

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

Verifique la ocupación del lugar directamente frente al vehículo.

getOccupancy(map,[8 5])
ans = 0.7000

Agregue una segunda lectura y vea la actualización de los valores de ocupación. La lectura adicional aumenta la confianza en las lecturas. Los valores libres y ocupados se vuelven más distintos.

insertRay(map,pose,scan,maxrange);
show(map)

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

getOccupancy(map,[8 5])
ans = 0.8448

Convierta un archivo de mapa de grises portátil (PGM) que contenga un mapa ROS en un occupancyMap para usar en MATLAB.

Importe la imagen usando imread. Recorta la imagen en el área del parque.

image = imread('playpen_map.pgm');
imageCropped = image(750:1250,750:1250);
imshow(imageCropped)

Figure contains an axes object. The axes object contains an object of type image.

Los valores de PGM se expresan de 0 a 255 como uint8. Normalice estos valores convirtiendo la imagen recortada a double y dividiendo cada celda por 255. Esta imagen muestra los obstáculos con valores cercanos a 0. Resta la imagen normalizada de 1 para obtener valores de ocupación, donde 1 representa el espacio ocupado.

imageNorm = double(imageCropped)/255;
imageOccupancy = 1 - imageNorm;

Cree el objeto occupancyMap usando una imagen de mapa ajustada. La resolución del mapa importado es de 20 celdas por metro.

map = occupancyMap(imageOccupancy,20);
show(map)

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

Limitaciones

Los valores de ocupación tienen una resolución limitada de ±0,001. Los valores se almacenan como int16 usando una representación de probabilidades logarítmicas. Este tipo de datos limita la resolución, pero ahorra memoria al almacenar mapas grandes en MATLAB®. Al llamar a setOccupancy y luego a getOccupancy, es posible que el valor devuelto no sea igual al valor que estableció. Para obtener más información, consulte la sección de representaciones de probabilidades logarítmicas en Cuadrículas de ocupación.

Si el tamaño de la memoria es una limitación, considere usar binaryOccupancyMap en su lugar. El mapa de ocupación binaria utiliza menos memoria con valores binarios, pero aún funciona con algoritmos Navigation Toolbox™ y otras aplicaciones.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b