Add phone/sensor_dashboard.py — publishes phone sensors to SaltyBot MQTT: - IMU → saltybot/phone/imu @ 5 Hz (accelerometer + gyroscope via termux-sensor -s <name> -n 1) - GPS → saltybot/phone/gps @ 1 Hz (lat/lon/alt/accuracy/speed/bearing via termux-location; GPS→network fallback on cold start) - Battery → saltybot/phone/battery @ 1 Hz (pct/charging/temp/health/plugged via termux-battery-status) - paho-mqtt with loop_start() + on_connect/on_disconnect callbacks for automatic reconnect (exponential back-off, max 60 s) - Each sensor runs in its own daemon thread (SensorPoller); rate enforced by wall-clock sleep accounting for read latency - 30 s status log: per-poller publish/error counts + MQTT state - Flags: --broker, --port, --imu-hz, --gps-hz, --bat-hz, --qos, --no-imu, --no-gps, --no-battery, --debug Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SaltyBot Android/Termux Phone Node (Issue #420)
Android phone node for SaltyBot via Termux. Provides camera, GPS, IMU sensors and local OpenClaw LLM inference.
Setup
On phone (Termux):
bash termux-bootstrap.sh
mkdir -p ~/saltybot_workspace/src
cd ~/saltybot_workspace && colcon build
Running
cd ~/saltybot_workspace && source install/setup.bash
ros2 launch saltybot_phone phone_bringup.py
Topics
| Topic | Type | Description |
|---|---|---|
/phone/camera/image_raw |
Image | Camera frames 320x240@15Hz |
/phone/gps |
NavSatFix | GPS location |
/phone/imu |
Imu | Accelerometer data |
/saltybot/speech_text |
String | Input from Jetson |
/saltybot/chat_response |
String | LLM output to Jetson |
Power Management
nohup bash ~/power-management.sh > ~/power-mgmt.log 2>&1 &
Reduces CPU activity on low battery (<25%) or critical battery (<15%).
Configuration
Edit config/phone.yaml to adjust frame rates and LLM parameters.
Issue #420 Completion
✅ Termux bootstrap ✅ Camera / GPS / IMU nodes ✅ OpenClaw chat (local LLM) ✅ WebSocket bridge to Orin ✅ Termux:Boot auto-start ✅ Power management