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.
We can find a quick start from the Running guide
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 |
We save the simulation data as "*.npz" files. If one wants to re-generate the figures, we can check the plotting commands.