Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@

| Field | Value |
|---------------|--------------|
| Last Updated | 2026-08-10 |
| Version | 1.0.0 |
| Last Updated | 2026-08-13 |
| Version | 1.0.1 |

## Overview

`colav-automaton` is a maritime **col**lision **av**oidance hybrid automaton, built on the [hybrid-automaton](https://github.com/rymc-dev/hybrid-automaton) framework. It steers an autonomous surface vehicle (USV) toward a goal waypoint while avoiding a dynamically-updatable **unsafe region** (a risk envelope), generating temporary "virtual" avoidance waypoints on the fly rather than requiring a pre-planned path.

This is not a full COLREGs rule-engine (it doesn't encode give-way/stand-on role logic for head-on, crossing, or overtaking encounters) - it's a general risk-envelope-avoidance automaton. Feed it any polygon as an unsafe region (a static hazard, a buffered obstacle, a COLREGs-derived exclusion zone computed upstream, etc.) and it will route around it.

**Framework Status**: v1.0.0 - Stable API, tested against real `hybrid-automaton>=1.0.0`, ready for simulation use and ROS2 integration testing on hardware.
**Framework Status**: v1.0.1 - Stable API, tested against real `hybrid-automaton>=1.0.1`, ready for simulation use and ROS2 integration testing on hardware.

If you have ideas for improvement or want to contribute, please reach out and become a collaborator!

Expand Down Expand Up @@ -135,7 +135,7 @@ Please cite this package as described below if used in research:
```bibtex
@misc{colav_automaton_2026,
author = {Ryan McKee},
title = {colav-automaton v1.0.0},
title = {colav-automaton v1.0.1},
howpublished = {GitHub repository},
year = {2026},
note = {Accessed: Aug. 10, 2026},
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ classifiers = [
"Programming Language :: Python :: Implementation :: PyPy",
]
dependencies = [
"hybrid-automaton>=1.0.0",
"hybrid-automaton>=1.0.1",
"shapely",
]

Expand Down
2 changes: 1 addition & 1 deletion src/colav_automaton/__about__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2025-present Ryan McKee <ryanmckee47@icloud.com>
#
# SPDX-License-Identifier: MIT
__version__ = "1.0.0"
__version__ = "1.0.1"
21 changes: 13 additions & 8 deletions src/colav_automaton/automaton.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,32 +70,35 @@ def ColavAutomaton(
name="e1",
to_state=q2,
guards=[heading_not_within_tolerance_guard],
priority=1
priority=2
)
e2 = Transition(
name="e2",
to_state=q2,
guards=[los_clear_to_waypoint_guard],
reset=generate_new_virtual_waypoint,
priority=0
priority=1
)
e4 = Transition(
name="e4",
to_state=q4,
guards=[waypoint_reached_guard]
guards=[waypoint_reached_guard],
priority=0
)
q1.add_transitions([e1, e2, e4])

# NOTE: transitions from Turn to LOS (q2)
e5 = Transition(
name = "e5",
to_state=q1,
guards=[heading_within_tolerance_guard]
guards=[heading_within_tolerance_guard],
priority=1
)
e6 = Transition(
name="e6",
to_state=q3,
guards=[unsafe_conditions_guard]
guards=[unsafe_conditions_guard],
priority=0
)
q2.add_transitions([e5, e6])

Expand All @@ -104,7 +107,8 @@ def ColavAutomaton(
e8 = Transition(
name="e8",
to_state=q1,
guards=[safe_conditions_guard]
guards=[safe_conditions_guard],
priority=0
)
q3.add_transition(e8)

Expand All @@ -113,14 +117,15 @@ def ColavAutomaton(
name="e7",
to_state=q1,
guards=[virtual_waypoints_guard],
reset=pop_virtual_waypoint
reset=pop_virtual_waypoint,
priority=0
)
q4.add_transition(e7)


ha = Automaton(
name="COLAV Automaton",
version="1.0.0",
version="1.0.1",
states=[
q1,
q2,
Expand Down
2 changes: 1 addition & 1 deletion src/colav_automaton/dynamics/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
__author__ = "Ryan McKee <ryanmckee47@icloud.com>"
__version__ = "1.0.0"
__version__ = "1.0.1"
__description__ = "dynamics functions for the states of hybrid-automaton colav-automaton"

from .dynamics import constant_heading_dynamics, flow_los_heading
Expand Down
2 changes: 1 addition & 1 deletion src/colav_automaton/guards/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
)

__author__ = "Ryan McKee <ryanmckee47@icloud.com>"
__version__ = "1.0.0"
__version__ = "1.0.1"
__description__ = "hybrid-automaton framework guards for colav-automaton"

__all__ = [
Expand Down
2 changes: 1 addition & 1 deletion src/colav_automaton/invariants/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from .invariants import failing_invariant

__author__ = "Ryan McKee <ryanmckee47@icloud.com>"
__version__ = "1.0.0"
__version__ = "1.0.1"
__description__ = "hybrid-automaton framework invariants for colav-automaton"

__all__ = [
Expand Down
2 changes: 1 addition & 1 deletion src/colav_automaton/resets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
)

__author__ = "Ryan McKee <ryanmckee47@icloud.com>"
__version__ = "1.0.0"
__version__ = "1.0.1"
__description__ = "resets for hybrid-automaton transitions that will takes all inputs and " \
"output update continous states (agent continous state scalers, auxielary continous" \
"states dictionary) these resets are specifically for colav-automaton"
Expand Down
2 changes: 1 addition & 1 deletion src/colav_automaton_evaluation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from .figure_generator import plot_xy_position_over_time

__author__ = "Ryan McKee <ryanmckee47@icloud.com>"
__version__ = "1.0.0"
__version__ = "1.0.1"
__description__ = "evaluation/visualization utilities for colav-automaton run results"

__all__ = [
Expand Down
Loading