toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Toon-members] SE3: relation of input-translation to output-translat


From: Ethan Eade
Subject: Re: [Toon-members] SE3: relation of input-translation to output-translation
Date: Tue, 23 Jun 2009 11:10:14 -0700
User-agent: Thunderbird 2.0.0.21 (X11/20090318)

Hi Rafael,

The exponential map in the group SE(3) is different than the exponential map in the rotation group SO(3) followed by translation in R^3 . In algebraic terms, rigid transformations in SE(3) are a semi-direct product of rotations and translations, so the two interact. You can imagine exp() as doing a series of tiny [translation+rotation] motions in series. The upshot of this algebraic property is that the rotation and translation components in the tangent space (your vector mu) interact under the exponential map, yielding an element of SE(3) which doesn't have the translation you were expecting. This is mathematically correct behavior -- it corresponds to motion along the geodesic given by mu.

In summary, the exponential map in SE(3) is not, in the general case, equivalent to any independent combination of exp()ing a translation and then a rotation and composing the result.

Elements of the tangent space are sometimes called twists, and their exponentials in SE(3) are called screws, because they correspond to a rotation around an axis followed by a translation along that same axis.
For some more detail, see page 544 of this chapter:
http://www.cis.upenn.edu/~cis610/cis610lie1.ps

Regards,
Ethan Eade


Rafael Spring wrote:
Hello gentlemen,

I am using TooN for a while now and I really appreciate it. Scope, usability and speed are really great and I couldn't imagine working without it. However, today, I've had some weird behavior and I'm unsure if TooN is supoosed to behave like that (Btw. I am using TooN beta3) or if my understanding of SE3s is insufficient. The question boils down to what happens to an input translation after exponentiating.
Consider the following sourcecode:

----
Vector<3> rotation = makeVector(0.4, 0.6, 0.15);    //arbitrary numbers..
Vector<3> translation = makeVector(-1, 0, 0.5); //arbitrary numbers..
Vector<6> mu;
mu.slice(0,3) = translation;
mu.slice(3,3) = rotation;
SE3<> se = SE3<>::exp(mu);
Vector<3> t = se.get_translation();

----
Now, I was expecting:

t == (-1, 0, 0.5)

following the assumption that a euclidean transformation by an SE3 equals to an orthogonal transformation (exp'ing the rotation part of mu) + a translation.
The true value, however, is:

t == (-0.789750 , -0.19886, 0.734775)

So I reversed my assumption: It could be a translation by t followed by an orthogonal transform (this would correspond to the translation-part of mu being the inverse camera translation as seen from camera 1 and get_translation() being the inverse translation as seen from camera 2). This assumption, however, was neither confirmed:

----
// make a rotation-only SE3
Vector<6> mu_ = mu;
mu_.slice(0,3) = makeVector(0,0,0);
SE3<> se_ = SE3<>::exp(mu_);

// make a translation-only SE3 Vector<6> mu__ = mu;
mu__.slice(3,3) = makeVector(0,0,0);
SE3<> se__ = SE3<>::exp(mu__);
// 1st translate then rotate
Vector3 t_ = (se_ * se__).get_translation();

//  t_ == (-0.5293 , -0.412372 , 0.89431)

----

Now to the part beyond my understanding: The second assumption holds (roughly) if I halve the rotation amount in mu:

----
Vector<6> mu_;
mu_.slice(0,3) = makeVector(0,0,0);
mu_.slice(3,3) = rotation / 2.0;
SE3<> se_ = SE3<>::exp(mu_); //se_ is half the rotation
Vector<6> mu__ = mu;
mu__.slice(3,3) = makeVector(0,0,0);
SE3<> se__ = SE3<>::exp(mu__); //se__ is only translation
Vector3 t__ = (se_ * se__).get_translation(); // 1st translate then rotate

// t__ == (-0.8024 , -0.19517 , 0.75371)
// t__ is roughly  == t

----
Is this within the general logic of SE3 members (am I missing something?) or might there be something wrong with the SE3 class?

Thanks!
Rafael


_______________________________________________
Toon-members mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/toon-members





reply via email to

[Prev in Thread] Current Thread [Next in Thread]