10
$\begingroup$

Given multiple quaternions representing orientations, and I want to average them. Each one has a different weight, and they all sum up to one.

How can I get the average of them? Simple multiplication by weights and addition won't work, since it doesn't take into account that (qw, qx, qy, qz) = (-qw, -qx, -qy, -qz)..

  • 0
    Google gives http://en.wikipedia.org/wiki/Generalized_quaternion_interpolation Someone who knows more may be able to expand.2011-09-01

3 Answers 3

2

I assume you are thinking of unit quaternions and you are using them to represent rotations? If that is the case then here is a paper on the related subject of means and averages in the rotation group. It might not be a very easy read though if you don't understand the notation.

Barring that, Here's what I might try: Pick a canonical form for your quaternions. Then convert each to the canonical form and finally perform your weighted linear combination.

  • 0
    The solution by averaging canonical forms looks like jonathon's solution to his question : http://stackoverflow.com/a/12439567/12007642017-04-07
1

There is a technical report from 2001 which states that the mean is actually quite a good approximation, provided that the quaternions lie close together. (for the case of -q=q, you could just flip the ones that point in the other direction by pre multiplying them by -1, so that all of the quaternions involved life in the same half sphere.

An even better approach is sketched in this paper from 2007, which involves using an SVD.

  • 0
    For further implementation discussion, see [this stackoverflow question](http://stackoverflow.com/questions/12374087/average-of-multiple-quaternions/)2014-10-20
1

This answer by Gouda gives the working of the Matlab implementation by Tolga Birdal, which is well-commented.