Skip to main content

dynos-sentry-domain

The Sentry-AUV survey vocabulary for DYNOS. Mostly Zone, Coordinate, survey, goto, full_coverage_of. Importing this package gives you the words to use when constructing goals for a Sentry mission.

The package is backend-agnostic. It only declares the public domain. The hardware extensions (thrusters, weights, descent sequencing, control modes) live behind the backend boundary and are not shipped on PyPI; the planner knows about them when it runs, but your code never references them.

Treat this repository like a static API for Sentry. dynos-client lets you talk to a backend, dynos-sentry-domain gives you the words to use. You usually install both together.

Install

pip install dynos-sentry-domain

Pulls in dynos-client (and dynos-core) transitively.

Concepts

A short refresher of dynos-core:

  • Symbolic state is a set of named facts (fluents) about typed objects. at(wp_end) and phase_at_depth() are atoms; the current world is the set of atoms that are true now.
  • Goals are states not commands. You tell the system what should be true; the planner derives the action sequence that makes it true.
  • Transitions are action schemas. survey(zone) is the symbolic side; the executable side is on the backend.

Zone

A polygonal survey region. The planner expands full_coverage_of(zone) into per-trackline fly_trackline(...) actions using the zone's geometry; you do not enumerate the tracklines yourself.

Field Description Example
vertices Polygon corners as [lon, lat] (longitude first, see conventions) [[-70.67, 41.52], [-70.66, 41.52], ...]
coordinate_frame Currently only "geographic" is supported "geographic"
altitude Survey depth (m) 65.0
speed Vehicle speed (m/s) 1.0
coverage_width Sensor swath width (m) 170.0 (multibeam), 5.0 (camera)
robot_width Vehicle width (m) 0.5
envelope Altitude tolerance (m) 20.0

Coordinate

A named waypoint. The planner uses it as a goto target. Pass the name positionally (as with Zone) so the object's name is its identity -- a goal atom like at(wp_end) then refers to it correctly.

Coordinate("wp_end", latitude=41.525, longitude=-70.66, coordinate_frame="geographic")

Lifecycle phases

Sentry has internal mission-lifecycle state (descending, at-depth, ascending, recovered). These are not part of the goal vocabulary and you never set them. The planner derives descent from your survey/goto goal automatically, and ascent/recovery is owned by the mission bookends and the on-vehicle abort safety system (and, when needed, a skilled operator). A client never asserts a phase and never invokes an abort. Your goal is what you want surveyed or reached, nothing about how the vehicle gets down or comes home (that gets handled internally).

The complete client goal vocabulary is small: full_coverage_of(zone), at(waypoint), and the sensing-coverage goals. That is all you express (intentionally: it's all you need, since the backend handles the rest).

60-second example: a single-zone survey

from dynos_client import RemoteOrchestrator
from dynos_sentry.sentry import Zone, full_coverage_of

orch = RemoteOrchestrator.from_config(timeout_s=3600)

site_alpha = Zone("site_alpha",
    coordinate_frame="geographic",
    vertices=[[-70.67, 41.52], [-70.66, 41.52],
              [-70.66, 41.525], [-70.67, 41.525]],
    altitude=70.0,
    envelope=20.0,
    speed=0.8,
    coverage_width=170.0,
    robot_width=0.5,
)
orch.create_object(site_alpha)
orch.set_goal([full_coverage_of(site_alpha)])
orch.execute_plan()

Your goal is just full_coverage_of(site_alpha). The planner inserts the descent for you; bringing the vehicle home is handled by the mission bookends and the abort safety system, not by anything you put in the goal.

CLI equivalent (using a zone.json file):

dynos call create zone.json
dynos call goal "full_coverage_of(site_alpha)"
dynos call plan        # optional: print the action sequence
dynos call execute     # synchronous; will time out the CLI for long surveys

After it finishes, pull a GeoJSON of the executed survey for inspection:

dynos call geojson -o survey.geojson

Goto: a goal, not a primitive

"Go to a waypoint" in DYNOS is a goal, not a command. You declare the world state you want (at(wp_end)) and the planner derives the prerequisite sequence (takeover, descent setup, the descent itself). There is deliberately no "just go" button: routing through the planner is what keeps the symbolic world consistent and what makes replanning on failure work. You do not add a depth or phase term -- the planner already descends because reaching the waypoint requires it.

from dynos_sentry.sentry import Coordinate, at

# Pass the name positionally (as with Zone) so the object's name is its
# identity; the goal atom at(wp_end) then refers to it correctly.
wp_end = Coordinate("wp_end", latitude=41.525, longitude=-70.66,
                    coordinate_frame="geographic")
orch.create_object(wp_end)
orch.set_goal([at(wp_end)])
orch.execute_plan()

dynos call plan will show something like takeover_control, setup_descent, descent_sequence(target=wp_end).

Public API

Symbol Purpose
Zone The polygonal survey region (object type with ValueField descriptors).
Coordinate A named waypoint (object type).
survey Transition for surveying a zone (used as a building block of full_coverage_of).
goto Transition for moving between coordinates.
full_coverage_of(zone) Goal-side fluent: "this zone has been fully surveyed." Use this in set_goal.
at(coordinate) Goal-side fluent: "vehicle is at this waypoint." The goto goal.
visited(coordinate) Goal-side fluent: "vehicle has visited this waypoint."
SurveyParams Parameter dataclass for survey.
CoordinateGotoParams Parameter dataclass for goto.

Lifecycle phase predicates (phase_at_depth, phase_ascending, phase_surface, ...) are internal mission-sequencing state. They are not goal vocabulary: the planner sets them while sequencing descent, and ascent/recovery is owned by the mission bookends and the abort safety system. Do not put a phase in a goal.

What is intentionally not exposed

Hardware fluents (Thruster, Servo, controller_survey, bottom_follow_configured, ...) and internal transitions (takeover_control, descent_sequence, ...) live in the backend extension layer, not here. They are stripped from the public release; user code must not depend on them. If you find yourself wanting one, the right move is usually to phrase it as a goal that the planner can satisfy, or to file an issue describing the use case.

Next

For a complete worked example with a custom action and an end-to-end mission, see dynos-adaptive-resampling. For the cross-package install / login / first-survey walkthrough, see user_guide.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dynos_sentry_domain-0.1.5.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dynos_sentry_domain-0.1.5-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file dynos_sentry_domain-0.1.5.tar.gz.

File metadata

  • Download URL: dynos_sentry_domain-0.1.5.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for dynos_sentry_domain-0.1.5.tar.gz
Algorithm Hash digest
SHA256 59492c830a8a5b55319a0879b37f3e246b3a57c30418e6278005a88fdf157559
MD5 a668a376fdccf20a6b57041fb83ce404
BLAKE2b-256 d38020358fee9c4f81a000187ac9bf2e8d1713c7693f23eb284e25be3f5fd3f5

See more details on using hashes here.

File details

Details for the file dynos_sentry_domain-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for dynos_sentry_domain-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 76b8bf506d3fe25684c54423068eaa84a27316ab72888b7fcbd28289a5bcf147
MD5 61b1edada8ed09df7e3b96bbeddb8b0a
BLAKE2b-256 2ff4910f70895d0fcc74800fb2e6f7de3833b30e17ed44e4592e6a0f50c83129

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.2

2 files

0.2.0

2 files

This release

0.1.5 This release

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 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