Guía detallada paso a paso para la calibración de parámetros internos de cámaras ROS

Autor: Herman Ye @Galbot @Auromix
Versión: V1.0
Entorno de prueba: Ubuntu20.04, ROS1 Noetic
Fecha de actualización: 14/09/2023
Nota 1 : El hardware de este artículo es compatible con @Galbot.
Nota 2 : @Auromix es una organización de código abierto para entusiastas de la robótica.
Nota 3 : Debido al nivel limitado del autor, puede haber errores en el siguiente contenido.
Nota 4 : Este artículo cita directamente imágenes y otro contenido de los documentos oficiales de cada paquete, y los derechos de autor pertenecen a cada funcionario.

¿Por qué calibrar?

El propósito de la calibración de la cámara es determinar los parámetros internos y externos de la cámara para corregir la imagen y asignar las coordenadas de la imagen a coordenadas mundiales, o de coordenadas mundiales a coordenadas de imagen. Este proceso es uno de los pasos clave en las tareas de visión por computadora y percepción tridimensional y tiene los siguientes propósitos principales:

  1. Reducir la distorsión : las lentes y los sensores de las cámaras pueden introducir distorsiones radiales y tangenciales, lo que hace que las líneas rectas de una imagen se vuelvan curvas o que la forma de los objetos sea imprecisa. Al calibrar la cámara, estas distorsiones se pueden corregir para que la imagen sea más precisa.
    Insertar descripción de la imagen aquí

  2. Determinar los parámetros internos (parámetros intrínsecos) : los parámetros internos incluyen la distancia focal, las coordenadas del punto principal y los parámetros de distorsión de la cámara. Estos parámetros son factores importantes para describir cómo la cámara captura el mundo. Sus valores precisos son cruciales para tareas como calcular la profundidad, la distancia y la actitud. La calibración de parámetros intrínsecos de la cámara es para obtener parámetros internos precisos.

distortion_model: "plumb_bob"
D: [0.0, 0.0, 0.0, 0.0, 0.0]
K: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 1.0]
P: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 0.0, 1.0, 0.0]
  1. Determinar parámetros externos : Los parámetros externos incluyen la posición y orientación de la cámara. Estos parámetros describen la posición y orientación de la cámara en relación con el sistema de coordenadas mundiales, lo que permite el mapeo de las coordenadas de la imagen a las coordenadas mundiales, lo cual es útil para el agarre del brazo robótico.
    Este artículo no incluye la calibración de parámetros externos. La calibración de parámetros externos de la cámara se explicará en el artículo sobre la calibración ojo-mano del brazo robótico.
        <!-- xyz="-0.162861 0.177661 -0.626113" rpy="1.45853 -2.03383 1.49474" -->
        <node pkg="tf2_ros" type="static_transform_publisher" name="camera_link_broadcaster"
            args="-0.162861 0.177661 -0.626113   -0.173987 -0.703383 -0.14907 0.672873 Link6 left_arm_camera_link" />
  1. Estimación de la pose de la cámara : la calibración de la cámara también se puede utilizar para estimar la pose de la cámara al capturar la imagen, es decir, la rotación y traslación de la cámara. Esto es crucial para aplicaciones como la realidad virtual, la realidad aumentada, la navegación y el posicionamiento de robots.

Principios de calibración[seleccionado]

Calibración usando OpenCV

Para conocer el principio de calibración de la cámara a través de OpenCV, consulte la documentación de calibración de cámara OpenCV y reconstrucción 3D .
Insertar descripción de la imagen aquí

calibración-de-cámara-ros-noetic

El kit de herramientas de calibración de cámara ros-noetic se utiliza aquí para calibrar fácilmente la cámara en ROS1 Noetic.
camera_calibrationEl paquete es un paquete ROS que permite una fácil calibración de cámaras monoculares o estéreo mediante tableros de ajedrez.

Contenido relacionado con parámetros internos en la información de la cámara.

Tomando como ejemplo la cámara a color Intel Realsense, la siguiente es la información para la cámara a color.

# rostopic echo /right_arm_camera/color/camera_info
---
header: 
  seq: 32308
  stamp: 
    secs: 1694683940
    nsecs: 530882359
  frame_id: "right_arm_camera_color_optical_frame"
height: 720
width: 1280
distortion_model: "plumb_bob"
D: [0.0, 0.0, 0.0, 0.0, 0.0]
K: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 0.0, 1.0, 0.0]
binning_x: 0
binning_y: 0
roi: 
  x_offset: 0
  y_offset: 0
  height: 0
  width: 0
  do_rectify: False
---
header: 
  seq: 32309
  stamp: 
    secs: 1694683940
    nsecs: 564413071
  frame_id: "right_arm_camera_color_optical_frame"
height: 720
width: 1280
distortion_model: "plumb_bob"
D: [0.0, 0.0, 0.0, 0.0, 0.0]
K: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 0.0, 1.0, 0.0]
binning_x: 0
binning_y: 0
roi: 
  x_offset: 0
  y_offset: 0
  height: 0
  width: 0
  do_rectify: False
---

Estos incluyen parámetros relacionados con los parámetros internos de la cámara:

Cuando se trata de parámetros internos de la cámara, los tres parámetros comunes son D, Ky P.Además, el modelo de distorsión relacionado también está relacionado.

  1. DCoeficientes de distorsión (coeficientes_de_distorsión):
    • Des una matriz, que normalmente contiene cinco elementos [k1, k2, p1, p2, k3], que describe la distorsión radial y tangencial en las imágenes de la cámara.
    • k1y k2son los coeficientes de distorsión radial, que describen la forma curva de la lente y suelen ser números negativos.
    • p1y p2son coeficientes de distorsión tangencial, que se utilizan para describir la asimetría de distorsión de la lente y suelen ser valores muy pequeños.
    • k3Se trata de un coeficiente de distorsión radial de orden superior, que suele ser muy pequeño y en ocasiones incluso insignificante.
    • DSe utiliza para representar la distorsión radial y tangencial.
D: [0.0, 0.0, 0.0, 0.0, 0.0]
  1. KMatriz de parámetros internos de la cámara (camera_matrix):
    • Kes una matriz de 3x3 que incluye los parámetros internos de la cámara y se utiliza para asignar puntos tridimensionales en el sistema de coordenadas de la cámara a coordenadas bidimensionales en el plano de la imagen.
    • KLos elementos principales incluyen:
      • K[0]y K[4]son los componentes de la distancia focal en los ejes xey de la imagen, generalmente en píxeles.
      • K[2]y K[5]son las coordenadas del centro óptico en los ejes x e y de la imagen, también en píxeles.
      • K[8]Generalmente 1, que es un parámetro de normalización.
    • KContiene información sobre la distancia focal y el punto principal.
K: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 1.0]
  1. PMatriz de proyección (projection_matrix):
    • Pes una 3x4matriz que contiene los parámetros de proyección de la cámara y se utiliza para asignar puntos tridimensionales en el sistema de coordenadas de la cámara al sistema de coordenadas de la imagen.
    • PLos elementos incluyen información de parámetros internos y externos.
    • donde P[0]y P[5]corresponden a la distancia focal fxy respectivamente fy, que se utilizan para asignar las coordenadas xey del sistema de coordenadas de la cámara al sistema de coordenadas de la imagen.
    • P[2]y P[6]corresponden a las coordenadas xey del centro óptico cxy cy.
    • P[3]y P[7]suelen ser 0, utilizados para representar que no hay rotación ni traslación de la perspectiva.
    • P[10]Generalmente 1, que es un parámetro de normalización.
    • La matriz de proyección Pcontiene los parámetros internos de la cámara y los parámetros de distorsión.
P: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 0.0, 1.0, 0.0]
  1. distortion_model"(Modelo de distorsión):
    distortion_modeles un campo en la información de calibración de la cámara, que se utiliza para describir el modelo de distorsión de la cámara.
    El modelo de distorsión es un modelo matemático que se utiliza para describir los efectos de distorsión producidos por las lentes de las cámaras.
    En visión por computadora, la distorsión generalmente se divide en dos tipos principales: distorsión radial y distorsión tangencial, y los modelos de distorsión se utilizan para modelar y corregir estas distorsiones.
    Plomada (modelo de distorsión de pico) :
  • El modelo de distorsión "plomb_bob" es uno de los modelos de distorsión más comunes y también es el modelo de distorsión predeterminado. Suele utilizarse para describir la distorsión radial (distorsión radial) y la distorsión tangencial (distorsión tangencial).
  • La distorsión radial se debe principalmente a que la forma de la lente no es completamente circular, lo que produce una distorsión entre los píxeles cerca del centro de la imagen y los píxeles en los bordes de la imagen. Esta distorsión a menudo se modela utilizando funciones polinómicas.
  • La distorsión tangencial se debe a que la lente de la cámara no está completamente paralela al plano de la imagen, lo que genera una distorsión de los píxeles cerca del centro de la imagen. La distorsión tangencial también suele modelarse con funciones polinómicas.
  • El modelo de distorsión “plomb_bob” utiliza coeficientes de distorsión radial y tangencial ( D) para describir estas dos distorsiones.

Materiales calibrados

  1. Tablero de ajedrez : Debe preparar un tablero de ajedrez en blanco y negro de tamaño moderado. Calcule el tamaño.8x6 Un tablero de ajedrez con un tamaño cuadrado de 9X7 es una opción común. Sin embargo, tenga en cuenta que cuando el número de puntos de las esquinas internas es relativamente pequeño, la calibración puede que no sea lo suficientemente preciso.

Aquí se utiliza el tamaño calculado11x8 . Como ejemplo se utiliza una cuadrícula de tablero de ajedrez en blanco y negro de sustratos de aluminio de tamaño cuadrado con una longitud lateral de. Estas placas de calibración fabricadas tienen una mayor precisión de calibración.12x915mm

El tamaño del cuadrado y el tamaño del cálculo son términos acuñados para facilitar la comprensión y se explicarán más adelante.

Insertar descripción de la imagen aquí
Si no tienes un tablero de calibración a mano, también puedes hacer un tablero de ajedrez online e imprimirlo en papel A4.
Los parámetros recomendados son los siguientes:

Nombre Valor
Tipo de objetivo Tablero de damas
Ancho del tablero 297
Altura del tablero 210
Filas (tamaño cuadrado) 7
Columnas (tamaño cuadrado) 9
Ancho de la ficha [mm] 25

Insertar descripción de la imagen aquí

Nota : Debe quedar claro que el tamaño calculado del tablero de ajedrez se refiere al número de puntos de las esquinas internas. Según la descripción de la documentación de OpenCV, por ejemplo, el tamaño calculado 8x6 del tablero de ajedrez en realidad contiene 9x7cuadrados físicos, es decir, el cuadrado el tamaño es 9X7.

Como se muestra en la figura, solo hay ocho puntos de esquina internos (círculos rojos en la figura), es decir, el tamaño de fila calculado es 8y el número real de cuadrados de fila es 9.

Insertar descripción de la imagen aquí

Después de imprimir el tablero de ajedrez, es necesario fijarlo a una superficie plana.
Insertar descripción de la imagen aquí

  1. Buenas condiciones de iluminación : asegúrese de que el área donde se toma la imagen de calibración de la cámara esté bien iluminada y libre de obstrucciones u otros patrones de tablero de ajedrez.

  2. Cámara : La cámara que necesita ser calibrada se ha conectado a ROS1 Noetic y rostopicse ha utilizado el tema de obtención de imágenes publicadas por la cámara.

Requisitos que debe cumplir la cámara:

Al mismo tiempo, el hardware de la cámara debe proporcionar nodos adecuados para que ROS pueda publicar los temas de imágenes necesarios.

Iniciar calibración

Cámara monocular RGB (monocular)

Aquí hay right_arm_cameraun ejemplo:

  • 1.Descargarros-noetic-camera-calibration
sudo apt install ros-noetic-camera-calibration -y
  • 2. Modificar los parámetros a los de la cámara a calibrar,
    los parámetros a obtener son los siguientes:
parámetro Referencia explicar
-tamaño 8x6 Tamaño de cálculo del tablero de ajedrez 8 filas x 6 columnas
-cuadrado 0.025 La longitud del lado del cuadrado del tablero de ajedrez es de 0,025 metros (25 mm).
imagen:= /right_arm_camera/color/image_raw Tema de imagen de cámara en color para la cámara llamada right_arm_camera
cámara:= /cámara_brazo_derecho cámara llamada right_arm_camera

Consulte el documento camera_calibration para obtener una explicación de los parámetros .

  • 3. Ejecute el programa de calibración.
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/right_arm_camera/color/image_raw camera:=/right_arm_camera

Nota: Debido a que la herramienta de calibración buscará set_camera_infoel servicio del nodo de la cámara, si no se puede iniciar correctamente, agregue los siguientes parámetros al comando

 --no-service-check

La siguiente imagen muestra la apertura normal del software de calibración:
Insertar descripción de la imagen aquí

  • 3. Ajuste la placa de calibración.
    Ajuste la placa de calibración en el siguiente orden para que la cámara pueda tomar tantas fotografías efectivas desde diferentes ángulos de visión como sea posible:
  1. Mueva la placa de calibración hacia adelante y hacia atrás.
  2. Mueva la placa de calibración hacia arriba y hacia abajo.
  3. Mueva la placa de calibración hacia la izquierda y hacia la derecha.
  4. Gire la placa de calibración a lo largo del eje de guiñada.
  5. Gire la placa de calibración a lo largo del eje de paso.
  6. Gire la placa de calibración a lo largo del eje Roll

Insertar descripción de la imagen aquí

Cuando los resultados de X, Y, Tamaño e Inclinación estén todos verdes y sean muy buenos, haga clic CALIBRATEpara realizar el cálculo de calibración.
Una vez completado el cálculo de calibración, haga clic SAVEpara guardar los resultados de la calibración.

Los resultados guardados se guardarán automáticamente en /tmpun directorio llamadocalibrationdata.tar.gz

('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

Extraerlo a $HOMEun directorio con el siguiente comando

# Create dir
mkdir ~/camera_calibration_result/
# Unzip
tar -xzvf /tmp/calibrationdata.tar.gz -C ~/camera_calibration_result/
# Go home
cd ~

Insertar descripción de la imagen aquí

Resultados de calibración

Ver $HOMElos resultados de calibración extraídos al directorio ost.txto ost.yaml:

# ost.txt
# oST version 5.0 parameters


[image]

width
1280

height
720

[narrow_stereo]

camera matrix
911.053619 0.000000 651.739848
0.000000 906.641596 351.747917
0.000000 0.000000 1.000000

distortion
0.102865 -0.173613 0.001142 0.005375 0.000000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
918.415080 0.000000 660.158706 0.000000
0.000000 923.612822 352.392856 0.000000
0.000000 0.000000 1.000000 0.000000
# ost.yaml
image_width: 1280
image_height: 720
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [911.05362,   0.     , 651.73985,
           0.     , 906.6416 , 351.74792,
           0.     ,   0.     ,   1.     ]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.102865, -0.173613, 0.001142, 0.005375, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [918.41508,   0.     , 660.15871,   0.     ,
           0.     , 923.61282, 352.39286,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]

Comparándolo con los resultados de la calibración original de fábrica de Intel, podemos encontrar que los parámetros son casi los mismos:

D: [0.0, 0.0, 0.0, 0.0, 0.0]
K: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P: [911.4010620117188, 0.0, 645.8338623046875, 0.0, 0.0, 910.145263671875, 347.9687194824219, 0.0, 0.0, 0.0, 1.0, 0.0]

Hacer un seguimiento

Para cámaras normales no calibradas, puede usar la cámara para actualizar los datos de los parámetros internos en este momento.
Para cámaras Intel Realsense, consulte la descripción de MartyG . Las cámaras Realsense han sido marcadas antes de salir de fábrica, por lo que generalmente no es necesario marcar el interno. parámetros nuevamente.

Por lo tanto, este artículo solo toma como ejemplo la cámara Realsense, y aún es aplicable a otras cámaras que requieren calibración manual.

MartyG
Hace 3 años Editado
Además de la herramienta Calibrador dinámico, también puede utilizar una herramienta de calibración en chip integrada en el programa RealSense Viewer para probar la cámara y proporcionar un valor de "verificación de estado" para la calibración. También hay una herramienta Tara en el Visor para mejorar la precisión de la medición de profundidad. Ambas herramientas se pueden encontrar en un menú bajo la opción Más en la parte superior del panel lateral de opciones del Visor, e Intel ha publicado una guía técnica para el uso de la calibración y tara en el chip.
https://dev.intelrealsense.com/docs/self-calibration-for-
Depth-cameras Recomendaría usar el calibrador dinámico cuando necesite realizar una calibración completa y sólida de los componentes del generador de imágenes de la cámara y usar la calibración en chip para controles más regulares.
También existe la opción de probar la calidad de la imagen de profundidad y recibir comentarios al respecto (como la cantidad de error) utilizando la herramienta de calidad de profundidad.
La versión normal de la herramienta Calibrador dinámico solo calibra los extrínsecos porque son los extrínsecos los que tienen el mayor efecto en la calidad de la profundidad. Los usuarios de la versión OEM de la herramienta también tienen la opción de calibrar los intrínsecos, aunque ese sistema está dirigido a departamentos de ingeniería e instalaciones de fabricación, y el 99% de los usuarios de RealSense no lo necesitarán.

Algunos materiales de referencia.

https://wiki.ros.org/image_pipeline/CameraInfo
http://wiki.ros.org/camera_calibration
http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration

Supongo que te gusta

Origin blog.csdn.net/m0_56661101/article/details/132732905
Recomendado
Clasificación