1 votos

Hallar el ángulo con el punto proyectado en el eje y el ángulo con el punto proyectado

Estoy trabajando en un proyecto de robótica y todo lo que tengo que hacer es hacer un robot de 3 ruedas para detectar una etiqueta (patrón de tablero de ajedrez, por ejemplo) con su cámara, ir a ella, y se detiene frente a ella exactamente, eso significa que el X axis of the camera debe ser parallel a la Tag's X' axis también el distance entre el center of the camera y el X' axis of the tag debe ser 0 . todo lo que tengo es el Qauternions y la posición en 3d del objetivo (tag) y la cámara del robot es el origen (portador del sistema de coordenadas cartesianas).

Explicación gráfica de la situación

Me di cuenta alpha calculando el ángulo entre X y X' pero en algunos casos la dirección de rotación es engañosa para el robot, he aquí un ejemplo:

ejemplo

También la distancia desde el punto proyectado es siempre errónea, así es como lo estoy calculando: Calculo la línea l que pasa desde el punto (xt , yt) del objetivo y forma un ángulo alpha con X' vector y luego calculo la disatncia entre el origen (0,0) y la línea l Por desgracia, se equivoca en la mayoría de los casos.

No sé qué estoy haciendo mal, Espero su ayuda.

1voto

Futurologist Puntos 1950

Así, el sistema de coordenadas del robot es $X, Y, Z$ donde los vectores son de longitud unitaria y ortogonales entre sí. $R$ es el punto del robot al que está unido el sistema de coordenadas. Supongamos que su vector $X'$ viene dada por las coordenadas $(u,v)$ es decir $$X' = u \, X + v \, Z$$ y que la ubicación de la etiqueta está en el punto $T$ . Su objetivo es ejecutar el movimiento que toma el vector $X$ al vector $-X' = -u\, X - v\, Z$ y el vector $Z$ al vector $Z' = v\, X - u \, Z$ . Así pues, basta con tomar el producto punto $\big(X\cdot (- X')\big) = - (X \cdot X') = \cos(\alpha)$ suponiendo que $X $ es la unidad de longitud, es decir $|X'|^2 = (X' \cdot X') = 1$ . Si no, toma $$\frac{\big(X\cdot (-X')\big)}{\sqrt{(X'\cdot X')}} = - \frac{\big(X\cdot (u\, X + v\,Z)\big)}{\sqrt{u^2 + v^2}} = - \frac{u \big(X\cdot X\big) + v\big(X\cdot Z\big)}{\sqrt{u^2 + v^2}} = - \frac{u \big(X\cdot X\big)}{\sqrt{u^2 + v^2}}= \frac{- u}{\sqrt{u^2 + v^2}}$$ porque $\big(X\cdot Z\big) = 0$ debido a la ortogonalidad entre el vector $X$ y $Z$ y $\big(X\cdot X\big) = 1$ porque $X$ es el vector unitario del marco ortonormal del robot. Entonces $$\cos(\alpha) = \frac{- u}{\sqrt{u^2 + v^2}}$$ Para determinar el ángulo, sin embargo, usted quiere tomar $$\alpha = \text{arccos}\left(\frac{- u}{\sqrt{u^2 + v^2}}\right)$$ que sólo da ángulos entre $[0,\pi]$ . Sin embargo, es posible que desee ángulos entre $[-\pi,\pi]$ o equivalentemente entre $[0,2\pi]$ . Entonces el signo de un segundo producto punto $$\sin(\alpha) = \frac{\big(Z\cdot(- X')\big)}{\sqrt{(X'\cdot X')}} = - \frac{\big(Z\cdot (u\, X + v\,Z)\big)}{\sqrt{u^2 + v^2}} = - \frac{u \big(Z\cdot X\big) + v\big(Z\cdot Z\big)}{\sqrt{u^2 + v^2}} = - \frac{v \big(Z\cdot Z\big)}{\sqrt{u^2 + v^2}}= \frac{v}{\sqrt{u^2 + v^2}}$$ Por lo tanto, el signo del ángulo $\alpha$ debe ser $\text{sign}(\sin(\alpha)) = - \frac{v}{|v|}$ Así que finalmente, su ángulo debe ser $$\alpha = -\frac{v}{|v|} \text{arccos}\left(\frac{-u}{\sqrt{u^2 + v^2}}\right)$$

Tengo un poco de prisa, así que es posible que haya que volver a comprobar las señales.

Por lo que tengo entendido, básicamente quieres que el robot gire primero en una dirección ortogonal a la dirección $X'$ se mueven en línea recta a lo largo de la dirección determinada por el vector $Z'$ ortogonal al vector $X'$ hasta que llegue a la línea determinada por el punto de etiqueta $T$ y el vector $X'$ y luego girar en la dirección paralela al vector $X'$ hasta la etiqueta. ¿Estoy en lo cierto?

A continuación, primero hay que calcular la distancia que el robot tiene que recorrer perpendicularmente a $X'$ para llegar a la línea determinada por $T$ y $X'$ . Sean las coordenadas de $T$ en el marco del robot sea $(t_1,t_2)$ es decir $T = t_1 \, X + t_2 \, Z$ . La ecuación de la recta determinada por $T$ y $X'$ puede escribirse como $$v(x - t_1) - u(z - t_2) = 0$$ donde $x,z$ denotan coordenadas en el plano. El robot debe recorrer primero la línea determinada por un vector ortogonal a $X'$ que es $Z' = v \, X - u\, Z$ . Entonces la trayectoria a lo largo de $Z'$ debe ser $sZ' = sv \, X - su \, Z$ y $s$ debe elegirse de forma que $sZ'$ se encuentra realmente en la línea determinada por $T$ y $X'$ . En otras palabras, $s$ satisface la ecuación
$$v(sv - t_1) - u(-su - t_2) = 0$$ que se transforma en $$sv^2 - t_1v + su^2 + t_2u = 0$$ Resolución de $s$ conduce a $$s = \frac{t_1 v - t_2 u}{u^2 + v^2}$$ Por último, la distancia orientada entre el punto $R$ del robot y el punto $P$ en la línea determinada por $T$ y $X'$ es $$d = \text{sign}(s) |sZ'| = \text{sign}(s) |s|\, |Z'| = s \sqrt{u^2 + v^2} = \frac{t_1 v - t_2 u}{\sqrt{u^2 + v^2}}$$

Así que para guiar al robot a la etiqueta, de la manera que usted desea, usted tiene que decidir que la rotación orientada positivamente debe ser una rotación en sentido antihorario (cuando se mira el plano desde arriba), mientras que la orientación negativa debe ser una rotación en sentido horario. Entonces, siempre que el vector $X' = u\, X + v\, Z$ calcula la distancia orientada $$d = \frac{t_1 v - t_2 u}{\sqrt{u^2 + v^2}}$$ y el ángulo $$\alpha = -\frac{v}{|v|} \text{arccos}\left(\frac{-u}{\sqrt{u^2 + v^2}}\right)$$ Luego haz que el robot gire de ángulo $\frac{\pi}{2}-\alpha$ de modo que esté preparado para desplazarse en la dirección determinada por el vector $Z' \perp X'$ y si $d>0$ dejar que el robot avance una distancia $d$ (si $d<0$ el robot tiene que ir hacia atrás), luego deja que se detenga, haz que gire $90^{\circ}$ en el sentido de las agujas del reloj hacia la etiqueta y luego dejar que baje hacia la etiqueta a lo largo de la dirección $-X'$ . Si $d<0$ el robot tiene que retroceder después de girar inicialmente. El caso en que $v=0$ creo que deberían tratarse por separado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X