You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Give camp a single source of truth for its own resource footprint, use it to protect itself from resource-exhaustion crashes (the salmon live-data crash, #153), and report health via ROS diagnostics — with a lightweight status-bar
indicator for the operator riding on the same data.
Motivated by #153: camp crashed on the salmon operator station after enabling live
data because the live tile cache grows unbounded and exhausted memory/VRAM. camp
had no awareness of its own footprint and no way to shed load before crashing.
Design
One ResourceMonitor samples the process footprint and a self-accounted GPU-byte
counter (camp creates every texture itself, so it can total its own VRAM use
portably — the number that actually bounds the live cache). Everything else
consumes that snapshot: self-protection acts on it, ROS diagnostics report it, and
the status bar displays it.
#155 first (everyone needs the numbers) → then #156 (incl. #160), #157, #158
proceed in parallel against the snapshot.
Scope note
Self-protection + ROS diagnostics are the lead goals (operator UI is a thin rider,
not a separate effort). Distinct from the OGR/Georeferenced leak (#152), which is
the chart-load path and unrelated to resource monitoring.
Authored-By: Claude Code Agent Model: Claude Opus 4.8
Goal
Give camp a single source of truth for its own resource footprint, use it to
protect itself from resource-exhaustion crashes (the salmon live-data crash,
#153), and report health via ROS diagnostics — with a lightweight status-bar
indicator for the operator riding on the same data.
Motivated by #153: camp crashed on the salmon operator station after enabling live
data because the live tile cache grows unbounded and exhausted memory/VRAM. camp
had no awareness of its own footprint and no way to shed load before crashing.
Design
One
ResourceMonitorsamples the process footprint and a self-accounted GPU-bytecounter (camp creates every texture itself, so it can total its own VRAM use
portably — the number that actually bounds the live cache). Everything else
consumes that snapshot: self-protection acts on it, ROS diagnostics report it, and
the status bar displays it.
Children
(RSS, CPU%, threads, FDs via
/proc/self; self-accounted GPU bytes; snapshot+ change signal; no policy). Foundation — ships first.
budget (Live tile cache is unbounded -> memory/VRAM exhaustion (crashed camp on salmon after enabling live data) #153), load-shedding guard near limits, GUI responsiveness watchdog.
diagnostic_msgs/DiagnosticArray+heartbeat from
camp_map_ros; plugs intorqt_robot_monitor+ deployment log.addPermanentWidgetgauge(RAM/VRAM/tiles + health dot), riding the same snapshot.
supersedes Live tile cache is unbounded -> memory/VRAM exhaustion (crashed camp on salmon after enabling live data) #153). Consumes the monitor's VRAM accounting as its eviction budget; the
concrete first self-protection consumer, plus a consumer-side overview pyramid so
zoom-out survives eviction.
Dependency order
#155 first (everyone needs the numbers) → then #156 (incl. #160), #157, #158
proceed in parallel against the snapshot.
Scope note
Self-protection + ROS diagnostics are the lead goals (operator UI is a thin rider,
not a separate effort). Distinct from the OGR/Georeferenced leak (#152), which is
the chart-load path and unrelated to resource monitoring.
Authored-By:
Claude Code AgentModel:
Claude Opus 4.8