Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

robotics.OccupancyGrid clase

Paquete: robotics

Cree una rejilla de ocupación con valores probabilísticos

Descripción

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

Las rejillas de ocupación se utilizan en algoritmos robóticos como la planificación de rutas (véase).robotics.PRM También se utilizan en aplicaciones de mapeo para encontrar rutas libres de colisiones, realizar la evasión de colisiones y calcular la localización (ver).robotics.MonteCarloLocalization Puede modificar la cuadrícula de ocupación para que se adapte a su aplicación específica.

Los objetos admiten coordenadas de mundo y rejilla.OccupancyGrid El origen de las coordenadas del mundo se define mediante la propiedad del objeto, que define la esquina inferior izquierda de la rejilla.GridLocationInWorld La propiedad define el número y el tamaño de las ubicaciones de la cuadrícula.Resolution La primera ubicación de cuadrícula con índice comienza en la esquina superior izquierda de la cuadrícula.(1,1)

Utilice la clase para crear mapas 2-D de un entorno con valores de probabilidad que representen diferentes obstáculos en su mundo.OccupancyGrid Puede especificar valores de probabilidad exactos de celdas 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 rejilla. Se utiliza una representación de cuotas de registro, con valores almacenados para reducir el tamaño de almacenamiento del mapa y permitir aplicaciones en tiempo real.int16

Si el tamaño de la memoria es una limitación, considere usar en su lugar.robotics.BinaryOccupancyGrid La cuadrícula de ocupación binaria utiliza menos memoria con valores binarios, pero todavía funciona con algoritmos y otras aplicaciones.Robotics System Toolbox™

Construcción

map = robotics.OccupancyGrid(width,height) crea un objeto de rejilla de ocupación 2-D que representa un espacio mundial de y en metros.widthheight La resolución de rejilla por defecto es de 1 célula por metro.

map = robotics.OccupancyGrid(width,height,resolution) crea una rejilla de ocupación con una resolución de rejilla especificada en celdas por metro.

map = robotics.OccupancyGrid(rows,cols,resolution,"grid") crea una rejilla de ocupación con el número especificado de filas y columnas y con la resolución en celdas por metro.

map = robotics.OccupancyGrid(p) crea una cuadrícula de ocupación a partir de los valores de Matrix.p El tamaño de la cuadrícula coincide con el tamaño de la matriz, con cada valor de probabilidad de celda interpretado desde la ubicación de la matriz.

map = robotics.OccupancyGrid(p,resolution) crea una rejilla de ocupación a partir de la matriz y resolución especificadas en celdas por metro.

Argumentos de entrada

expandir todo

Ancho del mapa, especificado como un escalar en metros.

Tipos de datos: double

Altura del mapa, especificada como un escalar en metros.

Tipos de datos: double

Resolución de rejilla, especificada como un escalar en celdas por metro.

Tipos de datos: double

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

Tipos de datos: double

Propiedades

expandir todo

Umbral para considerar las celdas como libres de obstáculos, especificadas como un escalar. Los 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 de acceso cuando se usa.robotics.PRM

Umbral para considerar las celdas como ocupadas, especificadas como un escalar. Los valores de probabilidad por encima de este umbral se consideran ocupados.

Límites de saturación para la probabilidad, especificados como vector.[min max] Los valores por encima o por debajo de estos valores de saturación se establecen en los valores y.minmax Esta propiedad reduce el exceso de saturación de las células al incorporar múltiples observaciones.

Esta propiedad es de solo lectura.

Número de filas y columnas de la cuadrícula, almacenada como un vector.[rows cols]

Resolución de rejilla, almacenada como un escalar en celdas por metro. Este valor es de solo lectura.

Valores de-coordenadas mínimos y máximos del rango mundial, almacenados como vector.x[min max] Este valor es de solo lectura.

Valores de-coordenadas mínimos y máximos del rango mundial, almacenados como vector.y[min max] Este valor es de solo lectura.

coordenadas del mundo de la esquina inferior izquierda de la cuadrícula, especificado como un vector de dos elementos.[x,y]

Métodos

Ejemplos

contraer todo

Tome las lecturas de alcance y ángulo de un escaneo láser e inserte estas lecturas en una rejilla de ocupación.

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

map = robotics.OccupancyGrid(10,10,20);

Inserte un escaneo láser en la rejilla de ocupación. Especifique la pose de los rangos y ángulos del robot y el rango máximo del escaneo láser.

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

Muestre el mapa para ver los resultados de la inserción del escaneo láser. Compruebe la ocupación del lugar directamente en frente del robot.

show(map)

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

Añada una segunda lectura y visualice la actualización a 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,ranges,angles,maxrange); show(map)

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

Convierta un archivo de Graymap () portátil que contenga un mapa de ROS en un mapa para utilizarlo en MATLAB..pgmOccupancyGrid

Importa la imagen usando.imread Recorte la imagen en el área correspondiente.

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

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

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

Cree el objeto utilizando una imagen de mapa ajustada.OccupancyGrid La resolución de mapa importada es de 20 celdas por metro.

map = robotics.OccupancyGrid(imageOccupancy,20); show(map)

Limitaciones

Los valores de ocupación tienen una resolución limitada de ± 0,001. Los valores se almacenan como mediante una representación de cuotas de registro.int16 Este tipo de datos limita la resolución, pero le ahorra memoria al almacenar mapas de gran tamaño.MATLAB® Al llamar y, a continuación, el valor devuelto podría no ser igual al valor que se establece.setget Para obtener más información, consulte la sección representaciones de cuotas de registro en.Rejillas de ocupación

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Introducido en R2016b