"ChLinkMotorLinearPosition" fails to serve as a prismatic link

70 views
Skip to first unread message

Yaqing Wang

unread,
Mar 13, 2024, 10:30:15 PM3/13/24
to ProjectChrono
Hi,

I am having a problem: the "ChLinkMotorLinearPosition" fails to serve as a prismatic link after some time.

I want to simulate an ellipsoid (blue-ish) hanging on a rod under a slider (called LA) that goes to two beams (green), and the slider should push the rod forward and constrain it from moving laterally and vertically.

But now, in my simulation, the rod can drop to the ground.
See videos:
At the top left, the robot drops before contacting the beams.
At the top right, I deleted the link between the rod and the robot, and this dropping of the rod still happens but is postponed.
At the bottom left, I added a prismatic link to secure this sliding motion, but the system is not moving but only shaking, maybe due to over-constraint.

Here is the motor code.
auto motor = chrono_types::make_shared<ChLinkMotorLinearPosition>();
motor->Initialize(LA, rod, ChFrame<>(ChVector<>(0, 0.02, 0), Q_from_AngY(CH_C_PI/2)));
motor->SetGuideConstraint(ChLinkMotorLinear::GuideConstraint::PRISMATIC);
motor->SetMotionFunction(f_ramp2);
mphysicalSystem.Add(motor);

Here are the files:
https://www.dropbox.com/scl/fi/uqv0wvjow36n694436w5f/v2_feedback_vis.zip?rlkey=2o8jqw3o3l7p34lnbeza8b9py&dl=0

And here are the videos, on page 3:
https://www.dropbox.com/scl/fi/zadvx4oonw8zp71u7i6gs/Yaqing_20240313_learn_Chrono.pptx?rlkey=3rpnrv9r34k1g0bi3tu847vhw&dl=0

Would anyone help?

Thanks,
Yaqing

Radu Serban

unread,
Mar 14, 2024, 3:53:28 AM3/14/24
to ProjectChrono

Yaqing,

 

I only looked briefly over the code you sent, so I may be missing something else.

 

Many of these issues are likely due to misconfiguration of your Chrono code.  This is in large part due to confusing API of the Chrono code and something we’re currently working on. In a few days we will merge into the main branch a pretty extensive refactoring of the Chrono code which we hope will make things less confusing for users.

 

As you correctly inferred, the linear motor with prismatic guide constraints will act like a prismatic joint with an actuated translation DOF.  The fact that the constraints are not satisfied suggests that the simulation is not properly converged.  Reducing the step size would be the first thing to try.  I noticed that you use DoFrameDynamics to advance the system state.  Yet, you do not change the integration step size with a call to ChSystem::SetStep.  Without that, Chrono will use the default step size and you likely end up taking a single step between those “frames”.  By the way, this is one of the things that will be changed in the refactored API (the signature of DoFrameDynamics will explicitly ask for the integration step size).  In the meantime, I suggest you switch to using DoStepDynamics and experiment with different step sizes.

 

The problem you ran into when you tried to add a (redundant) prismatic joint is again likely due to inconsistency in the current Chrono API.  Indeed, the specification of a linear motor with prismatic constraints and a prismatic joint assume different frames (the former assumes the (actuated) translational DOF is in the X directions, while the latter assumes the translational DOF is in the Z direction). If this is not properly taken into account, adding the prismatic joint will effectively lock the mechanism.  Again, something that is being straightened out in the refactoring I mentioned.

 

Finally, to resolve the problems you have with actuating your mechanism, I suggest you start with a simpler setup. Start with a mechanism that only includes the ellipsoid body and the linear motor and make sure you get that working properly. Then add the other components and bodies.

 

--Radu

--
You received this message because you are subscribed to the Google Groups "ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email to projectchron...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/projectchrono/377d4585-3ec1-409f-b684-eaa0d036febcn%40googlegroups.com.

Yaqing Wang

unread,
Mar 14, 2024, 3:55:30 PM3/14/24
to ProjectChrono
Dear Radu,

Thanks for your urgent reply! 
I will work on building a simple system and look into the time step setting. Thanks!

I have one more question:
What will a joint do when the joint already fails? I can understand that a improper time step will make the prismatic joint (from motor link) fail a little (like, a little displacement in the constrainted direction), but will it always cause an avalanche in failure, like the joint is totally missing?

Thanks,
Reply all
Reply to author
Forward
0 new messages