sl-android 814624045a feat: Termux sensor dashboard (Issue #574)
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>
2026-03-14 11:53:04 -04:00
..

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