stephane-caron/pink

Python inverse kinematics using Pinocchio and QP solvers

What it solves

Pink is a Python library for solving differential inverse kinematics (IK) for articulated robot models. It allows users to determine the joint velocities required to move a robot's parts (like a hand or foot) to a specific target position and orientation, while respecting configuration and velocity limits.

How it works

Pink uses a weighted-task approach based on the Pinocchio library. It defines tasks as residuals (the difference between current and target state) and casts the problem as a quadratic program (QP). By assigning costs to different tasks (e.g., position vs. orientation) and normalizing them, Pink can resolve conflicts between multiple competing objectives. It then computes the optimal velocity that steers the robot toward these targets.

Who it’s for

This tool is designed for robotics developers and researchers who need a flexible way to implement multi-task inverse kinematics for various robot morphologies, including robotic arms, humanoids, quadrupeds, and mobile bases.

Highlights

  • Multi-task support: Manage multiple objectives (like base position and joint posture) simultaneously with weighted costs.
  • Constraint handling: Automatically incorporates joint configuration and velocity limits into the IK solver.
  • Floating-base support: Includes specific velocity limits for robots with planar or free-flyer bases.
  • Broad morphology support: Works with a wide range of robots, from simple pendulums to complex humanoids and dual-arm systems.

Related

  • Project
  • Project
  • Project
  • Project
  • Project