Coordinate transforms with PGA

Hey! I’ve got the description for several local coordinate systems in an 3D euclidean space given in the form of a rotation matrix (which represents the basis orientation of the local CS) and a translation vector (which represents the origin of the local CS). Now I want to calculate a motor (is this the correct word?) from these descriptions to transform points (or other objects) from one local CS into another local CS. I thought about calculating lines in the coordinate direction of the different local CS from their base orientation matrix. From the translation vector, one could calculate the translation transformation. Is this the correct way? Or is there any better suited algorithm, which I missed? At the end I want to have a collection of motors to calculate transformations between these local CS. Has anybody any hint for me? :smile_cat:

1 Like

I see nobody is replying for a long time which is odd. Maybe nobody works with rotations much, but I do. What you are asking about is easily done with homogeneous matrices and I like to use notation from Craig’s Intro to Robotics. Describing a point in a local system and then relating it to another is the same as rotating/translating from some csys. Matricas used are the same. In PGA it’s the same thing. The easiest is to think about it through body fixed successive rotations/translations. Just how you’d multiply matrices to relate between your two coord. systems, in the same order you’d use geometric products of your rotors/translators to make sandwich operations to achieve your final positions/orientations. There is no difference. I’d first suggest to decide on point or plane based approach. I personally prefer point based and Eric’s anti operators to do sandwich operations. However, even though I created all this stuff from scratch, I still use standard libraries like Eigen or Geometric Tools where transforms are already efficiently implemented and there is no point for me to start using my own questionably efficient libraries. I’d only prefer to use PGA for interpolation of movements for which quaternions are used as it’s much clearer to me how rotations are developed even though quaternions are two blades already present in GA, but the standard treatment how that’s taught is obscure. With GA you can see exactly how double reflection creates rotation and you are not left with any mystery.

Hi @fractal97 Thanks for your explanations and hints! I wanted to perform the transform via using methods of PGA, therefore I tried to avoid homogeneous matrices. I found a possible solution by using a rotor generated from two planes by their geometric product. For me, it is not so important, that these things are calculated fast, but more that they are correct and geometrically intuitive without much mental load (e.g. rotation matrix + translation vector is much mental load considering their order and whether passive or activate transform and so on). From my personal preference I’m more a fan of the plane based approach , so for me no need for a decision :slight_smile:

Best wishes and thank you again

To create a rotor is very easy. You don’t need planes. Wedge product of two vectors and angle for trig functions is enough, but watch out what’s a vector in plane based approach. You might get mixed up. I like to label this space for what it really is R*(3,0,1), a dual space. Now, I don’t believe matrices will be ever replaced because of efficiency. I don’t really know what you mean active, passive transform and I never heard of that. Homogeneous matrices are pretty straightforward. Position is the last column and orientation is 3x3 inner matrix. Relating two coordinate systems is multiplication of matrices. However, in GA you’re going to be thinking much more about what you’re doing which was the reason for your original post. In my opinion geometric product is really useful for interpolation of general rigid motion with several prescribed intermediate positions. That with matrices you wouldn’t want to do. Libraries for that exist based on quaternions which are really part of GA, but they are presented usually like some magic and we are told they just work. GA tells you why they work. But before even geometric product and rotations, Grassmann created algebra which encoded geometric elements and with join and meet you can do a lot. That on it’s own is worth the study.

@fractal97 thanks for your explanation. I used two vectors in the plane based GA which correspond to planes, sorry for the inexact wording. Chris Doran wrote down a formula to construct a rotor from two normalized vectors which can be used in PGA, too. One only has to take care, if the planes (vectors) have a normal vector pointing in the opposite direction of each other. Then of course you need a reflection, but no rotation. So for my purposes the problem is solved.

From my background quaternions were never introduced like magic, but they did not play a large role at all. So I know what to do with them and how they work, but never used them that much. GA is more powerful, so no need for quaternions :slight_smile: Btw. last month I buyed (a reprint of) the original work of Grassmann “Lineale Ausdehnungslehre”, let’s see how he introduces the exterior algebra :slight_smile:

Could you tell me where this anti operators are defined?

Thank you very much.