Como dice caveat, si tienes una posición general, entonces necesitas 4 columnas. Sin embargo, en el caso que se muestra en la imagen, en el que las rectas que pasan por A y B y por B y C no cruzan la zona admisible para el robot, basta con tres columnas.
La razón es que, en este caso, B y C siempre se verán "desde el mismo lado". Esto significa que el ángulo que midas entre el robot y las líneas que van a B y C siempre será tal que sabrás su orientación. En la imagen, el ángulo CRB siempre será positivo, porque la semirrecta RC está "a la derecha" de la semirrecta RB.
Si esto se conoce, entonces el lugar geométrico que describe todas las posiciones posibles del robot bajo las cuales los puntos B y C son visibles bajo el ángulo orientado específico que usted midió ( $\alpha$ ) forma parte de un círculo (mostrado en verde más abajo). Ese círculo pasa por B y C, ver la imagen.
Es sólo una parte del círculo, porque en la parte restante se verían B y C bajo el ángulo de $180°-\alpha$ en su lugar. Si no conociéramos la orientación del ángulo, tendríamos que añadir la imagen de la parte del círculo verde cuando se refleja en la línea BC a nuestra lista de posibles posiciones del robot.
Por supuesto, se puede hacer lo mismo con el ángulo que mediste de R a A y B o de R a A y C. Si tienes 2 de esas partes del círculo y conoces sus ecuaciones, puedes calcular sus puntos de intersección. Digamos que eliges B,C y A,B. Como ambos círculos pasan por B (en el que es imposible que esté el robot), ¡el único otro punto posible en el que puede estar el robot es el otro punto de intersección!
Ahora tenemos que determinar la ecuación de cada círculo. Haré los cálculos para B,C aquí. La ecuación general de un círculo es
$$(x-x_M)^2 + (y-y_M^2) = r^2,$$
donde $(x_M,y_M)$ son las coordenadas del punto medio y $r$ es el radio del círculo.
Empecemos por el punto medio M. Como la circunferencia siempre pasará por B y C, M estará situado en la mediatriz m de BC. Puedes calcular de antemano el punto medio X de B y C y también un vector unitario ( $u_m$ ) de la dirección de m. Elígela de forma que el vector unitario apunte desde X hacia el lado en el que se encuentra el robot. Así que ahora tenemos
$$x_M = x_X + t\cdot {u_m}_x, y_M = y_X + t\cdot {u_m}_y$$ ,
donde $t$ es la longitud (por ahora) desconocida de XM.
Si recuerdas algunas lecciones sobre ángulos en un círculo, verás que el ángulo CMB es igual a $2\alpha$ y que el ángulo CMX es de nuevo igual a $\alpha$ . Por último, el ángulo MCX es igual a $90°-\alpha$ .
Como la longitud de CX es conocida (la mitad de la longitud de BC) obtenemos ahora
$$t={\rm length}(XM) =\tan(90°-\alpha)\cdot {\rm length}(CX) = \cot(\alpha)\cdot {\rm length}(CX)$$
Si introducimos esto en la fórmula anterior, obtendremos finalmente los valores de las coordenadas de nuestro punto medio M.
Me saltaré ahora explicar por qué esta fórmula sigue siendo correcta incluso cuando tenemos un $\alpha > 90°$ donde mi imagen anterior ya no es correcta porque entonces el punto medio M se desvía al otro lado de la línea BC. Pero en este caso nuestro $\cot(\alpha)$ se vuelve negativo y nuestro M calculado también se desplaza al otro lado de la línea BC.
Así que ya tenemos las coordenadas de nuestro Punto Medio M, ahora sólo necesitamos el radio para obtener la ecuación completa. Pero el radio es simplemente la distancia desde cualquier punto del círculo al punto medio, así que calcula la distancia de M a B,C o R y ya está.
¿Dónde estamos ahora? He mostrado cómo obtener la ecuación del círculo que contiene el lugar geométrico de todos los puntos bajo los cuales se ven 2 puntos dados bajo un ángulo orientado dado.
Obtén 2 de esas ecuaciones y determina los puntos comunes:
$$ (x-x_{M1})^2 + (y-y_{M1})^2 = r_1^2$$ $$ (x-x_{M2})^2 + (y-y_{M2})^2 = r_2^2$$
Toma la diferencia de esas 2 ecuaciones. Todos los términos cuadráticos de la incógnita $x$ y $y$ desaparecerá, te quedas con una ecuación lineal. Transforma esa ecuación lineal en la forma $y=ax+b$ e introdúcelo en una de las ecuaciones anteriores para los círculos. Obtendrás una ecuación cuadrática. Una de sus soluciones será el punto común que elijas para los ángulos (por ejemplo, si decides utilizar los ángulos entre B,C y A,B, B será el punto común). La otra es la posición del robot
Ahora bien, lo anterior (por complicado que sea) es sólo el lado puramente geométrico de las cosas. En realidad, se encontrará con
a) el mal funcionamiento de los sensores que, de vez en cuando, sólo producen datos incorrectos, y b) una precisión limitada de las mediciones.
Por lo tanto, debido a b) es mucho mejor no utilizar sólo las 3 columnas que he dicho que son necesarias, sino utilizar tantas como sea posible/factible. Además de estos cálculos, es posible que tengas que hacer algún cálculo para estimar la precisión de tu posición, teniendo en cuenta la inexactitud de las mediciones.
Para a), puede que tenga que llevar un registro de su posición calculada y descartarla si mostrara que se mueve 10cm en 1s cuando sólo puede moverse a tener esa velocidad, o algo similar.
0 votos
¿Tiene los rodamientos individuales para cada poste o sólo los ángulos entre postes?
0 votos
Si es esto último, el problema se reduce a encontrar la intersección de dos círculos. Creo que, con una colocación adecuada, tres postes deberían bastar. Puedo escribir algo mañana, pero mientras tanto, ver esta respuesta por la idea subyacente.