All work

Come Here · Assistive autonomy

Say “come here” and a physical GO2 turns toward your voice, finds you, walks over and sits.

An onboard ROS 2 pipeline on the robot's Jetson Orin NX: wake-phrase detection, the microphone array's direction of arrival, a closed-loop turn on odometry, person acquisition gated to the voice direction, an align-then-walk approach and a sit, all behind a motion gate and a latching e-stop. Four of seven documented live attempts completed the full behavior, including one blind trial.

Repository Demo video

The second of three runs in the demo video, filmed by the caller: one take on the physical GO2, with stretches played at 2x and labeled.

At a glance

12.8 s
one documented blind trial (caller position undisclosed): wake detection to seated
Status
Live on the physical GO2: 4 complete runs among 7 documented attempts
Platform
Unitree GO2 with its onboard Jetson Orin NX; no internet or cloud services at runtime
Stack
ROS 2 Humble, faster-whisper, YOLO11n, ReSpeaker mic array, odometry
Evidence
Per-trial table in the repository README, failures included

Why it matters

An assistive robot is only useful if it can come to the person who needs it, on a spoken word, without a phone, a map or an internet connection. Come Here is that behavior end to end on real hardware: from a spoken command to a robot sitting beside the caller, with the whole loop running on the robot itself.

It is the behavior the reliability work on this site (HELIX, Phoenix, BlackBoxRS) is meant to make trustworthy.

What I built

Hear
A far-field front end on the ReSpeaker array, an energy gate with pre-roll, and faster-whisper base.en on the Jetson CPU, matched against “come here”. Offline, on 57 “come here” utterances recorded on 2026-09-14, the matcher detects 49 with no false wakes on 20 negative utterances; it was tuned on the same recordings.
Localize
One bearing per matched utterance from the array's built-in direction of arrival. Without a confident bearing the robot does not walk.
Turn
Turns in place until odometry yaw has moved by that bearing: a closed-loop turn, not a timed one.
Acquire
YOLO11n person detection, only inside a ±35° gate around the voice bearing; two consecutive fresh detections before any motion. If nobody is in view it asks “Where are you?” once and turns toward the next call.
Approach
Align in place (yaw only), then walk straight (no yaw), with hysteresis and minimum phase times.
Stop
When the person's bounding box fills 82% of the frame height, with backstops for a lost caller, a dead camera, a 20 s limit and a distance budget.
Sit
A final align, one second standing still, sit, and a spoken “Made it.”

Design decisions

The GO2's stock gait cannot combine forward motion and yaw cleanly, so the controller alternates yaw-only align and straight walk phases with hysteresis instead of steering while walking. It stops on the person's bounding-box height, because LiDAR and pinhole distance read long at close range.

Safety is a separate, testable layer. A pure motion gate rejects malformed, non-finite or absurd commands and combined forward-plus-yaw commands, clamps the rest, and stops the robot half a second after commands stop arriving. The e-stop latches in both the bridge and the state machine; releasing it does not resume motion. The bridge refuses to move unless the robot reports the expected motion mode (mcf), and on shutdown it publishes a stop before the process exits. Unit and process tests cover each of these, and the e-stop latch has also fired on the robot during the live sessions.

Hardware evidence

Seven documented live attempts are listed below, including failures.

2026-09-14
Success
Caller at the robot's left, about 90°. Turn, one search turn, align, walk, stop, sit.
2026-09-15
Failed
Caller at the right. The bearing read +141° and nobody was acquired.
2026-09-15
Success
Caller at the right. Turn, walk, stop, sit.
2026-09-15
Success
Blind trial, caller position undisclosed. Turn, align, walk, stop, sit, seated about 12.8 s after wake-phrase detection.
2026-09-18
Failed
Caller at the left. The bearing read +2° (straight ahead), so no turn and nobody in view; the robot did not move.
2026-09-18
Success
Caller at the right. Turn, one align turn, walk, stop at 0.83 of frame height, sit, about 12.5 s after wake detection.
2026-09-23
Approach completed; sit-complete log not captured
First call read straight ahead and nobody was in view. It asked “Where are you?”, heard a second call, acquired the caller and stopped on the bounding box.

Boot service. On 2026-09-18 a systemd service started the live stack by itself after a cold boot of the Jetson, after one automatic retry. Both 2026-09-18 trials and the 2026-09-23 trial ran on a stack started that way.

What failed

Both failures came from the voice bearing: it read +141° for a caller at the robot’s right, and +2° for a caller at its left, so the robot turned the wrong way or not at all. The “Where are you?” relisten step was added after the second failure and worked in its one live run.

The 2026-09-23 log did not capture the sit completing or a trial ID. Trials before that date ran a checkout with uncommitted changes; the 2026-09-23 run used main at f7192c9.