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.