QP-based task-space inverse kinematics and dynamics for robots.
Written in C++ for runtime performance, with Python bindings for fast prototyping.
Documentation · Getting started · Examples repository · Build from source · Paper
pip install placoPlaCo is Rhoban's planning and control library. It is built on top of pinocchio and the eiquadprog QP solver, and provides a high-level API to express whole-body control problems as a set of tasks and constraints, which are assembled into a quadratic program and solved for you.
PlaCo is distributed as a wheel for Linux and macOS (x86-64 and arm64), and requires Python 3.10 or later:
pip install placoIt can also be built from sources, which is required to use the C++ API.
import numpy as np
import placo
# Load a robot and create the kinematics solver
robot = placo.RobotWrapper("models/6axis/")
solver = placo.KinematicsSolver(robot)
solver.mask_fbase(True) # the robot is anchored to the ground
# Ask the "effector" frame to reach a given pose
effector_task = solver.add_frame_task("effector", np.eye(4))
effector_task.configure("effector", "soft", 1.0, 1.0)
# Solve the IK, and integrate the result in the robot state
robot.update_kinematics()
solver.solve(True)Head to the getting started guide for a walkthrough, or to the examples repository for runnable robots and scenarios.
- Documentation — guides and full API reference
- Examples repository — runnable demos, models and videos
- Paper — PlaCo: a QP-based robot planning and control framework
- Issues — bug reports and feature requests
If you use PlaCo in your research, please cite the following paper:
@misc{duclusaud2025placo,
title={PlaCo: a QP-based robot planning and control framework},
author={Marc Duclusaud and Grégoire Passault and Vincent Padois and Olivier Ly},
year={2025},
eprint={2511.06141},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2511.06141},
}PlaCo is released under the MIT License.

