buildMap
Cree un mapa de ocupación a partir de escaneos LIDAR
Descripción
crea un mapa map
= buildMap(scans
,poses
,mapResolution
,maxRange
)occupancyMap
insertando LiDAR scans
en el poses
indicado. Especifique la resolución del mapa resultante, mapResolution
, y el alcance máximo del sensor LiDAR , maxRange
.
Ejemplos
La función buildMap
toma lecturas de escaneo LiDAR y poses asociadas para construir una cuadrícula de ocupación como objetos lidarScan
y poses [x y theta]
asociadas para construir una occupancyMap
.
Cargue estimaciones de escaneo y pose recopiladas de sensores en un robot en un estacionamiento. Los datos recopilados se correlacionan mediante un algoritmo lidarSLAM
, que realiza una correspondencia de escaneo para asociar escaneos y ajustar poses a lo largo de toda la trayectoria del robot. Verifique que los escaneos y las poses tengan la misma longitud.
load scansAndPoses.mat
length(scans) == length(poses)
ans = logical
1
Construye el mapa. Especifique los escaneos y las poses en la función buildMap
e incluya la resolución del mapa deseada (10 celdas por metro) y el alcance máximo del LiDAR (19,2 metros). Cada escaneo se agrega en las poses asociadas y se actualizan los valores de probabilidad en la cuadrícula de ocupación.
occMap = buildMap(scans,poses,10,19.2);
figure
show(occMap)
title('Occupancy Map of Garage')
Utilice un objeto lidarSLAM
para agregar y comparar iterativamente escaneos LiDAR y construir un gráfico de pose optimizado de la trayectoria del robot. Para obtener un mapa de ocupación a partir de las poses y escaneos asociados, utilice la función buildMap
.
Cargar datos y configurar el algoritmo SLAM
Cargar un arreglo de celdas de objetos lidarScan
. Los escaneos LIDAR se recopilaron en un estacionamiento en un robot Husky® de ClearPath Robotics®. Normalmente, los escaneos LIDAR se realizan a alta frecuencia y cada escaneo no es necesario para SLAM. Por lo tanto, reduzca la resolución de los escaneos seleccionando solo cada 40 escaneos.
load garage_fl1_southend.mat scans scans = scans(1:40:end);
Para configurar el algoritmo SLAM, especifique el rango lidar, la resolución del mapa, el umbral de cierre del bucle y el radio de búsqueda. Ajuste estos parámetros para su robot y entorno específicos. Crea el objeto lidarSLAM
con estos parámetros.
maxRange = 19.2; % meters resolution = 10; % cells per meter slamObj = lidarSLAM(resolution,maxRange); slamObj.LoopClosureThreshold = 360; slamObj.LoopClosureSearchRadius = 8;
Agregar escaneos iterativamente
Usando un bucle for
, agregue escaneos al objeto SLAM. El objeto utiliza la coincidencia de escaneos para comparar cada escaneo agregado con los agregados anteriormente. Para mejorar el mapa, el objeto optimiza el gráfico de pose cada vez que detecta un cierre de bucle. Cada 10 escaneos, muestra las poses y escaneos almacenados.
for i = 1:numel(scans) addScan(slamObj,scans{i}); if rem(i,10) == 0 show(slamObj); end end title("Lidar Scans and Poses") xlabel("X [meters]") ylabel("Y [meters]")
Ver mapa de ocupación
Después de agregar todos los escaneos al objeto SLAM, construya un mapa occupancyMap
llamando a buildMap
con los escaneos y las poses. Utilice la misma resolución de mapa y alcance máximo que utilizó con el objeto SLAM.
[scansSLAM,poses] = scansAndPoses(slamObj);
occMap = buildMap(scansSLAM,poses,resolution,maxRange);
figure
show(occMap)
title('Occupancy Map of Garage')
Argumentos de entrada
Escaneos lidar utilizados para construir el mapa, especificados como un arreglo de celdas de objetos lidarScan
.
Poses de escaneos LiDAR , especificadas como una matriz n por 3. Cada fila es un vector [x y theta]
que representa la posición xy y el ángulo de orientación de un escaneo.
Resolución del mapa de salida occupancyMap
, especificada como un entero positivo en celdas por metro.
Alcance máximo del sensor lidar, especificado como escalar positivo en metros. Los puntos en scans
fuera de este rango se ignoran.
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN
, donde Name
es el nombre del argumento y Value
es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.
En versiones anteriores a R2021a, use comas para separar cada nombre y valor, y encierre Name
entre comillas.
Ejemplo: ['MapWidth',10]
Ancho de la cuadrícula de ocupación, especificado como el par separado por comas que consta de 'MapWidth'
y un escalar positivo. Si no se especifica este valor, el mapa se escala automáticamente para adaptarse a todos los escaneos láser.
Cuadrícula de altura de ocupación, especificada como el par separado por comas que consta de 'MapHeight'
y un escalar positivo. Si no se especifica este valor, el mapa se escala automáticamente para adaptarse a todos los escaneos láser.
Argumentos de salida
Mapa de ocupación, devuelto como un objeto occupancyMap
.
Historial de versiones
Introducido en R2019b
Consulte también
Funciones
Clases
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)