Main Content

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:

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)

Figure contains an axes object. The axes object with title Binary Occupancy Grid contains an object of type image.

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')

Figure contains an axes object. The axes object with title Binary Occupancy Grid contains 4 objects of type image, line. These objects represent 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

| (Navigation Toolbox) | (Navigation Toolbox)

Temas relacionados