Robot Sweaty: How to handle closed cinematic chains

We try to simulate closed kinematic chains with webot. Currently, in our robot Sweaty, we calculate joint angles via inverse dynamic approaches and then the required positions, velocities and forces in the motors via motormapper. The motors drive a ball spindle, which in turn move the joints.
Representing the full mechanics in a URDF model does not seem readily possible to us. (At joint level, the robot can be represented in a URDF model without further ado). To illustrate the situation, we have included a drawing of a foot and hip.
Do you have any advice for us?

Best Uli

Mechanical loops can be implemented in Webots PROTO files using the SolidReference node. However, I would try the minimize the use of mechanical loops wherever possible and use preferably BallJoint, Hinge2Joint and HingeJoint nodes. Mechanical loops should be used with care as they introduce constraints that adds up to the complexity of the model and may cause instabilities if the model is too much over-constrained. They are also more computationally expensive.


In case there is a realistic chance for the implementation, could you please help us with an example how to simulate for example the foot? I think we would than be able to realize the other loops and could check, whether the program converges for the nested loops or not.

In case you suggest to realize the simulation on the basis of “standard motors” virtually located in the joints we would need to get the approval of the Techincal Committee for this procedure and a definition of the parameters of those “standard motors” to be equivalent to the existing actuators. The backlash of the universal joints would than have to be simulated as backlash of the “standard motors”


PS: some details of Sweaty’s motors, motor controllers and mechanical chains:

Input signals for the motor are:

  • Load
  • Set point Position
  • Set point Velocity
  • Gain Velocity Controller
  • Gain Position Controller

Structure of the motor controller: additive (Load + Output Position Controller (P-Cont) + Output Velocity Controller (P-Cont) ) -> Set point Force Controller (PI-Controller, fixed values, deviation from input: negligible up to 1,900 N for frequencies < 500 Hz)

backlash of the motor and spindle: negligible ( < 10µm)

Backlash of the universal joints appr.: 0.3°.

Output signals from the motors are:

  • position
  • velocity
  • load
  • supply voltage (negligible up to now, as internally compensated)
  • Coil Temperature (not used up to now, as movements and required forces are far below design)
  • Case Temperature (not used up to now, as movements and required forces are far below design)
  • MosFet Temperature (not used up to now, as movements and required forces are far below design).

Some years ago we already tried to simulate Sweaty’s behaviour. The problem was:
There are “double nested mechanical loops”:

during the double support phase there is:
robot - left foot - ground - right foot -robot (no problem with webot)

now there is in addition:
for each side of the robot:
foot loop: foot /universal joint / spindel / motor / universal joint / support / universal joint / motor / spindel / universal joint / foot
knee loop: less complex than the foot loop,
hip loop: probably more complex than the foot loop
torso loop -in comlexity simular to the foot loop.

Therefor the superordinate loop (robot - left foot - ground - right foot -robot) is subordinated by:

foot loop - knee loop - hip loop - hip loop - knee loop - foot loop.

Webots includes several examples of mechanical loops you can take inspiration from.
A simple one is the one used in the Khepera3_Gripper.proto. I believe it is pretty close to what you are trying to achieve. Here is video showing this closed loop in action: