Announcements
Autodesk Community will be read-only between April 26 and April 27 as we complete essential maintenance. We will remove this banner once completed. Thanks for your understanding

Does "grounded" not mean "at a fixed position and orientation relative to the origin?"

GRSnyder
Collaborator

Does "grounded" not mean "at a fixed position and orientation relative to the origin?"

GRSnyder
Collaborator
Collaborator

Wow, this is really blowing my mind! What the heck is going on?

 

I have a simplified model of a ball bearing that I want to rig for bearing-like motion with Fusion 360 joints. The bearing is a component, and it has four subcomponents: the inner race (the hub), the outer race, and two rubber seals.

 

Model.png

 

I started by defining the seals as a Rigid Group, then grounding one of the seals.

 

Then I created a Revolute joint between the cylindrical surface of the inner race (picking the central point as the joint origin) and the XY plane of the parent component's origin.

 

The problem is that I can now drag the inner race to a random position in space, and the parent component's origin follows it there:

 

Moved.png

The seals (and the outer race) do not "move" on screen, but clearly they seem to have moved within the parent's coordinate system. The origin visible above is for "6702-2RS bearing". The inner race's origin is in the same place as that origin (that is, it has not moved relative to the subcomponent). The origins of the other three components (and of the model as a whole) remain centered on the original bearing assembly.

 

I'm inferring from this behavior that "grounded" doesn't actually mean "fixed in position according to the parent's coordinate system" so much as "won't be considered as something that could actively be moved in order to solve the joint constraints." Is that right?

 

I don't need help setting up joints for the bearing; I can see how to work around this effect. I'm just asking about the underlying principle used by the joint solver engine. And I guess, about the general principle. Is it considered bad form to involve component origins (other than the top-level design origin) in Joint relationships? It seems really weird that Joints can move origins around while having no other apparent effects.

 

0 Likes
Reply
Accepted solutions (2)
581 Views
8 Replies
Replies (8)

jeff_strater
Community Manager
Community Manager

The problem is:  you created the revolute joint between the "inner race", and the sub-assembly "6702-2RS bearing".  And Fusion is honoring that.  When you drag the inner race component, it takes the sub-assembly with it (which you can see because you have the origin visible).  However, there is no relationship between the grounded/rigid grouped "Bottom seal" and "Top seal" components and the sub-assembly - they are independent.  A sub-assembly is a component in its own right, independent from its children

 

I would add "Outer Race" to the rigid group, thereby getting a rigid group with that and the two seals, then create a revolute with the "Inner race" and the "Outer Race" components.

 

I'm not sure I understand your title.  Ground is working fine here.  You have one grounded component - "Top seal".  It does not move, as expected.  Your rigid group, then, effectively grounds "Bottom seal" as well.  This all works as expected.  The other components are not related to those components in any way.

 


Jeff Strater
Engineering Director
0 Likes

jeff_strater
Community Manager
Community Manager

here is a screencast to illustrate:

 


Jeff Strater
Engineering Director
0 Likes

TrippyLighting
Consultant
Consultant

Given the structure of your assembly I would not actually ground the bearing.

 


EESignature

0 Likes

GRSnyder
Collaborator
Collaborator

My apologies for letting this thread lie fallow for a while. I had to do some additional research to assess this in more detail.

 

First, the question isn't "how do I make joints for a bearing," it's "what does grounded really mean, and is it better to use grounding or joints relative to coordinate systems?" Here's what I've concluded after some investigation. Please let me know if I'm misstating anything.

 

  • "Grounded" means "fixed in position relative to the coordinate system of the root component."
  • There is no abstract "world coordinate system" independent of the coordinate system of the root component.
  • Grounded components are in fact free to move relative to any coordinate system in their component containment chain except for the root coordinate system. However, such moves must be "balanced" or "coupled" so that the location of a grounded component remains constant within the root coordinate system. For example, moving a grounded component 100mm in X and moving its parent component -100mm in X is perfectly fine.
  • You can't make this type of balanced move by hand because manual moves always have an order and the intermediate states are not valid. However, the joint solver can and does make simultaneous moves at multiple levels if that is necessary to preserve joint constraints.
  • When a grounded component is inserted or derived into another model, it becomes ungrounded. That makes sense because the inserted component's root coordinate system is no longer special. It may not even have been imported into the client document. In any event, the receiving model has its own root component and root coordinate system which have nothing to do with the inserted design.
  • Therefore, it is actually poor practice to ground components. Joint networks that are stable and well-defined in the source document are guaranteed to become underspecified as soon as they're inserted somewhere else if they rely upon grounding.
  • Instead of using grounding, components should be fixed in place with joints to coordinate systems. A stable version of grounding can be emulated by jointing to the root origin. But in most cases, a more local coordinate system may be a better choice.

Yes?

0 Likes

TrippyLighting
Consultant
Consultant
Accepted solution

to understand that @GRSnyder wrote:

My apologies for letting this thread lie fallow for a while. I had to do some additional research to assess this in more detail.

 

First, the question isn't "how do I make joints for a bearing," it's "what does grounded really mean, and is it better to use grounding or joints relative to coordinate systems?" Here's what I've concluded after some investigation. Please let me know if I'm misstating anything.

 

  • "Grounded" means "fixed in position relative to the coordinate system of the root component."
  • There is no abstract "world coordinate system" independent of the coordinate system of the root component.

Correct!

 


@GRSnyder wrote:

 

  • Grounded components are in fact free to move relative to any coordinate system in their component containment chain except for the root coordinate system. However, such moves must be "balanced" or "coupled" so that the location of a grounded component remains constant within the root coordinate system. For example, moving a grounded component 100mm in X and moving its parent component -100mm in X is perfectly fine.
  • You can't make this type of balanced move by hand because manual moves always have an order and the intermediate states are not valid. However, the joint solver can and does make simultaneous moves at multiple levels if that is necessary to preserve joint constraints.

Huh ? Admit it, you were watching a Youtube video on quantum states and for a moment your attention slipped to what you were typing!

 


@GRSnyder wrote:
  • Therefore, it is actually poor practice to ground components. Joint networks that are stable and well-defined in the source document are guaranteed to become underspecified as soon as they're inserted somewhere else if they rely upon grounding.
  • Instead of using grounding, components should be fixed in place with joints to coordinate systems. A stable version of grounding can be emulated by jointing to the root origin. But in most cases, a more local coordinate system may be a better choice.

Correct for the most part. Grounding removes the grounded components form joint solver computations. Grounding is a feature that existed before we had external / linked and derived components. Back then it was useful.

In distributed on the other hand design its usefulness is limited. I very rarely use it in assemblies.
 


EESignature

1 Like

GRSnyder
Collaborator
Collaborator

@TrippyLighting wrote: Huh ? Admit it, you were watching a Youtube video on quantum states and for a moment your attention slipped to what you were typing!

No, it's true! I think the attached file is about as simple as it can be made. 

 

Consider the states before and after the joint is added. The joint moves Parent, as evidenced by its origin relocating. Grounded remains where it is in the root coordinate system, but it has moved within the coordinate system of Parent, as evidenced by the fact that its origin and Parent's origin are no longer coincident.

 

It seems entirely plausible that this has nothing to do with the joint solver. But if that's the case, I would think that part of the implementation of grounding must be that there's a pass down the coordinate system hierarchy that's run after the joint solver, to reconcile the position of grounded elements with respect to each ancestor coordinate system.

0 Likes

jeff_strater
Community Manager
Community Manager
Accepted solution

@GRSnyder, your analysis here is mostly correct:  Because the grounded component cannot move, in order to satisfy the joint constraint, the solver moves whatever it can to satisfy the constraint system (in this case the parent component).  A parent component is still a component, with its own origin and its own transform, that is independent of its child component.  (I'm tempted here to make an analogy to human parents being people too, they don't only exist in the context of their children).  Ground only grounds the specific component to which it is applied. That ground is not transferred to any parent or children  Further, you are correct that Ground means:  "fixed in the root component's coordinate system".  It does not mean "fixed with respect to its immediate parent component".  Anyway, if you ground the parent (rolling back before the joint), then nothing can move, and the joint will fail.

 

"I would think that part of the implementation of grounding must be that there's a pass down the coordinate system hierarchy that's run after the joint solver, to reconcile the position of grounded elements with respect to each ancestor coordinate system."  It is nowhere near that complex.  It is, in fact, very simplistic.  Fusion always solves an assembly as a flattened set of components.  Inside the solver, there is no hierarchy.  In your example, there are just 3 components: 

  1. the root component with one body called "Root Body"
  2. a component called "Parent", with one body called "Parent cube"
  3. a component called "Grounded" with one body called "Grounded cube"

All 3 are on equal footing at solve time.  The root component is always grounded in any design.  "Grounded" is grounded because you applied a Ground constraint to it.  That leaves "Parent" free to move.  This flattening allows Fusion to support "flexible sub-assemblies".

 

Regarding the implementation of ground in distributed designs - it was a design choice not to propagate ground across Insert.  I think it was the right choice, but not everyone agrees.

 

Some people choose to use an as-built rigid joint to the root origin point as a Ground replacement.  Within a design, it has the same effect, but when Inserted into another design, it has the effect of forming a rigid relationship with the sub-assembly's root component.


Jeff Strater
Engineering Director
1 Like

GRSnyder
Collaborator
Collaborator

Very interesting and useful comments, thanks to both of you.

1 Like