700756c16f
Initial commit. Delivers what the brief calls 'Sprint 0 - Foundations' (see docs/AR_Autopilot_brief.md section 12): - Complete repository structure (arautopilot package + firmware, display, installer, tools placeholders + docs). - Core data model (Pydantic v2): modes, alarms, actuator config, PID config + gain scheduling, vessel config, knob state machine, project config with YAML/JSON serialisation. - Seed library: 2 actuator profiles (hydraulic & electric DC reversible) and 2 default tunings (yacht motor planeo 30 m and 40 m). Conservative literature values, NOT the integrator's production tuning IP. - Firmware skeleton: only src/hal/pinout.h with the 21 I/O contract for the AR-NMEA-IO v1.0 board. No drivers, no main loop. - Studio stubs (real PySide6 app starts in Sprint 4). - pytest suite (80 tests, all green): modes, alarms, actuator, PID (incl. gain interpolation and the +/-50% adaptive bound from brief section 6), vessel, knob state, project config, library loader, end-to-end roundtrip. - examples/sprint0_demo.py - the acceptance demo from the brief. Acceptance criteria met: - pytest green (80/80) - demo creates, saves (YAML + JSON), reloads, and verifies a full ProjectConfig using the seed library - repository ready for tag `sprint-0-approved` See CHANGELOG.md for the detailed scope. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
89 lines
2.0 KiB
Python
89 lines
2.0 KiB
Python
"""Core data model for AR-Autopilot.
|
|
|
|
This module exports the typed, validated Pydantic v2 models used across
|
|
the Studio, the firmware build pipeline, and the test bench.
|
|
|
|
Public surface (Sprint 0):
|
|
|
|
- :mod:`~arautopilot.core.ids` — typed identifier wrappers
|
|
- :mod:`~arautopilot.core.modes` — autopilot operating modes
|
|
- :mod:`~arautopilot.core.alarms` — alarm types and severities
|
|
- :mod:`~arautopilot.core.actuator_config` — rudder actuator configuration
|
|
- :mod:`~arautopilot.core.pid_config` — cascaded PID + gain schedule
|
|
- :mod:`~arautopilot.core.vessel_config` — vessel + composed configs
|
|
- :mod:`~arautopilot.core.knob_state` — bridge knob arming state machine
|
|
- :mod:`~arautopilot.core.project_config` — root project config (root entity)
|
|
"""
|
|
|
|
from arautopilot.core.actuator_config import (
|
|
ActuatorConfig,
|
|
ActuatorType,
|
|
)
|
|
from arautopilot.core.alarms import (
|
|
Alarm,
|
|
AlarmSeverity,
|
|
AlarmType,
|
|
)
|
|
from arautopilot.core.ids import (
|
|
ProjectId,
|
|
VesselId,
|
|
new_project_id,
|
|
new_vessel_id,
|
|
)
|
|
from arautopilot.core.knob_state import (
|
|
KnobFunction,
|
|
KnobMode,
|
|
KnobState,
|
|
)
|
|
from arautopilot.core.modes import (
|
|
AutopilotMode,
|
|
is_available_in_phase,
|
|
)
|
|
from arautopilot.core.pid_config import (
|
|
AccessLevel,
|
|
GainSchedulePoint,
|
|
PidConfig,
|
|
PidGains,
|
|
interpolate_gains,
|
|
)
|
|
from arautopilot.core.project_config import (
|
|
ProjectConfig,
|
|
)
|
|
from arautopilot.core.vessel_config import (
|
|
VesselConfig,
|
|
VesselType,
|
|
)
|
|
|
|
__all__ = [
|
|
# ids
|
|
"ProjectId",
|
|
"VesselId",
|
|
"new_project_id",
|
|
"new_vessel_id",
|
|
# modes
|
|
"AutopilotMode",
|
|
"is_available_in_phase",
|
|
# alarms
|
|
"AlarmType",
|
|
"AlarmSeverity",
|
|
"Alarm",
|
|
# actuator
|
|
"ActuatorType",
|
|
"ActuatorConfig",
|
|
# pid
|
|
"AccessLevel",
|
|
"PidGains",
|
|
"GainSchedulePoint",
|
|
"PidConfig",
|
|
"interpolate_gains",
|
|
# vessel
|
|
"VesselType",
|
|
"VesselConfig",
|
|
# knob
|
|
"KnobMode",
|
|
"KnobFunction",
|
|
"KnobState",
|
|
# project
|
|
"ProjectConfig",
|
|
]
|