Unitree G1 EDU SDK Guide: SDK2, ROS 2 and CycloneDDS Setup

Use G1 EDU, not the base-price G1, when secondary development is the requirement. Unitree's official G1 table marks Secondary Development with a slash for the regular G1 and YES for G1 EDU; the listed US $13.5K starting price belongs to the regular G1, while EDU remains Contact sales. Before installing anything, make the order, label and supplied documentation confirm the EDU configuration and the interfaces enabled for that unit.

For the most direct ROS 2 route, Unitree's current unitree_ros2 repository recommends Ubuntu 22.04 with ROS 2 Humble and describes CycloneDDS 0.10.2. Connect the development PC by Ethernet, set the documented 192.168.123.99/24 host address on the correct interface and prove that G1 state messages are arriving before sending a movement command. The ROS 2 QoS guide helps after basic DDS discovery works; it cannot repair a wrong model entitlement, network interface or middleware version.

Confirm G1 EDU and development access before building the workstation

The official Unitree G1 page distinguishes the two buying questions that are often collapsed. A regular G1 is shown from US $13.5K before tax and shipping, but its Secondary Development entry is not YES. G1 EDU is the development-oriented route and is quoted through sales. Do not treat the regular model's public price as the EDU price or infer SDK rights from the robot's appearance.

G1 EDU is listed at approximately 35 kg or more, with 23 to 43 degrees of freedom depending on configuration. The product page also presents about two hours of battery life and an 18-month warranty, but runtime varies with configuration and task, and the complete warranty terms control. Those ranges are another reason to record the exact arms, wrists, hands and computing options on the purchase order.

Ask Unitree or the authorized seller to identify the delivered hardware revision, firmware, enabled development interface, onboard computer, hand option, emergency-stop equipment, documentation set and support channel. A repository that contains G1 messages does not by itself grant access to every capability on every G1 SKU.

Preflight itemRegular G1G1 EDURequired evidence
Published price statusFrom US $13.5K, excluding tax and shippingContact salesA quote for the exact EDU configuration
Secondary Development table entrySlash rather than YESYESOrder and serial documentation identifying G1 EDU
Degrees of freedomConfiguration-dependent23 to 43 across listed EDU configurationsJoint and hand list for the delivered robot
Software accessDo not infer from base priceDevelopment-oriented, but scope still depends on configurationSDK, firmware and interface entitlement in writing
Safety equipmentConfiguration and package must be checkedConfiguration and package must be checkedE-stop, controller and operating procedure inventory
First testNo assumption of secondary developmentRead-only wired telemetryRecorded state stream with no motion command

SDK2, Python SDK2 and ROS 2 are three paths, not one installer

The C++ unitree_sdk2 repository is Unitree's native communications and control library. Its documented prebuilt baseline is Ubuntu 20.04 LTS on aarch64 or x86_64 with GCC 9.4.0, and the build requirements include CMake 3.10 or newer, GCC 9.4.0 and Make. That is a useful compatibility statement for this path; it is not the ROS 2 recommendation.

The Python SDK2 repository requires Python 3.8 or newer and identifies CycloneDDS 0.10.2 alongside NumPy and OpenCV. Python is convenient for diagnostics and experimental tooling, but its package environment should be isolated so that a global CycloneDDS upgrade does not silently alter communication with the robot.

The official unitree_ros2 repository documents Ubuntu 20.04 with Foxy and Ubuntu 22.04 with Humble, recommending the latter combination. Choose one route for the first connection. Running C++ SDK2, Python SDK2 and ROS 2 participants at once makes discovery, interface selection and version conflicts harder to isolate.

PathDocumented baselineBest first useDo not assume
C++ SDK2Ubuntu 20.04 LTS; aarch64 or x86_64; GCC 9.4.0; CMake 3.10+Native examples and direct SDK integrationThat its prebuilt baseline is the same as ROS 2 Humble
Python SDK2Python 3.8+; CycloneDDS 0.10.2; NumPy; OpenCVRead-only tools, logging and rapid experimentsThat any newer CycloneDDS package is compatible
ROS 2 FoxyUbuntu 20.04 plus Foxy; repository describes a 0.10.x CycloneDDS build routeMaintaining an existing Foxy labThat Foxy and Humble setup steps are interchangeable
ROS 2 HumbleUbuntu 22.04 plus Humble, recommended by UnitreeNew ROS 2 workstationThat every G1 feature is covered because G1 examples exist
Mixed stackNot a first-connection baselineLater integration after each path works aloneThat multiple DDS participants will select the intended NIC automatically

Pin the repository, operating system and CycloneDDS version together

Treat the checked README, repository revision and dependency versions as one tested set. Record the Git commit, Ubuntu release, ROS distribution, compiler, Python environment and CycloneDDS version in the lab log. Unitree's current Python and ROS 2 material centers on CycloneDDS 0.10.2; that is a dated vendor baseline, not a claim that 0.10.2 must remain correct forever.

Do not upgrade DDS middleware in the middle of connection debugging. A change can alter discovery, network-interface selection, type support or package compatibility while leaving the application code untouched. Reproduce the official environment first, archive the dependency lock, and test an upgrade on a separate image with the same recorded robot state input.

Keep ROS workspaces separate from the C++ SDK build and from the Python virtual environment. Source only the intended ROS distribution and workspace in a fresh terminal. When a shell has inherited several overlays, a successful package lookup can still load the wrong message or library version.

Unitree G1 humanoid robot
This CC0 photograph shows the physical G1, but it does not establish EDU options, SDK permissions or firmware configuration. Source: Sayanesy / Wikimedia Commons. License: CC0 1.0.

A wired, single-interface DDS link removes the first layer of ambiguity

Unitree's ROS 2 example connects the PC and robot through Ethernet and assigns the PC 192.168.123.99 with subnet mask 255.255.255.0. Apply that address to the physical Ethernet adapter connected to G1, not to Wi-Fi, a VPN, Docker bridge or unrelated USB NIC. Use the actual interface name in the CycloneDDS configuration referenced by CYCLONEDDS_URI.

Disable or deliberately exclude other candidate interfaces during the first test. DDS can discover over multicast, and an automatic selection that chooses Wi-Fi or a virtual adapter can look like a ROS topic problem. Confirm link state, host address, subnet and packet activity before changing QoS or rebuilding message packages.

Keep the robot network isolated from the public internet and untrusted devices. Once communication works, the ROS 2 and DDS cybersecurity guide helps define segmentation, access control, update practice and logging. Security changes should be introduced with a rollback test so they do not become indistinguishable from middleware failure.

Network checkExpected first-test stateIf it fails
Physical linkDedicated Ethernet link is upCheck cable, adapter, robot port and power before ROS
Host IPv4192.168.123.99 with 255.255.255.0 mask on the robot-facing NICRemove a duplicate address and verify the selected adapter
Interface selectionCycloneDDS points to the robot-facing NICInspect CYCLONEDDS_URI and exclude Wi-Fi, VPN and virtual bridges
DDS versionMatches the checked Unitree path, currently 0.10.2Return to the pinned environment before changing code
DiscoveryExpected G1-related topics or participants appearCapture traffic and verify domain, interface and message build
Security boundaryPrivate lab segment with controlled hostsDo not expose the robot DDS network to a broad office LAN

The first successful test is a stable read-only state stream

After sourcing the intended environment, use ros2 topic list to see what the running system actually publishes. Do not begin from a copied topic name or a motion example. The repository includes G1/H1-family low-state material such as read_low_state_hg and a wireless-controller example, but the top-level support wording and example inventory do not prove a complete, uniform G1 feature set.

Choose a state-only example that matches the delivered model and firmware. Observe joint state, IMU or controller messages long enough to see stable updates, plausible ranges and clean reconnect behavior. Record topic names, types, frequency, timestamps, sequence continuity and the exact launch context. A single printed sample proves much less than a repeatable stream.

Save a short diagnostic bag only after live state is trustworthy. The rosbag2 recording and QoS guide explains how a recorder can miss data when QoS is incompatible. A bag that opens successfully is not evidence that every expected topic was captured.

Decision card summarizing the key checks in Unitree G1 EDU SDK Guide: SDK2, ROS 2 and CycloneDDS Setup
A Physical AI Lab editorial card reconstructed from the cited official sources. Source: Physical AI Lab. License: Owned original.

Control examples belong behind a separate safety gate

Receiving telemetry confirms transport and serialization; it does not authorize motion. Before any command, establish the model and firmware match, a clear test area, physical restraints or support appropriate to the test, an accessible emergency stop, one named operator, a spotter, command limits, timeout behavior and a documented way to remove power. Unitree warns that the humanoid is a powerful, complex machine and requires ample safety distance.

Move from read-only state to a narrowly bounded command only under Unitree's current instructions for that exact unit. Do not use walking, special-motion or low-level torque examples as a communications smoke test. If a command path publishes continuously, define what happens when the node exits, DDS disappears, a stale command persists or the operator releases the control.

ROS 2 interfaces do not automatically provide a standard ros2_control hardware layer. The ros2_control hardware-interface guide describes the lifecycle and command/state contracts an integrator may build, but it should not be presented as Unitree's official G1 implementation. Likewise, the robot emergency and protective stop guide helps separate stop purposes; it does not replace the supplied safety manual or a qualified risk assessment.

Diagnose the layer that failed instead of reinstalling everything

A missing topic can originate in hardware entitlement, firmware, Ethernet, CycloneDDS discovery, message compilation, ROS overlays or the application. Test in that order. Reinstalling ROS before confirming link traffic changes several variables while leaving the likely fault untouched. Preserve one known-good workstation image and one read-only command sequence as the lab baseline.

If DDS participants are visible but data is absent, verify message definitions, topic type and whether the example covers the G1 configuration. If data arrives but frequency or continuity is wrong, inspect timestamps, host load, network loss and QoS. If state works in SDK2 but not ROS 2, the boundary is likely the ROS bridge, workspace or message layer rather than the robot link.

After a successful session, document the serial number, configuration, firmware, repository revisions, OS image, DDS file, NIC name, topic inventory, state rates and safety setup. Compare broader model choices with the Unitree R1, G1 and H1/H2 guide and procurement terms with the Unitree price and buying guide; neither page should be used to infer the SDK rights of the delivered unit.

SymptomFirst layer to inspectEvidence to collectAvoid
No network trafficCable, port, power and IPv4 setupLink state, adapter address and packet captureChanging ROS packages
Traffic but no DDS discoveryCycloneDDS version and interfaceDDS configuration, NIC name and participantsAdding more network adapters
Topics appear but no samplesMessage type, firmware and example scopeTopic type, console errors and repository revisionAssuming every example supports every G1
Samples are intermittentQoS, timestamps, load and packet lossRates, gaps, CPU use and captureJumping to control commands
SDK2 works, ROS 2 failsROS overlay and bridge buildEnvironment variables, package paths and typesReflashing the robot without vendor direction
State works, command does notEntitlement, operating mode and safety interlocksOfficial model-specific procedure and error stateBypassing a stop or sending higher-level motion

Frequently asked questions

Can the regular $13,500 Unitree G1 be used for SDK2 and ROS 2 development?

Do not assume so. Unitree's official table marks Secondary Development with a slash for regular G1 and YES for G1 EDU. Development buyers should obtain G1 EDU and written confirmation of the interfaces, firmware and support included in the exact order.

Should a new G1 EDU ROS 2 workstation use Ubuntu 22.04 and Humble?

That is Unitree's currently recommended ROS 2 combination. Keep it distinct from the C++ SDK2 prebuilt baseline, which documents Ubuntu 20.04 and GCC 9.4.0, and pin the repository and CycloneDDS versions used for the test.

What should I run first after connecting G1 EDU by Ethernet?

First verify the dedicated NIC and DDS discovery, then list topics and run a model-appropriate read-only state example such as the documented G1/H1-family low-state path. Do not use walking, special-motion or torque commands as the first communications test.

Official sources checked

Last checked: August 6, 2026