Humanoid Path Planner Documentation
A motion planning toolkit for kinematic chains evolving among obstacles — from industrial robot arms to full humanoids.
Introduction
HPP is a C++ Software Developement Kit implementing path planning for kinematic chains in environments cluttered with obstacles. Collision checking is performed by a modified version of the Flexible Collision Library developed at University of North Carolina. Robots can be loaded from URDF model. It is a collection of software packages handled by cmake and pkg-config.
Why HPP?
HPP is not a toy planner: it is built to handle the kind of complex, contact-rich motion planning problems found in real robotics applications.
- Built for complex kinematic chains — from single manipulator arms to full humanoids and multi-robot systems.
- Manipulation planning out of the box — hpp-manipulation handles grasping, regrasping, and multi-contact scenarios, not just collision-free transit paths.
- Fast, reliable collision checking — powered by a modified Flexible Collision Library (coal) under hpp-pinocchio.
- Python-first workflow — define scenes, robots, and planning problems from simple Python scripts via hpp-python, with the heavy algorithmic lifting handled in C++.
- Flexible visualization — watch your robot plan and move in a web browser with viser, or plug into your existing ROS/ROS2 setup with rviz2 or gazebo.
- Battle-tested on real industrial use cases — surface treatment, welding, and assembly tasks, as shown below.
Applications
HPP is already used to plan motions for real industrial robotic tasks — here are a few examples in action.
Surface treatment
Planning a tool path to sweep and abrade the surface of a cylinder, while avoiding self-collisions and obstacles in the workspace.
Welding
Planning collision-free trajectories for a welding tool around complex parts.
Assembly / construction
Planning manipulation sequences to assemble a structure piece by piece, combining grasping, regrasping, and placement.
Overview of the architecture
flowchart TB
HPPY["hpp-python"]
subgraph HPP_STACK["HPP stack"]
direction TB
HM["hpp-manipulation"]
HC["hpp-core"]
HCONS["hpp-constraints"]
HPIN["hpp-pinocchio"]
HM --> HC
HC --> HCONS
HCONS --> HPIN
end
PIN["pinocchio"]
COAL["coal"]
HPIN --> PIN
HPIN --> COAL
HPPY --> HPP_STACK
subgraph HPP_VIZ["HPP Visualization"]
direction TB
VW["Viewer"]
GPV["Gepetto Viewer"]
GV["Graph Viewer"]
VW --> GPV
VW --> GV
end
HPPY --> |import| VW
classDef external fill:#C8E6C9,stroke:#2E7D32;
class PIN,COAL external
The software is composed of C++ libraries implementing the algorithms. Python bindings built on Boost.Python are provided to help users easily define and solve problems. Visualization of the scene can be done in a web browser using viser, or using ROS/ROS2 with rviz2 or gazebo.
The algorithmic part, built on hpp-manipulation is embedded in several Python modules by hpp-python. From a Python script, users can define scenes containing robots and environments, they can also define and solve motion planning problems. Results of path planning requests as well as individual configurations can be displayed in a web browser via package hpp-gepetto-viewer.
Getting started
Package hpp_tutorial provides some examples of how to use this project. Lets start now ! Tutorial
Acknowledgement
Contributors
Thanks to all the contributors of the HPP project: