El plano de trabajo del robot en mi aplicación es variable, así que debo de calcular el punto 0,0,0 del eje de coordenadas para poder trabajar dentro de ese plano.
Mi idea es situar el objeto rectangular en la mesa de trabajo del robot, el robot con la función dirección hasta contacto grabará un punto en un lateral del objeto y un segundo punto en el mismo lateral para que se creé una línea espacial, se hará lo mismo con el otro lateral del objeto, entonces tendremos 4 puntos, estos 4 puntos formarán 2 lineas, como calculo el punto donde las líneas se cruzarían, que será el punto 0,0,0 del plano de trabajo.
Llevo unas horas trabajando en esto y necesito información para estudiarlo
Hola Víctor,
Lo que describes es un sistema lineal de 3 ecuaciones con 3 incógnitas. Lo que no me queda claro es si el plano está inclinado o si las líneas que traza el robot son aleatorias?
El robot se mueve en línea recta hacia el objeto? Quieres que el resultado sea un punto en 2D ó 3D?
Pero bueno, simplemente haciendo los cálculos, digamos que tienes cuatro puntos en 3D:
P1 = (x1, y1, z1)
P2 = (x2, y2, z2)
P3 = (x3, y3, z3)
P4 = (x4, y4, z4)
Y que tienes dos rectas, definidos por un vector y un punto:
Recta R1, de vector v1 = (P2-P1) = (x2-x1, y2-y1, z2-z1), y que es la recta que pasa por P1 y P2, pero digamos que el punto de inicio o referencia es P1.
Recta R2, de vector v2 = (P4-P3) = (x4-x3, y4-y3, z4-z3), y que es la recta que pasa por P3 y P4, pero digamos que el punto de inicio o referencia es P3.
Usando la ecuación continua de la recta para ambos casos: R1 => (x - x1) / (x2 - x1) = (y - y1) / (y2 - y1) = (z - z1) / (z2 - z1) R2 => (x - x3) / (x4 - x3) = (y - y3) / (y4 - y3) = (z - z3) / (z4 - z3)
Donde x,y,z son las coordenadas cualquiera de un punto que pertenece a la recta(s) . Por tanto, el punto de cruce es un punto cuyas coordenadas (x,y,z) está en ambas rectas, por tanto:
Pcruce = (x,y,z) C R1 y R2
# ecuación para encontrar X
(x - x1) / (x2 - x1) = (x - x3) / (x4 - x3)
# ecuación para encontrar Y
(y - y1) / (y2 - y1) = (y - y3) / (y4 - y3)
# ecuación para encontrar Z
(z - z1) / (z2 - z1) = (z - z3) / (z4 - z3)
Muchas Gracias por la respuesta
Por suerte es un sistema 2D.
La forma en la que hallas el punto de cruce entre rectas no lo conocía.
Matemáticamente yo lo estaba encontrando con 2 puntos por recta, primera recta:
Forma general de la recta: y = ax + b donde a es la pendiente y b la ordenada de origen.
Hayamos la pendiente de una de las rectas con la ecuación que has comentado a = (Y2 - Y1) / (X2 - X1)
Después utilizando y - y1 = a(x - x1) sustituimos y nos quedara la típica ecuación de la recta de donde ya podemos obtener el resto de incógnitas.
Esto lo tengo que repetir con los otros dos puntos para la segunda recta obteniendo la segunda ecuación de la recta.
Después el punto de cruce lo hallaba igualando las ecuaciones resultantes.
Una tira de ecuaciones de folio y medio con este proceso.
Tu forma parece más simplificada, muchas gracias.
Una pregunta por confirmar, cuando yo grabo un punto de los que utilizo en el algoritmo anterior, obtengo una variable pose en la que realmente yo leo lo siguiente:
Los 3 primeros argumentos son metros (x,y,z) los 3 segundos son radianes (rx,ry,rz), en mi caso utilizo estos datos en milímetros, serán respecto al eje de coordenadas elegido para grabar el punto, mi caso Tool.
x = 304,38 mm
y = 210,62 mm
Esto es correcto pienso yo.
Muchas gracias por las aclaraciones.