Gazebo | Ignition | Community
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I think it is a recurrent problem. I faced the same instability with a recent project. What might happen is not that ODE can't handle small doubles variable as many previous topics suggest (inertial e-06 is quite OK). But the way your joints are defined might be the cause. If the inertials are small, then your links are easy to move. One link moves, disturb an other one through the joint that links them, and so on. This happens because your joints are too perfect, they transfer too much energy. At the end your robot shakes and can even explode. I solved my case by playing with these parameters (not all of them are necessarily relevant). Increasing damping limits the mutual physical actions between your links. Increasing friction set up a lower limit for velocity before the joints actually transfer the energy coming from the action of one of the links.

  <axis>
    <xyz>0 0 1</xyz>
    <dynamics>
      <friction>friction</friction>
      <damping>damping</damping>
    </dynamics>
  </axis>
  <physics>
    <ode>
      <cfm_damping>cfm_damping</cfm_damping>
      <implicit_spring_damper>implicit_spring</implicit_spring_damper>
    </ode>
  </physics>

I use these parameters (my damping is that hight because I use strong PID controllers on my joints. You'd better take a value between 0 and 1):

friction = 0.01
damping = 6
cfm_damping = 1
implicit_spring = 1

I hope this helps.