pin-pink
Inverse kinematics for articulated robot models, based on Pinocchio.
What it is and what it does
Pink is a Python inverse kinematics solver built on top of Pinocchio for controlling articulated robots. It formulates robot motion as a set of weighted tasks—such as positioning a foot, orienting a base, or maintaining a preferred posture—and solves a quadratic program to compute joint velocities that satisfy all tasks simultaneously while respecting joint limits. The solver handles task conflicts by normalizing objectives and weighting them relative to each other, making it suitable for complex multi-objective control problems on robots ranging from simple arms to humanoids and quadrupeds.
The package provides a task-based API where you define residual functions (e.g., desired frame position minus current position) and costs, then call solve_ik to get a velocity command. It integrates with Pinocchio's robot models and supports floating-base velocity limits for robots with free-flyer or planar bases. The solver outputs differential velocities that can be integrated over time to reach target configurations, or continuously tracked if targets change.
Use it for:
- Control a multi-limb robot (humanoid, dual-arm, or quadruped) to simultaneously achieve multiple frame and posture objectives.
- Solve inverse kinematics for a manipulator arm with end-effector position and orientation targets plus joint regularization.
- Track moving targets in real-time by continuously updating task targets and integrating the solver's velocity output.
- Enforce floating-base velocity limits on legged robots to clamp commanded linear and angular velocities.
- Resolve conflicting task objectives (e.g., foot contact vs. base orientation) by weighting normalized costs.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Pink solves differential inverse kinematics for articulated robots by formulating task-based objectives as a quadratic program, computing joint velocities that drive the robot toward multiple weighted targets while respecting configuration and velocity limits.
Yes. Pink is actively maintained, has no known vulnerabilities, installs with low friction, and is licensed permissively. It is production-stable and well-suited for anyone building task-based inverse kinematics solvers for articulated robots. Install it if you need to control multi-objective robot motion; skip it if you only need forward kinematics or single-task IK.
Install
pin-pink on PyPI
pip
pip install pin-pinkuv
uv add pin-pinkpoetry
poetry add pin-pinkInstalling pin-pink
Before you install
Low install friction with a pure Python wheel. Active maintenance with a recent release 30 days ago and steady repository activity. Supports current Python versions (3.10–3.14).
License in practice
Licensed under Apache 2.0 (permissive), allowing commercial and private use with minimal restrictions.
Quickstart
pip install pin-pink
from pink.tasks import FrameTask, PostureTask
from pink import Configuration, solve_ik
import numpy as np
tasks = {
"base": FrameTask("base", position_cost=1.0, orientation_cost=1.0),
"posture": PostureTask(cost=1e-3),
}
dt = 6e-3
for t in np.arange(0.0, 10.0, dt):
velocity = solve_ik(configuration, tasks.values(), dt, solver="quadprog")
configuration.integrate_inplace(velocity, dt)
Requires a Pinocchio robot model and configuration object; the package expects numpy arrays and assumes familiarity with robot kinematics concepts (Jacobians, task residuals).
Verify before relying
- Whether Pinocchio must be pre-installed or is handled as a transitive dependency through the listed runtime deps.
- Performance characteristics when solving IK for robots with many degrees of freedom.
- Compatibility with specific robot description formats beyond URDF.
Package facts
| License | not declared (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 5 — loop-rate-limiters, numpy, pin, qpsolvers, typing-extensions |
| Maintenance | actively maintained — 30 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 264,025/month — #8,345 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: pin_pink-4.3.0-py3-none-any.whl
Keywords: inverse, kinematics, pinocchio
Tags
More Scientific/Engineering packages
NumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
pandaspandas provides fast, flexible data structures…
permissive · top 100 on PyPI
scipyscipy provides numerical algorithms for…
permissive · top 100 on PyPI
scikit-learnscikit-learn provides a comprehensive Python…
permissive · top 1,000 on PyPI
dilldill extends Python's pickle module to…
permissive · top 1,000 on PyPI
multiprocessMultiprocess is an enhanced fork of Python's…
permissive · top 1,000 on PyPI
minkmink solves inverse kinematics problems for…
permissive · top 15,000 on PyPI
dex-retargetingTranslates human hand motion to robot hand…
permissive · top 15,000 on PyPI
pinPython interface to a C++ rigid-body dynamics…
permissive · top 5,000 on PyPI
toppraComputes time-optimal path parameterization for…
permissive · top 15,000 on PyPI
libpinocchiolibpinocchio provides efficient rigid body…
permissive · top 15,000 on PyPI
quadprogSolves strictly convex quadratic programming…
copyleft · top 15,000 on PyPI
robosuiterobosuite is a MuJoCo-powered simulation…
unclear · top 15,000 on PyPI
python-motion-planningImplements motion planning algorithms including…
copyleft · top 15,000 on PyPI
daqpDAQP is a dual active-set solver for convex…
permissive · top 15,000 on PyPI