feat: Jetson Orin system monitor ROS2 node (Issue #631) #640

Merged
sl-jetson merged 1 commits from sl-jetson/issue-631-system-monitor into main 2026-03-15 17:29:50 -04:00
Collaborator

Summary

  • New saltybot_system_monitor ROS2 package for Jetson Orin hardware stats
  • Publishes /saltybot/system/stats (JSON) and /saltybot/diagnostics (DiagnosticArray) at 1 Hz
  • Stats source priority: jtop > tegrastats > mock (auto-detected)
  • jetson_stats.py: pure-Python data layer with TegrastatsParser, JtopReader, AlertChecker
  • system_monitor_node.py: ROS2 node, thresholds configurable via YAML params
  • Alerts: CPU/GPU >85% WARN (+10% ERROR), temp >80°C, disk/RAM >90%, power >30W
  • 50+ pytest unit tests, fully ROS2-free

Test plan

  • pytest test/test_system_monitor.py -v passes
  • ros2 launch saltybot_system_monitor system_monitor.launch.py works
  • /saltybot/system/stats publishes valid JSON at 1 Hz
  • /saltybot/diagnostics publishes DiagnosticArray at 1 Hz
  • stats_source: mock works without Jetson hardware
  • Alert thresholds trigger correct WARN/ERROR DiagnosticStatus levels

Closes #631

## Summary - New saltybot_system_monitor ROS2 package for Jetson Orin hardware stats - Publishes /saltybot/system/stats (JSON) and /saltybot/diagnostics (DiagnosticArray) at 1 Hz - Stats source priority: jtop > tegrastats > mock (auto-detected) - jetson_stats.py: pure-Python data layer with TegrastatsParser, JtopReader, AlertChecker - system_monitor_node.py: ROS2 node, thresholds configurable via YAML params - Alerts: CPU/GPU >85% WARN (+10% ERROR), temp >80°C, disk/RAM >90%, power >30W - 50+ pytest unit tests, fully ROS2-free ## Test plan - [ ] pytest test/test_system_monitor.py -v passes - [ ] ros2 launch saltybot_system_monitor system_monitor.launch.py works - [ ] /saltybot/system/stats publishes valid JSON at 1 Hz - [ ] /saltybot/diagnostics publishes DiagnosticArray at 1 Hz - [ ] stats_source: mock works without Jetson hardware - [ ] Alert thresholds trigger correct WARN/ERROR DiagnosticStatus levels Closes #631
sl-jetson added 1 commit 2026-03-15 14:43:35 -04:00
New package saltybot_system_monitor:
- jetson_stats.py: pure-Python data layer (JetsonStats, CpuCore,
  TegrastatsParser, JtopReader, TegrastatsReader, MockReader,
  AlertChecker, AlertThresholds) — no ROS2 dependency
- system_monitor_node.py: ROS2 node publishing /saltybot/system/stats
  (JSON) and /saltybot/diagnostics (DiagnosticArray) at 1 Hz
- Alerts: CPU/GPU >85% WARN (+10% ERROR), temp >80°C, disk/RAM >90%,
  power >30 W; each alert produces a DiagnosticStatus entry
- Stats source priority: jtop > tegrastats > mock (auto-detected)
- config/system_monitor.yaml: all thresholds and rate tunable via params
- launch/system_monitor.launch.py: single-node launch with config arg
- test/test_system_monitor.py: 50+ pytest tests, ROS2-free

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson force-pushed sl-jetson/issue-631-system-monitor from 25f0711309 to 5f0affcd79 2026-03-15 16:36:08 -04:00 Compare
sl-jetson merged commit 5aadf4b5c8 into main 2026-03-15 17:29:50 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#640
No description provided.