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.

Moving multi-jointed/multiply-mated assemblies (inverse kinematics in OnShape?)

gabriel_grantgabriel_grant Member Posts: 8 EDU
edited March 2021 in Community Support

Is there a detailed description somewhere of how OnShape handles part movement in multi-joint chained assemblies? Specifically wondering about why it seems like sometimes moving a part at the end of a chain appears to work as expected (ie pretty much how it would in the physical world, presumably using inverse kinematics calculations?) and why it sometimes seems like there is only one degree of freedom accessible.

Take, for example, the following simple, multi-pivot hinge:

The lower section of square tube is fixed, the "hinge" piece is revolute-mated, to that lower tube section, and then the upper tube section is revolute mated to the hinge. Dragging the top tube around only seems to affect the last revolute mate (between the hinge piece and the free tube), but not the revolute mate between the fixed tube and the hinge piece, so the top piece's total movement is constrained

(mouse isn't shown, but this screenshot is taken while trying to drag the top tube up and to the right. note the hinge bar is still vertical, when in reality it would also rotate to extend the range of the upper square tube piece further up and to the right)

Of course the full range of motion can be explored by moving each of the joints individually, but for getting a sense of part movement (and especially with longer/more complex chains), it's handy to be able to just move the outermost part and have the rest follow. Is there something I can be doing differently in constructing these chains to make sure that's consistently possible?

Also, relatedly, is there a simple way to reset all mates? I find myself frequently "right-click -> Reset"-ing each one in these chains, and often resetting one will mess up another that had already been reset. Maybe just always setting a named position in the default state is the best approach?


  • Alex_KempenAlex_Kempen Member Posts: 244 EDU
    I can say from experience that Onshape definitely does have behavior similar to what you're describing. However, it seems that generally, Onshape prefers to avoid adjusting additional constraints before reaching the limit of the first constraint in the chain.

    When working with revolute mates, I've found that setting angular limits can also help make additional movement simpler since it prevents issues with over centering and the like.

    Lastly, note that the order of parts and/or mates in the assembly list doesn't affect assembly behavior since mates are solved simultaneously. Also, making a named position is probably the easiest way to save the state of an assembly.
    CS Student at UT Dallas
    Check out my FeatureScripts here:

  • gabriel_grantgabriel_grant Member Posts: 8 EDU
    edited March 2021
    @Alex_Kempen by "Onshape definitely does have behavior similar to what you're describing" you mean it does or doesn't adjust all objects in a chain? My experience is that it doesn't seem to consistently allow manipulation of the second joint in the chain, even when the limit of the first joint has been reached. This is the behavior I see in the example I linked above.

    In case the screenshots of the linked example doc aren't clear, I've uploaded a video of the second link remaining fixed until manually manipulated: https://youtu.be/DBwXtB-wmZc (didn't seem to be able to attach it here?)
  • Alex_KempenAlex_Kempen Member Posts: 244 EDU
    Oops, my statement was unclear. Onshape is definitely able to handle inverse kinematics, but getting it to work can be somewhat tricky. This is for a variety of reasons - clicking and dragging can be somewhat inconsistent, especially on low end hardware; Onshape also generally prefers to returns solutions which move the fewest mates possible. Because of this, setting limits and using tools like animate mate are often best for visualizing assembly motion.

    In your example, I think you'll be able to get the second piece to also move if you put rotational limits on your revolute mates using the limit option, then try dragging past one of the limits you've set.
    CS Student at UT Dallas
    Check out my FeatureScripts here:

  • gabriel_grantgabriel_grant Member Posts: 8 EDU
    @Alex_Kempen thanks for clarifying. You're right that setting a limit has an effect -- with a limit set on the outer joint, dragging the end-of-chain object around now does affect the inner (fixed-object) joint. Strangely, though, it does have that effect even if the "limit" of the rotation is -360 to 360 degrees (ie completely unconstrained). I've updated the doc to have both a version with no limits, and one with the -360-to-360 limit: https://cad.onshape.com/documents/b146fdd705c7470ca9bc6716/w/23a58a1a0be0a81de8833e28/e/16d28f861d4add49de73a97c

    So it seems to me like this is just an OnShape bug, but that can be worked around by setting non-limiting rotation limits

    Video showing the issue: https://youtu.be/2396sf6dA74
Sign In or Register to comment.