Cuadrículas de ocupación
Visión general
Las cuadrículas de ocupación se utilizan para representar un área de trabajo del robot como una cuadrícula discreta. La información sobre el entorno se puede recopilar con sensores en tiempo real o cargar a partir de conocimientos previos. Para detectar obstáculos en el entorno del robot, con frecuencia se usan telémetros láser, sensores de impacto, cámaras y sensores de profundidad.
Las cuadrículas de ocupación se utilizan en algoritmos de robótica como la planificación de rutas (consulte mobileRobotPRM
o plannerRRT
(Navigation Toolbox)). Se usan en aplicaciones de mapeo para integrar la información de los sensores en un mapa discreto, en planificación de rutas para detectar rutas libres de colisiones y para localizar robots en un entorno conocido (consulte monteCarloLocalization
(Navigation Toolbox) o matchScans
(Navigation Toolbox)). Puede crear mapas con diferentes tamaños y resoluciones para adaptarlos a cada aplicación.
Para los mapas de ocupación 3D, consulte occupancyMap3D
(Navigation Toolbox).
Para los mapas de ocupación 2D, existen dos representaciones:
Cuadrícula de ocupación binaria (consulte
binaryOccupancyMap
)Cuadrícula de ocupación de probabilidad (consulte
occupancyMap
(Navigation Toolbox))
Una cuadrícula de ocupación binaria utiliza valores true
para representar el área de trabajo ocupada (obstáculos) y valores false
para representar el área de trabajo libre. Esta cuadrícula muestra dónde están los obstáculos y si un robot puede moverse por ese espacio. Utilice la cuadrícula de ocupación binaria si el tamaño de la memoria es un factor en su aplicación.
Una cuadrícula de ocupación de probabilidad utiliza valores de probabilidad para crear una representación de mapa más detallada. Esta representación es el método preferido para usar cuadrículas de ocupación. Normalmente, esta cuadrícula se conoce simplemente como cuadrícula de ocupación. Cada celda de la cuadrícula de ocupación tiene un valor que representa la probabilidad de ocupación de la celda. Los valores próximos a 1 representan una gran certeza de que la celda contiene un obstáculo. Los valores próximos a 0 representan la certeza de que la celda no está ocupada y está libre de obstáculos. Los valores probabilísticos pueden ofrecer una mayor fiabilidad de objetos y mejorar el rendimiento de ciertas aplicaciones con algoritmos.
Las cuadrículas de ocupación binarias y de probabilidad comparten varias propiedades y detalles de algoritmos. Las coordenadas de cuadrícula y del mundo real se aplican a ambos tipos de cuadrículas de ocupación. La función de inflación también se aplica a ambas cuadrículas, pero cada cuadrícula la implementa de forma diferente. Los efectos de la representación de logit y la saturación de probabilidad se aplican solo a las cuadrículas de ocupación de probabilidad.
Coordenadas del mundo real, de cuadrícula y locales
Si trabaja con cuadrículas de ocupación en MATLAB®, puede usar coordenadas del mundo real, locales o de cuadrícula.
El marco de referencia absoluto en el que opera el robot se denomina marco del mundo real en la cuadrícula de ocupación. La mayoría de las operaciones se realizan en el marco del mundo real, y es la selección predeterminada cuando se utilizan las funciones de MATLAB de esta toolbox. Las coordenadas del mundo real se utilizan como un marco de coordenadas absoluto con un origen fijo. Los puntos se pueden especificar con cualquier resolución. Sin embargo, todas las ubicaciones se convierten en ubicaciones de cuadrícula debido a los límites de almacenamiento de datos y de resolución del propio mapa.
El marco local hace referencia al marco egocéntrico de un vehículo que se desplaza por el mapa. Las propiedades GridOriginInLocal
y LocalOriginInWorld
definen el origen de la cuadrícula en coordenadas locales y la ubicación relativa del marco local en las coordenadas del mundo real. Puede ajustar este marco local utilizando la función move
. Para ver un ejemplo de uso del marco local como un mapa egocéntrico para emular un vehículo que se mueve y envía obstáculos locales, consulte Create Egocentric Occupancy Maps Using Range Sensors (Navigation Toolbox).
Las coordenadas de cuadrícula definen la resolución real de la cuadrícula de ocupación y las ubicaciones finitas de los obstáculos. El origen de las coordenadas de cuadrícula está en la esquina superior izquierda de la cuadrícula, y la primera ubicación tiene un índice de (1,1)
. Sin embargo, la propiedad GridLocationInWorld
de la cuadrícula de ocupación en MATLAB define la esquina inferior izquierda de la cuadrícula en las coordenadas del mundo real. Al crear un objeto de cuadrícula de ocupación, las propiedades como XWorldLimits
y YWorldLimits
se definen mediante las entradas width
, height
y resolution
. Esta figura muestra una representación visual de estas propiedades y la relación entre las coordenadas del mundo real y de cuadrícula.
Inflación de coordenadas
Tanto la cuadrícula de ocupación binaria como la normal tienen la opción de inflar obstáculos. Esta inflación se utiliza para añadir un factor de seguridad en los obstáculos y crear zonas de seguridad entre el robot y el obstáculo en el entorno. La función inflate
de un objeto de cuadrícula de ocupación convierte el radius
especificado en el número de celdas redondeado a partir del valor resolution*radius
. Cada algoritmo utiliza este valor de celda por separado para modificar los valores alrededor de los obstáculos.
Cuadrícula de ocupación binaria
La función inflate
toma cada celda ocupada y la infla directamente añadiendo espacio ocupado alrededor de cada punto. Este ejemplo básico de inflación ilustra cómo se usa el valor de radio.
Inflar obstáculos en una cuadrícula de ocupación binaria
Este ejemplo muestra cómo crear el mapa, definir las ubicaciones de los obstáculos e inflarlos en un radio de 1 m. Las gráficas adicionales de la figura ayudan a ilustrar la inflación y el desplazamiento debido a la conversión a ubicaciones de cuadrícula.
Cree una cuadrícula de ocupación binaria. Defina la ocupación de la posición [5,5].
map = binaryOccupancyMap(10,10,5); setOccupancy(map,[5 5], 1);
Infle los espacios ocupados del mapa en 1 m.
inflate(map,1); show(map)
Represente la ubicación original y la posición de cuadrícula convertida, y trace el círculo original. Como puede ver en esta gráfica, el centro de la cuadrícula está en [4.9 4.9], habiéndose desplazado desde la ubicación [5 5]. A partir de ahí se traza un círculo de 1 m y las celdas que tocan este círculo se marcan como ocupadas. La figura se amplía al área relevante.
hold on theta = linspace(0,2*pi); x = 4.9+cos(theta); % x circle coordinates y = 4.9+sin(theta); % y circle coordinates plot(5,5,'*b','MarkerSize',10) % Original location plot(4.9,4.9,'xr','MarkerSize',10) % Grid location center plot(x,y,'-r','LineWidth',2); % Circle of radius 1m. axis([3.6 6 3.6 6]) ax = gca; ax.XTick = [3.6:0.2:6]; ax.YTick = [3.6:0.2:6]; grid on legend('Original Location','Grid Center','Inflation')
Como puede ver en la figura anterior, incluso las celdas que apenas se superponían con el radio de inflación se etiquetan como ocupadas.
Consulte también
binaryOccupancyMap
| occupancyMap
(Navigation Toolbox) | occupancyMap3D
(Navigation Toolbox)
Temas relacionados
- Create Egocentric Occupancy Maps Using Range Sensors (Navigation Toolbox)
- Build Occupancy Map from Lidar Scans and Poses (Navigation Toolbox)