Progreso abril 2025 - RoboticsURJC/tfg-dcampoamor GitHub Wiki
SEMANA 84 (31/03/2025-06/04/2025)
SEMANA 85 (07/04/2025-13/04/2025)
SEMANA 86 (14/04/2025-20/04/2025)
SEMANA 87 (28/04/2025-04/05/2025)
SEMANA 84 (31/03/2025-06/04/2025)
-
Pruebas de la distancia de las detecciones a la cámara con diferentes ángulos y altura
Después de realizar la proyección con OpenGL de las detecciones y el campo visual de la cámara para resolver los problemas en las mediciones con el Eje Y, y observar que aparentaba estar bien hecha esta proyección, al no poder realizar muchas más pruebas más allá de estas pruebas visuales, ya que no se puede más que obtener trazas, se volvieron e ejecutar pruebas con una altura y grado de rotación de la cámara distintos a las anteriores pruebas realizadas cuyos resultados se encuentran en el documento Pruebas distancia detecciones.xlsx.
Para esta serie de puntos, la altura era de 180 mm desde la mesa a la cámara y una inclinación de 58º.
De las tablas de resultados anteriores se obtuvieron las siguientes gráficas para poder comparar las coordenadas de los ejes X e Y y las distancias obtenidas por pantalla de las detecciones y las reales que habían sido medidas previa ejecución del programa.
Tal y como pasaba en pruebas anteriores, para valores de la región inferior o superior de la cámara, los valores obtenidos no se asemejan a los reales. Sin embargo, a pesar de haber obtenido algún valor atípico, los resultados entorno a una distancia de 250-300 mm en el Eje X empiezan a asimilarse y acercarse a los reales, siendo el P7 (250,0,180) mm uno de los puntos que menor desviación presenta con 0,7 mm en el Eje X, 21,85 mm en el Eje Y y 1,34 mm de desviación en cuanto a la distancia junto con el P10 (280,0,180) mm con una desviación de 26,11 mm en el Eje X, 5,38 mm para el Eje Y y 21,60 mm en distancia y el P14 (300,10,180) mm con una desviación de 22,72 mm en el Eje X, 22,42 mm para el Eje Y y 19,73 mm en distancia.
Sin embargo, de igual manera que en los experimentos anteriores, se observó que a partir de cierto valor en el que se había supuesto como Eje X (eje longitudinal de la mesa), los valores obtenidos para el supuesto Eje Y disminuían, siendo cada vez vez más negativos, sin asemejarse para nada con los supuestos valores reales. Para este caso, por ejemplo, se puede ver que a partir del P13, los valores del Eje Y disminuyen desde -3,52 mm hasta -55,65 para el P25 (450,0,180) mm.
La discrepancia se debe a la forma en que se define y se aplica la transformación geométrica (rotación y traslación) de la cámara en el modelo pinhole, ya que la función que convierte los píxeles a coordenadas ópticas (
pixel2optical
) y la transformación que realiza la proyección inversa (getIntersectionZ
) intercambian y modifican los ejes. Esto implica que el eje que se obtiene en la proyección 3D no coincida necesariamente con el sistema de coordenadas que se ha supuesto para la mesa. El hecho de que se use un ángulo de, para este caso, 58° en la rotación (thetaY) significa que la cámara está inclinada respecto a la mesa, y como resultado, lo que se interpreta como el eje longitudinal (Eje X real) se mapea en una combinación de los ejes de la cámara, y puede ocurrir que la componente que se asocia a Y se invierta o se desvíe a medida que se aleje del origen, por lo que podría ser que la proyección estuviera generando una inversión en el eje Y debido a la combinación de la rotación de la cámara y la forma en que se intercambian los ejes en la conversión.Para comprobar si el problema estaba en que el que se suponía como Eje Y se encontraba invertido, se creó un nuevo input para la función
getIntersectionZ
que, al activarlo, invertía el signo de la componente Y. De ese modo, se podía comparar los resultados obtenidos con y sin invertir y ver cuál se acercaba más a los puntos de referencia reales.En este fragmento se puede ver cómo después de hacer la inversión de la matriz intrínseca (
inv_K
) y de la matriz de rotación/traslación (inv_RT
),p3d_h
contiene las coordenadas 3D (en el espacio de la cámara) correspondientes al píxel de la imagen (𝑝2𝑑[0],𝑝2𝑑[1]). Se denomina_h
(homogéneo) porque inicialmente se trata de un vector con la componente Z todavía no “normalizada”, y a menudo se incluye una cuarta componente si fuese estrictamente homogéneo. Conp3d_h *= escala
, se ajusta la escala para que la proyección coincida con la altura de la cámara, para este caso Z=180mm, siendo al final del proceso,p3d_h
el punto 3D en el sistema de la cámara. Para invertir el Eje Y, cuandoinvert_y=True
, se ejecutap3d_h[1] *= -1
, que multiplica la componente Y por -1, esto significa que, en términos geométricos si antes el punto tenía coordenadas (𝑋,𝑌,𝑍), ahora tendrá (𝑋,−𝑌,𝑍).Después de activar la opción
invert_y = True
, se volvió a ejecutar el programa xmlrpc_deteccionfresas.py y se repitieron las mediciones para los puntos P7 a P24 de los últimos experimentos, es decir, para la altura de 180 mm desde la mesa a la cámara y una inclinación de 58º, obteniendo los siguientes resultados:Tal y como se puede observar, en algunos puntos mejora la aproximación al valor real al invertir el eje Y tanto para los valores de ese eje como para los del Eje X, pero en otros empeora. Es decir, no existe un patrón único en el que todos los puntos se ajusten mejor con el eje Y invertido o no invertido. La inversión del eje Y solo corrige un posible error de signo (cambia 𝑌 a −𝑌), pero no corrige cualquier inclinación o rotación adicional de la cámara por mínima que sea, la distorsión de la lente en las zonas periféricas, un offset mal medido o pequeñas inexactitudes en la altura, en la ubicación real de la cámara, etc.
Aún con el ajuste de signo, se observan errores notables en varias posiciones alejadas, lo que puede indicar que no se trata de un simple cambio de signo, sino de una combinación de factores (rotaciones en más de un eje, desalineación, distorsiones de lente, etc.), además, a medida que te alejas del origen o del centro de la imagen, la geometría de proyección hace que los errores se magnifiquen (especialmente si la cámara tiene distorsión residual o si la altura/ángulo real no coinciden perfectamente con los valores introducidos).
SEMANA 85 (07/04/2025-13/04/2025)
-
Pruebas de la distancia de las detecciones a la cámara con esta de manera perpendicular al plano
Para comprobar si en la situación real final, es decir, para la cámara totalmente perpendicular al plano mesa, que en un futuro será plano pared, estas desviaciones en el supuesto Eje Y eran también tan significativas se imprimió el soporte camera holder v2.stl con la impresora 3D para poder anclar la cámara al trípode y que esta se sostuviera en la posición perpendicular a la mesa tal y como se muestra en el vídeo Instalación cámara perpendicular plano mesa.mp4.
Después de haber llevado a cabo la instalación, se repitieron las pruebas de medición para la toma de datos y su posterior análisis, siendo esta vez para esta serie de puntos, la altura de 225 mm desde la mesa a la cámara y una inclinación de 0º, obteniendo los siguientes resultados:
De estos resultados, recogidos en el documento Pruebas distancia detecciones.xlsx se puede observar que existe un problema en los ejes de referencia supuestos y en los ejes que realmente son, ya que los resultados no se asemejan en nada a las coordenadas que, desde un principio se habían supuesto. Si nos fijamos bien, aparentemente parece que la equivalencia o relación que se presentan los resultados obtenidos frente a los reales en cuanto a ejes de coordenadas son los siguientes:
De tal manera que la representación gráfica de como se han supuesto los ejes de coordenadas para los valores de los puntos reales y la representación gráfica de las coordenadas que serían en función de los resultados obtenidos sería tal y como muestran las siguientes imágenes:
Por este motivo, si aplicamos la equivalencia o relación que se mostraba anteriormente mediante la fórmula, se obtienen los siguientes resultados que se muestran en la primera imagen de las que siguen a continuación, mientras que la segunda sirve para poder comparar los resultados obtenidos una vez aplicada esta equivalencia frente a los reales supuestos.
De esta última tabla se pueden obtener las comparaciones por eje de coordenadas y distancias, en las que se observa una gran exactitud en todos sus ejes y en la distancia total, pudiendo decir que se acercan bastante a las coordenadas de los puntos reales supuestos.
SEMANA 86 (14/04/2025-20/04/2025)
-
Pruebas de la distancia de las detecciones a la cámara con esta de manera perpendicular al plano
Después de verificar que existía un problema en cuanto a la elección de los ejes de coordenadas, se volvió a realizar pruebas de medición para la toma de datos y su posterior análisis en el caso de la cámara perpendicular al plano mesa, siendo esta vez para esta serie de puntos, la altura de 343 mm desde la mesa a la cámara y una inclinación de 0º.
Con estos parámetros configurados, se obtuvieron los siguientes resultados:
De estos resultados, recogidos en el documento Pruebas distancia detecciones.xlsx se puede observar que una vez identificados los ejes de coordenadas, las medidas tanto de las coordenadas del Eje X como en el Eje Y, y por tanto, también de las distancias totales desde la cámara a la detección, son muy exactas, siendo la dispersión máxima para los valores de las coordenadas del Eje X de 12,27 mm (P17) y la mínima de 0,10 mm (P15), mientras que para los valores de las coordenadas del Eje Y, 15,73 mm (P5) sería la máxima, mientras que 0,14 mm (P15) sería la mínima.
Con todo esto, una vez corroborada la disposición de los ejes de coordenadas de los resultados obtenidos por la cámara, se pueden dar por válidos estos resultados, ya que, situando la cámara de manera perpendicular frente a un plano (pese a tratarse en las pruebas de un plano horizontal, como es la mesa, en lugar de un plano vertical como es la pared), la dispersión media en el Eje X es de 3,64 mm, en el Eje Y de 5,66 mm y la dispersión media en cuanto a las distancias es de 1,06 mm, situándose todas ellas muy por debajo incluso del centímetro de dispersión, y pudiendo considerarse mediciones muy próximas a las estimadas en un principio, y en las que incluso esta dispersión pueda deberse a errores humanos en la colocación de las fresas sobre la mesa o a la medición en la que poner la fresa para poder obtener las distancias supuestas.
SEMANA 87 (28/04/2025-04/05/2025)
-
Pruebas con robot real UR3e
Una vez corroborada la disposición de los ejes de coordenadas de los resultados obtenidos por la cámara, de tal manera que, los valores de las coordenadas supuestas son prácticamente iguales que las obtenidas, así como los valores de las distancias, se procedió a realizar pruebas con el sistema completo y funcional, utilizando todos los elementos hardware del prototipo (la cámara montada en el brazo articulado con el soporte 3D y el brazo robótico junto con el switch necesario para las comunicaciones vía cable de red entre todas las partes del sistema).
Estas pruebas consistieron, en primer lugar, en comprobar que el robot se movía hacia la posición detectada por el sistema de visión correctamente, tal y como puede verse en el vídeo Primera prueba funcionamiento plano horizontal UR3e.mp4.
Una vez comprobado esto, se mejoraron aspectos del programa del robot para que, si no se realizase ninguna detección, el robot no se moviera y se mantuviera a la espera de recibir una nueva posición y se realizaron pruebas tanto de detección simple como múltiple en el mismo plano para verificar de igual manera esta funcionalidad del sistema. Todo esto se puede observar en los vídeos obtenidos de grabar al robot realizando estas pruebas como Deteccion de fresas y posicionamiento UR sin movimiento sin deteccion.mp4, Deteccion de fresas y posicionamiento UR sin movimiento sin deteccion_2.mp4, Pruebas deteccion y movimiento multiple con UR.mp4 o Proceso de pruebas deteccion y movimiento multiple con UR.mp4, al igual que en los vídeos obtenidos de grabar la pantalla del ordenador al ejecutar a través de la terminal el programa en Python xmlrpc_deteccionfresas.py, siendo estos vídeos los siguientes: POV Camara deteccion de fresas y posicionamiento de UR con espera sin deteccion.mp4, POV Proceso de pruebas deteccion y movimiento multiple con UR.mp4 o POV Proceso de pruebas deteccion y movimiento multiple con UR.mp4.
Para poder llevar a cabo estas pruebas, se tuvo que crear un Plano cámara de trabajo en la interfaz del robot, en el apartado de Instalación/Funciones/Plano, de tal manera que este coincidiese con el plano horizontal sobre el que se realizaban las pruebas, siendo el centro de coordenadas de dicho plano el mismo que el del campo de visión de la cámara. De esta manera, las coordenadas y distancias a las fresas detectadas serían las mismas que en el plano, facilitando las transformadas a la hora de enviar el brazo robótico a los puntos.
Tras llevar a cabo estas pruebas, se pasó a modificar el plano de trabajo Plano pared para poder volver a realizar estas pruebas pero en el plano vertical, tal y como sería un plano al trabajar en un huerto vertical.
Para poder llevar a cabo estas pruebas, también se tuvieron que modificar algunos puntos de referencia del programa de robot como, por ejemplo, el punto de Casa. Tras realizar estos cambios, se ejecutó el programa, dando como resultado el objetivo, tanto con detecciones simples como múltiples, tal y como se muestra en los vídeos Pruebas plano vertical deteccion simple.mp4 o Pruebas plano vertical deteccion multiple.mp4. Tal y como se puede ver en los anteriores vídeos, la manera en la que se sujetaron las fresas a la cartulina blanca pegada a la pared fue mediante celo.