Skip to main content

geodex logo

geodex

CI codecov PyPI Documentation License

geodex plans robot motion on Riemannian manifolds, in Python and in C++. You give it a configuration space, a metric and a collision scene, and it returns a smooth, collision-free path that is short under that metric.

A Franka FR3 arm moves a cracker box from the bottom compartment of a shelf to the top compartment and back A Clearpath Jackal drives between office desks and through a narrow passage
A Franka FR3 moves a box between shelf compartments with the MoveIt 2 plugin under the kinetic-energy metric. A Clearpath Jackal plans on SE(2) with the Nav2 plugin and drives through a narrow passage of an office.
import numpy as np
import geodex

robot = geodex.robots.Panda()  # seven joints, the kinetic-energy metric
scene = geodex.Scene()
scene.add_box(position=[0.4, 0.0, 0.3], size=[0.1, 0.1, 0.8])

start = np.array([-1.1, -0.785, 0.0, -2.356, 0.0, 1.571, 0.785])
goal = np.array([1.1, -0.785, 0.0, -2.356, 0.0, 1.571, 0.785])
result = geodex.plan(robot, start, goal, scene, settings=geodex.PlanSettings(iterations=1500, seed=1))
print(result.solved, result.cost, result.path.shape)

Features

  • Plan in Python or C++. geodex.plan in Python and geodex::planning::plan in C++ run G-RRT* with informed sampling, then smooth the path under the same metric.
  • Built-in robots. geodex includes the Franka Panda and FR3, UR5, Baxter, PR2, Hello Robot Stretch 3 and Stretch 4, and a UR5e on a Clearpath Ridgeback or Husky, each with VAMP collision checking and its mass matrix.
  • Whole-body planning. geodex plans the base and the arm together on SE(2) × ℝⁿ. A holonomic and a differential-drive base differ only in the base metric.
  • Collision-free edges. Robot paths are checked along every edge, not only at waypoints.
  • Manifolds and metrics. geodex has ℝⁿ, tori, spheres, SO(2), SO(3), SE(2), SE(3) and their products, with kinetic-energy, left-invariant, clearance and custom metrics.
  • ROS 2. A Nav2 global planner (geodex_nav2_planner) and a MoveIt planner (geodex_moveit) run geodex in ROS 2 Jazzy and Lyrical.
  • Reproducible. A seed and an iteration budget give the same path on every run on the same platform.

Installation

Python

pip install pygeodex

The package imports as geodex and needs Python 3.12 or newer. On Linux (x86-64 and aarch64, glibc 2.28 or newer) and macOS (arm64 and x86-64), it includes planning, collision checking and the built-in robots. On x86-64, collision checking of the built-in robots requires a CPU with AVX2 and FMA, and planning with a Python validity function works on any CPU. On Windows and on Linux with musl, it includes the geometry core only (manifolds, metrics, sampling, distances, interpolation and the smoother).

Everything with pixi

git clone https://github.com/utiasSTARS/geodex.git && cd geodex
pixi run test        # build the OMPL fork with G-RRT*, VAMP, geodex and its Python module, then run the tests
pixi run quickstart  # plan the quickstart example, a Panda arm around a post
pixi run docs        # build the documentation site into build/docs/sphinx

pixi run install installs geodex and the OMPL fork into .pixi/prefix ($GEODEX_PREFIX).

C++ package

Install Ninja, yaml-cpp and Boost 1.68 or newer with its serialization and program_options libraries first, for example with your system's package manager.

git clone --branch v1.0.0 https://github.com/utiasSTARS/geodex.git
cmake -S geodex -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<prefix> \
  -DGEODEX_OMPL=ON -DGEODEX_BUILD_OMPL=ON -DGEODEX_VAMP=ON
cmake --build build && cmake --install build

The build also compiles the OMPL fork that holds the G-RRT* planner and installs it next to geodex. scripts/install_geodex.sh <prefix> runs the same steps. A C++ project then adds the prefix to CMAKE_PREFIX_PATH and links the package.

find_package(geodex 1.0 CONFIG REQUIRED COMPONENTS ompl vamp)
target_link_libraries(my_planner PRIVATE geodex::geodex ompl::ompl)

Documentation

The geodex documentation has the tutorials, the robot guides and the API reference for Python and C++. To build the site locally, run pixi run docs and open build/docs/sphinx/index.html.

Citation

If you use geodex in your research, please cite the geodex paper.

@article{kyaw2026geodex,
  title   = {geodex: A Library for Motion Planning on {Riemannian} Manifolds},
  author  = {Kyaw, Phone Thiha and Wei, Ben and Samavi, Sepehr and
             {Rogel Garcia}, Miguel Angel and Kelly, Jonathan},
  journal = {arXiv preprint arXiv:26XX.XXXXX},
  year    = {2026},
  url     = {https://arxiv.org/abs/26XX.XXXXX}
}

geodex implements the methods of the papers below. Please also cite the ones your work uses.

Midpoint geodesic distance and interpolation under a Riemannian metric:

@inproceedings{kyaw2026geometry,
  title     = {Geometry-Aware Sampling-Based Motion Planning on {Riemannian} Manifolds},
  author    = {Kyaw, Phone Thiha and Kelly, Jonathan},
  booktitle = {Proceedings of the 17th World Symposium on the Algorithmic Foundations
               of Robotics (WAFR)},
  address   = {Oulu, Finland},
  month     = jun,
  year      = {2026},
  url       = {https://arxiv.org/abs/2602.00992}
}

The Loewner lower bounds behind the admissible heuristics and the informed sampling:

@article{kyaw2026loewner,
  title   = {Direct Informed Sampling on {Riemannian} Manifolds via {Loewner} Order
             Lower Bounds},
  author  = {Kyaw, Phone Thiha and Kelly, Jonathan},
  journal = {IEEE Robotics and Automation Letters},
  year    = {2026},
  url     = {https://arxiv.org/abs/2606.02879}
}

The G-RRT* planner:

@article{kyaw2026greedy,
  title   = {Greedy Heuristics for Sampling-Based Motion Planning in High-Dimensional
             State Spaces},
  author  = {Kyaw, Phone Thiha and Le, Anh Vu and Mohan, Rajesh Elara and
             Kelly, Jonathan},
  journal = {Autonomous Robots},
  year    = {2026},
  url     = {https://arxiv.org/abs/2405.03411}
}

License

Copyright © 2026 Space and Terrestrial Autonomous Robotic Systems (STARS) Lab.

geodex is licensed under the Apache License 2.0.

Metadata

Release files for pygeodex 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pygeodex 1.0.0
File Size Uploaded
pygeodex-1.0.0.tar.gz 1.3 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for pygeodex 1.0.0
File
pygeodex-1.0.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
pygeodex-1.0.0-cp312-abi3-win32.whl CPython 3.12 abi3 Windows x86-32 Details
pygeodex-1.0.0-cp312-abi3-musllinux_1_2_x86_64.whl CPython 3.12 abi3 Linux musl 1.2+ x86-64 Details
pygeodex-1.0.0-cp312-abi3-musllinux_1_2_aarch64.whl CPython 3.12 abi3 Linux musl 1.2+ ARM64 Details
pygeodex-1.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
pygeodex-1.0.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
pygeodex-1.0.0-cp312-abi3-macosx_11_0_x86_64.whl CPython 3.12 abi3 macOS 11.0+ x86-64 Details
pygeodex-1.0.0-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details

Total release size: 16.6 MB

Release files / pygeodex-1.0.0.tar.gz

Download URL pygeodex-1.0.0.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
2751375c37dc0a479604dcb8a9c9d48d165caadce45bf0edccaf06ea1cb9e58e
BLAKE2b-256 checksum
How to use checksums
8aed004bb7cac953872dbfeaf319a07a10b6fd3a23dd1e2769b8704686ae1f5d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-win_amd64.whl

Download URL pygeodex-1.0.0-cp312-abi3-win_amd64.whl
Size 615.5 kB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
66981d7f44fc72ca1c549b83b98f4406aaff06a4cdf6579e2e44055382160f2a
BLAKE2b-256 checksum
How to use checksums
174d493ab7b91527713a8ab082d9c8b482fe3d09dfa709857e3d877d807d9f83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-win32.whl

Download URL pygeodex-1.0.0-cp312-abi3-win32.whl
Size 590.9 kB
Tags CPython 3.12 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
5413ebac1dd20e213e3ae13f30e53fa96251a80be88d0b8c55064cc93aae6ce7
BLAKE2b-256 checksum
How to use checksums
2db0326db9e130d249b3497723474fc033c3a17472efb11beaa5cae92a91a036
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-musllinux_1_2_x86_64.whl

Download URL pygeodex-1.0.0-cp312-abi3-musllinux_1_2_x86_64.whl
Size 682.3 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
197329c8d01f1612e3660025eed8a4b19738f6d967cf6608786dca3e3f147509
BLAKE2b-256 checksum
How to use checksums
9dbb10b51bf07709131bb05330717b63895c693c4cfad60797218476901f4970
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-musllinux_1_2_aarch64.whl

Download URL pygeodex-1.0.0-cp312-abi3-musllinux_1_2_aarch64.whl
Size 661.1 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
bc93146adbc6a26d35ee8ff17c32295fe009a53df642fe6e7afca353a1615025
BLAKE2b-256 checksum
How to use checksums
7fbcdd995aaa511ca41c7388f876fcf4d9a051e92a5f903c58ac4771074d037b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL pygeodex-1.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 4.5 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
3e87bc7b117460759392feec50954d23ef7617a0b0fe2d138ab0be3a05ac1a69
BLAKE2b-256 checksum
How to use checksums
2952ab56edfcb7381bb2eee0e930205a3949bb22ef86ffd82978b48cb1e9c4b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL pygeodex-1.0.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 2.8 MB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
aa023fe9044cf300f68d7c3f5769ac11b5c615ef54b4f5cefafd72c520f4ef07
BLAKE2b-256 checksum
How to use checksums
c0a3b2bf4ef75956e5a8575ff562426503d99934ca28cc4bf4ee042e40f39fd0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-macosx_11_0_x86_64.whl

Download URL pygeodex-1.0.0-cp312-abi3-macosx_11_0_x86_64.whl
Size 3.4 MB
Tags CPython 3.12 abi3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
b6d78aae4ff820703ddb798ebecc5488d7a054aac09c205bc3c456f4492add5c
BLAKE2b-256 checksum
How to use checksums
0ca985b6a826a676ff65c9ff78650b673b2ddba388705176cd64d48135548b4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release files / pygeodex-1.0.0-cp312-abi3-macosx_11_0_arm64.whl

Download URL pygeodex-1.0.0-cp312-abi3-macosx_11_0_arm64.whl
Size 2.1 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5d940c40620d479dd1067428bdacea081ffc129c6eab5f2e2d357ff9d60f9107
BLAKE2b-256 checksum
How to use checksums
62be511b81ef6813977e9a5fb8051485c76cfe4221177187b2417bff4d09c212
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

1.0.0 This release

9 release files

0.2.1

7 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page