8 minute read

Objetivo

Se pretende tener soltura a la hora de usar el sensor LiDAR de CARLA para la creación de datasets que cumplan con las especificaciones necesarias en dicho momento.

Parámetros Clave del LiDAR Semántico

Primero hay que volver a tener en cuenta todos los parámetros base del sensor:

Parámetro Descripción Valores Recomendados
channels Número de haces láser (densidad vertical) 16 (baja), 32 (media), 64 (alta)
points_per_second Cantidad de puntos generados por segundo 100,000 - 1,000,000
range Alcance máximo del sensor (metros) 20 - 100 m
rotation_frequency Veces que el sensor rota por segundo 10 - 30 Hz
upper_fov Ángulo superior del campo de visión 10° a 30°
lower_fov Ángulo inferior del campo de visión -10° a -30°
horizontal_fov Ángulo horizontal de escaneo 180° o 360°

Pero también hay que tener en cuenta los parámetros añadidos las anteriores semanas para simular un escenario más realista:

Parámetro Descripción Valores Recomendados
drop_rate Probabilidad de que un punto LiDAR no sea registrado 0.45
intensity_limit Umbral de intensidad con el que los puntos son protegidos 0.8
zero_intensity_drop Factor adicional de eliminación para puntos con intensidad baja 0.4
low_intensity_threshold Umbral de intensidad de los puntos que se consideran bajos 0.01
noise_std Ruido Gaussiano añadido 0.1 (desviación estándar del ruido Gaussiano aplicado a los puntos)
voxel_size amaño del voxel usado en el proceso de submuestreo, afectando la resolución de la nube de puntos 0.5 m

points_per_second vs Puntos por frame

El párametro principal que se tiene en cuenta para la densidad de las nubes de puntos es points_per_second. Sin embargo, es importante entender que este valor se distribuye equitativamente entre todas las nubes de puntos generadas en cada segundo. Por lo tanto, para ajustar la densidad real de los puntos por fotograma, es fundamental controlar la cantidad de frames generados por segundo. Esto se puede hacer ajustando el parámetro fixed_delta_seconds en la configuración del mundo cuando se usa el modo síncrono, donde FPS se obtiene como 1/fixed_delta_seconds en modo síncrono. Es importante no confundir los FPS del simulador con los FPS que se ven en pantalla.

  • FPS del simulador: Dependen del valor de fixed_delta_seconds. En modo síncrono, el simulador controla cuántos pasos (frames) se generan por segundo, lo que afecta directamente a la densidad de la nube de puntos.

  • FPS en pantalla: Dependen del rendimiento de la GPU y la tasa de refresco del monitor. Un simulador puede generar 10 FPS, pero la pantalla puede estar refrescando a 60 Hz.

Se han realizado diversas pruebas con la delta y points_per_second, utilizando como base los siguientes parámetros del sensor:

  • channels: 64
  • range: 100
  • rotation_frequency: 10
  • upper_fov: 30
  • lower_fov: -45
  • horizontal_fov: 360

Pruebas realizadas:

delta FPS points/sec Pts/frame (ideal) Pts/frame (drop) Pts/frame (voxel)
0.025s 40 1000000 25 000 15 000 5 500
0.05s 20 1000000 45 000 28 000 9 500
0.1s 10 1000000 80 000 55 000 11 000
0.2s 5 1000000 155 000 105 000 16 500
0.3s ~3.3 1000000 275 000 180 000 23 500
0.025s 40 500000 12 000 8 000 2 000
0.05s 20 500000 22 500 15 000 4 500
0.1s 10 500000 45 000 30 000 9 000
0.2s 5 500000 90 000 59 000 15 000
0.3s ~3.3 500000 130 000 87 000 15 000
0.025s 40 100000 2 500 1 500 800
0.05s 20 100000 4 500 3 000 1 500
0.1s 10 100000 9 200 6 000 3 000
0.2s 5 100000 17 000 11 000 4 500
0.3s ~3.3 100000 26 000 17 000 6 500

⚠️ Nota: Los valores pueden variar ligeramente entre frames, debido a:

  • Diferente número de objetos por frame (afecta Pts/frame)
  • Variación en las pérdidas (más puntos no registrados)
  • Filtrado por intensidad (mayor número de puntos por debajo del umbral)

Análisis detallado de los parámetros y sus usos

Se han realizado diversas pruebas con cada parámetro del sensor para analizar sus usos sin usar el submuestreo por vóxeles, utilizando como base los siguientes parámetros del sensor:

  • channels: 64
  • range: 100
  • rotation_frequency: 30
  • upper_fov: 30
  • lower_fov: -30
  • horizontal_fov: 360
  • points_per_second: 500.000
  • delta: 0.0025
  • drop_rate: 0.45
  • intensity_limit: 0.8
  • zero_intensity_drop: 0.4
  • low_intensity_threshold: 0.01
  • noise_std: 0.1

horizontal_fov

Determina el ángulo total en el plano horizontal que el LiDAR cubre durante cada rotación. En caminos sin asfaltar, normalmente se desea prestar atención principal a lo que hay delante del vehículo, ya que las rutas son más irregulares y estrechas. Un campo de visión amplio puede generar datos irrelevantes como árboles o vegetación lateral, mientras que uno acotado mejora el enfoque en el camino.

Recomendaciones de uso:

  • 90°–120°: Ideal para escaneo únicamente frontal. Se consiguen datos más enfocados y con menor ruido lateral, útil en senderos angostos o en tareas de detección de obstáculos frontales. Al concentrar los puntos en una menor zona, se logra un mejor nivel de detalle utilizando una menor cantidad de puntos. Sin embargo, existe el riesgo de no captar elementos importantes en curvas cerradas.
Ejemplo con 90º
  • 180°: Proporciona una vista semicompleta del entorno, útil en caminos rurales donde puede ser necesario observar también los laterales. Se consigue un buen balance entre foco frontal y contexto lateral que puede ser útil a pesar del aumento de puntos a procesar.
Ejemplo con 180º
  • 360°: Recomendado solo en situaciones donde es imprescindible analizar el entorno colmpleto. Con esta configuración se consigue la información total del entorno, pero puede aumentar innecesariamente el tamaño del dataset con puntos irrelevantes para el contexto específico.
Ejemplo con 360º

channels

Este parámetro se refiere al número de planos de escaneo en el eje vertical. Aumentar el número de canales mejora la resolución vertical de la nube de puntos, lo que significa que se generarán más puntos a diferentes alturas en un área determinada. Esto es útil cuando se necesita un detalle vertical mayor, como en el caso de terrenos irregulares.

Recomendaciones de uso:

  • 16 canales: Suficiente para caminos de tierra donde las variaciones en altura no son tan extremas y la prioridad es el rendimiento. Esto es útil para simulaciones en las que el detalle vertical no es tan crítico.
Ejemplo con 16 canales
  • 32 canales: Una opción equilibrada para caminos de tierra, donde es necesario captar más detalles del terreno y las elevaciones del camino sin generar un dataset excesivamente grande.
Ejemplo con 32 canales
  • 64 canales: Recomendado si el terreno es muy accidentado y se necesita capturar una gran cantidad de detalles verticales.
Ejemplo con 64 canales

range

El rango determina hasta qué distancia el LiDAR puede detectar objetos. Un mayor alcance permite capturar detalles de objetos lejanos, pero también puede generar nubes de puntos más dispersas. Para caminos irregulares, el alcance adecuado es crucial para detectar obstáculos a tiempo y ajustar la velocidad del vehículo.

  • 25 metros: Ideal para caminos estrechos donde los objetos se encuentran principalmente cerca. Ayuda a controlar el tamaño del dataset y la precisión en la detección de obstáculos cercanos. Se consigue un mejor detalle de los objetos cercanos al emplear todos los puntos del frame en un área menor, también pueden usarse un menor número de canales. Hay que controlas los puntos por segundo puesto, ya que si se pone ún numero elevado, no se llegan a usar al ser un espacio mucho más pequeño. En este ejemplo, se han reducido unos 5000 puntos en comparación con rangos más amplios.
Ejemplo con 25 metros
  • 50 metros: Útil para detectar objetos más alejados del vehículo sin perder mucha precisión por usarse los puntos en un espacio más amplio y sin espaciarse demasiado los canales.
Ejemplo con 50 metros
  • 100 metros: Puede ser útil en escenarios más abiertos, pero podría generar una nube de puntos menos precisa y con posibilidad de usar más canales para no perder demasiada precisión en objetos cercanos.
Ejemplo con 100 metros

upper_fov y lower_fov

Estos parámetros determinan el rango vertical que cubre el sensor LiDAR. Cuanto mayor sea la diferencia entre estos ángulos, mayor será el campo de visión del LiDAR en el eje vertical.

Recomendaciones de uso:

  • Ángulo reducido (15° a –15°): Ideal para caminos planos donde el enfoque es el camino y se necesita más detalle en obstáculos cercanos no muy elvados. Pero en caminos irregulares puede faltar información al no capturar bien las variaciones del terreno o en caso de que se quiera detectar la forma de objetos más grandes en zonas cercanas.
Ejemplo con 15 a -15º
  • Ángulo amplio (30° a –30°): Recomendado cuando se quiere captar tanto el entorno del vehículo como detalles de los objetos cercanos en el suelo, útil cuando se busca una visión más completa de los obstáculos cercanos. Detecta mejor las variaciones del terreno al usar un rango más amplio.
Ejemplo con 30 a -30º
  • Ángulos muy amplios (45 a -45 o más): Útil si se quiere una visión más completa del etorno o para terrenos muy complejos, pero se pueden llegar a generar muchos puntos irrelevantes que no proporcionan nada de información útil, como copas de los árboles. Si se quieren buenos detalles de los objetos sería necesario un mayor número de canales, ya que se esparcen por todo el rango vertical, y por lo tanto tambien un mayor número de puntos por frame, lo que lo puede volver más caro a pesar de no obtener resultado mucho mejores con respecto a 30º.
Ejemplo con 45 a -45º

rotation_frequency

Este parámetro se refiere a la velocidad a la que el LiDAR rota para escanear el entorno.

Recomendaciones de uso:

  • Frecuencia baja (5 Hz - 10 Hz). Se consigue una mayor densidad de puntos por revolución (el LiDAR gira más lento y captura más puntos en un mismo ángulo). Tiene una mayor utilida para entornos estáticos, pero en entornos dinámicos se pueden llegar a perder datos.
Ejemplo con 10 Hz
  • Frecuencia media (10 Hz - 20 Hz). Se consigue un mejor equilibrio entre densidad y actualización de los datos, ya que permite capturar suficientes detalles sin generar lagunas my grandes entre escaneos. Pero todavía se pueden llegar a perder datos, sobre todo con grandes velocidades.
Ejemplo con 30 Hz
  • Frecuencia alta (20 Hz - 30 Hz o más). Captura datos más frecuentemente, mejorando la percepción en movimiento. Reduce la densidad por revolución, por lo que es probable que se necesiten una mayor cantidad de puntos por segundo. Pero debido a que captura un ángulo mayor, es más recomendado para entornos dinámicos.
Ejemplo con 20 Hz

noise_std

Define la desviación estándar del ruido gaussiano añadido a cada punto de la nube de puntos.

Recomendaciones de uso:

  • Bajo (noise_std≤ 0.05). La nube de puntos sigue la forma original con poca distorsión, lo que resulta útil para entornos donde se necesita precisión, aunque se pierde realismo en la simulación.
Ejemplo con 0,05 de ruido
  • Moderado (0.05 ≤ noise_std ≤ 0.2). Puede ser útil para simulaciones más realistas, imitando sensores reales.
Ejemplo con 0,1 de ruido
  • Alto (noise_std > 0.2). La nube de puntos se vuelve más dispersa y menos precisa, se puede usar para sumular sensores con ruidos mucho más elevados.
Ejemplo con 0,2 de ruido

Nuevo mapa

Para la creación de un nuevo mapa simulando una zona de campamento se ha necesitado buscar nuevos modelos a traves de Sketchfab

Dataset