I have a unique problem that I'm struggling with with regards to surveying. Because my surveying equipment is much more accurate at measuring angles than distances I'd like to find an analytic solution using only the angular measurements. Let the surveyor sit at the origin of the coordinate system and represent the known vertex of the tetrahedron (or greater polygon if necessary.) I can then measure azimuth and pitch to each of the 3 (or up to 6) survey prisms allowing me to construct a unit vector pointing from the origin towards that prism (but magnitude remains unknown.) I also have precision CMM measurements of the relative geometry of the prisms, although not it the surveyors reference frame. Thus, if A, B and C are the prisms I know the lengths of AB, BC, and AC along with the angles between them. Again, I also know the unit vectors that points from the Origin "D" to A, B and C, - Va, Vb, and Vc respectively. I'd like to calculate the position (x, y, z) of points A, B, and C in the surveyor reference frame. It's understood that the solution will not be unique in some cases but that surveyor location can be chosen to eliminate many multiple solutions. Also, the surveyors less accurate distance measurement can be used to select the proper solution if multiples exist. Any help to a first time poster would be greatly appreciated.
Hopefully I've interpreted your problem correctly. If not, perhaps you can attach a picture showing the situation. If we take the origin (your point D) to be the zero vector, and ##a##, ##b##, and ##c## are the vectors from the origin to the three prisms, you know the unit vectors ##a/\|a\|##, ##b/\|b\|## ,and ##c/\|c\|##. And you also know the vectors between each pair of prisms, namely ##a-b##, ##b-c##, and ##a-c##. Your goal is to find ##\|a\|##, ##\|b\|##, and ##\|c\|##. Let's introduce some notation for the known unit vectors: ##u_a = a/\|a\|##, ##u_b = b/\|b\|##, and ##u_c = c/\|c\|##, and for the known difference vectors: ##v_1 = a - b##, ##v_2 = b - c##, and ##v_3 = a-c##. Then we have: $$\begin{align} u_a \|a\| - u_b \|b\| &= v_1 \\ u_b \|b\| - u_c \|c\| &= v_2 \\ u_a \|a\| - u_c \|c\| &= v_3 \\ \end{align}$$ One possible way to solve this would be to take the inner (dot) product of each of these equations with each of ##u_a##, ##u_b##, and ##u_c## to obtain a system of 9 equations and 3 unknowns, of the form $$U\begin{bmatrix}\|a\|\\\|b\|\\\|c\|\end{bmatrix} = V$$ where ##U## is ##9 \times 3## and ##V## is ##9 \times 1##. If your measurements were perfect, six of the nine equations would be redundant, but in practice, they will be slightly inconsistent, so you should aim for a least-squares solution. One way to obtain such a solution is to multiply both sides by ##U^T##: $$U^TU\begin{bmatrix}\|a\|\\\|b\|\\\|c\|\end{bmatrix} = U^TV$$ Now ##U^T U## is ##3 \times 3## and positive semidefinite since for any ##x## we have ##x^T U^T U x = ||Ux||^2 \geq 0##. It will be positive definite provided that the null space of ##U## has dimension zero (##Ux = 0## implies ##x = 0##), in which case it can be inverted to obtain a solution: $$\begin{bmatrix}\|a\|\\\|b\|\\\|c\|\end{bmatrix} = (U^T U)^{-1} U^T V$$ An equivalent condition for the null space of ##U## to be zero is that ##U## must have full rank (3). In other words, at least three of the nine equations must be linearly independent. This will almost surely be the case based on the geometry have you described.
Thank you for your quick response! I think there may be one clarification necessary, although it may be my lack of understanding that is driving the confusion. When you set up your "difference vectors" you establish that v1 = a - b, v2 = b - c, and v3 = a - c. While that certainly can be done, we still don't know the magnitude of the vectors a, b, and c (we only know their direction as provided by the surveyor.) I do however know (to a high degree of precision) the magnitudes of the vectors v1, v2 and v3 from the CMM measurements that were taken on my prism housing (that houses all three prisms.) The way you set it up, v1, v2 and v3 are now vectors indicating the separation of the survey prisms which we know the magnitude of (from CMM), but not the direction (because the prism mounting assembly has been placed at an unknown location within the surveyor reference frame.) So when you set up your linear equation: [itex] U \begin{pmatrix} ||a|| \\ ||b|| \\ ||c|| \end{pmatrix} = V [/itex] You now have unknowns both in the matrix containing the magnitudes of a, b, and c, as well as in the Matrix V. The rest of the linalg is pretty straightforward but I'm not sure it will provide the result we are looking for. Thanks again for your help. *bit of a beginners learning curve on that mathtype :)
You don't need to know the magnitudes of a, b, and c to know v1, v2, and v3. But for the purpose of solving the problem, it is important to know that v1, v2, and v3 can be expressed as differences of the (partially known) vectors. However, I incorrectly assumed that you knew both the magnitudes and directions of v1, v2, and v3, i.e., that these vectors between each pair of prisms are completely known. If you only know their magnitudes and not their directions, then that's a different story. I'm not even sure there is enough information to find a solution. I'll think about that and post again if I have any ideas.
Do you know the angles between the ##u## and ##v## vectors, by any chance? If so, then we can start with these equations: $$ \begin{align} u_a \|a\| - u_b \|b\| &= v_1 \\ u_b \|b\| - u_c \|c\| &= v_2 \\ u_a \|a\| - u_c \|c\| &= v_3 \\ \end{align} $$ and take the dot product of each equation with ##v_1##, ##v_2##, and ##v_3##, respectively: $$ \begin{align} v_1 \cdot u_a \|a\| - v_1 \cdot u_b \|b\| &= \|v_1\|^2 \\ v_2 \cdot u_b \|b\| - v_2 \cdot u_c \|c\| &= \|v_2\|^2 \\ v_3 \cdot u_a \|a\| - v_3 \cdot u_c \|c\| &= \|v_3\|^2 \\ \end{align} $$ Dividing the ##i##th equation by ##\|v_i\|## gives you $$ \begin{align} \cos(\theta_{1a}) \|a\| -\cos(\theta_{1b}) \|b\| &= \|v_1\| \\ \cos(\theta_{2b}) \|b\| -\cos(\theta_{2c}) \|c\| &= \|v_2\| \\ \cos(\theta_{3a}) \|a\| -\cos(\theta_{3c}) \|c\| &= \|v_3\| \\ \end{align} $$ where ##\theta_{nx}## denotes the angle between ##v_n## and ##u_x##. You can also obtain six other equations by taking the dot product of ##v_i## with equation ##j##, with ##i \neq j##. For example, taking the dot product of ##v_2## with equation 1 yields $$v_2 \cdot u_a \|a\| - v_2 \cdot u_b \|b\| = v_2 \cdot v_1 = \|v_1\| \|v_2\| \cos(\theta_{12})$$ Dividing by ##\|v_2\|## gives you $$\cos(\theta_{2a}) \|a\| - \cos(\theta_{2b}) \|b\| = \|v_1\|\cos(\theta_{12})$$ Hopefully my theta notation is clear. When there are two number subscripts such as ##\theta_{12}##, I mean the angle between ##v_1## and ##v_2##. When there is a number and a letter such as ##\theta_{1a}##, I mean the angle between ##v_1## and ##u_a##.
Summarizing in case the above is not clear, you would have nine equations and three unknowns as before, but now the only information presumed known are the magnitudes of the ##v## vectors, the angles between the ##v## vectors, and the angles between the ##v## and ##u## vectors. The equation to solve would be $$\begin{bmatrix} \cos(\theta_{1a}) & -\cos(\theta_{1b}) & 0 \\ 0 & \cos(\theta_{2b}) & -\cos(\theta_{2c}) \\ \cos(\theta_{3a}) & 0 & -\cos(\theta_{3c}) \\ \cos(\theta_{2a}) & -\cos(\theta_{2b}) & 0 \\ \cdots & \cdots & \cdots \\ \end{bmatrix} \begin{bmatrix} \|a\| \\ \|b\| \\ \|c\| \end{bmatrix} = \begin{bmatrix} \|v_1\| \\ \|v_2\| \\ \|v_3\| \\ \|v_1\|\cos(\theta_{12})\\ \cdots \end{bmatrix}$$
I can't thank you enough for your continued interest. Unfortunately the angles between the u and v vectors are unknown (unless a way to determine them from a combination of the u vectors and the v magnitudes can be found.) Remember we only know the magnitude of the v vectors and not the direction. Finding the direction to v vectors would allow you to calculate the angle between the u and v vectors. I had considered trying to develope an LMfit to try and fit the known geometry of the three prisms to the geometry of the three lines (calculated from unit vectors) from the origin. This however led to the realisation that with only 3 prisms there are ample opportunities for multiple solutions. I have six prism mounts on my fixture so that would make multiple solutions less likely, but not necessarily impossible. This still may be a viable path forward but I'll need to sleep on it before changing paths. Prior to posting I had, after multiple weeks of sleeping on this, decided that the problem is one measurement short of being solvable analytically. That said I figured I'd float it to the world and see if anybody had a vision. Other thoughts were to shoot the three prisms, then move it and shoot again... repeat many times... invert for position. I'm having trouble I'll keep you posted on any breakthroughs and would certainly love to hear any you may have. Thanks again!
Sorry, I only have a vague mental picture of your setup. Is it not feasible to measure the angles between the u and v vectors? It seems like you could stand at each prism, and point one end of the measuring device toward one of the other prisms (that's the direction of the v vector), and point the other end at the observer's position (u vector)? I'm using the term "end" loosely - I'm not sure what sort of device you are using to measure the angles - but I assume you get the idea. Anyway, please do post if you find a solution! It's an interesting problem.
P.S. Here's the picture I have in mind. I've plotted the four points and the directions of each of the u and v vectors. Some of the vectors may have opposite signs from what I wrote in the equations above, but that's just a small detail. Let me know if it's actually some other configuration.
Fundamentally your drawing is correct. To imagine the problem a bit more intuitively, the vectors u1, u2 and u3 should reverse their sign and originate at the origin ("D"... the laser total station.) But as you said, that has no real effect on the math. I've got other items on my plate today but I'll be revisiting this tonight or tomorrow. I'll be tinkering with the idea of using an optimization. Cheers