Unitree Explore App¶
Overview¶
The Unitree Explore app is used to control the G1, switch modes, view video, and perform firmware updates.
- Platform: iOS/iPadOS only (no Mac version; TestFlight beta is iOS-only)
- Bluetooth: Connects via BLE to the locomotion computer's integrated Bluetooth 5.2 (Rockchip RK3588, not the Jetson's)
- Wi-Fi: Connects to the locomotion computer's integrated WiFi 6 AP (wlan1, SSID "UnitreeG1", 192.168.12.0/24)
- Control protocol: WebRTC via
webrtc_bridgemodule on the locomotion computer. BLE is used for initial pairing and WiFi provisioning, then all ongoing control/video uses WiFi + WebRTC.
Connection Modes¶
The app supports three connection modes. The mode is selected during initial binding via the Unitree Explore app.
AP Mode — Direct Connection (default, working)¶
The RK3588 locomotion computer broadcasts a Wi-Fi hotspot on wlan1:
- SSID: Configurable during initial binding (likely defaults to "UnitreeG1" or "G1-XXXXXX")
- Subnet: 192.168.12.0/24, gateway 192.168.12.1
- No router or internet required
iPad/phone connects directly to this hotspot. The app communicates with the locomotion computer at 192.168.12.1 via WebRTC. This is the default out-of-box experience.
WiFi/STA Mode — Shared Network (provisioning broken)¶
In this mode, the app uses Bluetooth to send WiFi credentials (SSID + password) to the RK3588, which then joins that external WiFi network as a client on wlan0 (STA mode). The iPad also connects to the same WiFi network, and they communicate over the shared LAN.
The app discovers the robot via multicast using the robot's serial number (not mDNS). This mode may also require Unitree cloud registration — some Go2 users report WiFi mode gets stuck at "register to cloud."
Currently broken on our G1 — the Bluetooth provisioning flow fails, showing "Internet Disconnected" in Machine Inspection. Unknown whether this is a firmware bug or a cloud registration issue.
STA Sub-modes¶
The WebRTC connection protocol supports two STA variants:
- STA-L (Local): Robot and iPad on the same LAN. Discovery via multicast by serial number or direct IP.
- STA-T (Tunnel): Remote connection through Unitree's TURN server using cloud account credentials.
WG827 Router Workaround (untested)¶
Since the RK3588 is already on 192.168.123.0/24 via its wired eth0, connecting the iPad to the WG827 router's WiFi (same subnet) should allow the app to reach the robot in STA-L mode — bypassing both the broken WiFi provisioning and the slow Jetson hotspot. Full Gigabit wired backhaul to the RK3588.
Jetson WiFi Hotspot Workaround (working, slow)¶
We set up a hostapd AP on the Jetson ("UnitreeG1-Dev") bridged to 192.168.123.0/24. The iPad connects to this and can reach the locomotion computer at .161 on the same subnet. Basic control (walking, mode switching) works, but bandwidth is too low for video — the Jetson's Realtek WiFi is 2.4GHz 802.11n only. See Networking for setup.
Bluetooth (pairing only)¶
BLE connects to the RK3588's integrated Bluetooth 5.2. The robot doesn't advertise constantly — tap "Add Robot" in the app to trigger pairing mode. Bluetooth is used for initial device binding and WiFi provisioning, not for ongoing control. All ongoing control/video uses WiFi + WebRTC.
Service Status¶
From the app's "Automatic Machine Inspection" and "Service Status" screens:
Functional Services¶
bashrunner, basic_service, battery_guard, log_system, master_service, net_switcher, robot_state, robot_type_service, state_estimator, unitree_slam, vui_service
Abnormal Services¶
| Service | Notes |
|---|---|
| ai_sport / 8.4.2.222 | Main locomotion controller |
| motion_switcher / 1.0.0.1 | Mode switching |
| webrtc_bridge / 1.0.8.4 | Video streaming |
| webrtc_signal_server | Video streaming |
| webrtc_multicast_responder | Video streaming |
| ros_bridge / 1.0.0.4 | ROS communication (may need Jetson) |
| lidar_driver / 1.0.0.5 | Livox Mid-360 lidar |
| dex3_service_l / dex3_service_r | Dexterous hand services (may not be installed) |
| audio_player_service | Audio |
| chat_go / 1.9.1.62 | Voice/chat |
| g1_arm_example / 2.0.0.11 | Arm demo |
Video feed broken
App-side WebRTC is broken: webrtc_bridge, webrtc_signal_server, and webrtc_multicast_responder are abnormal. This breaks Unitree Explore video regardless of Wi-Fi speed.
Direct Jetson camera workaround
The Jetson video_hub_pc4 service is working. It reads /dev/video4 and publishes H.264/RTP multicast to 230.1.1.1:1720 on eth0. From the Mac, bridge it over SSH and play it with ffplay:
sshpass -p '123' ssh \
-o StrictHostKeyChecking=no \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
unitree@192.168.123.164 \
"gst-launch-1.0 -q udpsrc multicast-group=230.1.1.1 port=1720 auto-multicast=true caps='application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,payload=(int)96' ! rtph264depay ! h264parse config-interval=-1 ! mpegtsmux ! fdsink fd=1" |
ffplay -window_title g1-camera-live \
-fflags nobuffer -flags low_delay -framedrop \
-probesize 32768 -loglevel warning \
-f mpegts -i -
This bypasses the robot app's WebRTC stack. It works over the wireless-only routed setup because the Mac can SSH to the Jetson at 192.168.123.164.
App Features¶
| Feature | Status |
|---|---|
| Bluetooth pairing | Working |
| Mode switching (damping, free motor) | Previously working via Jetson hotspot, untested via built-in AP |
| Joystick control | Previously working via Jetson hotspot, untested via built-in AP |
| Video feed | App WebRTC broken; direct Jetson video_hub_pc4 stream works |
| Firmware updates (OTA) | Needs internet on robot |
| Machine Inspection | Working (shows network, USB, Bluetooth status) |
| Service Status | Working (shows all service health) |
| Wi-Fi provisioning | Broken (fails to configure wlan0 client connection) |