pyQpController

Python implementation of a multi-objective controller using quadratic programming.


License
LGPL-3.0
Install
pip install pyQpController==0.0.1

Documentation

Impact-friendly QP controller

Impact-friendly QP controller Impact-aware QP controller

pyQpController is the proof of concept simulator attached to the paper: Impact-Friendly Robust Control Design with Task-Space Quadratic Optimization pyQpController is based on the python interface of the DART simulator.

We explicitly introduce discrete impact dynamics model into the QP-based controllers to generate robot motions that are robust to impact-induced state jumps in the joint velocities and joint torques. Our simulations, validate that our proposed impact-friendly QP controller is robust to contact impacts, shall they be expected or not. Therefore, we can exploit it for establishing contacts with high velocities, and explicitly generate task-purpose impulsive forces.

Recently we extended the concept for floating-based robot, i.e. a HRP4 humanoid robot, where we successfully applied impact at 0.35 m/s and achieved impulsive force of 133 N without breaking the hardware or losing balance. The C++ implementation is available at mc_impact_pusher.

1. Running guide:

We can find a quick start from the Running guide

2. Implementation:

Interested readers can find the implementation details from the following python files. Basically each inequality constraint "G x <= h " would output the G and h matrices.

The similar results could be found for the equality constraint (21). Each task in the folder "manipulatorTasks" outputs Q and P matrices expanded from the 2-norm with respect to the decision variables.

Equations in the paper Simulation code
Joint position limits (6) jointPositionLimits.py
Joint velocity limits (7) jointVelocityConstraints.py
Joint torque limits (8) torqueLimitConstraints.py
impact joint position limits (15) robustJointPositionLimits.py
impact joint velocity limits (16) robustJointVelocityConstraints.py
impulse torque constraint (18) impulseTorqueLimitConstraints.py
force-aware torque constraint (19) torqueLimitConstraints.py
impact dynamics equation (21) impactConstraints.py
impulsive force maximization (23) maxImpactForceTask.py
Generic force control task admittanceTask.py

3. Figure re-generation:

We save the simulation data as "*.npz" files. If one wants to re-generate the figures, we can check the plotting commands.