[PD] gimbal lock solution?

Roman Haefeli reduzent at gmail.com
Sat Feb 9 21:11:08 CET 2013

```On Sam, 2013-02-09 at 16:41 +0100, Cyrille Henry wrote:
>
> Le 09/02/2013 15:39, Roman Haefeli a écrit :
> > I believe it is (unfortunately) not as simple as that. When you rotate
> > with [rotateXYZ], the three axis are not always perpendicular to each
> > other. For instance, if you set Y to 90, the X and the Z rotate around
> > the same axis.
>
>
> every rotation keep the 3 axes perpendicular.
> but rotateXYZ do 3 rotations, X, Y and Z, in this order.
>
> if you rotate 90° in Y, Z axe became what use to be the X axe.
> so rotation in Z after a 90° rotation in Y is the same than a rotation in X before the Y rotation.
> that's the gimbal lock.
>
> but after the Y rotation, a X rotation is not the same than a Z rotation.
>
> if you don't believe me, you can try :
> rotate X 0 Z
> rotate 0 90 0
> cube
>
> X and Z are still (and will always be) perpendicular.

Ok, this makes sense to me now. Thanks.

> > However, the gyroscope (at least the one from Wiimote MotionPlus and
> > most likely also the one from your phone) consists of three separate
> > sensor which are perpendicular to each other at any time.
> >
> > If I understand Fero correctly, he would like to use the sensors so he
> > can control an object in Gem that follows exactly the orientation of his
> > phone. I also tried that once with a Wiimote and Gem but I couldn't wrap
> > my head around the two concepts of [rotateXYZ] and the gyro sensors.
> gyro sensors give rotation speed. not absolute rotation.

Yeah, right. But you can add the values up to get rotation (of course,
it's always rotation relative to itself, which will obviously drift from
reality over time).

> in theory (with infinite acurate sensors, no drift etc), you have to
> do a feedback loop (using gemlist_info), so that the current rotation
> is modify by the sensors value.
> (rotation did not sums up)

...parsing solution .... beep...... stack overflow (in my head)!

You mean you add each increment (gyro measurement) to the rotation
separately, then get the orientation with gem_list info, add the next
increment to the orientation, get orientation again, add increment etc?
Can you cast that into a little Gem example patch, if it is not too much
trouble?

Roman

```