Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape.

First time visiting? Here are some places to start:
  1. Looking for a certain topic? Check out the categories filter or use Search (upper right).
  2. Need support? Ask a question to our Community Support category.
  3. Please submit support tickets for bugs but you can request improvements in the Product Feedback category.
  4. Be respectful, on topic and if you see a problem, Flag it.

If you would like to contact our Community Manager personally, feel free to send a private message or an email.

How do I get relative Position and Orientation between two mates?

javl0p_2javl0p_2 Member Posts: 23
I'm working inside an Assembly. I have two mates already placed, each of thems belongs to a different Part. I would like to know the position and orientation of one mate relative to the other one. 

Mates are basically reference systems, and relative position and orientation between reference systems are typically represented with a 4x4 Transformation Matrix. Other options include a traslation + orientation (which can be defined with Euler angles, in Axis angle representation or through quaternions). Each way of representing relative orientations has its pros and cons but for me they would be equally valid.

The problem is that a haven't figured out a way in OnShape to get the necessary information to compute relative orientations between mates. I can easily get the translation by selecting both of them and clicking the measure icon and I have found a Multi Mate Connector FS that could potentially help me, but since I'm inside an Assembly I can not rely on that either.

Has anyone else encountered this limitation or found a way to sort it out?

I understand this is not a typical design problem, but transformations are used quite often in other industries, such as robotics.


  • S1monS1mon Member Posts: 1,710 PRO
    That sounds like a great idea. There are a few improvement requests which are related that you might want to vote on, but you should write up one specifically on measuring the transforms.


  • javl0p_2javl0p_2 Member Posts: 23
    Thanks, I created an IR myself expressing this need. Vote it up if you like it!


  • billy2billy2 Member, OS Professional, Mentor, Developers, User Group Leader Posts: 1,944 PRO
    edited March 25
    I've been working on a transformation featurescript to create 3D trajectories through space and I'm finding the following to be true.

    A mate connector doesn't map to a transformation, you need 2 transforms.

    If you don't use the bottom rotation, then you can get away with 1 matrix transform. I don't think these matrices are part of a mate connector and you'll have to build them. You could just perform the last rotation using trig but I wouldn't. It seems like a waste to construct a matrix to perform a simple rotation, but in the end, linear algebra is just accounting so you want to keep things in the same 4x4 form.

    1 Matrix
    In cad everything goes through the origin. 

    M1 is the transformation from the origin to mate connector 1.
    M2 is the transformation from the origin to mate connector 2.

    So your transformation actually looks like this:M1 -> origin -> M2.

    M1 -> to the origin is the inverse matrix of origin -> M1. Onshape calls these "sketch to origin" or "origin to sketch". So the 1st step is to go from the mate connector to the origin which is the inverse of the definition when placing the mate connector.

    Using value with units and M1 & M2 are matrices.

    M1^-1 * M2 = would equal the matrix you're looking for when not using the bottom rotation in the mate connector dialog.

    Figuring out the translation between 2 mate connectors is easy: M2-M1. There's only 2 vectors involved. I doubt if you could subtract the 2 mate connectors, but instead, pull the vectors from the M1 & M2 and perform the math on them.

    I don't know if values with units handles matrices, I believe it does and I'm sure how to call a matrix inversion inv(M1)?

    2 Matrix 
    M1.1^1*M1.2^*M2.1*M2.2 there's 4 transformations when using 2 mate connectors. If you're at a mate connector and want to get back to the origin, you have to use the inverse matrix. 

    So with the transformation feature script I'm writing, I create 6 transformations that will go from the origin to a robot's end effector. If you're at the end effector and want to go back to the origin, you just invert all the matrices and go back to the origin. If you want to know where the end effector is located, you just multiply the transformation stack and you'll end up with a matrix that describes the end effectors location & orientation from the origin.

    If you want a skeleton of a robot without using a million sketches, you'll want to use a transformation featurescript to define a robot's structure. 

    I've been trying to justify why we need a transformation featurescript, thanks for posting this.

Sign In or Register to comment.