Solver status#

Dumping the status#

For debugging purpose, you might want to investigate what the solver status is. To that end, you can call the dump_status() on the solver:

# Shows the current tasks status
solver.dump_status()

This will display the task names, type, priority and current errors.

For the humanoid example (Example code: dynamics/sigmaban.py), the output will be similar to:

* Dynamics Tasks:
    * posture [joints]
        - Priority: soft (weight:1e-06)
        - Error: 1.636099 [dof]
        - DError: 0.434214 [dof]

    * rightFoot_orientation [orientation]
        - Priority: hard
        - Error: 0.000000 [rad]
        - DError: 0.000000 [rad]

    * com [com]
        - Priority: soft (weight:1)
        - Error: 0.002318 [m]
        - DError: 0.037381 [m]

    * leftFoot_orientation [orientation]
        - Priority: hard
        - Error: 0.000000 [rad]
        - DError: 0.000000 [rad]

    * trunk [orientation]
        - Priority: soft (weight:1)
        - Error: 0.000001 [rad]
        - DError: 0.000000 [rad]

    * rightFoot_position [position]
        - Priority: hard
        - Error: 0.000000 [m]
        - DError: 0.000005 [m]

    * leftFoot_position [position]
        - Priority: hard
        - Error: 0.000000 [m]
        - DError: 0.000005 [m]

Accessing tasks errors#

You can access task error using error and derror:

effector_position_task = solver.add_position_task("effector", np.array([0.0, 0.0, 0.0]))

...

# Returns the position error
effector_position_task.error

# Returns the velocity error
effector_position_task.derror