Why the Revolute joint break when the acceleration happens to the child object of the joint?

Typically: "How do I... ", "How can I... " questions
Post Reply
MaJiamu
Posts: 15
Joined: 19 Jan 2021, 03:52

Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by MaJiamu »

Hello, I was creating a robot with a Prismatic joint and several Revolute joints.

The child object of the first revolute joint is dynamic. While both the prismatic joint and revolute joint are setted to dynamic mode. Besides, the revolute joint was under the control mode with Velocity.

The phenomenon is when the prismatic joint move under a certain acceleration, the stator and rotor of the Revolute joint will separate, as if the Revolute joint was damaged. I was wondering that whether could I fix this problem and ensure there is no relative movement between the stator and rotor when the prismatic joint move under a certain acceleration.

Here is the scene document for details!
https://drive.google.com/file/d/1cbaryN ... sp=sharing
https://drive.google.com/file/d/1Rau2SY ... drive_link

Thanks for anyone who can help me!

coppelia
Site Admin
Posts: 10375
Joined: 14 Dec 2012, 00:25

Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by coppelia »

Hello,

this is because joints are modeled as constraints with most of the engines (except with MuJoCo: try it). Additionally, your joint is mounted on a static shape. Instead, attach it to the dynamic parent of the static shape (i.e. to Cuboid).

Cheers

MaJiamu
Posts: 15
Joined: 19 Jan 2021, 03:52

Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by MaJiamu »

Thanks for your reply! I believe that I understand it.

maf
Posts: 16
Joined: 16 Jan 2023, 16:34

Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by maf »

I believe that I understand it.
I don't ... :(
... joints are modeled as constraints with most of the engines
Precisely because joints are modeled as ideal kinematic constraints, they do not allow any motion except those granted by the joint degree of freedom. For a revolute joint, that is rotation about the axis, no other motion should happen between the two bodies.

I have a scene here where a similar problem as the original question is happening, even if the dynamic joint is between two dynamic bodies (so I think the setup is "correct"): when pressing play, one can see a slight "bending" in the second revolute joint, i.e. the second body "falls down" a tiny bit relative to the first, moving along a direction not accounted for by the joints.

In my understanding of rigid body simulations and joint modeling, that would never happen, as the joint is an algebraic constraint. It should not even depend on the inertial properties of the bodies, however bad conditioned those may be.

What am I missing here?
Thanks

fferri
Posts: 1230
Joined: 09 Sep 2013, 19:28

Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by fferri »

maf wrote: 11 Mar 2024, 17:49 Precisely because joints are modeled as ideal kinematic constraints, they do not allow any motion except those granted by the joint degree of freedom. For a revolute joint, that is rotation about the axis, no other motion should happen between the two bodies.
Only in an "ideal" world.

In practice, joints can violate their constraint. Although the engine will try to bring that error back to zero, a small error can sometimes be observed.

E.g. see the ODE manual, especially "Joint error and the Error Reduction Parameter": http://ode.org/wikiold/htmlfile1.html#J ... onstraints

Perhaps only MuJoCo is different in this, but I haven't tried it yet.

coppelia
Site Admin
Posts: 10375
Joined: 14 Dec 2012, 00:25

Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by coppelia »

Yes, that is correct, only MuJoCo and the newer Bullet engines have ideal joints (but not the Bullet engines in CoppeliaSim as for now)

Cheers

maf
Posts: 16
Joined: 16 Jan 2023, 16:34

Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?

Post by maf »

Hi, thanks for your answers, I see what you mean.
E.g. see the ODE manual,
Yes, I did end up in that section of the manual even before reading your post, we are on the same page :)
Only in an "ideal" world.
The simulated one is an ideal world :) But it was my bad to assume the joint model to be always ideal.
I believe that is the case for a "traditional", simple, forward dynamics solver specialized for kinematic trees.

Perhaps a relevant remark is that solvers like ODE are designed to support closed-loop systems too: there, numerical errors violating the constraints would normally emerge even with ideal joint models, hence they use a model that is not ideal in the first place. But I am just speculating.

Cheers

Post Reply