(3) Ejecute cartógrafo con su propio paquete de datos

Se han ejecutado varias demostraciones antes, de hecho, solo necesita grabar el rosbag en el mismo formato que antes para ejecutar su propio paquete. Según sus necesidades, incluye principalmente: láser (escaneo), codificador de engranajes (odom), navegación inercial (imu), señales de carretera estáticas (punto de referencia), etc.

Paso 1: Verifique el paquete de datos

Cartographer proporciona el programa cartographer_rosbag_validate para detectar si el paquete de datos se ajusta al formato de ejecución del cartógrafo. La documentación oficial del sitio web dice que el programa cartographer_rosbag_validate es poderoso, no solo puede detectar si los datos están completos, sino que también da una sugerencia de formato de datos razonable, pero el editor no lo ha encontrado en uso real.
Sin embargo, esta herramienta sigue siendo útil. Permítanme decir que el editor más utilizado es que puede conocer el frame_id de cada dato a través de esta herramienta. Esto es muy importante. Frame_id es el nombre de cada componente en el urdf.
[¿Por qué?]¿Qué es urdf? Urdf es una descripción de la conexión espacial tridimensional entre los distintos hardware del robot ¿Cuál es el uso de urdf? Si solo tiene una fuente de datos láser láser, es posible que la función de urdf no se refleje, pero si tiene una cámara y una fuente de datos láser, debe mostrar las señales de carretera históricas vistas por la cámara debajo del mapa láser durante el proceso de golpe. Convierta al sistema de coordenadas láser, y en este momento necesitamos saber la postura espacial de la cámara en el sistema de coordenadas láser (parámetro externo entre la cámara y el láser). Este urdf es proporcionar manualmente el archivo de entrada del parámetro externo. Esta bien También puede preguntar: ¿Por qué debería convertir los puntos de referencia vistos por la cámara al sistema de coordenadas láser? Esta respuesta es la función del hito estático mencionado en el artículo anterior, es decir, se utiliza para localizar rápidamente el robot. Tan pronto como la cámara ve el punto de referencia, inmediatamente conoce su propia ubicación en el mapa y luego puede navegar y navegar. Puede aceptar algunos pequeños errores en los parámetros proporcionados por urdf, el cartógrafo puede corregir estos pequeños errores de pose, pero si los parámetros externos proporcionados por urdf no son comparables, el cartógrafo no es una panacea.

Como usar

rosrun cartographer_ros cartographer_rosbag_validate -bag_filename your_bag.bag
Paso 2: crea un archivo de configuración .lua

Cartographer es muy flexible y puede configurar varios parámetros de tiempo de ejecución del robot. Este archivo de configuración está escrito en texto lua y su directorio está en src / cartographer_ros / cartographer_ros / configuration_files.
Nota: Idealmente, un archivo de configuración lua corresponde a un robot , En lugar de corresponder a un paquete de datos.
[Problema a resolver]De hecho, de acuerdo con la demostración que ejecutamos anteriormente, podemos tomarlo directamente y necesitamos proporcionar el correspondiente map_frame, tracking_frame, updated_frame y odom_frame en el archivo lua. Después de la verificación, solo necesita completar tracking_frame y pubilish_frame. Tracking_frame y pubilish_frame generalmente corresponden a base_link, que es el sistema de coordenadas del centro del robot, y se deben agregar los detalles funcionales específicos (es decir, map_frame, tracking_frame, updated_frame y odom_frame en el programa respectivamente).

Introducción de algunos parámetros:

  1. num_laser_scans : el número de lidares utilizados, tipo de tema sensor_msgs / LaserScan
    Nota: si solo se usa un lidar, la interfaz de tema del cartógrafo es / scan.
    Si se usan múltiples lidars, las interfaces de tema correspondientes del cartógrafo son / scan_1, / scan_2.
  2. num_multi_echo_laser_scans : el número de láseres multi-eco utilizados, tipo de tema sensor_msgs / MultiEchoLaserScan
    Nota: igual que num_laser_scans, solo se utilizan diferentes tipos de datos de radar
  3. num_point_clouds : el número de transmisores de nube de puntos utilizados, tipo de tema sensor_msgs / PointCloud2
    Nota: igual que num_laser_scans, solo se utilizan diferentes tipos de datos
  4. use_landmarks : si hay una fuente de entrada de datos de referencia
  5. use_nav_sat : si se trata de datos útiles de GPS (aún no lo he probado, me encantaría probarlo)
  6. num_accumulated_range_data : es para acumular los datos láser de varios temas como un escaneo completo y pasarlos al procesamiento frontal del cartógrafo. También hay un parámetro num_subdivisions_per_laser_scan y num_accumulated_range_data parámetro. Para per_s, num_accumulated_range_data es acumular algunas per_s.
    [¿Por qué? ]¿Por qué dividir el láser en varias partes y luego acumularlas nuevamente? Esto comienza con el transmisor láser 2d. El lidar 2d tiene solo un punto de lanzamiento, pero ¿por qué puede escanear todo el plano 2d? Debido a que este dispositivo tiene un rotador de alta velocidad, que puede conducir el punto de lanzamiento para rotar a alta velocidad y luego formar un plano 2D, ¿cómo se relaciona esto con el problema anterior? Por ejemplo, un plano láser 2D puede estar compuesto por 360 puntos láser (lo que llamamos un marco de datos), cada punto láser está separado por 1 grado, debido a este principio de imagen giratoria, el orden formado entre cada punto láser tiene El orden es diferente, por lo que la marca de tiempo de cada punto láser es diferente, entonces, ¿cómo se relaciona esto con los parámetros num_subdivisions_per_laser_scan anteriores? Sabemos que el robot se está moviendo todo el tiempo. Si el robot se mueve rápido, es posible que no se escanee el marco láser y que el robot se haya movido a otra ubicación, de modo que el robot obtenga un marco de datos láser en varias posiciones. Obviamente, estos datos son problemáticos (este problema es la distorsión del movimiento de lidar), ¿cómo resolverlo? Es corregir cada punto del láser de un marco de láser con la pose actual del robot (usualmente usa odom e imu para corregir) , Debido a que su frecuencia es relativamente alta, puede alcanzar los 100 Hz por segundo), ¿entonces esto parece no tener nada que ver con dividir el láser en varias partes? Sí, es irrelevante. Esto se debe a que solo consideramos el caso de un solo lidar. Si tenemos dos lidares trabajando al mismo tiempo, los datos de los dos lidares pueden alinearse en orden cronológico después de dividirse en varias partes. ¿Por qué? ¿Quieres alinear? ¿Por qué lo dices?
    Inserte la descripción de la imagen aquí
    Los parámetros en las opciones restantes generalmente no cambiarán, pero de hecho algunos todavía necesitan ser cambiados, vea el caso. Adjuntar mi archivo lua
    Inserte la descripción de la imagen aquí
Paso 3: crea un archivo .launch basado en tu robot

De acuerdo con la demostración anterior, intente configurar su urdf (necesita publicar tf sin urdf) ​​y ver si el frame_id de su tf tree laser, imu, odom corresponde correctamente en urdf o / tf. tracking_frame y pubilish_frame son tan buenos como base_link. No creo que haya ningún otro problema. Adjunte mi archivo de inicio, ¡Buena suerte!
Inserte la descripción de la imagen aquí
Ejecutar captura de pantalla de demostración

51 artículos originales publicados · Me gusta 13 · Visitantes más de 20,000

Supongo que te gusta

Origin blog.csdn.net/windxf/article/details/104364864
Recomendado
Clasificación