Unitree Go2: Known Problems & Fixes

Last updated

31 known issues
Warranty & Safety Notice: Unitree covers the Go2 Air for 6 months and the Go2 Pro / X / EDU for 12 months from delivery (24 months statutory in the EU). Warranty excludes damage from misuse and is voided by self-disassembly or modification. Owners generally pay shipping to the service point for warranty repairs; direct-from-Unitree orders ship back via China. Sources: unitree.com/go2 (warranty brochure note), blueskiesdroneshop.com Go2 listing, blog.robozaps.com/b/unitree-go2-review. Workarounds listed below are community-sourced and provided without guarantee.
network/connectivity Blocks Use Workaround Exists

WebRTC connection broken after firmware update

Symptom
Via the community go2_ros2_sdk ROS2 driver: After updating to a new firmware version, the WebRTC protocol can no longer be used to connect to the Go2. Users with the latest firmware received on a new Go2 EDU also cannot connect via WebRTC.
Affected
Firmware 1.1.1; Go2 EDU
Fix / Workaround
Community suggestion: roll back to firmware 1.0.25 (Unitree states downgrade is not officially supported). Alternative community suggestion: use wired CycloneDDS over Ethernet, which works with newer firmware. A separate branch targeting firmware 1.1.1 WebRTC support was posted for community testing but not confirmed working.
sensor/camera Blocks Use Open / Unresolved

LiDAR point cloud and mapping stop working after firmware update

Symptom
Via the community go2_ros2_sdk ROS2 driver: After a firmware update, LiDAR point cloud data is no longer received and mapping fails. The Nav2 stack also stops working. Only camera streaming continues to function. Console shows repeated warnings: "Can't update static costmap layer, no map received" and H264 decoder errors: "No start code is found" / "Error splitting the input into NAL units."
Affected
Firmware 1.1.7; Ubuntu 22.04 with ROS2 Humble; Go2 EDU
Fix / Workaround
no confirmed fix
SDK/software Degrades Use Open / Unresolved

No LiDAR points and robot model does not move in RViz via WebRTC

Symptom
When connecting to the Go2 EDU Plus via WebRTC and launching the ROS2 SDK, no LiDAR point cloud data is received and the robot model does not move in RViz. The error "Can't update static costmap layer, no map received" is repeatedly logged. Camera streaming works, but no other sensor data or robot state is published.
Affected
Go2 EDU Plus; WebRTC connection
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Open / Unresolved

No sensor data or robot state displayed in RViz via CycloneDDS connection

Symptom
When connecting via CycloneDDS over Ethernet, the ROS2 SDK launches and nodes start without connection errors, but nothing is displayed in RViz. The robot model shows only the body without legs, and most topics publish no messages. The robot IP is reachable and works with the official Unitree SDK.
Affected
Go2 EDU; ROS2 Humble; Ubuntu 22.04; latest firmware; CycloneDDS over Ethernet
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Workaround Exists

SDK command calls fail with "[ClientStub] send request error" during robot control

Symptom
When attempting to send high-level commands such as StandDown() to the Go2 via the Python SDK, the error "[ClientStub] send request error. id=xxx" is returned. Pub/sub (helloworld example) works correctly, but service-based commands fail. Debug investigation shows the internal publication_matched_count is 0.
Affected
Go2 Air and Go2 Pro tested; Windows 10 and WSL2 Ubuntu 20.04; Python 3.8.6; API mode over Wi-Fi
Fix / Workaround
Community suggestion: switching from Python 3.12 to Python 3.10 and restarting the robot resolved the issue for one user, but the fix was not confirmed for all reporters.
SDK/software Blocks Use Open / Unresolved

Isaac Sim crashes with contact force backend error when rigid bodies are added to environment

Symptom
When objects in the simulation environment are set as rigid bodies in Isaac Sim GUI, the simulator crashes with the exception: "Failed to get net contact forces from backend". The contact sensor readings for the robot base always return [0 0 0] even when a collision with a wall occurs; only foot contact sensor readings are correct.
Affected
Isaac Sim 2023.1.1; IsaacLab 0.3.1
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Workaround Exists

Joint state publisher crashes with AssertionError on NaN/Inf values when robot is in AI mode

Symptom
When the Go2 is in AI mode, the go2_driver_node throws 'AssertionError: The position field must be a set or sequence and each value of type float' during the timer callback for publishing joint states. The error indicates that NaN or Inf values are being published to the joint state topic.
Affected
Dog firmware v1.1.1, connection type WebRTC, Ubuntu 22.04 (Docker)
Fix / Workaround
Community suggestion (maintainer @tfoldi): switch the robot from AI mode to normal/classic/sport mode. A code fix in go2_math.py to check for non-finite values was attempted but did not fully resolve the issue. Mode can be switched without the app using an external SDK script.
network/connectivity Blocks Use Open / Unresolved

go2_driver_node and lidar_to_pointcloud processes die immediately on launch with firmware 1.1.2

Symptom
After the submodule initialization issue was resolved, the driver node fails to connect to the robot with '[ERROR] [go2_driver_node]: Failed to connect to robot 0 - exiting: Failed to receive initial public key response with new method' and 'ERROR:root:An error occurred: 502 Server Error: Bad Gateway for url: http://192.168.137.254:9991/con_notify'. Both go2_driver_node and lidar_to_pointcloud processes exit with code 255.
Affected
Go2 Pro, firmware 1.1.2, Ubuntu (host)
Fix / Workaround
no confirmed fix
SDK/software Degrades Use Workaround Exists

Joystick input received by simulator but does not move the robot in unitree_mujoco

Symptom
With USE_JOYSTICK=1 set in config.py, joystick axis and button data is correctly received and published to rt/wireless_controller, but the simulated robot does not move. Debug output confirms values such as LX: 0.00, LY: 1.00 are being sent, yet the robot remains stationary.
Fix / Workaround
Clarification from maintainer (@Agnel-Wang): USE_JOYSTICK=1 only passes joystick information out via the wireless_controller topic; actual robot control must be implemented in a separate control program that reads from LowState.
sensor/camera Degrades Use Open / Unresolved

Accumulated LiDAR point cloud not displayed in RViz2 and robot joint synchronization delayed by ~3 seconds

Symptom
Via the community go2_ros2_sdk ROS2 driver: After updating to the latest master branch code, the accumulated radar point cloud does not appear in RViz2, though /utlidar/cloud_deskewed displays normally. Additionally, robot joint pose synchronization in RViz2 is delayed by approximately 3 seconds and limbs appear separated from the body model, with navigation failing as the robot keeps spinning.
Affected
Hardware version 2.0.0, software version 1.1.7
Fix / Workaround
Community suggestion: ensure the robot is standing up to receive LiDAR data via WebRTC. Maintainer (@abizovnuralem) identified the 3-second joint delay as caused by the WebRTC joint state topic updating at approximately 1 Hz due to a workaround for firmware 1.1.7; a proper fix had not been pushed to the repository at time of reporting.
SDK/software Blocks Use Workaround Exists

Nav2 navigation fails on Go2: global costmap drift, transform extrapolation errors, and missing localization node

Symptom
Via the community go2_ros2_sdk ROS2 driver: Nav2 navigation on the Go2 fails with repeated recovery behaviours. The planner server logs 'Extrapolation Error looking up target frame: Lookup would require extrapolation into the past' and 'Could not transform the start or goal pose in the costmap frame', causing the global costmap to be cleared and navigation goals to be aborted.
Fix / Workaround
Community workaround (@weiluduan2): corrected Nav2 parameter files and launch configuration, including fixing global frame settings in amcl, bt_navigator, and global_costmap, and adjusting LiDAR QoS settings. Details published in an external repository.
sensor/camera Degrades Use Workaround Exists

ROS 2 subscriber receives no messages from Go2 front camera topic despite visible publishers

Symptom
A Python ROS 2 node subscribing to /frontvideostream receives no messages and produces no output beyond the startup print, despite ros2 topic hz showing the topic publishing at approximately 33 Hz. A community member noted that the data appears to be dumped directly to DDS, and ROS 2 can only read the headers but cannot access the actual data.
Fix / Workaround
Community suggestion: specify the network interface name when running the script. Also noted that only ROS Humble and Noetic are officially supported; ROS Jazzy is not.
SDK/software Blocks Use Workaround Exists

Firmware 1.11.1 breaks SDK: sensor/lidar data not transmitted, arcsin errors

Symptom
After updating to firmware 1.11.1, all Robot Status fields show Error, sensor and lidar data are not transmitted, and the runtime warning 'RuntimeWarning: invalid value encountered in arcsin (go2_math.py)' is raised. The camera image is transmitted but the robot cannot be put into the classic standing position.
Affected
Firmware 1.11.1
Fix / Workaround
Community workaround: switch the subscribed topic to low state mode and use an alternative SDK package (github.com/AmmarAzab/go2_ros2_sdk). Confirmed working by the reporter.
SDK/software Degrades Use Workaround Exists

RViz shows robot body only; legs missing with 'No transform from [FL_calf] to [odom]' errors

Symptom
After launching go2_robot_sdk, RViz displays only the robot body without the four legs or camera model. The RViz status bar reports 'No transform from [FL_calf] to [odom]' and similar errors for all leg links.
Fix / Workaround
Community report: one user resolved it by eliminating a conflict between a conda Python environment and /usr/bin/python3, but no step-by-step fix is confirmed in the thread.
network/connectivity Degrades Use Workaround Exists

Simulator reports 'lo is not multicast-capable' and stand_go2 example has no effect

Symptom
When loading unitree_mujoco the error 'selected interface "lo" is not multicast-capable: disabling multicast' is displayed. Running the stand_go2.py Python example also produces this error and the simulator does not respond to the command.
Fix / Workaround
Community workaround: use ifconfig to find a physical network interface that supports multicast, then change the INTERFACE setting in /simulate_python/config.py from 'lo' to that interface. One community member also notes the error does not prevent operation if a joystick is connected before launching.
SDK/software Blocks Use Workaround Exists

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

Symptom
After launching the unitree_mujoco simulator binary it starts and prepares MuJoCo data but then immediately aborts with 'free(): invalid pointer' and 'Aborted (core dumped)'. The issue occurs across multiple reported MuJoCo versions.
Affected
MuJoCo 3.3.1 and MuJoCo 3.2.7; Ubuntu 24.04 with ROS 2 Jazzy also reported
Fix / Workaround
Community workaround: one user resolved it on Ubuntu 24.04 / ROS 2 Jazzy by identifying a DDS library path conflict (mixed use of Jazzy's DDS and unitree_sdk2-installed DDS) via 'ldd ./unitree_mujoco | grep dds' and resolving the conflict. No universal confirmed fix for all platforms.
SDK/software Degrades Use Open / Unresolved

Unnatural rotation in simulator: one front leg freezes during yaw command

Symptom
When a yaw angle speed command is sent in the simulator, the robot's rotation appears unnatural: one front leg remains still for a period until the robot completes a certain amount of rotation, making the movement look unstable.
Fix / Workaround
Developer (abizovnuralem) states that additional work is required: modify the observation input layer to separate critic and actor inputs, remove lidar from actor input, retrain RL, and match the simulation environment to the real environment. No confirmed ready-to-use fix.
SDK/software Blocks Use Workaround Exists

Nav2 localization remains inactive after deserializing map; robot cannot align with loaded map

Symptom
Via the community go2_ros2_sdk ROS2 driver: After deserializing a saved map via the SlamToolbox plugin in RViz2, the Nav2 Localization status stays inactive and Feedback remains unknown. Setting a 2D Pose Estimate has no effect, and the robot model appears outside the map boundaries.
Affected
Ubuntu 22.04, ROS 2 Humble, go2_ros2_sdk latest
Fix / Workaround
One community member (ashishgoswami13) states the issue is fixed in their fork of the repository, but no specific fix steps are documented in the thread. Another user reports that with a similar setup the robot spins in place for long-distance goals.
SDK/software Blocks Use Workaround Exists

go2_driver_node crashes after extended runtime with 'AssertionError: The y field must be of type float'

Symptom
After running the driver for approximately one hour, the go2_driver_node raises 'AssertionError: The \'y\' field must be of type \'float\'' inside publish_odom_webrtc(), crashing the driver thread. The error occurs when the position value returned is an integer rather than a float.
Fix / Workaround
Community fix: explicitly cast position values to float, e.g. float(data['pose']['position']['y']), in both publish_odom_webrtc() and publish_odom_topic_webrtc(). Confirmed stable for 72 hours after applying the fix.
SDK/software Blocks Use Workaround Exists

Robot does not move when velocity commands published to /cmd_vel

Symptom
Via the community go2_ros2_sdk ROS2 driver: Publishing to /cmd_vel via ros2 topic pub is echoed correctly in a second terminal, but the physical robot does not respond and does not move. The RobotModel in rviz appears malformed. The root cause was the ROBOT_IP environment variable was not set before launching, producing the error: "Invalid URL 'http://:9991/con_notify': No host supplied".
Affected
Ubuntu 22, ROS2 Humble
Fix / Workaround
Ensure ROBOT_IP and CONN_TYPE environment variables are exported before running ros2 launch go2_robot_sdk robot.launch.py (community-identified resolution confirmed by reporter).
SDK/software Blocks Use Fixed by Vendor

Simulator fails to load with AttributeError and segmentation fault on startup

Symptom
Via the community isaac-go2-ros2 driver: Launching the simulation script raises "AttributeError: 'SimulationCfg' object has no attribute 'render'" followed immediately by a fatal segmentation fault, preventing the simulator from loading. After removing the offending line, a secondary error appears during environment reset in the RslRlVecEnvWrapper.
Affected
isaac-go2-ros2; IsaacLab (unspecified version, binary install)
Fix / Workaround
Repo maintainer suggested removing the line `self.sim.render.antialiasing_mode = None`. The reporter ultimately resolved the issue by updating their local IsaacLab installation to a newer version.
SDK/software Blocks Use Workaround Exists

CUDA illegal memory access crash when using triangle mesh colliders in Omniverse simulation

Symptom
Via the community go2_omniverse driver: When collision physics properties are added to environment objects using Triangle Mesh approximation, the simulator throws a CUDA error at runtime: "CUDA error: an illegal memory access was encountered", crashing during env.step(). A PhysicsUSD warning also notes that triangle mesh collision without SDF cannot be part of a dynamic body and falls back to convex hull.
Fix / Workaround
Community user @ShaoshuSu resolved the crash by changing the collision approximation from Triangle Mesh to SDF Mesh in the Physics Property settings. Note: one user reported the CUDA error recurred when adding rigid body properties to objects.
SDK/software Blocks Use Open / Unresolved

Simulator crashes with AttributeError and segfault on startup

Symptom
Via the community isaac-go2-ros2 driver: running isaac_go2_ros2.py causes Isaac Sim to launch briefly and then exit. The terminal shows "AttributeError: 'SimulationCfg' object has no attribute 'render'" followed by "Fatal Python error: Segmentation fault".
Affected
IsaacSim 4.2, IsaacLab 1.2.0, Ubuntu 22.04, ROS2 Humble
Fix / Workaround
no confirmed fix
SDK/software Blocks Use Workaround Exists

Keyboard commands do not control robot movement in simulator

Symptom
Via the community go2_omniverse driver: after adapting the project to newer software versions, keyboard commands have no effect on the simulated Go2 robot's movement. Additionally, RViz2 displays only the camera stream and not the full robot model or map.
Affected
Isaac Sim 4.2.0, latest IsaacLab
Fix / Workaround
Community-identified workaround: clone the 'added_copter' branch explicitly (with -b added_copter) and remove copter-related code from omniverse_sim.py, after which WASD keyboard control was restored.
SDK/software Blocks Use Open / Unresolved

AttributeError on Camera object causes simulator freeze at startup

Symptom
Via the community go2_omniverse driver: on startup the simulator throws "AttributeError: 'Camera' object has no attribute '_rep_registry'" during Camera object cleanup. Some users report the simulation still loads despite the error, while others report the simulator freezes at that point and does not proceed.
Fix / Workaround
Maintainer suggested using --robot_amount 1 as a workaround for users with limited hardware. No confirmed fix for the underlying AttributeError.
Show all 31 issues
SDK/software Blocks Use Workaround Exists

Trained locomotion policy causes significant foot slipping on deployment

Symptom
Via the community walk-these-ways-go2 driver: when deploying a trained locomotion policy to the Go2 EDU robot, the feet exhibit obvious slippage and insufficient traction during forward/backward motion. Even during stationary stepping without joystick input, the robot's stepping position gradually drifts and fails to maintain the same position.
Affected
Go2 EDU; both the pre-trained model included in the project and a custom-trained model (4096 objects, 15000 iterations)
Fix / Workaround
Community suggestion: change the control type in train.py to `Cfg.control.control_type = "P"` and retrain, rather than using the go1 actuator network. Alternatively, train a custom actuator network for the Go2 robot.
SDK/software Blocks Use Workaround Exists

External joystick commands not recognized during sim-to-real deployment

Symptom
During sim-to-real deployment with go2_ctrl connected to the real robot over Ethernet, pressing L2+A on an external (Xbox) joystick does nothing and the controller gets stuck in Passive state. The same controller works correctly in the sim-to-sim scenario using the loopback interface.
Fix / Workaround
Community finding: the Go2 robot's own joystick must be used for sim-to-real, as joystick information is read from the lowstate message originating from the robot. The external controller works for sim-to-sim only.
SDK/software Blocks Use Workaround Exists

Sim-to-real policy deployment causes robot to flip and squirm dangerously

Symptom
After deploying a trained policy from unitree_rl_lab to the real Go2 robot, the robot initially walked cautiously then flipped in a sharp movement and began squirming dangerously. The terminal showed repeated errors: `ddsi_udp_conn_write to udp/192.168.123.161:46960 failed with retcode -1`. A `[critical] The other process is using the lowcmd channel, please close it first` error also appeared on first run.
Affected
unitree_rl_lab; trained for 50000 iterations (default maximum)
Fix / Workaround
Vendor reply: do not overtrain — 1500 iterations was confirmed to work. The critical error about the lowcmd channel requires disabling the default motion controller before deploying; it is auto-disabled on detection so the error does not repeat on subsequent runs.
SDK/software Blocks Use Workaround Exists

Low-level state cannot be retrieved on G1 robot; NoneType error on init

Symptom
Running low-level SDK examples against a G1 robot produces no console output for read_lowstate.py, and g1_ankle_swing_example.py crashes with: "[ClientStub] send request error" followed by "TypeError: 'NoneType' object is not subscriptable" at the line `while result['name']`. The robot does not move.
Affected
Unitree G1-EDU, unitree_sdk2_python installed from source, Python 3.8, Ubuntu 22.04 LTS
Fix / Workaround
A community member suggested switching the motion_switcher to 'ai' mode by SSHing into pc2 and running motion_switcher_example.py, then restarting the robot.
SDK/software Blocks Use Workaround Exists

High-level control example returns send request error in simulation

Symptom
Running go2_sport_client.py against the unitree_mujoco simulation with interface 'lo' results in "[ClientStub] send request error. id: 252906806156372" when any test option is selected. The robot does not execute the requested motion.
Affected
unitree_sdk2_python, unitree_mujoco simulation
Fix / Workaround
A community member stated that high-level control requires the sport_mode service to be enabled in the Unitree Go2 app.
network/connectivity Blocks Use Workaround Exists

go2_ctrl hangs waiting for robot connection during sim2sim on loopback interface

Symptom
After starting unitree_mujoco and launching go2_ctrl for a sim2sim test, the controller hangs indefinitely printing "[warning] Waiting for connection rt/lowstate" and never establishes a connection. The simulation runs but the controller cannot communicate with it.
Affected
Ubuntu 22.04
Fix / Workaround
A community member identified that go2_ctrl was using the wrong network interface. The fix is to explicitly specify the loopback interface: run `./go2_ctrl --network lo` (or `./go2_ctrl lo`) and set network_interface to "lo" in the mujoco config.

Need professional help with your Unitree Go2?

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

Join the Repair Waitlist →
🌐