Puppet contact#

To be used with: no task required

The puppet contact is an “universal contact”, allowing the solver to add arbitrary forces anywhere on the robot. By essence, it makes all the tasks feasible force-wise.

This contact is helpful for debugging purpose, and can be used in the initialization phase to set the robot in a specific state.

# Create the puppet contact
puppet_contact = solver.add_puppet_contact()

For example, you can consider such a loop at the begining to initialize the robot:

# Initializing the robot using a puppet contact
puppet_contact = solver.add_puppet_contact()
for k in range(1000):
    solver.solve(True)
    robot.update_kinematics()
solver.remove_contact(puppet_contact)

Quadruped puppet

The quadruped in this example is achieving flying-like tasks. This is made possible by the addition of a “puppet contact”, providing arbitrary necessary forces.

Example code: dynamics/quadruped_puppet.py