Skip to main content

SRMP is a motion planning library for robotic manipulation built on state-of-the-art search-based algorithms. It produces consistent, predictable motions backed by rigorous theoretical guarantees, and plans for up to dozens of manipulators at once while guaranteeing collision-free execution — between robots and with the environment.

Why SRMP?

Existing motion planning frameworks often struggle with the demands of high-stakes applications, where predictability and repeatability are critical. SRMP addresses these challenges with search-based planning, giving motions that are both efficient and reliable — for single-arm manipulation, industrial automation, mobile manipulators and large-scale multi-robot coordination.

Key features

  • Multi-robot motion planning — first-of-its-kind support for coordinated motions in multi-manipulator systems.
  • Reliable, consistent trajectories — predictable and repeatable, for high-precision and safety-critical use.
  • Two collision-checking backends — coal mesh collision checking, and the VAMP SIMD backend for supported robots (sub-millisecond planning on uncluttered scenes).
  • Mobile manipulators — whole-body planning for arm-on-base systems with base-aware heuristics.
  • Seamless integration — works with MuJoCo, Sapien, Genesis, PyBullet and Isaac; MoveIt! plugin for deployment on real systems.
  • Python and C++ — one library for research and industrial workflows.

Installation

pip install srmp

Prebuilt wheels for Python 3.9–3.14:

Platform Requirement
Linux x86-64 (manylinux) CPU with AVX2 (Intel Haswell 2013+ / AMD Zen+) — the VAMP backend is compiled for x86-64-v3. import srmp checks for it and raises a clear ImportError otherwise.
macOS Apple Silicon macOS 11+

Other platforms, older CPUs, or building from source: see instructions.md.

Quick start

import numpy as np
import srmp

planner = srmp.PlannerInterface()
planner.add_robot("panda")               # downloaded from the robot registry on first use

# An obstacle in the scene.
box = srmp.Pose()
box.p = np.array([0.5, 0.2, 0.4])
planner.add_box("box", np.array([0.1, 0.1, 0.4]), box)

# Weighted A* with a BFS workspace heuristic; the collision backend picks
# VAMP when the robot supports it, coal otherwise.
planner.make_planner(["panda"], {
    "planner_id": "wAstar", "heuristic": "bfs", "weight": "10",
    "validity_backend": "auto",
})

start = np.radians([50, 47, -10, -35, -22, 93, 39])

goal_pose = srmp.Pose()
goal_pose.p = np.array([0.642, -0.068, 0.505])
goal_pose.q = np.array([0.0, 0.0, 0.0, 1.0])
goal = srmp.GoalConstraint(srmp.GoalType.POSE, [goal_pose])

traj = planner.plan(start, goal)
print(len(traj.positions), "waypoints, backend:", planner.get_active_validity_backend())

Joint-space goals use srmp.GoalConstraint(srmp.GoalType.JOINTS, q_goal). For several robots, make_planner([...], ctx) with more than one articulation and plan_multi(...).

Robots

Robot descriptions are downloaded on demand from the SRMP registry — panda, ur5, ur10e, fetch, kinova_gen3, xarm6, ridgeback_ur10e and others (srmp.robots.list_available()). Your own robot: srmp.robots.register("name", urdf_path=..., srdf_path=..., end_effector=...), or pass a URDF path to add_robot.

The VAMP backend ships with modules matching the registry's panda and ridgeback_ur10e (its built-in ur5 and fetch modules describe other robot models than the registry's, so those plan on coal); other robots plan on coal unless a VAMP plugin is installed for them (below). validity_backend: "auto" selects per robot, "vamp" insists and raises if unavailable.

VAMP robot plugins (srmp vamp)

A plugin adds a robot to the VAMP backend without rebuilding srmp (Linux x86-64). By default every plugin is agreement-tested against coal before it is installed; that test checks the plugin's integrity, not that its spheres cover the robot.

  • Registry robots with a published plugin (kinova_gen3_robotiq_2f85 is the first): add_robot("kinova_gen3_robotiq_2f85") fetches it, checks it against the registry robot and agreement-tests it before first use (one line on stderr; up to a few minutes, once). Nothing published, or offline: coal, silently; adding a robot never starts a build. Overriding the SRDF, end effector, joint or link names skips the lookup.
  • srmp vamp fetch <robot> does the same on request; --no-verify installs without the checks (recorded, and list says so).
  • srmp vamp add-robot --name <robot> --urdf <spherized.urdf> --end-effector <link> [--srdf <file>] [--mesh-robot <registry name or mesh URDF>] builds your own: cricket and the compiler run in Docker images pulled from Docker Hub (asked first; --build-images builds them locally instead), else on a native toolchain. --from-module <robot.hh> --spherized-urdf ... --spherized-srdf ... --end-effector ... starts from an existing cricket module.
  • srmp vamp list [--json] shows each plugin, whether it loads and what was checked; srmp vamp remove <robot> deletes one.
  • After an srmp upgrade that changes the plugin ABI tag, import srmp warns and skips the affected plugins; srmp vamp rebuild-all rebuilds them from their cached modules (--all rebuilds every plugin), and SRMP_VAMP_AUTO_REBUILD=1 does it at import. Registry prebuilts are fetched again for the new tag instead.

Plugins live in ~/.cache/srmp/vamp_plugins/ ($SRMP_VAMP_PLUGIN_PATH adds directories; its first entry becomes the install directory). Details: instructions.md.

Planners

Single robot: Astar, wAstar, ARAstar, MHAstar, wPASE (parallel), MGS (multi-graph search), vamp_rrtc. Multi-robot: ECBS, xECBS. Parameters, mobile-manipulator setup and motion-primitive files are covered in instructions.md.

Visualization and agent

  • Viser and MeshCat visualizers: srmp.ViserPlannerInterface, srmp.VisualPlannerInterface — drop-in replacements for PlannerInterface with an interactive goal gizmo and plan panel.
  • Agentic mode: pip install "srmp[agent]", then python -m srmp.agent.cli or python -m srmp.agent.gui to drive the planner in natural language (Gemini by default).
  • Scenes and plans round-trip through save_scene / load_scene / save_plan / load_plan — see Saving and Loading.

License

AGPL-3.0-or-later. See LICENSE.

Metadata

Release files for srmp 0.2.0

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

Built distributions (wheels)

Table of built distributions (wheels) for srmp 0.2.0
File
srmp-0.2.0-cp314-cp314-manylinux_2_35_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.35+ x86-64 Details
srmp-0.2.0-cp313-cp313-manylinux_2_35_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ x86-64 Details
srmp-0.2.0-cp312-cp312-manylinux_2_35_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ x86-64 Details
srmp-0.2.0-cp311-cp311-manylinux_2_35_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ x86-64 Details
srmp-0.2.0-cp310-cp310-manylinux_2_35_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.35+ x86-64 Details
srmp-0.2.0-cp39-cp39-manylinux_2_35_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.35+ x86-64 Details

Total release size: 79.3 MB

Release files / srmp-0.2.0-cp314-cp314-manylinux_2_35_x86_64.whl

Download URL srmp-0.2.0-cp314-cp314-manylinux_2_35_x86_64.whl
Size 13.2 MB
Tags CPython 3.14 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
6de2dab0c3f141b5098d719cab6b23f5bfb921212359f00e1a0c34fca112f909
BLAKE2b-256 checksum
How to use checksums
da632e5137a2abe2ed78c86666f8338784afce93ba9d66c9f4d46c808083be73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / srmp-0.2.0-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL srmp-0.2.0-cp313-cp313-manylinux_2_35_x86_64.whl
Size 13.2 MB
Tags CPython 3.13 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
fbefb87d9b2fd766b0d308526e5273e9adcf96120f03a86d6e62b8153de0fe9e
BLAKE2b-256 checksum
How to use checksums
f71d35ab2d2fc57ab37a40f937926f3a68307d7843681ce06edd86ac472d6fde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / srmp-0.2.0-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL srmp-0.2.0-cp312-cp312-manylinux_2_35_x86_64.whl
Size 13.2 MB
Tags CPython 3.12 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
4537bd5e61f84d17a52ea070e2be4ca275ca7c66d2f5ea4ba28a5fe80707d109
BLAKE2b-256 checksum
How to use checksums
9fb7a146cbd7eee4f46fe0d62f61af1aadafa3835752765db708f54a172a7e19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / srmp-0.2.0-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL srmp-0.2.0-cp311-cp311-manylinux_2_35_x86_64.whl
Size 13.2 MB
Tags CPython 3.11 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
a913f41874bfab899a7c4ef27fce8786ecd9d7f78ce2208e78a4d3d051648033
BLAKE2b-256 checksum
How to use checksums
eaf61b850c767f20ee234dc89225ff1025bf610a7b1462b80cfafb49c929ba92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / srmp-0.2.0-cp310-cp310-manylinux_2_35_x86_64.whl

Download URL srmp-0.2.0-cp310-cp310-manylinux_2_35_x86_64.whl
Size 13.2 MB
Tags CPython 3.10 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
8ea7d8c2d4cdae02112500718a71546d8a1b36b1cb5f1567ad486966f03aa064
BLAKE2b-256 checksum
How to use checksums
24f5f882d46c8e56b2d82c7bacd7ecb80cd5418e7450c3407b5f4f31b081b39e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / srmp-0.2.0-cp39-cp39-manylinux_2_35_x86_64.whl

Download URL srmp-0.2.0-cp39-cp39-manylinux_2_35_x86_64.whl
Size 13.2 MB
Tags CPython 3.9 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
ed995d47f754e655c0e6d01ae84395aa6f624b900b964e9c889141f4da2a30a4
BLAKE2b-256 checksum
How to use checksums
489fe464a47ecfc93a052f8176d17b1d1d4aee3bb11eb8a76a7df6ae243ab851
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15
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