V-BAR: Verified Benchmark for Autonomous Rendezvous
V-BAR is a headless Python benchmark for spacecraft rendezvous and proximity-operations controllers. Classical guidance, reinforcement learning agents and LLM agents run on the same scenarios and are scored with the same metrics.
Status: early development. The dynamics layer is validated; the environment has one scenario. Safety filters, more scenarios and the scoring harness are in development, and interfaces may change before 1.0.
Why
KSPDG, the main existing environment for this kind of work, runs on Kerbal Space Program in real time and needs a copy of the game. V-BAR is a plain Python package that runs much faster than real time on Linux, macOS and Windows, so experiments with many seeds and many controllers are practical. The physics is checked against closed-form solutions and published textbook examples.
Contents
- Relative motion in the target's Hill frame (x radial out, y along-track, z orbit normal; SI
units):
- Clohessy-Wiltshire, with the exact zero-order-hold solution.
- Nonlinear two-body relative motion, optionally with J2, with the target started from J2 mean elements.
- Kepler propagation, classical orbital elements and a first-order J2 mean-osculating map.
- An approach-to-hold-point environment (Gymnasium API) with a keep-out zone checked between time steps, not only at them.
- A PD baseline and an adapter for any LLM that takes text and returns text.
Install
pip install vbar
For development:
git clone https://github.com/jamilhammoudeh/vbar
cd vbar
pip install -e ".[dev]"
Requires Python 3.12 or later. Core dependencies are numpy, scipy and gymnasium.
Quickstart
from vbar import ApproachConfig, ApproachEnv, run_episode
from vbar.agents import PDAgent
env = ApproachEnv(ApproachConfig(start_state=(0, -400, 0, 0, 0, 0)))
result = run_episode(env, PDAgent())
print(result["captured"], result["keep_out_violated"], result["dv_used_mps"])
This flies from 400 m behind the target to the hold point 100 m behind it, about 620 s of flight,
in well under a second. To save a trajectory plot to outputs/:
python examples/v0_demo.py
LLM agents
from vbar.agents import LLMAgent
def complete(prompt: str) -> str:
"""Call any hosted or local model and return its text reply."""
...
agent = LLMAgent(complete, name="my-model")
result = run_episode(env, agent)
agent.log # every prompt, reply, parsed action, parse failure and latency
Dynamics on their own
import numpy as np
from vbar.dynamics import make_dynamics
dyn = make_dynamics("twobody_j2", altitude=500e3, inclination=np.radians(51.6))
dyn.reset([0.0, -200.0, 0.0, 0.0, 0.0, 0.0]) # Hill-frame position (m) and velocity (m/s)
x, _ = dyn.advance([0.0, 0.0, 0.0], 600.0) # hold zero acceleration for 600 s
make_dynamics also accepts "cw" and "twobody".
Scenario: approach to hold point
The chaser must reach a hold point 100 m behind the target on the V-bar and stop there without entering a 50 m keep-out sphere around the target. The target is on a circular 500 km orbit.
Reported in info and the result dict: capture, keep-out violation, minimum range to the target,
delta-v used and elapsed time, plus the intervention count when a safety filter wraps the agent.
Validation
python -m pytest -q
The tests compare the models with closed-form solutions, an independent high-order integrator, universal-variable Kepler propagation, worked examples from standard astrodynamics texts, and conserved quantities (energy, angular momentum, the Jacobi integral). CI runs them on Linux, macOS and Windows with the newest and the oldest supported dependencies.
Contributing
See CONTRIBUTING.md.
Citation
See CITATION.cff.
License
MIT
Metadata
Release files for vbar 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| vbar-0.1.0.tar.gz | 78.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vbar-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.5 kB
Release files / vbar-0.1.0.tar.gz
| Download URL | vbar-0.1.0.tar.gz |
|---|---|
| Size | 78.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fdb18a200f374474112951028535becf1f70f9fa6ac102f95c1c1c783d4e2b19
|
|
BLAKE2b-256 checksum How to use checksums |
35a8c7f8c581f800c507ffc84a1920984227fe7eaf4da63a3253e84d5cb73187
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / vbar-0.1.0-py3-none-any.whl
| Download URL | vbar-0.1.0-py3-none-any.whl |
|---|---|
| Size | 27.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ba4d0d4a89059fa56f7a56eef19612faf5a6b19ac3c6f7bf8ba6f26b0a7bbcf9
|
|
BLAKE2b-256 checksum How to use checksums |
02b0c733914a30b9aac7f1cefc8bf2b59ae452c3f5d7d572c9c561e2956a2b1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logSecurity for vbar 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for vbar-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.