Progreso febrero 2024 - RoboticsURJC/tfg-dcampoamor GitHub Wiki

Progreso febrero 2024

SEMANA 38 (29/01/2024-04/02/2024)

SEMANA 39 (05/02/2024-11/02/2024)

SEMANA 40 (19/02/2024-25/02/2024)

SEMANA 41 (26/02/2024-03/03/2024)

SEMANA 38 (29/01/2024-04/02/2024)

  • Cálculo de parámetros intrínsecos a la cámara utilizada para la detección de objetos

    Para comprobar si la primera calibración de la cámara C270 de Logitech había sido buena, se llevaron a cabo diez calibraciones más para comprobar los resultados entre sí con diferentes imágenes tomadas con el mismo chess board (chess_board_7x10.pdf).

    Una vez obtenidos los resultados de estas calibraciones, se calculó la media de las mediciones similares, despreciando la calibración que se consideraba un pico espúreo, y obteniendo finalmente la matriz K de parámetros intrínsecos de la cámara.

    Matriz K de parámetros intrínsecos

    Matriz K resultados

  • Cálculo de Transformaciones de sistemas de coordenadas

    Junto con las matrices de Rotación R y la matriz de Traslación T de la cámara, se realizó el cálculo de la transformación del sistema de coordenadas que viene definido por la multiplicación de las tres matrices.

    Para poder llevar a cabo este cálculo, se instaló la cámara en un trípode, situado a 33cm de altura del plano suelo, y con una inclinación de la cámara de 29º, cuya medición se corroboró con la aplicación de ERGONAUTAS RULER - Medición de ángulos en fotografías y vídeos de la Universidad Politécnica de Valencia.

    ERGONAUTAS

    Para el cálculo de la matriz de rotación, se utilizó la matriz relativa al giro en el eje Y, puesto que se presupone la mesa sobre la que está apoyado el trípode el plano suelo, y por tanto, la altura a la que se encuentra la cámara se considera el eje Z del mismo, siendo utilizado este dato para la matriz de traslación, en la que forzaremos que únicamente tenga valores en esta componente para simplificar estas pruebas.

    Rotacion eje Y

    Matriz R Matriz T

    Una vez definidas todas las matrices y cálculos individuales de las mismas, que pueden encontrarse detalladas en el documento Transformaciones de sistemas de coordenadas.xlsx, se lleva a cabo la multiplicación.

    Matriz KRT resultado

SEMANA 39 (05/02/2024-11/02/2024)

  • Pruebas de distancia del centroide de un punto

    Para llevar a la práctica los cálculos de las transformaciones de sistemas de coordenadas se realizó un programa pos_centroide.py en python que utiliza OpenCV con un filtro de color para calcular el centroide de un punto que se vea a través de la cámara web Logitech C270 conectada por USB al ordenador, y que devuelva el resultado en pixeles, para posteriormente poder pasarlo a ópticas y finalmente de 2D a 3D proyectando el punto y mostrando las coordenadas X,Y,Z.

    Durante la elaboración de este programa, se obtuvieron varios errores de programación como los siguientes:

    NameError focal_length is not defined ValueError: all the put array dimensions for the concatenation axis must match exactly

    Consiguiendo finalmente que por pantalla se mostrasen las coordenadas y el centroide del punto detectado después de aplicar el filtro de color, que en esta primera prueba es la parte verde fosforita del logo de NVIDIA GEFORCE GTX del propio ordenador.

    Prueba pos_centroide

    Mientras que en la terminal se mostraban las coordenadas ópticas y 3D de este centroide.

    Pruebas distancias pos_centroide

SEMANA 40 (12/02/2024-18/02/2024)

  • Pruebas de distancia del centroide de un punto

    Se utilizó un cuadrado de un post-it subrayado con color amarillos fosforescente sobre una cartulina blanca para poder minimizar el error cometido por el programa en python pos_centroide.py al aplicar el filtro de color y poder calcular así de mejor manera las distancias y coordenadas del centroide de ese cuadrado.

    Para estas pruebas se ejecutó el programa con el cuadrado a una distancia de 30 cm del foco de la lente, para calcular únicamente la distancia obtenida en el eje X (sabiendo que la cámara se encuentra a 22,5 cm en el eje Z de manera fija), y posteriormente se repitió el proceso de igual manera moviendo el post-it 5cm de manera superior, inferior, hacia la derecha y hacia la izquierda de la posición inicial para estudiar los resultados y poder estudiar el acierto del programa y si fueran necesarios posibles cambios en este para que concordasen los resultados obtenidos con las coordenadas reales.

    Punto inicial

    Tanto la disposición del área de trabajo como estos primeros resultados obtenidos por el programa al mover el punto de la posición inicial hacia arriba, abajo, hacia la derecha y la izquierda pueden encontrarse en el repo.

    Una vez realizadas estas pruebas se obtuvieron los siguientes resultados:

    Pruebas coordenadas

    De los resultados obtenidos se puede deducir que en alguna parte del código o bien se están realizando mal los cálculos, o falta algún factor a tener en cuenta, ya que no se asemejan las coordenadas reales y las obtenidas, sin embargo, se puede observar que aún así, los resultados obtenidos guardan cierta relación tras realizar modificaciones y cambios de posición del post-it.

  • Modificación de la función para convertir píxeles a unidades ópticas

    Debido a los resultados anteriores, se empezó por revisar la primera parte del programa pos_centroide.py, por lo que se realizaron pruebas para modificar la función que convierte las coordenadas en píxeles en unidades ópticas.

    Para ello, en un programa nuevo, se empezó por probar la traslación en matrices. Conociendo que la resolución de las imágenes capturadas por la cámara son de 640x480 píxeles, y que en píxeles el origen de la matriz es la posición [0,0] situada en la parte superior izquierda de dicha matriz, mientras que el origen para las coordenadas ópticas se encuentran normalmente en el centro del plano, se elaboró el programa traslacion_matriz.py cuyo código abre la cámara y muestra en pantalla dos puntos en diferentes colores para representar el origen de la matriz original y el punto original, así como el origen de la matriz trasladada y el punto trasladado, siendo los puntos "originales" las coordenadas en píxeles y los puntos "trasladados" las coordenadas ópticas habiendo sido trasladadas.

    traslacion matriz

    Siendo el punto rojo el origen en píxeles, el verde un punto aleatorio en píxeles también, mientras que el punto azul y el amarillo son el origen en ópticas y el punto trasladado respectivamente.

SEMANA 41 (26/02/2024-03/03/2024)

  • Modificación de la función para convertir píxeles a unidades ópticas

    Debido a que el programa no contemplaba casos específicos como cuando ese punto se encuentre en los bordes laterales derechos de la matriz de píxeles, se intentó poder obtener un caso general que incluyese estos supuestos, obteniendo de manera gráfica lo siguiente:

    Matriz con ptos

    En este caso, cuando el punto original (punto en coordenadas de píxeles) está en el borde lateral derecho de la matriz, el punto en coordenadas de píxeles se trasladará al mismo punto en la matriz de coordenadas ópticas, de manera visual, por lo que únicamente se aprecia un punto. Esto se debe a que el punto original ya se encuentra en la posición más alejada del origen en la dirección horizontal, por lo que al aplicar la traslación, el punto trasladado coincidirá con el original en la matriz trasladada de manera gráfica.

    Es decir, cuando el punto en coordenadas de píxeles está en el borde lateral derecho de la matriz, la traslación no tiene ningún efecto sobre su posición en la matriz trasladada de coordenadas ópticas de manera visual. El punto trasladado seguirá estando en la misma posición que el punto original.

    Esto mismo ocurre cuando el punto original se encuentra a lo largo de la última columna de la matriz, en el punto superior derecho, a lo largo de la última fila (en la parte inferior de la matriz), en cualquiera de las esquinas inferiores (inferior izquierda o inferior derecha), o simplemente en cualquier punto de la matriz de píxeles que al trasladarlo a coordenadas ópticas quedase físicamente fuera de la matriz, siendo el punto trasladado coincidente con el original en la matriz trasladada de manera visual.

    Todo esto no implica que si el punto original está siendo percibido por la cámara y queremos obtener sus coordenadas ópticas utilizando la traslación, el punto trasladado también estaría dentro del campo de visión de la cámara. En este caso, la traslación solo afecta las coordenadas del punto en el espacio, pero no lo sacaría del campo de visión de la cámara.

    Cuando aplicamos la traslación a un punto dentro de la matriz de píxeles, las coordenadas resultantes estarán en el sistema de coordenadas trasladado, pero aún estarán dentro del campo de visión de la cámara. La traslación no hace que el punto trasladado quede fuera del campo de visión, siempre y cuando el punto original esté dentro de la matriz de píxeles que la cámara está capturando.

    Con todo esto, se modificó la función pixel2optical del programa pos_centroide.py:

    Función para convertir de píxeles a unidades ópticas
    def pixel2optical(pixel_x, pixel_y, resolution=(640, 480)):
     
      Desplazar el origen al centro del recuadro de 640x480
      centered_x = resolution[0] // 2
      centered_y = resolution[1] // 2
    
      Convertir píxeles a unidades ópticas
      optic_x = pixel_x - centered_x
      optic_y = centered_y - pixel_y  # Invertir el eje y para que aumente hacia arriba
    
      return optic_x, optic_y
    

    Tras este cambio, se volvió a ejecutar el programa, viendo que las coordenadas ópticas en relación a los píxeles guardaban mejor la relación, y podían tener mayor sentido que los resultados obtenidos anteriormente, mientras que las coordenadas en 3D, es decir, en sistema cartesiano, seguían sin guardar relación ninguna con las medidas reales.

    Modificacion pixel2optical