Commit Graph

47 Commits

Author SHA1 Message Date
Grant
dbe95150e3 feat(cockpit_bridge): publish rov-failsafe-cause text for W1 status line 2026-07-11 16:12:23 +02:00
Grant
1b0050dd6f fix(failsafe): allow recovery to NORMAL from RETURN_TO_SAFE, not just HOLD_AND_RECOVER 2026-07-11 14:14:30 +02:00
Grant
d8546413d1 fix(cockpit_bridge): publish assessment_state not failsafe_state to rov-failsafe 2026-07-11 13:23:53 +02:00
Grant
86b272802f fix(failsafe): FC comms loss now forces unconditional RED per DIR-7/DIR-12 2026-07-11 11:56:38 +02:00
Grant
2add8c9e68 docs: correct ardupilot-manager FD leak root cause (i2c handles, not TCP sockets); flag failsafe FC-comms gap 2026-07-09 10:36:09 +02:00
Grant
917342a27b docs: log respawn rollout across stack nodes 2026-07-08 18:24:38 +02:00
Grant
a5e1c9930b fix(launch): respawn safety and state-critical nodes (failsafe_monitor, motion_controller, ekf, depth, mission_executor) 2026-07-08 18:24:15 +02:00
Grant
9a337d1eb1 docs: flag recording_manager DIR-9/DIR-9a drift as open item 2026-07-08 18:16:23 +02:00
Grant
d5c6baa598 docs: log cockpit_bridge respawn fix and W8 validation 2026-07-08 18:08:25 +02:00
Grant
c099c00917 fix(launch): respawn cockpit_bridge so a failed start cannot leave the data lake feed dead 2026-07-08 18:07:31 +02:00
Grant
87000e6d62 feat(widget): add W8 mode indicator (read-only active profile display) 2026-07-08 17:18:12 +02:00
Grant
47bd376fc7 docs: log /mode endpoints in session log 2026-07-08 12:19:52 +02:00
Grant
9109439707 feat(api): add GET /mode and POST /mode endpoints to rov_api 2026-07-08 12:14:10 +02:00
Grant
882768af01 Merge branch 'master' of ssh://symbytech:222/administrator/rov-autonomy 2026-07-08 11:14:40 +02:00
Grant
6498c14dc2 docs: CLAUDE.md v3.5 - add VSC terminal label, session log bridge 2026-07-08 11:14:14 +02:00
Grant du Toit
4e48dc2c53 feat(mode): operating-mode profile system
Add ModeProfile.msg (atomic resolved flag set) to rov_interfaces.
Add mode_profile_loader node + config/mode_profiles.yaml to rov_mission:
ROV/AUV profiles plus custom/hybrid Save As, published latched on
/rov/mode/profile, reloadable via /rov/mode/reload service.
cockpit_bridge subscribes and surfaces flags to the Cockpit data lake
as external/rov-*. Single source of truth; widgets read flags, not modes.
Verified end-to-end: ROV and AUV resolve correctly and live reload works.

Refs DIR-1/2 (ROV/AUV duality), DIR-9 (amended: ARM-bounded recording), DIR-10.
2026-07-07 11:15:35 +00:00
Grant
785ec56432 Widgets housekeeping: add W6, remove probe widget
- Add widgets/w6_altitude.json (Ping2 downward sonar altitude, W6)
- Remove widgets/diagnostics/w_probe_api.json (dev API probe tool, no longer needed)
2026-07-05 18:11:59 +02:00
Grant du Toit
97decac205 Add deploy/ folder — systemd units and launch wrappers
- argonaut.service + argonaut-stack.sh (autonomy stack)
- argonaut-api.service + argonaut-api.sh (FastAPI backend)
- README documents deploy locations, pip dependencies, install procedure
- Resolves: systemd/wrapper files were previously not version-controlled
- Documents fastapi/uvicorn system-wide install (--ignore-installed typing_extensions)
2026-07-05 15:50:42 +00:00
Grant du Toit
66a18ef707 Phase 3 Stage 2: rov_api FastAPI backend (core)
- New rov_api package: HTTP-to-ROS2 bridge on port 8081
- GET /health: mission state, recording active, failsafe state
- POST /abort: W3 RETURN TO SAFE, publishes Bool to /rov/mission/abort
- POST /mission/start: MissionCommand START (recording no-go gate enforced)
- POST /mission/stop: MissionCommand ABORT
- Embedded rclpy node in background thread, uvicorn in main thread
- Verified end-to-end: /abort -> failsafe_monitor FSM NORMAL -> HOLD_AND_RECOVER
- Runs as argonaut-api.service (manual-start in dev, same policy as argonaut.service)
- Deferred to Stage 2b: /return_budget, /backup/*, /mission/upload
2026-07-05 15:40:34 +00:00
Grant du Toit
06403533f2 W6: Add rov-altitude to cockpit_bridge for Ping2 downward sonar
- Add Range subscription on /ping2/altitude (sensor_msgs/Range)
- Publish rov-altitude to data lake (-1.0 sentinel = NO SONAR)
- Treats range_max (100m) as no-return, same as no-data sentinel
2026-07-04 11:27:39 +00:00
Grant du Toit
5d75a9d30d Phase 3 Stage 1: Recording Manager (DIR-9)
- Add recording_manager node: continuous rosbag2 MCAP recorder,
  zstd compression, 500MB bag splitting, 10GB retention policy,
  1Hz health monitoring and restart on subprocess exit
- Add /rov/recording/active no-go gate to mission_executor START handler
- Add rov-recording variable to cockpit_bridge (data lake visibility)
- Replace foxglove_mcap ExecuteProcess with recording_manager Node
- Register recording_manager entry point in setup.py
- Confirmed: data: true on /rov/recording/active in full stack
2026-07-04 07:42:09 +00:00
Grant
2cb7b74777 W0: fixed column layout (3 columns, horizontal scroll when narrow) 2026-06-23 15:00:32 +02:00
Grant
66f9bd7440 Widgets W1-W5 confirmed working in Cockpit v1.18.2; update README, add probe diagnostic and gitignore, remove obsolete html 2026-06-23 14:22:20 +02:00
Grant du Toit
12b5161436 Add cockpit_bridge node for Cockpit data-lake injection
- New node bridges ROV topics to Cockpit via Generic WebSocket on :9001
- Sends variableName=value format (Cockpit v1.18+ protocol)
- Variables land in data lake as external/rov-{failsafe,depth,voltage,heading,ms,mp}
- Subscribes: /rov/failsafe, /rov/depth, /mavros/battery,
  /mavros/mavros/compass_hdg, /rov/mission/status
- Added to mission.launch.py and rov_mission entry points
- Verified: Cockpit connects, all 6 external/rov-* vars appear in data lake
2026-06-22 09:37:41 +00:00
Grant du Toit
d7f6d3f93e Remove accidental .bak file 2026-06-20 13:55:58 +00:00
Grant du Toit
8a12e3bf50 Retire stub state_estimator; consumers use EKF /odometry/filtered
- state_estimator was an unimplemented stub (empty callbacks, never
  published /rov/state) - removed node, entry point, launch block
- motion_controller + mission_executor: /rov/state -> /odometry/filtered
  (the working robot_localization EKF output)
- Eliminates redundant/competing state estimators; single source of truth
- Verified: EKF publishes ~11Hz, both consumers subscribed
2026-06-20 13:55:12 +00:00
Grant du Toit
7d4e6dfc23 Fix EKF IMU input: point imu0 at real MAVROS topic
- ekf.yaml imu0: /imu/data -> /mavros/mavros/data (the empty /imu/data
  topic had no publisher; EKF produced no output)
- Verified: /odometry/filtered now publishes valid fused orientation
  with real Pixhawk IMU via MAVROS
- Note: high covariance expected (single budget IMU, untuned, no position
  input) - tune after Xsens/DVL added
2026-06-20 13:39:02 +00:00
Grant du Toit
e36644e97e Fix rel_alt type collision; retire VM-era mock_publisher
- depth_node + failsafe_monitor: subscribe to real MAVROS topic
  /mavros/mavros/rel_alt (was /mavros/global_position/rel_alt)
- failsafe_monitor: Float32 -> Float64 (resolves duplicate-type error
  that dropped the topic from recordings)
- Remove mock_publisher (VM-era fake data, now collides with real MAVROS)
- Verified: /rov/depth now publishes real data; zero duplicate-type errors
2026-06-20 13:15:15 +00:00
Grant du Toit
c94412ddae Fix full-stack launch: MAVROS fcu_url + plugin_allowlist, timestamped bag dir, BEST_EFFORT QoS on MAVROS subs, battery<0 unknown guard
- rov_full.launch.py: fcu_url to udp://@<ip>:14550 (was bad local bind); add plugin_allowlist (sys_status,sys_time,command,imu,global_position,setpoint_velocity) to stop duplicate-subscription crash on companion_process_status/debug_value
- foxglove_mcap.launch.py: timestamp bag output dir (was fixed /data/bags/dive, failed on second launch)
- failsafe_monitor/depth_node/state_estimator: qos_profile_sensor_data on MAVROS-sourced subs (MAVROS publishes BEST_EFFORT; default RELIABLE blocked all messages)
- failsafe_monitor: treat battery_percent<0 as UNKNOWN not critical (SITL has no battery; was forcing permanent EMERGENCY_SURFACE)
2026-06-17 18:28:06 +00:00
Grant du Toit
45b3301952 Fix ekf.yaml process_noise_covariance: all floats (was mixed int/float, failed YAML parse) 2026-06-17 12:14:28 +00:00
Grant du Toit
7590fafa04 Add missing setup.cfg to all Python packages - fixes executable install path for ros2 launch 2026-06-17 12:05:46 +00:00
Grant du Toit
f1c6710b1a Add missing rov_bringup/config directory to fix colcon build 2026-06-17 10:09:31 +00:00
Grant
6aa64f02c2 Task 11: update W2 variable names for WebSocket data path 2026-05-14 06:45:26 +02:00
Grant
d16e451765 Task 11: rewrite publisher as WebSocket server for Cockpit v1.18.0 2026-05-13 05:24:55 +02:00
Grant
eb19cee7af Task 11: fix sysid to 1 for mavlink2rest routing; fix W1 variable name 2026-05-12 08:25:43 +02:00
Grant
46e34f6605 Task 11: mock NAMED_VALUE publisher; update W0 widget 2026-05-12 07:08:40 +02:00
Grant
5396949cf6 chore: remove duplicate and zip files from widgets folder 2026-05-12 00:42:13 +02:00
Grant
53ebfc8dc6 fix: rebuild all widgets as JSON, remove CSS globals and unicode 2026-05-12 00:40:40 +02:00
Grant
6a145f24d2 feat: add all Argonaut 3 DIY widgets (W0-W5) 2026-05-11 10:30:55 +02:00
Grant
81fad536f9 docs: add CLAUDE.md with behaviour rules and terminal conventions 2026-05-07 22:35:43 +00:00
Grant
559f60dfd8 feat(bringup): add foxglove_bridge and MCAP recording 2026-05-07 08:26:26 +00:00
Grant
6aea0c24a6 feat: add rov_simulation package with mock_publisher and dev_stack launch
- New rov_simulation package (dev only — not for vehicle deployment)
- mock_publisher: synthetic MAVROS sensor data with 5 test scenarios
  (nominal, low_battery, comms_loss, depth_warning, all_clear)
- dev_stack.launch.py: launches mock_publisher + failsafe_monitor + mission_executor
- Scenarios trigger specific failsafe conditions for end-to-end testing
2026-05-07 00:43:52 +00:00
Grant
c3a8b4bc77 fix: mission launch file now correctly loads env-specific config at launch time 2026-05-07 00:29:02 +00:00
Grant
4b1766255a feat: implement mission executor with breadcrumb system and failsafe integration
- Full mission state machine: IDLE/RUNNING/PAUSED/COMPLETE/ABORTED
- Breadcrumb buffer: 1800 entries at 2s interval (1hr coverage)
- Failsafe integration: HOVER=pause, RETURN_TO_SAFE=abort+breadcrumb, EMERGENCY=immediate abort
- Waypoint loading from YAML mission file via LOAD command
- Arrival detection with configurable radius
- Image capture loiter with configurable delay
- Simple proportional navigation toward waypoints (Phase 3+ replaces with full planner)
- Entry point recorded at mission start for safe zone reference
2026-05-07 00:26:12 +00:00
Grant
9f7a775427 feat: implement full failsafe monitor per design v2.0
- Updated FailsafeStatus.msg with assessment state, FSM state, thruster_anomaly flag
- Implemented GREEN/AMBER/RED continuous self-assessment
- Dynamic assessment rates: 5Hz/20Hz/50Hz
- Full FSM: NORMAL->HOLD_AND_RECOVER->RETURN_TO_SAFE->EMERGENCY_SURFACE
- Priority-ordered failsafe conditions (8 levels per design spec)
- Tiered battery thresholds: warning/return/critical/emergency
- Conditional comms loss response based on assessment state
- Conditional manual abort response based on assessment state
- All thresholds configurable via failsafe.yaml
2026-05-07 00:01:54 +00:00
Grant
31ddc2c7eb Add .gitattributes for consistent line endings 2026-05-03 22:22:51 +00:00
Grant
9b03548533 Initial workspace — six-package autonomy stack 2026-05-03 09:26:04 +00:00