Skip to content

GaitPilot Wear OS Companion App Guide

The GaitPilot Wear OS companion app turns your Pixel Watch or other Wear OS device into an interactive wrist-mounted sensor node, haptic coach, and hands-free workout console. While the phone app remains the central compute engine for heavy gait calculations, session storage, and audio coaching, the watch serves as an active, two-way control panel with live telemetry, workout controls, and emergency safety triggers. If temporarily disconnected, it gracefully operates in standalone fallback mode to preserve local tracking until reconnected.


Requirements

  • Phone app installed: The GaitPilot app must be installed and running on your Android phone.
  • Watch app installed: The GaitPilot app must also be installed on your Wear OS watch. Both apps must share the same Google account and must be paired at the Android OS level before installation.
  • Subscription tier: The watch companion is available to all users (Free, Advanced, and Pro). For Free tier users, it serves as a seamless fallback for live heart-rate monitoring, workout controls, and basic step counting. For Pro tier users, the watch IMU data additionally unlocks the full kinematic chain and arm-swing analysis.

Setup, Google Play Installation & Updates

GaitPilot uses the Android Wearable Data Layer to communicate with your watch. There is no Bluetooth scan, no MAC address entry, and no pairing code. Because your watch is already paired to your phone at the Android OS level, Google Play Services maintains a persistent background connection that GaitPilot uses automatically.

Installing the Companion App onto Your Watch

You have two convenient ways to install the watch companion:

  1. Open Play Store on Your Phone: Open the Google Play Store internal testing invite link on your phone and tap "Accept invite".
  2. Install on More Devices: Under the main "Install" or "Update" button, Google Play displays an "Available on more devices" section with a checkbox for your paired Wear OS watch.
  3. One-Tap Dual Install: Tap install to load GaitPilot on both your phone and watch simultaneously.

Option B: From the Watch Play Store

  1. Join the Test on Your Phone: Open the Google Play Store internal testing invite link on your phone and tap "Accept invite".
  2. Open Play Store on Your Watch: On your Wear OS watch, open the Google Play Store app while wearing it.
  3. Search for GaitPilot: Tap the search icon (magnifying glass) or microphone at the top of the watch Play Store and search for GaitPilot (on older Wear OS versions, you can also scroll down to "Apps on your phone").
  4. One-Tap Install: Select GaitPilot from the search results and tap Install. The watch companion will install directly onto your watch under your shared Google account (com.gaitpilot.gait_pilot).

How Independent App Updates Work

GaitPilot delivers phone and watch updates independently through Google Play:

  • No Unnecessary Downloads: If an update only modifies the phone app, your phone updates automatically without prompting or re-downloading on your watch. If an update targets Wear OS features, only your watch receives the update.
  • Automatic Background Updates: When your watch is placed on its charging puck overnight and connected to Wi-Fi or Bluetooth, Google Play automatically updates GaitPilot in the background. You do not have to do anything.
  • Manual Updates via Phone: Open Google Play on your phone → tap your profile icon → Manage apps & device → tap the device filter button and choose your watch → tap Update next to GaitPilot.
  • Manual Updates via Watch (TalkBack Friendly): On your watch, open the Google Play Store → scroll to Manage apps → tap Updates. TalkBack will announce "Update available for GaitPilot". Tap Update to install immediately.

Automatic Watch Activation & Phone Sensor Hub Status

When you open the GaitPilot phone app, it automatically sends a wake message to your watch over the Wearable Data Layer. A background service on the watch called WearListenerService receives this message and launches the watch app without any action from you.

Monitoring Watch Status in the Phone's External Sensors Hub

On the phone, open the External Sensors Hub to verify live watch health and streaming state: * Live Streaming Indicator: The watch card displays a luminous neon-green streaming dot. TalkBack explicitly announces this indicator as "Live streaming" when data is actively communicating, and "Not streaming" when disconnected. * Placement Readout: The card header displays ${PLACEMENT} (WEAR OS) (e.g. LEFT WRIST (WEAR OS) or RIGHT WRIST (WEAR OS)), matching your selection in the placement dropdown. * Battery & Runtime: The subtitle displays CONNECTED (BATTERY: X% (~Y.Yh left)) during active connection. If the app is awaiting the initial watch ping, it displays WAITING FOR PING... in amber lettering.


The Watch Display & Interactive Workout Controls

The watch face provides an ambient, high-contrast dashboard optimized for outdoor sunlight readability with full two-way session control. It automatically transitions across three lifecycle states:

1. Idle State ("Ready to Walk")

  • Display: Shows "Ready to Walk" with current optical heart rate.
  • Primary Control: A full-width green START button (#34C759).
  • Action: Tapping START sends /start_session to the phone, launching live tracking simultaneously on both devices.

2. Active Tracking State

  • Top Arch: Prominent red [ 🚨 SOS ] button (visible only when an emergency contact is configured in phone Safety settings; otherwise clean vertical spacing is preserved).
  • Live Vitals: Displays elapsed workout time in MM:SS, live cadence in steps per minute (SPM), and live optical PPG heart rate (BPM).
  • 3-Button Bottom Control Bar:
  • Left: Cyan [ 🎙️ MIC ] (#00E5FF) for on-wrist voice commands.
  • Center: Amber [ ⏸️ PAUSE ] (#FFCC00) to pause the session.
  • Right: Warning Orange [ ⚠️ HAZ ] (#FF9500) to instantly drop a geo-tagged hazard marker.

3. Paused State

  • Header / Timer: Displays amber PAUSED MM:SS alongside your heart rate.
  • 3-Button Bottom Control Bar:
  • Left: Cyan [ 🎙️ MIC ] (#00E5FF).
  • Center: High-Visibility Lime [ ▶️ RESUME ] (#C0FF00, matching the phone app's canonical Resume button color).
  • Right: Stop Red [ ⏹️ FINISH ] (#FF3B30) to complete the session and prompt report generation on the phone.

  • Validity Sentinels: Any unmeasured, missing, or calibrating metrics display *** rather than misleading $0$ values. TalkBack reads *** as "No data".


Haptic Vibration Patterns — Wrist Coaching

The watch delivers distinct vibration patterns so you can receive coaching without looking at a screen or wearing earphones.

Vibration Pattern Meaning
Single short pulse On-target cadence — pace keeper beat
Double burst Cadence has dropped below target range
Long ramped vibration Ground contact lost or significant asymmetry detected
Single long vibration Hazard successfully logged
Double short vibration Hazard logging failed — GPS location unavailable

Logging Hazards from Your Wrist

You can place a geo-tagged spatial hazard marker without touching your phone.

Screen Button

Tap the orange [ ⚠️ HAZ ] button on the right side of the active bottom control bar. The watch sends a hazard log request to the phone, which tags the marker with current GPS coordinates and timestamp. You will feel a single long vibration and hear the phone announce "Hazard marked" if successful. If GPS is unavailable, you will feel a double short vibration and hear "Cannot mark hazard, GPS location unavailable."

Wrist Voice Command

Tap the cyan [ 🎙️ MIC ] button on the bottom control bar (or double-tap the crown, depending on your watch model). Speak a short hazard description such as "icy patch" or "pothole near curb." The Wear OS speech recognizer transcribes your voice and sends both the text description and GPS coordinates to the phone. You receive the same vibration and audio confirmation as the button method. Wear OS speech recognition has an 8-second timeout.


Arm Swing and Heart Rate Telemetry

While a session is active, the watch continuously streams two types of data to the phone at 100 Hz.

Arm Swing (Upper-Body Kinematics)

The watch 6-axis IMU captures arm swing speed, wrist rotation angle, and cross-body symmetry. This feeds directly into the Gait DSP engine alongside shoe and sacrum sensors.

Automatic Left Wrist Fallback: If you do not have an external WT901 wrist sensor connected on the left side, the phone automatically uses the watch IMU as the Left Wrist sensor. No configuration is needed.

Heart Rate

The watch samples heart rate and Heart Rate Variability using the Android Health Services API. This appears in your session summary and cloud sync.

Battery-Efficient 100Hz Protobuf Streaming

The IMU samples at full speed (100Hz) and serializes the sensor events directly into our shared TelemetryChunk Protobuf format. Instead of expensive Bluetooth LE JSON payloads, it transmits these raw bytes efficiently over Android's ChannelClient to the phone, which are fed natively into the Rust DSP engine.


Assigning the Watch to Left or Right Wrist

By default the watch is treated as the Left Wrist sensor. If you wear your watch on your right wrist, open the External Sensors Hub on the phone and reassign the watch to Right Wrist. The change takes effect immediately at the start of the next processing frame.


Battery Level Monitoring

The watch uses zero CPU polling. A background Android BroadcastReceiver wakes only when the OS detects a 1 percent battery drop, then sends a lightweight update to the phone. The External Sensors Hub on the phone reflects the level immediately. A yellow warning banner appears when the watch battery drops below 30 percent.


Troubleshooting

Watch app does not open automatically Confirm both apps are installed with the same Google account. Confirm the watch is powered on and within range. If needed, open GaitPilot manually on the watch from the app drawer.

Watch shows disconnected in the Sensor Hub Toggle Bluetooth off and on again on the phone to force a Data Layer reconnect. If the problem persists, restart both devices and open GaitPilot on the phone first.

Wrist voice commands are not working Confirm the watch has microphone permission for GaitPilot in Wear OS settings. Speak within 8 seconds of the listening prompt — the session closes after the timeout.

Hazard confirmation vibration does not fire Confirm Do Not Disturb is off on the watch and that GaitPilot has vibration permissions in Wear OS settings.

Arm swing metrics appear on the wrong side Check the External Sensors Hub on the phone and confirm the watch is assigned to the correct wrist.


What the Watch Does Not Handle

To maximize smartwatch battery life and athletic focus, compute-heavy and high-drain operations remain centralized on the phone:

  • Audio Coaching & TTS: All real-time voice coaching announcements and metronome tones are spoken by the phone.
  • GPS & Distance Math: Continuous GPS radio polling and spatial hazard radar distance calculations are computed by the phone.
  • Heavy DSP Algorithms: Multi-axis sensor fusion, lifting/bent-knee penalty detection, and gait asymmetry math run on the phone.
  • Database & Cloud Sync: SQLite session storage, binary telemetry chunk serialization, and cloud uploads are handled by the phone.
  • (Note: Workout start, pause, resume, and finish controls ARE available directly on the watch and synchronize bidirectionally with the phone).

🛡️ Wear OS Guardian & Walker Safety Features

The Wear OS companion app serves as an immediate wrist fail-safe for the GaitPilot Guardian & Walker Safety Suite:

1. One-Tap Wrist Pre-Alarm Dismissal

  • When the phone detects prolonged inactivity or potential distress, the 30-second pre-alarm countdown begins.
  • The watch immediately vibrates with an urgent repeating pulse pattern and renders a full-screen high-contrast card: "I'M OKAY (CANCEL)".
  • Zero Phone Handling: Simply tap your watch screen once. The pre-alarm on the phone is cancelled immediately and the watchdog timers reset.

2. Gated Wrist Emergency SOS Beacon

  • Dynamic Safety Gating: The dedicated [ 🚨 SOS ] button at the top arch of the watch face is conditionally rendered only when the walker has enabled Guardian & Safety Alerts in phone Settings AND configured a valid emergency contact phone number.
  • False Security Protection: If safety alerts are disabled or no emergency contact phone is configured, the SOS button is replaced with clean vertical spacing. This ensures walkers are never misled into assuming an alert will dispatch when no contact exists.
  • Instant Dispatch: Tapping the active SOS button dispatches safety_sos over the Data Layer, instructing the phone to immediately send an emergency SMS with clickable Google Maps coordinates to your configured contact.

3. Automatic Optical PPG Heart Rate Fallback

  • If you are not wearing an external Whoop band or chest strap, the watch's built-in optical heart rate sensor automatically streams your pulse to the phone.
  • This ensures that cardiac distress monitoring ($>165\text{ BPM}$ under immobility) and metabolic calorie calculations continue seamlessly during your walk.

4. Off-Wrist Sensor Protection & Battery Conservation

  • Hardware Contact Detection: When you remove the watch from your wrist, the optical sensor reports SENSOR_STATUS_NO_CONTACT (-1) over the Wearable Data Layer.
  • Auto-Dimming & Watchdog Disarm: The watch automatically turns off the green optical PPG LEDs to conserve battery, and the phone displays *** (Off Wrist) while immediately disarming the cardiac safety watchdog. Setting the watch on a charging dock or nightstand will never trigger an emergency alarm.

5. Standalone Fallback Mode & Seamless Reconnection

  • Autonomous Resilience: If your phone runs out of battery, drops out of Bluetooth range, or if you launch the watch app independently, the watch never crashes. It seamlessly enters standalone fallback mode, displaying local elapsed time, live optical heart rate, and responsive local controls.
  • Automatic Reconnection: As soon as Bluetooth or Wi-Fi connectivity to the phone is restored, the 1-second Data Layer heartbeat automatically re-synchronizes workout state, cadence, and contact status without requiring manual app restarts.