Problem with the constraint when it is spring loaded joint

43 views
Skip to first unread message

Jakob Pflugbeil

unread,
Sep 23, 2025, 12:00:49 PMSep 23
to ProjectChrono

I am currently trying to simulate a climbing robot, for this I need to set up the arms which are built from actuated joints (with motors) and passive actuated joints (spring loaded). When using 4 TSDA-Links (spring coef is 5000) and a universal joint built by defining a generic joint( allowing two rotational dofs),  there is an unexpected movement (in the simulation there are translational movements visible). I want to attach moveable grippers to the end effector and the main body be movable as well. The TSDA needs to be stiff. I am using Solver BB and for the Time stepper EULER_IMPLICIT_LINEARIZED. How can avoid this jumping motion, is there an solver time stepper setup for most accurate results.

Best regards from LUT

Jakob

climbing_robot_v4.cpp

Radu Serban

unread,
Oct 14, 2025, 12:49:38 PMOct 14
to ProjectChrono

Hi Jakob,

 

You may want to provide the obj files for visualization and collision.

Having said that, a ChMateGeneric you defined is not kinematically equivalent to a universal joint. Why not simply use a ChLinkUniversal?

 

--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 visit https://groups.google.com/d/msgid/projectchrono/04aa6e91-a625-475d-aeca-106d288dd019n%40googlegroups.com.

Jakob Pflugbeil

unread,
Oct 15, 2025, 7:24:18 AMOct 15
to ProjectChrono

Hello Radu,

Thanks for the response.

I updated the file and attached the obj.

 I used the Generic Joint because I thought it is kinematically the same as the universal since both are constraining the movement in the translational direction and in around the rotational z-axis of the absolute frame it is referenced, I would find the explanation interesting to why it differs.

It had one advantage, the relative position of the joint frames kept moving when using the Universal joint but not when using the Generic.

My main problem was caused by using the Setpoint function incorrectly. But nevertheless, there are still a few problems I have.

When using a time step of 0.001 for the system with the generic joint, the joint moves much and unnatural, when using a smaller time step this doesn’t happen.

When using the universal joint and timestep 0.0001 still a translational movement of the joint frames relative to another is present (activate the gym_universal.cpp in the main).

One other problem I encountered was the difference of the z-axis of frames of the joint_4 when using a time step 0.0001(gym(true,0.0001)) and the implicit Euler linearized. The z-lines (blue) with the two blue marking (in image chrono_axis_offset.png) should be parallel/ the same, there should be no offset.This could also be seen in the relative rotation of the small disc representing the body_arm_r_h_u and the base for the gripper. This problem was not present when using a time step of 0.00001 and the implicit Euler (not linearized). The stepper can be changed at line 573.

If it is helpful I could send some videos/images.

Best 

Jakob

chrono_axis_offset.PNG
climbing_robot_v4.cpp
body_3_1.obj
body_3_1_collision.obj
Reply all
Reply to author
Forward
0 new messages