Cam_lidar_calibration de lidar y calibración conjunta de cámara

Sobre la instalación y uso de cam_lidar_calibration (2021)

1. Introducción

Entre los muchos programas de código abierto para la calibración de cámaras y lidar, cam_lidar_calibration funciona relativamente bien. El resto de los programas de código abierto son complicados en el proceso de calibración o tienen demasiados errores. El paquete de código abierto ha sufrido algunas revisiones. Los siguientes son algoritmos de código abierto de la serie cam_lidar_calibration

tiempo papel correspondiente Análisis de algoritmos Dirección de algoritmo de código abierto
2019 (versión más original) Calibración extrínseca automática entre una cámara y un Lidar 3D usando correspondencias de punto y plano 3D Usando el tablero de ajedrez como objetivo, usando la forma geométrica del tablero de calibración, calcule el punto de la línea media y el vector normal en la nube de puntos LIDAR, y obtenga su punto de la línea media y el vector normal debajo de la cámara, y complete la calibración después de la optimización. https://gitlab.acfr.usyd.edu.au/sverma/cam_lidar_calibration
2020 ídem Igual que arriba (se hizo una pequeña modificación de acuerdo con el código de 2019, pero la documentación debe pagarse en CSDN) https://github.com/AbangLZU/cam_lidar_calibration
2021 Optimización de la selección de muestras para una calibración robusta de cámaras lidar
中文
También es el laboratorio ACFR de la Universidad de Sydney, basado en la versión mejorada en 2019, adopta la variabilidad de la calidad (VOQ) para reducir el error de los datos de selección del usuario, supera el problema de sobreajuste y es más robusto que el proceso de calibración de la versión 2019. https://github.com/acfr/cam_lidar_calibration

2. Prueba de instalación de código

La documentación oficial es muy detallada y proporciona instalación local e instalación de Docker.

Solo se prueba la instalación local de Ubuntu20.04, tome la instalación local como ejemplo.

El autor del código en Github es Ubuntu18.04, y algunos códigos y comandos deben modificarse de acuerdo con el método del sitio web oficial. Aquí están los pasos de instalación:

  1. instalar dependencias

    sudo apt update && sudo apt-get install -y ros-noetic-pcl-conversions ros-noetic-pcl-ros ros-noetic-tf2-sensor-msgs
    # Ubuntu20.04默认为python3
    sudo apt install python3-pip   
    pip3 install pandas scipy
    
  2. Descargar código compilar e instalar

    mkdir -p cam_lidar_calibration_ws/src
    cd cam_lidar_calibration_ws/src
    git clone https://github.com/acfr/cam_lidar_calibration.git
    cd ..
    catkin build
    source devel/setup.bash
    

    Si encuentra un error sobre optimizar.h al compilar #include <opencv/cv.hpp> no existe, modifíquelo a #include <opencv2/opencv.hpp>

  3. Prueba: en el código fuente, el autor debe producir el conjunto de datos de calibración para la prueba e ingresar el comando para realizar la calibración de la prueba:

    roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=true
    

    El programa se calibra de acuerdo con pose.csv en la carpeta am_lidar_calibration_ws/src/cam_lidar_calibration/data/vlp/, y genera una cámara de calibración y un archivo de parámetros externos lidar en esta carpeta, y cada línea es el resultado de la iteración.

    Luego obtenga los resultados de la calibración de evaluación

    roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_quickstart.csv" visualise:=true
    
  4. Corre para calibrar los parámetros externos de tu propia cámara y lidar.

    • Hacer el tablero de calibración: el tablero de calibración debe ser lo más grande posible, el archivo de calibración se descarga en PDF , con el tamaño establecido, el autor usó A1 - cuadrados de 95 mm - vértices de 7x5, cuadrados de 8x6 . Fije el papel de tablero de ajedrez en un tablero para que sus centros estén alineados tanto como sea posible y los bordes se mantengan paralelos. Debe configurar los parámetros más tarde. La siguiente imagen muestra vértices internos de tamaño A1 de 7*5 y un cuadrado de 95 mm.
      inserte la descripción de la imagen aquí

    • Configuración de parámetros: modificaciones importantes cam_lidar_calibration/cfg/camera_info.yamlyparams.yaml

      • camera_info.yaml: establece si se trata de una cámara de ojo de pez, ancho y alto de píxel, matriz de referencia interna y coeficiente de distorsión. Autocalibración de los parámetros de la cámara, tutorial de calibración oficial de ROS

        distortion_model: "non-fisheye"
         width: 640
        height: 480
        D: [0,0,0,0]
        K: [617.68,0.0,325.963,0.0,617.875,242.513,0.0,0.0,1]
        
      • params.yaml

        # Topics
        camera_topic: "/camera/color/image_raw"
        camera_info: "/camera/color/camera_info"
        lidar_topic: "/velodyne_points"
        
        #Dynamic rqt_reconfigure default bounds,点云的选取范围
        feature_extraction:
        x_min: -10.0
        x_max: 10.0
        y_min: -8.0
        y_max: 8.0
        z_min: -5.0
        z_max: 5.0
        
        # Properties of chessboard calibration target
        chessboard:
        pattern_size:  #棋盘的内部顶点7*5
        height: 7
        width: 5  
        square_length: 95 #棋盘格的长度mm
        board_dimension:  # 安装棋盘打印的背板的宽度和高度。
        width: 594
        height: 897 
        translation_error: #棋盘中心与背板中心的偏移量(见下图)。
        x: 0
        y: 0
        

        El desplazamiento entre el centro del tablero de ajedrez y el centro del backplane
        inserte la descripción de la imagen aquí

    • Comienza oficialmente la calibración:

      • Inicie el programa para recopilar datos de la tabla y ejecute el comando:

        roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false
        

        Aparecerán las ventanas RVIZ y rqt_reconfigure En RVIZ, paneles->display modifica el tema de la cámara y el frame_id correspondiente a la nube de puntos lidar.

      • Recopilación de datos: segmente la nube de puntos de la placa de calibración.
        Ajuste los valores máximo y mínimo de xyz de rqt_reconfigure/feature_extraction para separar la nube de puntos de la placa de calibración del entorno circundante para que solo se muestre el tablero de ajedrez. Si el tablero de ajedrez no está completamente aislado, puede afectar el ajuste plano del tablero de ajedrez y también causar un gran error en el tamaño del tablero de ajedrez. La siguiente figura es el efecto antes y después de filtrar la nube de puntos:
        inserte la descripción de la imagen aquí
        Después de filtrar la nube de puntos del entorno circundante, haga clic en Capturar muestra para recolectar muestras en rviz, y aparecerá el cuadro verde para representar el plano de la placa de calibración ajustado de acuerdo con la nube de puntos, como se muestra en la figura: Si el rectángulo verde ajustado no aparece, debe reajustar el rango XYZ de la nube de puntos y luego capturar muestras para recolectar muestras
        inserte la descripción de la imagen aquí
        . Se requieren al menos 7 anillos para que la nube de puntos láser se imprima en la placa de calibración.

      • Calibración:
        Recopile al menos 3 muestras para ejecutar la calibración. Cuantas más muestras, mejor, es mejor recopilar más de 10 muestras y luego hacer clic en optimizar en rviz para calibrar. Durante el proceso de optimización, se generará una carpeta con la fecha y la hora actuales en cam_lidar_calibration/data para almacenar las imágenes recopiladas, la nube de puntos pcd, la pose y los archivos de referencia externa de la cámara y lidar después de la calibración.

      • Evaluar parámetros y error de reproyección:

        roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/2022-02-10_13-48-12/calibration_2022-02-10_14-13-41.csv" visualise:=true
        

        Aparece una imagen de efecto de reproyección:
        inserte la descripción de la imagen aquí
        Los parámetros de calibración y los errores de reproyección aparecen en el terminal:

        ---- Calculating average reprojection error on 12 samples ---- 
        1/ 12 | dist= 4.069m, dimerr=  39.768mm | error:   2.948pix  -->  20.033mm
        2/ 12 | dist= 3.759m, dimerr=  43.992mm | error:   2.358pix  -->  14.689mm
        3/ 12 | dist= 3.038m, dimerr=  61.650mm | error:   0.240pix  -->   1.213mm
        4/ 12 | dist= 2.951m, dimerr=  52.597mm | error:   0.129pix  -->   0.628mm
        5/ 12 | dist= 2.913m, dimerr= 120.838mm | error:   0.782pix  -->   3.798mm
        6/ 12 | dist= 2.665m, dimerr=  76.147mm | error:   3.219pix  -->  14.106mm
        7/ 12 | dist= 2.482m, dimerr=  69.678mm | error:   2.728pix  -->  11.332mm
        8/ 12 | dist= 2.307m, dimerr=  36.923mm | error:   2.659pix  -->  10.284mm
        9/ 12 | dist= 2.118m, dimerr= 110.454mm | error:   6.066pix  -->  21.332mm
        10/ 12 | dist= 2.504m, dimerr=  66.145mm | error:   1.402pix  -->   5.853mm
        11/ 12 | dist= 2.845m, dimerr=  11.296mm | error:   1.408pix  -->   6.616mm
        12/ 12 | dist= 2.828m, dimerr=  98.653mm | error:   0.719pix  -->   3.536mm
        
        Calibration params (roll,pitch,yaw,x,y,z): -1.5416,-0.0047,-1.4423,0.0059,-0.0062,0.0149
        
        Mean reprojection error across  12 samples
        - Error (pix) =  2.055 pix, stdev =  1.663
        - Error (mm)  =  9.452 mm , stdev =  7.007
        

Basado en el código anterior, lo cambié un poco, la calibración conjunta de la cámara lidar en esto será más precisa https://github.com/Xujianhong123Allen/sensor_calibration/tree/master/cam_lidar_calibration


Supongo que te gusta

Origin blog.csdn.net/weixin_41681988/article/details/122867113
Recomendado
Clasificación