mathoffsetregistrationpoint-cloudshomogenous-transformation

Cumulative Homogenous Transformations: rotations work, but translations don't?


I have 3 point clouds (cloud 0, cloud 1 and cloud 2), obtained in 3 different positions using a Terrestrial Laser Scanner. These clouds overlap between them, which means that there is a rigid 3D body transformation, T, which correctly registers one cloud on another. I have two of these transformations, T10, which moves cloud 1 to cloud 0; and T20, which moves cloud 2 to cloud 0 (cloud 0 was chosen as the global reference). The question is, how do I find the transformation that overlaps cloud 2 with cloud 1? I already found the rotation, but I can't find the translation vector. It's possible?

The rotation I found by multiplying the transformation T20 by the inverse of T10, because T10^(-1) = T01, therefore, T20*T01 = T21. When I apply this transformation to cloud 2 it rotates cloud 2 to cloud 1 correctly (both are in the same direction), but there is a shift between them, I don't understand why.

These transformations are just homogeneous matrices T (4x4) which are simply the junction of a rotation matrix R (3x3), and a translation vector t (3x1), right? Rotations can be composed. The fact that I found the rotation from cloud 2 to cloud 1 shows this. But why does this shift appear in translation?

In fact, I have several clouds, to register a cloud far from the origin, I need to accumulate several transformations through multiplications (for example: T50 = T54 * T43 * T32 * T21 * T10), the more I multiply the greater the difference in translation.

I would like to say that although the multiplication accumulates errors, they are very small, since the registration was done manually and refined by ICP. In fact, applying any of the transformations in pairs results in an almost perfect overlap, but accumulating them causes a huge deviation in translation. The rotation is so good that loop closure practically results in the identity matrix.


Solution

  • Are you neglecting the effect of rotation on translation?

    If you have a transformation T with rotation R and translation v and another S with rotation Q and translation v, then the effect of applying T then S to a point x is to get y where

    y = Q*(R*x+v) + u = Q*R + Q*v + u 
    

    That is the combined transformation has rotation

    P = Q*R
    

    and translation

    w = Q*v + u
    

    It follows from this that the transformation inverse to T has rotation

    inv(R)
    

    and translation

    - inv(R)*v
    

    We can, and it is common to, represent such transformations by 4x4 matrices, in such a way that composing and applying transformations reduces to matrix multiplication. Note, though, that this comes at some cost in efficiency.

    S and T above would be represented by 4x4 matrices M and N

    M = ( Q u)
      = ( 0 1)
    N = ( R v)
        ( 0 1)
    

    then the representative L of the combined transformation T then S is

       L = M*N
    

    To apply S to a point x we compute

    M*(x)
      (1)
    

    and the first three components of the result are the components of the transformed point.