Unitree G1: Known Problems & Fixes

Last updated

Warranty & Safety Notice: Warranty starts on receipt. Owner ships the unit to Unitree at own cost for diagnosis. Warranty is VOIDED by opening the shell, disassembly, or unauthorized modification. No consumer spare-parts channel; resellers provide first-level support only. G1 base ~8 mo; G1 EDU ~18 mo (EU 24 mo). Sources: https://www.unitree.com/mobile/terms/policy https://blog.robozaps.com/b/unitree-g1-review Workarounds listed below are community-sourced and provided without guarantee.

Every entry links to its source. How we source →

Jump to an issue (41)
Jump to an error code (48)
motor/actuator Blocks Use Workaround Exists

Leg/hip/ankle motors overheat and force a shutdown

Overheating under third-party controllers is usually a gain-tuning problem; lower Kp/Kd or use the stock controller before suspecting the actuator.

Symptom
Ankle-roll motors reach ~90°C within 5-10 min even near-idle; the left hip joint overheats after ~30 min of teleoperation and triggers an automatic system shutdown.
Affected
Reported under third-party whole-body controllers (NVIDIA GEAR-SONIC / Isaac-GR00T N1.7 on Jetson Orin NX). Unitree's stock controller keeps ankles at 30-45°C.
Fix / Workaround
Overheating is tied to aggressive controller gains, not always a hardware fault. Reduce Kp/Kd gains, adjust standing posture to lower static load, and prefer Unitree's stock controller for extended runs. If temps spike on the stock controller too, stop use and inspect — a genuinely failing actuator needs service.
motor/actuator Degrades Use Open / Unresolved

Shoulder/arm motor overheats and goes limp with Inspire dexterous hand

No vendor fix; treat it as a payload-compensation and gain-tuning problem for the added hand mass before assuming hardware failure.

Symptom
The shoulder-pitch arm motor overheats after short operation and the arm loses responsiveness when paired with the Inspire FTP dexterous hand.
Affected
G1 ARM7 + Inspire FTP hand, ROS2 Humble; users running PD gains kp=40 / kd=1.5.
Fix / Workaround
No vendor fix documented. Community direction: the arm needs gravity/payload compensation for the added hand mass and lower torque limits; owners are still seeking Unitree's recommended PD gains for this pairing. Treat as a tuning problem before assuming hardware failure.
firmware/update Annoyance Workaround Exists

Robot ignores SDK commands (stuck in damp / develop mode)

Press L1+A then L1+UP on the remote to leave damp mode before sending SDK commands, and don't stay in develop mode.

Symptom
G1 boots into 'damp mode' and ignores SDK commands; entering 'develop mode' also disables SDK responsiveness, so users conclude the SDK is broken.
Affected
General G1 firmware behavior.
Fix / Workaround
Activate the robot with the remote before sending SDK commands: press L1+A, then L1+UP to leave damp mode. Do not sit in develop mode if you need SDK control. If you entered develop mode, renew the ai-sport client via the app.
SDK/software Degrades Use Fixed by Vendor

WaveHand / ShakeHand fail from SDK (error 3203 'API not implemented')

Update firmware to v1.3.0 or later and activate the robot out of damp mode first.

Symptom
WaveHand and ShakeHand arm actions work from the remote but fail from Python/C++/ROS2; ROS2 returns error 3203 'API not implemented on server'.
Affected
Firmware before v1.3.0.
Fix / Workaround
Update robot firmware to v1.3.0 or later. Also make sure the robot is activated out of damp mode (L1+A, L1+UP) before issuing the commands.
firmware/update Blocks Use Open / Unresolved

Code and official examples break after firmware 1.4.0 ('ClientStub send request error')

No vendor fix; check activation and that the SDK version matches the firmware, and note that some users rolled back from 1.4.0.

Symptom
Previously working Python code and official SDK examples stop working after updating to firmware 1.4.0; repeated '[ClientStub] send request error'. Related: GetVolume returns error 3102, high-level/audio examples fail.
Affected
Firmware 1.4.0.
Fix / Workaround
No vendor fix documented. Confirm the robot is activated (out of damp mode), verify the SDK version matches the firmware, and if you upgraded specifically for a feature, be aware some users rolled back. Watch Unitree release notes for a follow-up patch.
hand/gripper Blocks Use Workaround Exists

Inspire hand won't open serial port / is unreachable at its IP

Serial and FTP Inspire hands use different control methods; match the code to your variant and confirm the hand answers on 192.168.123.x.

Symptom
'Open Serial port /dev/ttyUSB0 failed' — the Inspire hand can't be controlled; or the FTP hand is unreachable at 192.168.123.211.
Affected
G1 with Inspire hand (DFX serial vs FTP modbus-TCP variants).
Fix / Workaround
The control method depends on the hand variant. FTP Inspire hands use Modbus TCP, not a serial port — using serial code on an FTP hand fails by design. Confirm which variant you have and use the matching control method; verify the hand's IP is reachable on the 192.168.123.x network.
hand/gripper Degrades Use Open / Unresolved

Dex3-1 hand thumb barely moves during teleoperation

No fix documented; hardware self-checks pass, so report the driver version to Unitree as a teleop-to-driver mapping mismatch.

Symptom
In teleop the thumb only makes 3-4° micro-movements versus full range in simulation; thumb-to-index pinch bottoms out at ~5cm, too coarse for fine manipulation.
Affected
G1 software V1.4.7 + Dex3-1 hand.
Fix / Workaround
No fix documented. Power-up self-check shows joints normal and simulation works, which points to a command-mapping mismatch between teleop and the hand driver rather than hardware. Report the driver version to Unitree.
network/connectivity Degrades Use Open / Unresolved

Teleoperation latency grows to ~2.5s after 1-2 hours

No fix documented; the network is not the cause, so restart the teleop stack between long sessions.

Symptom
Arm and camera latency climbs to ~2.5s after prolonged teleop; arm prep pose takes ~4s instead of ~2s, eventually appearing immediately on startup.
Affected
xr_teleoperate v1.3 and v1.5.
Fix / Workaround
No fix documented. Upgrading to a gigabit router and WiFi 6 did not help, and simulation mode is unaffected — suggesting an onboard buffering/accumulation issue rather than the network. Restart the teleop stack between long sessions as a stopgap.
network/connectivity Degrades Use Workaround Exists

Policy deployment over WiFi hangs on 'Waiting for connection rt/lowstate'

Use a wired connection and pass the interface name explicitly; DDS multicast is unreliable over Wi-Fi.

Symptom
Deploying over WiFi hangs on 'Waiting for connection rt/lowstate' even though SSH to the robot works; wired ethernet works fine.
Affected
G1, DDS-based control.
Fix / Workaround
Use a wired connection and specify the interface, e.g. ./g1_ctrl --network enx701988512412. DDS multicast for lowstate does not traverse the wireless interface reliably.
SDK/software Blocks Use Workaround Exists

CycloneDDS version mismatch crashes G1 sim init

Don't source the ROS setup script alongside unitree_sdk2, or pin CycloneDDS to one matching version.

Symptom
DDS assertion failure / CycloneDDS writer error when initializing the G1 simulation; it won't start.
Affected
Ubuntu 22.04, ROS2 Humble; system CycloneDDS 0.10.5 vs Python CycloneDDS 0.10.2.
Fix / Workaround
Don't source the ROS setup script (its DDS libs differ from unitree_sdk2's). Verify which .so is linked at compile time. Alternatives: build CycloneDDS 0.10.2 from source, patch unitree-sdk2py for 0.10.5, or develop on Ubuntu 20.04.
SDK/software Blocks Use Workaround Exists

'Unmatched robot type' on Ethernet connect (23 vs 29 DOF)

Set the controller's DOF config to match the robot and rebuild unitree_sdk2 cleanly to remove conflicting installs.

Symptom
The controller connects over Ethernet then immediately fails with 'Unmatched robot type' during sim-to-real deployment.
Affected
G1 23-DOF and 29-DOF variants (incl. locked-waist/dummy-hands configs).
Fix / Workaround
The robot's DOF/config must match the controller's expected type. Set the correct DOF in your config, and check for conflicting SDK installs in /usr/local vs your project path — rebuilding unitree_sdk2 cleanly (deploy build with -DBUILD_EXAMPLES=OFF, sim build with a separate CMAKE_INSTALL_PREFIX) resolves the related unresponsive-velocity-mode case.
SDK/software Degrades Use Open / Unresolved

Moving arms via SDK while walking destabilizes balance

No fix documented; avoid large arm motions while walking until a firmware update resolves the controller conflict.

Symptom
Controlling the arms via SDK while walking (gamepad) makes the robot bend forward or lose balance; raising arms while walking produces an unstable, heavy gait.
Affected
G1 with 3-DOF waist.
Fix / Workaround
No fix documented. Zeroing waist axes, holding initial values, and leaving them untouched were all tried without success — the arm SDK controller and the locomotion balance controller conflict. Avoid large arm motions during locomotion until a firmware update addresses it.
SDK/software Degrades Use Workaround Exists

Simulated G1 collapses with no default stabilization

Enable the elastic band in unitree_mujoco's config; the factory balance controller isn't available in sim.

Symptom
In MuJoCo simulation the G1 has no default stabilization and falls over when run without controls.
Affected
unitree_mujoco.
Fix / Workaround
Enable the elastic band: set enable_elastic_band: 1 in unitree_mujoco/simulate/config.yaml (or ENABLE_ELASTIC_BAND=True). Note the factory motion controller isn't available in sim, and the band can be awkward to disable when switching to joystick control.
battery/power Annoyance Unclear

Short battery runtime (~2 hours)

Not a fault: budget about two hours of active use and keep charged spare packs.

Symptom
The 9,000 mAh battery gives only about 2 hours per charge, and drains faster under dynamic movement.
Affected
Base model, 9,000 mAh pack.
Fix / Workaround
This is a capacity limitation, not a fault. Keep charged spare batteries for hot-swapping between sessions; budget runtime around ~2 hours of active use.
other Blocks Use Unclear

Base G1 can't be programmed — no SDK

Not a fault: SDK access requires the G1 EDU tier, so confirm the tier before buying if you intend to develop.

Symptom
Buyers of the ~$13,500 base G1 discover it's a demo/showcase unit with no SDK and cannot be programmed.
Affected
G1 base (23 DOF) vs G1 EDU (up to 43 DOF).
Fix / Workaround
This is a product-tier limitation. SDK access, higher torque, and more DOF require the G1 EDU / developer platform (~$44k-$74k). Confirm the tier before purchase if you intend to develop.
mechanical/structural Blocks Use Workaround Exists

Solid red LED / physical fault checklist (falls, cables, battery)

Inspect for impact damage, reseat cables and check the battery, then run app diagnostics and record video before contacting support — don't open the shell.

Symptom
Solid red LED indicating a software/hardware error; plus field faults — cracks/dents from falls, sensor degradation from dust or misalignment, unresponsive components from loose/frayed cables, battery swelling or deformation.
Affected
General.
Fix / Workaround
Visually inspect for impact damage; clean sensors and confirm mounting; reseat cables and connectors; verify battery seating and replace if swollen or leaking. On a solid red LED, run the mobile-app diagnostics and record a video of any intermittent fault before contacting support. Note: opening the shell voids the warranty.
security/privacy Blocks Use Open / Unresolved

Critical security: BLE command injection with hardcoded keys (UniPwn)

No confirmed vendor patch documented; isolate the robot on a segmented network and block unexpected outbound traffic.

Symptom
A command-injection flaw in the BLE Wi-Fi provisioning, using hardcoded AES keys shared across all units, allows root access and is potentially wormable. Separate research found telemetry transmitted to external servers every ~5 minutes.
Affected
G1 (researchers indicate Go2/H1 share code paths). Public 'UniPwn' exploit released.
Fix / Workaround
No confirmed vendor patch documented at time of writing. Mitigate at the network level: isolate the robot on a segmented/firewalled network, restrict access to its internal interface (192.168.123.0/24), and block unexpected outbound traffic. Watch for a Unitree firmware advisory.
other Annoyance Unclear

Viral demo skills are choreographed, not autonomous

Not a fault: out-of-the-box motions are pre-programmed, and autonomy requires development on the EDU platform.

Symptom
Kung-fu and backflip clips are trained showcases; the robot has no household autonomy out of the box and fails simple tasks like opening a door.
Affected
General.
Fix / Workaround
Expectation-setting, not a fault. Autonomous task performance requires significant development on the EDU platform; the base experience is remote/pre-programmed motions.
SDK/software Blocks Use Fixed by Vendor

G1 23-DOF robot moves erratically in MuJoCo Sim2Sim

Fixed by vendor: pull the updated unitree_rl_lab, which now includes 23-DOF deploy code.

Symptom
When running Sim2Sim in MuJoCo with a policy trained in Isaac Lab for the G1 23-DOF configuration, the robot fails to walk properly and moves erratically. The suspected cause reported in the thread is that motor IDs were not adapted for the 23-DOF version.
Fix / Workaround
Vendor (Agnel-Wang) added 23-DOF deploy code to the repository; reporter confirmed successful Sim2Real after using the updated code.
network/connectivity Blocks Use Open / Unresolved

G1_29_ArmController repeatedly prints 'Waiting to subscribe dds' and robot app reports firmware communication fault

Verify DDS connectivity with cyclonedds ps and subscribe rt/lowstate; if it still fails, open a Unitree support ticket.

Symptom
When running the teleoperation script, the controller loops indefinitely printing '[G1_29_ArmController] Waiting to subscribe dds...' and the mobile app reports '底层固件通信故障' (underlying firmware communication fault). DDS communication between the host device and the robot is not established despite the devices being on the same network.
Fix / Workaround
Maintainer suggests verifying network connectivity with 'cyclonedds ps' and 'cyclonedds subscribe rt/lowstate'; if unresolved, submit a support ticket. One commenter reported that low-level examples worked but high-level arm examples produced no robot motion and send request errors.
network/connectivity Blocks Use Open / Unresolved

Apple Vision Pro WebSocket immediately disconnects on every page load in teleoperation setup

No confirmed fix; taking off the headset or fully closing Safari for a few seconds gives a temporarily stable connection.

Symptom
When accessing the teleoperation server from Apple Vision Pro Safari, the WebSocket connects but immediately disconnects on every page load, producing 'AssertionError: Websocket session is missing.' on the server. Refreshing the page repeats the connect/disconnect cycle; the only workarounds found are removing the AVP headset or fully closing Safari and waiting a few seconds.
Affected
vuer 0.0.60, televuer 4.0.0, xr_teleoperate commit 9fadc51, visionOS latest
Fix / Workaround
Temporarily stable connection achieved by taking off the AVP or closing Safari entirely for a few seconds. Maintainer suggested trying 'https://vuer.ai/?ws=wss://host ip:8012' but no confirmed fix was provided.
SDK/software Blocks Use Open / Unresolved

WBC policy streams values but real G1 does not move after hand calibration

No confirmed fix.

Symptom
Via the community GR00T-WholeBodyControl driver: after the robot enters debug mode and the hands calibrate successfully, the G1 does not move at all despite the terminal showing the policy streaming values to the robot. No errors are reported and the parallel simulation runs correctly.
Fix / Workaround
no confirmed fix
SDK/software Degrades Use Open / Unresolved

Vuer image feed on Quest 3 freezes on first frame during real-robot teleoperation

Try the teleimager (WebRTC) branch; note it does not support simulation deployment.

Symptom
When running the teleoperation pipeline with a Quest 3 headset, the Vuer display shows only the first captured frame and then freezes, while the image client on the PC confirms the live camera feed is working correctly. The issue was reproduced both in the main branch and with the teleimager branch.
Affected
vuer 0.0.67, xr_teleoperate (controller mode, G1_29)
Fix / Workaround
Maintainer suggested switching to the teleimager branch (WebRTC streaming); reporter applied the branch but noted it does not support simulation deployment. No fully confirmed fix for the frozen frame issue.
network/connectivity Blocks Use Open / Unresolved

Teleoperation page goes black and WebSocket disconnects when entering VR mode on Apple Vision Pro

No confirmed fix; use 5 GHz Wi-Fi, keep ping under 50 ms, and try vuer 0.0.32rc7.

Symptom
After the Vision Pro successfully displays the binocular camera feed, clicking 'virtual reality' and granting hand-tracking permission causes the display to go black and the WebSocket to disconnect immediately, raising 'AssertionError: Websocket session is missing.' The error traceback originates in vuer/server.py.
Fix / Workaround
Maintainer suggested using only 5 GHz Wi-Fi, monitoring ping latency to the AVP (should be under 50 ms), testing with the televuer script directly, and trying vuer version 0.0.32rc7. No confirmed fix reported.
SDK/software Blocks Use Workaround Exists

G1 does not walk when locomotion command issued via teleoperation controller; joystick input ignored

Set LOCO_SERVICE_NAME to 'sport' for ai_sport 8.2.0.0 or later ('loco' before), and specify the correct network interface.

Symptom
When using the controller mode of the teleoperation script with the --motion flag, arm control works correctly but the robot does not respond to joystick commands for walking. Even after exiting the program, the physical remote control also cannot make the robot walk, though arm gestures continue to function normally.
Affected
ai_sport version unspecified; xr_teleoperate, G1_29
Fix / Workaround
Maintainer identified that the ai_sport locomotion service name changed at version 8.2.0.0 (LOCO_SERVICE_NAME must be 'sport' for >=8.2.0.0, 'loco' for earlier). Also advised specifying the correct network interface name in the code if running on a multi-NIC device. Maintainer confirmed locomotion worked on their robot with version 8.4.0.0 after a git pull update.
Show all 41 issues
SDK/software Blocks Use Open / Unresolved

G1 joints do not move after teleoperation program starts and 'r' is pressed

No confirmed fix.

Symptom
The teleoperation program starts without errors, DDS appears to connect, and the AVP displays the live camera feed with arm tracking, but the G1 robot does not move when the program is running and after pressing 'r' to start. Joint position output is absent from the log, unlike expected behaviour. Entering debug mode from the program is reported as inconsistent.
Affected
G1 29-DOF with Inspire dftp hands, AVP
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Open / Unresolved

VR headset shows only blue grid, robot not visible in XR teleoperation sim

No confirmed fix.

Symptom
When running XR teleoperation in simulation with a Meta Quest 3, the user successfully enters VR mode but sees only blue grids instead of the robot. The simulation terminal also shows '[DDSManager] object g1 not found' and 'g1_robot_dds is not initialized'.
Affected
unitree_sim_isaaclab with Isaac-PickPlace-Cylinder-G129-Dex3-Joint task; xr_teleoperate teleop_hand_and_arm.py; Meta Quest 3
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Workaround Exists

G1 sim2sim policy causes robot to drift left and shake arms uncontrollably in MuJoCo

Increase arm and wrist armature in g1_29dof.xml to reduce shaking; the drift itself has no confirmed fix.

Symptom
When deploying a trained RL policy (or the provided v0 policy) from unitree_rl_lab into MuJoCo via simulate_python, the G1 robot drifts to the left side, shakes its arms with high frequency and low amplitude, and is nearly impossible to control with the joystick. The robot also jitters immediately after pressing the movement activation button sequence.
Affected
unitree_rl_lab (latest); Isaac Sim + Isaac Lab; unitree_mujoco with G1 29dof; simulate_python (not simulate with C++)
Fix / Workaround
Community suggestion: increase the arm and wrist armature value in the MuJoCo g1_29dof.xml to reduce arm shaking. No confirmed fix for the overall drift/instability.
SDK/software Blocks Use Workaround Exists

RuntimeError 'list index out of range' in unitree_mujoco when running G1 with hand configuration

Use scene_29dof.xml instead of the with-hand scene, and set ROBOT in config.py to exactly 'g1'.

Symptom
Running unitree_mujoco.py for G1 (or H1 with Inspire hands) raises '[RecurrentThread] target func raise exception: name=IndexError, args=("list index out of range",)' at runtime. The error occurs when attempting to simulate the robot with hand attachments.
Affected
unitree_mujoco; G1 with hand (scene_29dof_with_hand.xml); H1 with Inspire hands
Fix / Workaround
Community workaround: use scene_29dof.xml instead of scene_29dof_with_hand.xml. Separately, ensure the ROBOT name in config.py is exactly one of the supported names (e.g. 'g1') and not a variant like 'g1_23dof'.
SDK/software Blocks Use Open / Unresolved

High-level SDK commands return 'send request error' on G1; low-level commands work

No confirmed fix.

Symptom
When running high-level SDK commands (e.g. g1_loco_client_example.py), the client prints '[ClientStub] send request error. id: <id>' and the command is not executed. Low-level scripts (g1_low_level_example.py) work correctly.
Affected
unitree_sdk2_python; G1 robot; g1_loco_client_example.py high-level commands
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Workaround Exists

WebSocket disconnects immediately when entering VR mode on Meta Quest 3 with hand tracking input

Downgrade xr_teleoperate to v1.0, switch to controller input mode, or use the Wolvic browser.

Symptom
When using xr_teleoperate with a Meta Quest 3, the WebSocket connection to the Vuer page on port 8012 drops immediately upon clicking the Virtual Reality button, printing 'websocket is now disconnected' and 'AssertionError: Websocket session is missing.' The issue is specific to hand tracking input mode; switching to controller input mode keeps the connection active.
Affected
xr_teleoperate v1.5; vuer 0.0.60; aiohttp 3.10.5; Meta Quest 3 built-in browser; Ubuntu host; Isaac Sim 5.1 + unitree_sim_isaaclab; G1_29 + Inspire
Fix / Workaround
Community workaround: downgrade xr_teleoperate to v1.0 resolves the disconnect. Alternatively, switching to --input-mode=controller keeps the WebSocket connected. Using the Wolvic browser instead of the Meta Quest default browser also prevents the WebSocket disconnect, though camera streaming issues remain.
SDK/software Blocks Use Open / Unresolved

Teleoperation VR page unreachable via local IP; WebSocket drops on entering VR mode

Include the host IP in the certificate SAN and try private browsing and pinned vuer/televuer versions; no vendor fix.

Symptom
When accessing the teleoperation interface via the local IP address (https://<host-ip>:8012?ws=wss://<host-ip>:8012), the page either fails to load or shows a black screen. On entering VR/pass-through (WebXR mode), the WebSocket drops and the robot stops receiving tracking data, with the server reporting 'Websocket session is missing' and occasional aiohttp 'resume_writing() AssertionError'.
Affected
vuer 0.0.60, televuer 4.0.0; hardware: Unitree G1 29-DoF EDU with Inspire RH56DFTP, Meta Quest 3 and Apple Vision Pro (visionOS 26.4)
Fix / Workaround
Maintainer suggests verifying that the host IP is included in the certificate's SAN field, using incognito/private browsing, and trying version-pinned vuer/televuer combinations. A community contributor identified that Quest browser's RTCPeerConnection.createOffer() never resolves and proposed a server-initiated WebRTC flow as a workaround, but this has not been officially upstreamed. No confirmed fix from vendor.
SDK/software Blocks Use Workaround Exists

Teleoperation program exits automatically shortly after robot raises arms when Inspire FTP hand is enabled

Run without --ee=inspire_ftp to operate the arms alone; a single defective hand breaks the paired end-effector code.

Symptom
When launching teleop_hand_and_arm.py with the Inspire FTP dexterous hand enabled (--ee=inspire_ftp), the robot raises both arms slightly and then the program terminates automatically, dropping the arms. The log shows the image client closes unexpectedly and the program exits without a clear error message.
Affected
xr_teleoperate; hardware: Unitree G1 29-DoF with Inspire FTP dexterous hands
Fix / Workaround
Workaround confirmed by user: run without the --ee=inspire_ftp flag (i.e., without activating the FTP dexterous hands) to operate the arms alone. Maintainer noted all end-effector code is written for a left-and-right pair, so a single defective hand can break things. User patched the Inspire_Controller_FTP class to handle single-hand operation. Maintainer also suggested trying the latest code version.
hand/gripper Blocks Use Fixed by Vendor

Both Inspire dexterous hands mirror only the right hand's movement due to serial port misconfiguration

Fixed by vendor: initialise two separate serial ports in inspire_ctrl.cpp and bind each hand to its own port.

Symptom
During teleoperation with two Inspire dexterous hands, both hands follow only the movement of the right hand. The root cause identified in the thread is that the example code sends commands for both hands to the same serial port.
Affected
Unitree G1 with Inspire DFX / RH56DFTP dexterous hands; example code inspire_ctrl.cpp from vendor example package
Fix / Workaround
Community-identified fix confirmed by maintainer: modify inspire_ctrl.cpp to initialize two separate serial ports (serial1 = /dev/ttyUSB1, serial2 = /dev/ttyUSB2) and bind each hand to its respective port and ID. Vendor provided corrected inspire_ctrl.cpp code in the comments.
SDK/software Blocks Use Workaround Exists

unitree_mujoco simulator crashes with 'free(): invalid pointer' / 'Aborted (core dumped)' at runtime

Resolve the DDS library path conflict between ROS2 and unitree_sdk2; the joystick variant was fixed in commit 2f5459d.

Symptom
After launching the unitree_mujoco simulator binary, the program starts ('MuJoCo data is prepared') and then immediately crashes with 'free(): invalid pointer' and 'Aborted (core dumped)'. An earlier variant of the error was 'Joystick open failed'. Multiple users report this across MuJoCo versions 3.2.7 and 3.3.1.
Affected
unitree_mujoco; MuJoCo 3.2.7 and 3.3.1; Ubuntu 22.04 and Ubuntu 24.04 with ROS2 Jazzy
Fix / Workaround
One community user traced the crash on Ubuntu 24.04 / ROS2 Jazzy to a DDS library path conflict (ROS2 Jazzy's DDS libraries and unitree_sdk2-installed DDS libraries loaded simultaneously). Resolving the path conflict fixed the crash for that user. The joystick error was fixed in a specific commit (2f5459d). No single confirmed fix for all reported variants.
battery/power Blocks Use Open / Unresolved

G1 overheats and shuts down after a few minutes running sonic_release policy, causing falls

No confirmed fix.

Symptom
Via the community GR00T-WholeBodyControl driver: When deploying the sonic_release policy on a real 29-DoF G1 robot equipped with Dex3 hands, the robot issues an overheating warning after a few minutes even while standing idle, then Sonic shuts down automatically, causing the robot to fall multiple times.
Affected
Unitree G1 29-DoF EDU with Dex3 hands; GR00T-WholeBodyControl sonic_release checkpoint
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Open / Unresolved

WebSocket session drops and VR view goes black when entering Virtual Reality mode on Quest 3

No confirmed upstream fix; a server-initiated WebRTC flow is the proposed workaround.

Symptom
After successfully connecting Quest 3 to the teleoperation page (vuer interface loads but shows a black screen), clicking 'Virtual Reality' causes the WebSocket session to disconnect. The terminal shows the connection dropped. A community contributor traced this to a bug in Meta Quest 3's browser where RTCPeerConnection.createOffer() never resolves its Promise, breaking the default client-initiated WebRTC flow.
Affected
xr_teleoperate; hardware: G1-EDU 29-DoF with Dex3-1, Meta Quest 3
Fix / Workaround
Community contributor proposed reversing the WebRTC negotiation to a server-initiated flow (server creates offer, browser calls createAnswer()) as a workaround. No confirmed upstream fix.
network/connectivity Blocks Use Workaround Exists

DDS communication fails when host PC connects to G1 over Wi-Fi instead of Ethernet

Use a DDS forwarding proxy or mount a router on the G1's 192.168.123.x subnet; no single complete fix.

Symptom
Teleoperation works correctly when the laptop is connected to the robot via Ethernet cable, but fails with DDS errors when attempting to operate wirelessly over Wi-Fi. Additionally, when running everything on the robot's PC2 (Jetson), connection problems appear after approximately 10 minutes.
Affected
xr_teleoperate; hardware: Unitree G1 EDU with Inspire FTP hands and Apple Vision Pro
Fix / Workaround
Maintainer suggests using a DDS forwarding proxy at the application layer, or mounting a router to the back of the G1 (subnet 192.168.123.*/24) powered from the G1's power interface. No single confirmed complete fix.
motor/actuator Blocks Use Workaround Exists

G1 reports "Joint limit" / "Transient Over Voltage" after a firmware update (≥ 1.3.0)

Symptom
After updating firmware to 1.3.0 or later, the G1 throws joint-limit and transient-overvoltage faults that weren't present before. On a 29-DoF G1, unlocking the waist fixture (waist-lock switch turned off in the app) can trigger a joint-out-of-limit error.
Fix / Workaround
Cause: Firmware 1.3.0 tightened the joint-calibration tolerance. Calibration data that passed under older firmware no longer meets the stricter threshold, so it is flagged. On the 29-DoF model specifically, the two waist motors are the ones left uncalibrated against the new standard.

Re-run joint calibration against the new firmware. For a 29-DoF G1, fit the waist fixture so it cages the two waist motors during calibration, and make sure the waist-lock switch in the app is OFF while you calibrate. Follow Unitree's 29-DoF calibration procedure.

Transient Over Voltage (0x00002 / 0x02) and joint-limit faults appear in the G1 error-code table on this page.
network/connectivity Annoyance Workaround Exists

G1 Wi-Fi setup keeps failing

Symptom
Configuring the G1's network fails repeatedly during setup.
Fix / Workaround
Cause: A crowded RF environment. This is common at exhibitions and similar venues where wireless interference is heavy.

Move the G1 to a location with less wireless interference and retry the network configuration there.
other Annoyance Workaround Exists

Does the G1 need a separate docking station / compute dock?

Symptom
Unclear whether a G1 owner needs to add an external compute dock.
Fix / Workaround
No separate dock is required on the EDU version — its Jetson Orin NX compute module is built in.

Error codes

Codes and messages from Unitree Robotics’ published documentation, © Unitree Robotics, linked per row to the original page. ‘What to do’ is HumanoidApplications’ own summary of the manufacturer’s guidance, not the manufacturer’s text. Legal notice.

Abnormal Condition Description

Code Message What to do Source
self-testing-fails-after-startup-1 Self-testing fails after startup Start-up initialisation has failed. Work back through the manual's "Check before Power on" and "Preparation before Power on" steps, then power the robot up again while it is still suspended. fccid.io/2A5PE-YUSHU008/…
self-testing-fails-after-startup-2 Self-testing fails after startup The robot has braked into self-protection after a fall, which is the motors guarding the joints rather than a fault in itself. Deal with what caused the fall — too little floor friction, or how the robot was being driven — before running it again. fccid.io/2A5PE-YUSHU008/…
app-connection-abnormality App connection abnormality In AP direct mode, check the phone is joined to the hotspot the G1 itself emits, and that the hotspot name carries no spaces or special characters. Keep phone and robot close together, then restart both the robot and the app and connect again. fccid.io/2A5PE-YUSHU008/…
how-to-turn-off-the-robot-when-the-remote-control-module-fails How to turn off the robot when the remote control… With the remote out of action, the battery is the only way to shut down: short-press the battery power switch, then hold it for more than two seconds. Do it with the robot hung on its frame, feet off the ground, and at least two metres clear of obstacles, water and people. fccid.io/2A5PE-YUSHU008/…
the-robot-is-easy-to-fall-down-and-cannot-stand-when-powered-on The robot is easy to fall down and cannot stand… Restart the robot first. If it still cannot stay upright, joint recalibration is the manufacturer's remedy — but the G1 leaves the factory calibrated, so contact Unitree technical support before recalibrating anything. fccid.io/2A5PE-YUSHU008/…

Connecting to the Unitree Explore App

Code Message What to do Source
bluetooth-connection-error Bluetooth connection error Give the Unitree Explore app Bluetooth permission in your phone's app settings, and leave the phone's Bluetooth switched on for the whole connection process. fccid.io/2A5PE-YUSHU008/…

Total device status information

Code Message What to do Source
0x1 Upper control command error support.unitree.com/home/…
0x2 Lower layer feedback data timeout support.unitree.com/home/…
0x4 imu feedback data timeout support.unitree.com/home/…
0x8 Motor feedback data timeout support.unitree.com/home/…
0x10 Battery feedback data timeout support.unitree.com/home/…
0x20 Yushu entity remote control feedback data timeout support.unitree.com/home/…
0x40 Battery model error support.unitree.com/home/…
0x80 Soft-start error support.unitree.com/home/…
0x100 Motor state error support.unitree.com/home/…
0x200 motor overcurrent protection, trigger low limit protection. support.unitree.com/home/…
0x400 Motor undervoltage protection, trigger high limit protection support.unitree.com/home/…
0x800 Motor overcurrent protection, trigger high limit protection support.unitree.com/home/…
0x1000 Soft emergency stop switch is pressed support.unitree.com/home/…
0x2000 SN error support.unitree.com/home/…
0x4000 Upper model error support.unitree.com/home/…
0x8000 Lower model error support.unitree.com/home/…
0x10000 USB device error support.unitree.com/home/…
0x40000 Crotch IMU data timeout support.unitree.com/home/…
0x80000 Motherboard judgment battery undervoltage protection error support.unitree.com/home/…
Show all 48 error codes

Total device status information

Code Message What to do Source
0x100000 Motherboard judge motor undervoltage protection error support.unitree.com/home/…

Motor status information

Code Message What to do Source
0x1 Overcurrent support.unitree.com/home/…
0x2 Transient overvoltage support.unitree.com/home/…
0x4 Sustained overpressure support.unitree.com/home/…
0x8 Transient undervoltage support.unitree.com/home/…
0x10 Chip overheating support.unitree.com/home/…
0x20 MOS overheating/cooling support.unitree.com/home/…
0x40 MOS temperature anomaly support.unitree.com/home/…
0x80 Shell overheat/undercooling support.unitree.com/home/…
0x100 Shell temperature anomaly support.unitree.com/home/…
0x200 Winding overheating support.unitree.com/home/…
0x400 Rotor encoder 1 error support.unitree.com/home/…
0x800 Rotor encoder 2 error support.unitree.com/home/…
0x1000 Output encoder error support.unitree.com/home/…
0x2000 Calibration /BOOT data error support.unitree.com/home/…
0x4000 Abnormal reset support.unitree.com/home/…
0x8000 Motor locked, master authentication error support.unitree.com/home/…
0x10000 Chip validation error support.unitree.com/home/…
0x20000 Calibration mode warning support.unitree.com/home/…
0x40000 Communication verification error support.unitree.com/home/…
0x80000 driver version too low support.unitree.com/home/…
0x40000000 Motor determines that PC connection timeout support.unitree.com/home/…
0x80000000 PC interpretation, motor disconnection timeout support.unitree.com/home/…

Need professional help with your Unitree G1?

Join the repair waitlist and we’ll connect you with certified technicians and service partners.

Join the Repair Waitlist →