I am modelling elastic links via revolute joints that act as torsion springs.
It works well for few joints (< 4 spring-joints in series) and small loads, but once I add more joints or apply larger forces, my robot sort of "explodes. Most commonly, all the links will snap to the world origin as soon as I start the physics simulation. Sometimes the simulation crashed while attempting to set [Inf Inf Inf . . .] as a pose. I suspect some numerical instability going on.
For that reason I began looking into ODE's ERP feature, as well as <implicit_spring_damper>
within SDF, since this tutorial mentions it as a more numerically stable method of modelling springs and dampers. Looking into ODE, I found this entry on how to go about that.
Setting the aforementioned tag, as well as specifying <erp>
and <cfm>
in the joints does indeed produce more stable results. The joints however behave very differently now, seemingly having 6 DoF, allowing rotations about axes that should be constrained.
This opens up quite a few questions:
- What exactly does
<implicit_spring_damper>
achieve? - What significance do the values inside my
<axis>
tag have when using<implicit_spring_damper>
(including<damping>
and<spring_stiffness>
, which are also being implicitly specified va<erp>
and<cfm>
) ?- How can I model a 1 DOF revolute joint with spring and damper via this method?
- What do
<erp>
and<cfm>
within a joint do without<implicit_spring_damper>
? - What is the purpose of the global ERP and CFM values (set in Gazebo's GUI)?