seatrialkit
Scoring functions for marine autonomy trials, computed from ground-truth vehicle trajectories.
Motivation
seatrialkit was built to score marine autonomy trials by consistent published metrics, regardless of the setting, in any simulator or at sea.
Each autonomy trial produces a time series of the vehicle's position and heading. Station-keeping error, distance to each waypoint and time to arrival are all properties of that time series and the trial's goal. seatrialkit therefore defines each score as a function of exactly two inputs: the recorded track and a scenario file that describes the trial.
Defining scores on these two inputs has three results:
- One implementation for every source of trial data. Any simulator, and any field trial with an independent position reference, can produce the track, and seatrialkit scores each track with identical code.
- Scores that anyone can recompute. A reported score can be reproduced from the track and the scenario file without access to the simulator, middleware or autonomy software used in the trial.
- Open definitions. Each metric has a written formula, each free parameter is an argument stored with the result, and each metric taken from published work is tested against its original implementation. The first such metrics are the station-keeping and wayfinding scores of the Virtual RobotX (VRX) simulation [1, 2].
Interpreting a score requires knowing the environmental conditions of the trial. A station-keeping error of 2 m reflects one level of control performance in slack water and another in a 1.5 m/s tidal current. A planner given an accurate current forecast also faces a different task from a planner given an inaccurate one. For this reason the scenario file is part of every score: it records each environmental input to the trial (currents, wind, waves, bathymetry), the source of each input (an observation, a hindcast or a forecast), and its role, either the conditions acting on the vehicle or the information available to the vehicle's planner.
Long Horizon Observatory built seatrialkit for its own evaluation work. The Observatory prepares environmental data, including ocean forecasts, hindcasts and bathymetry, for high-resolution simulation. It integrates established open-source simulators and autonomy software with that data, and contributes to those projects, so that existing autonomy software can be run under the recorded environmental conditions of specific days and places. Comparing those runs with one another, and with field trials conducted with partner operators, requires scores computed identically in every setting. The Observatory plans to use seatrialkit to score these trials, to measure how error in forecast environmental inputs changes the scores, and to publish the definitions and code behind every score it reports.
Out of scope: simulation, vehicle models, environmental data processing and running autonomy stacks.
Metrics
| Task | Metrics | Origin |
|---|---|---|
| Station keeping | Mean combined pose error; RMS, maximum and 95th-percentile excursion; mean heading error; fraction of time inside a watch circle; propulsion energy | VRX source [2] for the mean combined pose error; the others are summary statistics of distance from the station |
| Wayfinding | Minimum combined pose error per waypoint, and the mean of those minima | VRX source [2] |
| Navigation time | Success-gated ratio of optimal to actual traversal time, with clipping bounds as parameters | BARN Challenge [4, 5] |
Formulas, units and reporting rules are in the documentation at
seatrialkit.docs.lhzn.io (source in docs/source/). The combined pose error is
E = d + 0.75^d * h, where d is the distance to the goal in meters and h the heading error in radians, as in the
VRX scoring plugins [2]. The VRX paper [1] names the tasks; the formulas are stated in the code. The test suite
compares seatrialkit with line-by-line transliterations of the VRX update loops on random trajectories; the two
agree to a relative tolerance of 1e-12. Trajectories replayed through the VRX scoring plugins themselves, built
from the same commit and run in Gazebo Harmonic, give the same scores to within 1e-14 (see Validation in the
documentation).
Scenarios
A scenario file (YAML) names the region, vehicle, mission, timing windows, scoring set and random seeds. It is
validated against a JSON Schema shipped in the package (seatrialkit/scenario.schema.json, version 0). Scenario
identifiers follow the convention of the CommonOcean benchmarks [3]. scenario_hash returns the SHA-256 of the
scenario in canonical JSON, which is independent of key order. Two idealized examples are in
examples/scenarios/.
Installation
pip install seatrialkit # metrics only
pip install "seatrialkit[scenario]" # adds scenario loading and validation
Requires Python 3.11 or later.
Example
import numpy as np
import seatrialkit as tk
t = np.arange(0, 300, 1 / 60)
traj = tk.Trajectory(t, x=0.3 * np.sin(t / 20), y=0.2 * np.cos(t / 15), yaw=np.full_like(t, np.pi / 2))
result = tk.score_stationkeeping(traj, goal_x=0.0, goal_y=0.0, goal_yaw=np.pi / 2, watch_radius_m=2.0)
print(result.as_dict())
Dependencies
- NumPy [6]: all metric computations.
- PyYAML and jsonschema (optional extra
scenario): scenario loading and schema validation.
Related projects (not dependencies):
- osrf/vrx (Apache-2.0) [2]: source of the station-keeping and wayfinding definitions.
- CommonOcean: benchmark identifiers and scenario conventions for motion planning on water.
Status
Version 0.1.0, pre-release. Metric definitions and the scenario schema may change before 1.0. Record the seatrialkit version with every reported score. A score computed in simulation describes behavior in that simulation, not field performance.
References
- B. Bingham, C. Agüero, M. McCarrin, J. Klamo, J. Malia, K. Allen, T. Lum, M. Rawson and R. Waqar, "Toward Maritime Robotic Simulation in Gazebo," in OCEANS 2019 MTS/IEEE Seattle, 2019, pp. 1-10. doi:10.23919/OCEANS40490.2019.8962724
- Open Source Robotics Foundation, VRX: Virtual RobotX, source code, branch
jazzy, commit7609d1b, scoring pluginsvrx_gz/src/StationkeepingScoringPlugin.ccandvrx_gz/src/WayfindingScoringPlugin.cc. Apache-2.0. github.com/osrf/vrx, read 2026-11-12. - H. Krasowski and M. Althoff, "CommonOcean: Composable Benchmarks for Motion Planning on Oceans," in 2022 IEEE 25th International Conference on Intelligent Transportation Systems (ITSC), 2022, pp. 1676-1682. doi:10.1109/ITSC55140.2022.9921925
- D. Perille, A. Truong, X. Xiao and P. Stone, "Benchmarking Metric Ground Navigation," in 2020 IEEE International Symposium on Safety, Security, and Rescue Robotics (SSRR), 2020, pp. 116-121. doi:10.1109/SSRR50563.2020.9292572
- X. Xiao et al., "Autonomous Ground Navigation in Highly Constrained Spaces: Lessons Learned From the Benchmark Autonomous Robot Navigation Challenge at ICRA 2022," IEEE Robotics & Automation Magazine, vol. 29, no. 4, pp. 148-156, 2022. doi:10.1109/MRA.2022.3213466. Current rules: BARN Challenge 2026.
- C. R. Harris et al., "Array programming with NumPy," Nature, vol. 585, pp. 357-362, 2020. doi:10.1038/s41586-020-2649-2
License
MIT. Copyright Long Horizon Observatory.
Metadata
Release files for seatrialkit 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 | Actions |
|---|---|---|---|---|
| seatrialkit-0.1.0.tar.gz | 69.8 kB | With provenance | Details for seatrialkit-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| seatrialkit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for seatrialkit-0.1.0-py3-none-any.whl |
Total release size: 86.7 kB
Release files / seatrialkit-0.1.0.tar.gz
| Download URL | seatrialkit-0.1.0.tar.gz |
|---|---|
| Size | 69.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8e94a7589da525721685bce28b95676bc00164cc62f54051cc705fdf2f8a2d50
|
|
BLAKE2b-256 checksum How to use checksums |
a7e1b965adb8f345d7a7103ac57d1dfe9af4b8325696d5cd4dc6fb04cf1b8e8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 13, 2026.
Transparency logRelease files / seatrialkit-0.1.0-py3-none-any.whl
| Download URL | seatrialkit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0182037d490352c6c97662cfd218ead89ea9e3b8ece9b0399533467bf7a6efc6
|
|
BLAKE2b-256 checksum How to use checksums |
7b599fd3b466b47262a757c11a136e1ca0523ec24cfc6434494da8f19ae0bd0b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 13, 2026.
Transparency logSecurity for seatrialkit 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
Both files in this release have been uploaded with provenance metadata.
Attestation for seatrialkit-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 Nov 13, 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.