Skip to content
RhobanPublic

About

Rhoban Planning and Control

Resources

Stars

386 stars

Watchers

12 watching

Forks

Repository files navigation

PlaCo

Rhoban's Planning and Control library

QP-based task-space inverse kinematics and dynamics for robots.
Written in C++ for runtime performance, with Python bindings for fast prototyping.

Documentation PyPI Python versions Build arXiv License

Documentation  ·  Getting started  ·  Examples repository  ·  Build from source  ·  Paper

pip install placo

What is PlaCo?

PlaCo is Rhoban's planning and control library. It comes with its own lightweight rigid body algorithms, implemented with pinocchio as a reference (and coal for collisions), and the qpmad 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.

Quadruped demo

Task-Space Inverse Kinematics

Specify tasks for constrained inverse kinematics (IK): frames, center of mass, joints, gears, wheels…

Documentation  ·  Examples gallery

Megabot demo

Task-Space Inverse Dynamics

Specify tasks for constrained inverse dynamics (ID), including contacts, torque and velocity limits.

Documentation  ·  Examples gallery

Installation

PlaCo is distributed as a wheel for Linux and macOS (x86-64 and arm64), and requires Python 3.10 or later:

pip install placo

It can also be built from sources, which is required to use the C++ API.

A first taste

import numpy as np
import placo

# Load a robot and create the kinematics solver
robot = placo.RobotWrapper("models/6axis/robot.urdf")
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.

Resources

  • 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

Acknowledgements

PlaCo was first built on top of pinocchio. Its rigid body model (kinematics, dynamics, URDF and MJCF loading) is now a lighter, standalone implementation, written with pinocchio as its reference: it follows pinocchio's conventions and formulas, and was validated against it. We are grateful to the pinocchio developers for their work. Collisions and distances are computed with coal.

Citation

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},
}

License

PlaCo is released under the MIT License.

It includes a copy of the qpmad QP solver (Apache 2.0 License), see thirdparty/qpmad.

About

Rhoban Planning and Control

Resources

Stars

386 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages