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!
Why the Revolute joint break when the acceleration happens to the child object of the joint?
Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?
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
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
Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?
Thanks for your reply! I believe that I understand it.
Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?
I don't ... :(I believe that I understand it.
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.... joints are modeled as constraints with most of the engines
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
Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?
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.
Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?
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
Cheers
Re: Why the Revolute joint break when the acceleration happens to the child object of the joint?
Hi, thanks for your answers, I see what you mean.
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
Yes, I did end up in that section of the manual even before reading your post, we are on the same page :)E.g. see the ODE manual,
The simulated one is an ideal world :) But it was my bad to assume the joint model to be always ideal.Only in an "ideal" world.
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