# open-planning/roboplan architecture

> Architecture diagram of the GitHub repository open-planning/roboplan, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/open-planning/roboplan
- Repository: https://github.com/open-planning/roboplan

## Overview

RoboPlan is a Pinocchio-based robot motion-planning library with C++ implementations and Python bindings. A user supplies a robot scene and planning request; the available capabilities include inverse kinematics, RRT motion planning, Cartesian path planning, and TOPP-RA trajectory timing, with visualization helpers for inspection. The bimanual example imports several of these packages and illustrates a multi-stage application. Edges are limited to relationships shown by excerpts, indexed references, or the README; unsampled implementation details are not inferred.

Main entry points: [`roboplan_examples/python/example_bimanual_pick_and_place.py`](https://github.com/open-planning/roboplan/blob/main/roboplan_examples/python/example_bimanual_pick_and_place.py) (Bimanual Example), [`roboplan_cartesian_planning/src/cartesian_path_planner.cpp`](https://github.com/open-planning/roboplan/blob/main/roboplan_cartesian_planning/src/cartesian_path_planner.cpp) (Cartesian Planner), [`roboplan_examples/python`](https://github.com/open-planning/roboplan/tree/main/roboplan_examples/python) (Other Examples), [`roboplan_rrt/src/rrt.cpp`](https://github.com/open-planning/roboplan/blob/main/roboplan_rrt/src/rrt.cpp) (RRT Planner)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_foundation["Scene Foundation"]
  node_scene["Robot Scene<br/>[scene.cpp]"]
  node_scene_context["Scene Context<br/>[scene_context.cpp]"]
  node_core_bindings["Core Bindings<br/>[core.cpp]"]
end

subgraph group_planning["Planning Solvers"]
  node_simple_ik["Simple IK<br/>[simple_ik.cpp]"]
  node_oink["Optimal IK<br/>[optimal_ik.cpp]"]
  node_oink_constraints["IK Constraints<br/>[position_limit.cpp]"]
  node_oink_barriers["IK Barriers"]
  node_rrt["RRT Planner<br/>[rrt.cpp]"]
  node_rrt_tree["RRT Search Tree<br/>[kd_tree.cpp]"]
end

subgraph group_trajectory["Path And Timing"]
  node_cartesian["Cartesian Planner"]
  node_toppra["TOPP-RA Timing<br/>[toppra.cpp]"]
  node_blend_path["Blended Paths"]
end

subgraph group_use["Python Use"]
  node_visualization["Visualization<br/>[visualization.py]"]
  node_example_models["Example Models<br/>[resources.cpp]"]
  node_example_support["Example Support<br/>[common.py]"]
  node_bimanual_example["Bimanual Example"]
  node_example_apps["Other Examples"]
end

node_robot_user(("Robot Planner"))

node_scene_context -->|"queries"| node_scene
node_rrt -->|"creates"| node_scene_context
node_rrt -.->|"uses search"| node_rrt_tree
node_cartesian -->|"builds solver"| node_oink
node_cartesian -->|"uses timing"| node_toppra
node_cartesian -->|"uses limits"| node_oink_constraints
node_bimanual_example -->|"imports helpers"| node_example_support
node_bimanual_example -->|"imports planner"| node_cartesian
node_bimanual_example -->|"imports solver"| node_oink
node_bimanual_example -->|"imports planner"| node_rrt
node_bimanual_example -->|"imports timing"| node_toppra
node_bimanual_example -->|"imports tools"| node_visualization
node_bimanual_example -->|"loads models"| node_example_models
node_example_support -->|"imports core"| node_core_bindings
node_example_apps -.->|"demonstrates IK"| node_simple_ik
node_example_apps -.->|"demonstrates OInK"| node_oink
node_example_apps -.->|"demonstrates RRT"| node_rrt
node_example_apps -.->|"demonstrates paths"| node_cartesian
node_robot_user -.->|"runs example"| node_bimanual_example

click node_scene "https://github.com/open-planning/roboplan/blob/main/roboplan_core/src/core/scene.cpp"
click node_scene_context "https://github.com/open-planning/roboplan/blob/main/roboplan_core/src/core/scene_context.cpp"
click node_core_bindings "https://github.com/open-planning/roboplan/blob/main/roboplan_core/bindings/src/core.cpp"
click node_simple_ik "https://github.com/open-planning/roboplan/blob/main/roboplan_simple_ik/src/simple_ik.cpp"
click node_oink "https://github.com/open-planning/roboplan/blob/main/roboplan_oink/src/optimal_ik.cpp"
click node_oink_constraints "https://github.com/open-planning/roboplan/blob/main/roboplan_oink/src/constraints/position_limit.cpp"
click node_oink_barriers "https://github.com/open-planning/roboplan/blob/main/roboplan_oink/src/barriers/self_collision_barrier.cpp"
click node_rrt "https://github.com/open-planning/roboplan/blob/main/roboplan_rrt/src/rrt.cpp"
click node_rrt_tree "https://github.com/open-planning/roboplan/blob/main/roboplan_rrt/src/kd_tree.cpp"
click node_cartesian "https://github.com/open-planning/roboplan/blob/main/roboplan_cartesian_planning/src/cartesian_path_planner.cpp"
click node_toppra "https://github.com/open-planning/roboplan/blob/main/roboplan_toppra/src/toppra.cpp"
click node_blend_path "https://github.com/open-planning/roboplan/blob/main/roboplan_toppra/src/linear_blend_path.cpp"
click node_visualization "https://github.com/open-planning/roboplan/blob/main/roboplan_core/bindings/python/roboplan/visualization.py"
click node_example_models "https://github.com/open-planning/roboplan/blob/main/roboplan_example_models/src/resources.cpp"
click node_example_support "https://github.com/open-planning/roboplan/blob/main/roboplan_examples/python/common.py"
click node_bimanual_example "https://github.com/open-planning/roboplan/blob/main/roboplan_examples/python/example_bimanual_pick_and_place.py"
click node_example_apps "https://github.com/open-planning/roboplan/tree/main/roboplan_examples/python"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_scene,node_scene_context,node_core_bindings toneBlue
class node_simple_ik,node_oink,node_oink_constraints,node_oink_barriers,node_rrt,node_rrt_tree toneAmber
class node_cartesian,node_toppra,node_blend_path toneMint
class node_visualization,node_example_models,node_example_support,node_bimanual_example,node_example_apps toneRose
class node_robot_user toneIndigo
```

## Components

### Scene Foundation

- [Robot Scene](https://github.com/open-planning/roboplan/blob/main/roboplan_core/src/core/scene.cpp): `roboplan_core/src/core/scene.cpp`
- [Scene Context](https://github.com/open-planning/roboplan/blob/main/roboplan_core/src/core/scene_context.cpp): `roboplan_core/src/core/scene_context.cpp`
- [Core Bindings](https://github.com/open-planning/roboplan/blob/main/roboplan_core/bindings/src/core.cpp): `roboplan_core/bindings/src/core.cpp`

### Planning Solvers

- [Simple IK](https://github.com/open-planning/roboplan/blob/main/roboplan_simple_ik/src/simple_ik.cpp): `roboplan_simple_ik/src/simple_ik.cpp`
- [Optimal IK](https://github.com/open-planning/roboplan/blob/main/roboplan_oink/src/optimal_ik.cpp): `roboplan_oink/src/optimal_ik.cpp`
- [IK Constraints](https://github.com/open-planning/roboplan/blob/main/roboplan_oink/src/constraints/position_limit.cpp): `roboplan_oink/src/constraints/position_limit.cpp`
- [IK Barriers](https://github.com/open-planning/roboplan/blob/main/roboplan_oink/src/barriers/self_collision_barrier.cpp): `roboplan_oink/src/barriers/self_collision_barrier.cpp`
- [RRT Planner](https://github.com/open-planning/roboplan/blob/main/roboplan_rrt/src/rrt.cpp): `roboplan_rrt/src/rrt.cpp`
- [RRT Search Tree](https://github.com/open-planning/roboplan/blob/main/roboplan_rrt/src/kd_tree.cpp): `roboplan_rrt/src/kd_tree.cpp`

### Path And Timing

- [Cartesian Planner](https://github.com/open-planning/roboplan/blob/main/roboplan_cartesian_planning/src/cartesian_path_planner.cpp): `roboplan_cartesian_planning/src/cartesian_path_planner.cpp`
- [TOPP-RA Timing](https://github.com/open-planning/roboplan/blob/main/roboplan_toppra/src/toppra.cpp): `roboplan_toppra/src/toppra.cpp`
- [Blended Paths](https://github.com/open-planning/roboplan/blob/main/roboplan_toppra/src/linear_blend_path.cpp): `roboplan_toppra/src/linear_blend_path.cpp`

### Python Use

- [Visualization](https://github.com/open-planning/roboplan/blob/main/roboplan_core/bindings/python/roboplan/visualization.py): `roboplan_core/bindings/python/roboplan/visualization.py`
- [Example Models](https://github.com/open-planning/roboplan/blob/main/roboplan_example_models/src/resources.cpp): `roboplan_example_models/src/resources.cpp`
- [Example Support](https://github.com/open-planning/roboplan/blob/main/roboplan_examples/python/common.py): `roboplan_examples/python/common.py`
- [Bimanual Example](https://github.com/open-planning/roboplan/blob/main/roboplan_examples/python/example_bimanual_pick_and_place.py): `roboplan_examples/python/example_bimanual_pick_and_place.py`
- [Other Examples](https://github.com/open-planning/roboplan/tree/main/roboplan_examples/python): `roboplan_examples/python`

### Other components

- **Robot Planner**

## Connections

- Scene Context → Robot Scene: queries (evidence: `roboplan_core/src/core/scene_context.cpp`)
- RRT Planner → Scene Context: creates (evidence: `roboplan_rrt/src/rrt.cpp`)
- RRT Planner → RRT Search Tree: uses search
- Cartesian Planner → Optimal IK: builds solver (evidence: `roboplan_cartesian_planning/src/cartesian_path_planner.cpp`)
- Cartesian Planner → TOPP-RA Timing: uses timing (evidence: `roboplan_cartesian_planning/src/cartesian_path_planner.cpp`)
- Cartesian Planner → IK Constraints: uses limits (evidence: `roboplan_cartesian_planning/src/cartesian_path_planner.cpp`)
- Bimanual Example → Example Support: imports helpers (evidence: `roboplan_examples/python/example_bimanual_pick_and_place.py`)
- Bimanual Example → Cartesian Planner: imports planner (evidence: `roboplan_examples/python/example_bimanual_pick_and_place.py`)
- Bimanual Example → Optimal IK: imports solver (evidence: `roboplan_examples/python/example_bimanual_pick_and_place.py`)
- Bimanual Example → RRT Planner: imports planner (evidence: `roboplan_examples/python/example_bimanual_pick_and_place.py`)
- Bimanual Example → TOPP-RA Timing: imports timing (evidence: `roboplan_examples/python/example_bimanual_pick_and_place.py`)
- Bimanual Example → Visualization: imports tools (evidence: `roboplan_examples/python/example_bimanual_pick_and_place.py`)
- Bimanual Example → Example Models: loads models
- Example Support → Core Bindings: imports core (evidence: `roboplan_examples/python/common.py`)
- Other Examples → Simple IK: demonstrates IK (evidence: `README.md`)
- Other Examples → Optimal IK: demonstrates OInK (evidence: `README.md`)
- Other Examples → RRT Planner: demonstrates RRT (evidence: `README.md`)
- Other Examples → Cartesian Planner: demonstrates paths (evidence: `README.md`)
- Robot Planner → Bimanual Example: runs example
