Shortest paths in SO(3)

45 Views Asked by At

In $\mathbb{R}^3$, we have a sense of "shortest path" between a pair of points and can easily project nearby points in $\mathbb{R}^3$ onto this path. Specifically, given $a, b, c\in\mathbb{R}^3$, we can find the closest point to $c$ along the line joining $a$ and $b$ by taking $$c_{proj}=a+\langle c-a,\hat{d}\rangle\cdot\hat{d},\quad\hat{d}=\frac{b-a}{||b-a||}$$ I want to know how to do a similar thing for elements in SO(3). If I'm rotating from some rotation $R_a$ to another rotation $R_b$ along the shortest path in SO(3), but I deviate slightly from this path, how do I find the closest point to my current rotation $R_c$ along the initially intended path?

I understand the (stardard?) metric on SO(3), my difficulty is really just performing the calculations. I tried to convert everything to rotation vectors and perform it as a projection in that space, as this makes parametrisation of the path very simple. Namely, if $v$ is the map taking rotations in SO(3) to their equivalent (minimal magnitude) rotation vectors in $\mathbb{R}^3$, then I've parametrised the path as $$R(t)=v^{-1}(v(R_b R_a^{-1})\cdot t)\cdot R_a,\quad t\in[0,1]$$ So $R(0)=R_a$, $R(1)=R_b$, and $R(t)$ parametrises the geodesic in SO(3) connecting the two. I attempt to project onto this geodesic by projecting onto the line in $\mathbb{R}^3$ that is its image under $v$. But, my test code is showing I have errors sometimes but not always. I assume this is due to the discontinuities of the map from SO(3) to rotation vectors. What other good computation methods are there for this?