Platform reference

B2, H1 and H2 — Platform Orientation

What separates the industrial B2 quadruped from the H1 and H2 humanoids: payload and IP rating, the EDU gate on secondary development, SDK surface, and which simulator and RL stacks actually list each platform.

FACTS VERIFIED 6 AUG 2026 · 12 MIN READ

Reference, not instruction. Confidence tags mark how each claim was established: VerifiedReportedInferredNot established. Firmware and SDKs move: re-verify anything you are about to act on against the code you have. These are heavy machines, see the Product Safety Notice.

PART A — B2 / B2-W (industrial quadruped)

What: industrial quadruped above GO2. 6 m/s, >40 kg walking / ≥120 kg standing payload,

IP67, 45 Ah / 2250 Wh hot-swap (>5 h), leg joint torque ~360 N·m (motor unit 120 N·m),

1.6 m long jump, 40 cm stairs, >45° slopes Reported.

★ B2 / B2-W OFFICIAL PARAMETER SHEET (brochure-verified 2026-08-05) Verified

Read from the official B2 Brochure EN v1.3 and the B2-W brochure EN dated 2026-02-10

(Unitree distributor marketing share). Three corrections to what circulates online:

  • **B2-W = 15 km/h max, 25 km endurance carrying 40 kg (~30 km unloaded), ≈85 kg, 120 kg

standing / >40 kg walking, 225 mm wheels, 50 rad/s, 40 N·m wheel torque, >2 kWh @ 58 V,

IP67, −20…+55 °C, >45°, stairs 20–25 cm continuous / 40 cm single step forward.**

(corrects an earlier figure: "20 km/h, ~50 km w/ 40 kg" Reported— that figure appears on NO Unitree page. 20 km/h is back-calculated from the wheel ceiling (50 rad/s × 0.1125 m = 5.6 m/s = 20.25 km/h): a wheel spec, not a vehicle spec.)

  • B2 stairs: 20–25 cm CONTINUOUS. The 40 cm figure is a single obstacle crossing in the

forward direction — not a staircase rating.

  • ">1.6 m" is max jump DISTANCE (horizontal), not height.
  • B2 full sheet: 1098×450×645 mm standing / 880×460×330 lying · ≈60 kg · 45 Ah 2250 Wh 58 V ·

>5 h & >20 km unloaded, >4 h & >15 km with 20 kg · ditch 0.5–1.2 m · 3D LiDAR ×1 + depth ×2 +

optical ×2 ("varies with configuration") · i5 platform + i7 user dev, optional i7 **and Jetson

Orin NX up to 3 devices · 4 × 1000M Ethernet, 4 × USB 3.0, 12 V ×4, 24 V ×4, 5 V ×1, BAT ×1**.

  • Footnote discipline: >6 m/s and both B2-W headline figures are marked "realized in special

configurations; in practice a speed limit is set for security". Autonomous charging and

legged↔wheeled switching are both "(optional)". IP67 is immersion, not IP69K wash-down.

★ B2 SportClient — 26 verbs, source-read (2026-08-05) Verified

include/unitree/robot/b2/sport/sport_client.hpp: Init · Damp · BalanceStand · StopMove ·

StandUp · StandDown · RecoveryStand · Move(vx,vy,vyaw) · SwitchGait(int) · BodyHeight(float) ·

SpeedLevel(int) · TrajectoryFollow(vector<PathPoint>&) · ContinuousGait(bool) ·

MoveToPos(x,y,yaw) · SwitchMoveMode(bool) · VisionWalk(bool) · HandStand(bool) ·

AutoRecoverySet(bool) · FreeWalk() · ClassicWalk(bool) · FastWalk(bool) · Euler(r,p,y) ·

FreeHeight(bool) · GaitHeight(bool); ctor SportClient(bool enableLease = false).

NAME TRAP: the DDS RPC service constant is ROBOT_SPORT_SERVICE_NAME = "sport" — NOT

"sport_mode". sport_mode / ai_sport / advanced_sport / wheeled_sport are ONBOARD SERVICE

PROCESS names (what RobotStateClient::ServiceList() returns and MotionSwitcher selects).

API ids: Damp 1001 · BalanceStand 1002 · StopMove 1003 · StandUp 1004 · StandDown 1005 ·

RecoveryStand 1006 · Move 1008 · SwitchGait 1011 · BodyHeight 1013 · SpeedLevel 1015 ·

TrajectoryFollow 1018 · ContinuousGait 1019 · MoveToPos 1036 · SwitchMoveMode 1038 ·

HandStand 1039 · AutoRecoverySet 1040 · FreeWalk 1045 · ClassicWalk 1049 · FastWalk 1050 ·

FreeEuler 1051 · FreeHeight 1052 · GaitHeight 1053 · VisionWalk 1101.

Other b2 clients Verified: MotionSwitcherClient (CheckMode/SelectMode/ReleaseMode/SetSilent(bool)

/GetSilent — SetSilent makes the robot ignore joystick mode-switches and persists across restart)

· RobotStateClient (ServiceList/ServiceSwitch/SetReportFreq/LowPowerSwitch/GetPkgVersion) ·

FrontVideoClient::GetImageSample() over service front_videohub (+ a back_video twin) —

still-image capture IS a first-class SDK call on B2, unlike G1.

b2_stand_example.cpp Verified: includes idl/go2/LowCmd_.hpp (go family), rt/lowcmd/rt/lowstate,

500 Hz (2000 µs thread, dt 0.002), 20-motor array, CRC mandatory, ChannelFactory::Init(0, iface)

domain 0 is the shipped default, i.e. the domain named in CVE-2026-27509.

  • SDK — unitree_go family (NOT hg) Verified, source-read: example/b2/b2_stand_example.cpp

includes unitree/idl/go2/LowCmd_.hpp, unitree_go::msg::dds_, topics rt/lowcmd/rt/lowstate,

20-motor array, 12 leg joints (0-11), 500 Hz, example gains Kp 1000 / Kd 10 (an order above

G1 legs). High-level = unitree::robot::b2::SportClient — Damp/BalanceStand/StopMove/

StandDown/RecoveryStand/Move/SwitchGait/SpeedLevel/HandStand/AutoRecoverySet/**FreeWalk/

ClassicWalk/FastWalk**/Euler Verified. Joint order = GO2 convention (FR 0-2, FL 3-5, RR 6-8, RL 9-11)

Reportedverify vs stand constants.

  • Perception Reported: RS-Helios 5515 lidar + 2× RealSense D435i (front/rear). ⚠️ Weston docs:

built-in RealSense NOT user-accessible for secondary dev — bring your own camera.

  • Compute/network Reported: up to 5 PCs on 192.168.123.x — .161/.162 = LOCKED motion/SLAM,

.163/.164/.165 = user dev (i7 x86 or Jetson Orin NX). Wired GbE for dev. (Coming from G1:

.161 still the locked controller, but your dev home is now .163-.165.)

  • License/price Reported: industrial, secondary-dev out of the box (no separate EDU tier

documented); quote-based, working number "high five figures USD". Official B2 SDK dev guide

exists.

  • Sim/RL: official b2_description + b2w_description URDFs in unitree_ros Verified; MJCF b2/b2w

in unitree_mujoco Verified; Unitree's official RL repos do NOT list B2 — RL is community

(LauraMQuiros/b2w-rl, HuangZihaooo/isaac-b2-ros2, cmjang/InternNav-deploy) Verified.

PART B — H1 / H1-2 (legacy humanoids, the hg lineage)

  • H1 (original, 19 DoF) uses unitree_go message family (per the official g1 readme:

"unitree_go … Go2/B2/H1/B2w/Go2w") Verified — a trap: it's a humanoid but on the GO family.

  • H1-2 (27 DoF) uses unitree_hg Verified. h1_27dof_example.cpp: hg, 27 motors, rt/lowcmd,

hip triplet order LeftHipYaw=0, HipPitch=1, HipRoll=2, Knee=3, AnklePitch=4, AnkleRoll=5

differs from BOTH G1 and H2. Never port an index map between hg humanoids by assumption.

  • H1-2 is the robot that established the unitree_hg / rt/lowcmd / 500 Hz / MotionSwitcher / PR-AB

ankle convention that carries to G1 and H2. In xr_teleoperate + unitree_sim_isaaclab (27-DoF +

Inspire). GMR supports H1 (19) + H1-2 (27) Verified.

PART C — H2 (next-gen full-size humanoid)

What: unveiled 2025-10-20 ("Destiny Awakening"). 180 cm, ~70 kg, 31 DoF (6/leg, 7/arm,

3 waist, 2 head), 360 N·m leg / 120 N·m arm, bionic head, ~2070 TOPS marketed Reported. Shares H1-2

architecture + adds 3-DoF waist + 2-DoF head. Spring-Festival-Gala appearance (Monkey King on

B2-W "clouds") Reported.

  • SDK — unitree_hg (G1 family) Verified, source-read: example/h2/ = carbon copy of G1;

h2_ankle_swing_example.cpp uses unitree/idl/hg/*, rt/lowcmd/rt/lowstate/rt/secondary_imu,

500 Hz, MotionSwitcherClient release, mode_pr + mode_machine exactly as G1. High-level =

LocoClient (h2_loco_client_example.cpp), G1-style (NOT SportClient).

  • ⚠️ H2 JOINT MAP — 31 motors, VERBATIM Verified, G1-operator traps:

0-3 LeftHip{Pitch,Roll,Yaw}/Knee; 4 LeftAnkleRoll, 5 LeftAnklePitch ← FLIPPED vs G1

(G1 = Pitch 4 / Roll 5!); 6-9 RightHip/Knee; 10 RightAnkleRoll, 11 RightAnklePitch;

12 WaistYaw, 13 WaistRoll, 14 WaistPitch; 15-19 LeftShoulder{P,R,Y}/Elbow/WristRoll;

20 LeftWristPitch, 21 LeftWristYaw; 22-26 RightShoulder/Elbow/WristRoll; 27 RightWristPitch,

28 RightWristYaw; 29 HeadPitch, 30 HeadYaw. So H2 = G1 hips + FLIPPED ankles + full wrists +

head at 29-30.

  • Sim/RL: h2_description URDF in unitree_ros Verified; official RL = unitree_rl_mjlab (lists

H2) Verified; unitree_rl_lab does NOT yet (Go2/H1/G1-29 only) Verified.

  • Licensing Verified: "only the EDU version supports secondary development" — the same

EDU gate Unitree applies to the G1. South African pricing is on the H2 product page.

  • H2 Plus is the chassis for NVIDIA/Sharpa's "Isaac GR00T Reference Humanoid" Reported.

PART D — 2026 ADDITIONS: A2 / AS2 / G1-D (+ R1 Air, H2 Plus pointers)

(added 2026-07-16 accuracy pass; source-read facts per a related reference unless tagged otherwise)

  • A2 / AS2 — industrial quadrupeds. SportClient in BOTH unitree_sdk2 (C++) and sdk2py

Verified, a related reference §2b; IDL = go family per sdk2 example includes (a related reference §2/§2b — verify on a tagged

release Not established). AS2 = "lightweight 18 kg", launched 2026-02-24 Reported. RL tasks exist ONLY

in unitree_rl_mjlab (no rl_gym / rl_lab support) Verified, a related reference footnote ⁴.

  • G1-D — AGV-base G1 variant. Evidence in source: AgvBmsState msg in the unitree_hg

family + a g1d example dir in unitree_sdk2 Verified. DoF split, price, SKU gating all

unconfirmed Not established.

  • R1 Air — closed non-EDU tier; R1_AIR.urdf ships in unitree_ros Verified. The 20-DoF

figure = Not established this pass (a related reference §1 carries AIR = 20 DoF as Verified from the unitree.com product

page — reconcile on unit contact).

  • H2 Plus — Sharpa Wave hands; the NVIDIA "Isaac GR00T Reference Humanoid" chassis, ships

late 2026 — see Part C above + a related reference §1 footnote ².

FLEET SDK CHEAT (message family — the #1 copy-paste bug)

RobotIDL familyHigh-level clientJoints
GO2 / GO2-W / B2 / B2-Wunitree_goSportClient12
H1 (orig 19)unitree_goLocoClient (h1)19
G1unitree_hgLocoClient23/29 (+hands 43)
H1-2unitree_hgLocoClient27
H2unitree_hgLocoClient31
R1unitree_hg (native 26; MJCF sim pads to 29, 24 live)LocoClient (svc "sport")26

Ankle-index + hip-triplet order differ per hg humanoid — always read the robot's own example file.

Service-name note (2026-07-16): G1's LocoClient service is ALSO sport now (renamed from loco,

fw ai_sport ≥8.2.0.0 — a related reference §2b), so R1's sport is not a fleet oddity. Table excludes the 2026

additions — see Part D (A2/AS2/G1-D/R1 Air).

PART E — OFFICIAL-DOC DELTAS (consumed 2026-07-16 from support.unitree.com; verified source-read; full method a related reference)

Per-robot facts distilled from the official developer doc spaces (H1/H1-2/H2/B2/B2-W/Go2-W/A2/A2W/AS2). Verbatim tables in a related reference salvage.

★ arm_sdk WEIGHT-INDEX TRAP (verified — the #1 cross-humanoid porting bug)

Weight slot (MotorCmd_.q = engagement 0.0-1.0) lives at a DIFFERENT motor index per robot:

H1-1 = idx 9 (4-DoF arms, no wrist: R arm 12-15, L arm 16-19) · H1-2 = idx 27 (7-DoF

arms w/ wrist: L 13-19, R 20-26) · G1 = idx 29 · **R1 = weight in mode_pr int 0-100 (NOT a

motor slot)**. Same kNotUsedJoint-as-weight convention (weight² ramp-in). Never reuse an index.

H1 (original, 19-DoF, unitree_go family)

  • Two motor types, DIFFERENT mode byte: hip/knee/waist (M107 strong) = mode 0x0A;

upper-limb + ankle (weak) = mode 0x01. IsWeakMotor(i) splits kp_low/high. Single serial

ankle (NO PR mode). Service = h1_ai_sport (not sport_mode/ai_sport).

  • FSM: 0 zero-torque · 1 Damp · 2 Lock-stand · 105 whole-body dance · 204 main motion

· 206 high-speed · 208 upper-limb adapt. LocoClient (unitree::robot::h1) verbs incl.

HighStand/LowStand/SwitchMoveMode. e-stop = L2+B (damps + falls). Develop mode = L2+R2.

  • Autonomous CHARGING at firmware level (LowCmd gpio &0xFE charge-ON); rt/lf/lowstate low-freq

mirror topics; PC1 .161 / PC2 .162+.163 (SSH creds from Unitree support). SLAM = topology-map

(nodes/edges), edge props constrain gait/speed.

H1-2 (27-DoF, unitree_hg)

  • Joint map = URDF order (unlike H1-orig): 0-5 L-leg (hip_yaw→pitch→roll, knee, ank_pitch,

ank_roll), 6-11 R-leg, 12 torso, 13-19 L-arm (sh p/r/y, elbow, wrist p/y — 7), 20-26 R-arm.

hip order yaw→pitch→roll (G1 = pitch→roll→yaw) — remap trap.

  • Parallel ankle (4-joint/leg): PR mode = command serial Pitch/Roll (T=kp·Δq+kd·Δdq+tau),

firmware converts to A/B motors; AB mode = raw. FSM: 0 zero · 1 Damp · 2 Lock-stand ·

204 main · 205 upper-limb load-adapt (no 105/206/208). arm_sdk = 15 upper joints, weight idx 27.

B2 (+B2-W wheeled)

  • Services: sport_mode (normal), ai_sport (AI), advanced_sport, basic_service,

motion_switcher, net_switcher, ota_box, video_hub, webrtc_bridge, state_estimator. CheckMode

form "0"=legged/"1"=wheel. MotionSwitcher adds SetSilent(bool) (ignores joystick mode-switch,

persists across restart). ServiceSwitch: input 1=on/0=off, output status inverted 0=on/1=off.

  • Joint map: FR 0-2, FL 3-5, RR 6-8, RL 9-11; B2-W wheels = idx 12-15 (velocity mode:

kp=0, dq=±wheel_speed). B2-W service = wheeled_sport; SportClient reduced verbs +

SwitchGait(0=idle wheels-only / 1=limb legged-assist); Damp = slow lie-down.

  • SportModeState mode enum (≠GO2): 0 stand,1 balance,3 loco,5 lie,6 jointLock,7 damp,8 recovery,

9 FreeWalk,18 Classic,19 Fast,20 Euler. PC IP .222; range .161-.165 FORBIDDEN.

Crossing Mode = DANGEROUS (per-exec App auth). MOTOR-PROTECTION + mobo-disconnect faults =

full RESTART to clear.

Go2-W (wheeled Go2)

  • Reuses go2::SportClient (no wheeled class); reduced verbs (Damp/StandUp/StandDown/Move/

StopMove/SpeedLevel/SwitchGait/GetState/Recovery/Balance). **Wheels = low-level idx 12-15

velocity mode (kp=0, dq); service = wheeled_sport** (App caps it Wheeled_Sport).

  • Aggregated faults → rt/errorlist (JSON). Remote: L2+B damp, L2+A lock/lie, L2+START

high-speed, R1+X climb, L1+A→hold R2 = inverted walk. StandUp height 0.44 m. VuiClient/Lidar/

Multimedia = identical to Go2.

A2 / A2W / AS2 (2026 industrial quadrupeds, go family)

  • A2 = TWO onboard PCs: PC1 (camera) + **PC2 = i7-1355U dev PC @ 192.168.123.162, user

unitree / pw Unitree0408 or Unitree#24226, 512G SSD. Wired PC2 = 192.168.124.x subnet**

(dev PC .124.222); mobo/ping = .161; AP mode = 192.168.12.x. Service = ai_sport (fw

≥1.0.3.14, NOT mcf/sport_mode). CheckMode form 0=legged/1=wheeled (A2W).

  • Dedicated hardware E-STOP button (btn 13) + external e-stop aviation plug; dual battery;

autonomous Charging Pad (robot lies on pad, model-verified handshake). SLAM = slam_operate

v1.0.0.1 on PC2 @ .162, JT128 lidar only, client PC .200. /mainboardstate = 24-bit fault

field. 58 V accessory output on dock. Remote: Damp L2+B, Lock L2+A, Run L2+Start.

  • A2W = wheeled A2 (own URDF); remote = A2 minus flips. AS2: 15 kg dynamic / 65 kg static,

climb 40°, step ≤15 cm, IP54, Ethernet-only dev; lock-stand accidental trigger → press Start.

Z1 arm · L1 lidar · M8010 motor (accessory spaces — consumed, low delta)

Standard SDK-template pages; Z1 = 6-DoF arm own SDK; L1 = unilidar_sdk (a related reference); M8010 = joint-

motor serial protocol (feeds a related reference glass — detailed extract deferred, low priority).

PART D-1 — OFFICIAL-PAGE CORRECTIONS (2026-08-05, adversarially re-verified)

Sourced from the live unitree.com product pages and re-fetched by a second agent that refuted

five of its own predecessor's claims. Supersession convention applies.

  • AS2 mass = "Approx. 20 kg" with battery, IDENTICAL in all four tiers (AIR / PRO / X / EDU)

Verified, unitree.com/As2. (corrects an earlier figure: "lightweight 18 kg" Reported)

  • URL casing trap: unitree.com/AS2 returns HTTP 404. The live page is /As2 (and

/As2-W). Same pattern worth checking on other 2026 models.

  • AS2 is FOUR tiers and they differ on the numbers that matter. Never quote "the AS2 spec":

walking load AIR 10 / PRO 13 / X 15 / EDU 15 kg; standing 45 / 55 / 65 / 65 kg;

slope AIR ~30° vs PRO/X/EDU ~40°; AIR has NO published IP rating (cell reads "/"), the

others are IP54; speed AIR 3.0 m/s, PRO 3.7, X/EDU 3.7 (up to ~5); battery AIR 8000 mAh vs

15000 mAh; temp AIR/PRO −20…50 °C vs X/EDU −20…55 °C. 12 DoF all tiers.

Stair: mobile page says forward stair height up to 25 cm (desktop marketing separately

claims 50 cm vertical climb — two different manoeuvres, do not merge).

  • AS2-W: ≈25 kg, 16 DoF, IP54, 150 kg standing / 16 kg walking, slope ~45°,

climb ~0.4–0.8 m, 3.7 m/s (max ~6), ~3 h / ~30 km unloaded. The "12 joint + 4 wheel" DoF

breakdown is NOT published — Unitree prints only "Degrees of Freedom: 16".

  • A2 mass = About 35 kg WITHOUT battery / About 42 kg WITH battery Verified, unitree.com/A2/.

(corrects an earlier figure: the widely-reported "37 kg", which matches NEITHER official figure). A2-W = 45 kg / 52 kg.

  • A2 / A2-W step-vs-climb trap: Max Step Height 30 cm; Max Climb Height ~0.5–1 m.

Press reporting "climbs steps up to 1 metre" conflates the two. The A2-W table's row labelled

"Stair Climbing Capability" has the entire published value "Max Step Height: 30cm".

  • A2/A2-W payload identical: 100 kg standing / 25 kg continuous walking ("ideally ~35 kg").

IP56 base, IP56–IP67 on PRO (core components IP67). −20…55 °C. Dual-slot dual battery

9000 mAh each. A2 >5 h / ~20 km unloaded; A2-W >3.5 h / ~35 km unloaded.

Variants are A2, A2-PRO, A2-W, A2-W PRO.

R1-D — IT IS REAL, AND IT HAS NO LEGS Verified

Official page unitree.com/R1-D/, product name printed as "Unitree Dual-Arm Humanoid Robot",

tagline "Ultra-fast deployment, multi-scenario application"; shop listing

shop.unitree.com/products/unitree-r1-d titled exactly "Unitree R1-D".

  • NAMING TRAP: "R1-D" is the URL slug and shop title. The spec table columns are

R1-A5 / R1-A7 / R1-A5-D / R1-A7-D. There is no column named "R1-D".

  • FORM TRAP: dual-arm torso + head, NO legs — flat bolt plate (fixed) or a lift column

over a wheeled chassis (-D). Never show it walking; never reuse bipedal R1 footage on it.

  • Fixed 700 (A5) / 835 mm (A7) × 357 × 190, ~11 / ~13 kg external power.

-D: shrunk 683 → raised 1600 mm × 520 × 440, ~30 / ~32 kg. Total DoF 15 / 19 / 18 / 22

(configurable range 15–31). Arm 5 or 7 DoF, waist 1, head 2, chassis 3 (-D only).

60 N·m shoulder, 2–4 kg arm payload, ±0.1 mm end-clamp repeatability, 420 / 555 mm arm.

Binocular 146/124° FOV, 1280×720@30 Hz. 8-core body CPU + 8-core head CPU 10 TOPS;

Orin 40–100 TOPS is an ACCESSORY, not baseline. ~1.5 h battery. 12-month warranty.

  • NOT PUBLISHED anywhere on the page (checked by absence sweep): any m/s speed, drive type,

chassis payload, LiDAR make, IP rating, CE/UL/ISO 10218/TS 15066/e-stop text, wired Ethernet,

Ah/Wh capacity, lift-column stroke. The "-D = mobile base" reading is an INFERENCE Not established

Unitree never defines the suffix and there is no "Mounting Type" row.

PART D-2 — AI-VIDEO DIRECTION RULE FOR B2 (2026-08-06, user-verified)

When generating B2/B2-W footage from stills: the head unit does NOT articulate. The

cylindrical mast is a LiDAR — its rotation is internal and invisible at product scale, there

is no lens, no eye, no pan/tilt "face". <user> caught both errors in generated clips

(a camera-eye rendered into the lidar cage; a head-turn "acknowledging" move). The rule that

works: robot fully static, camera does all the moving, environment provides the life

(haze, light). Anthropomorphic direction verbs ("acknowledges", "looks at") are what trigger

the face hallucination — describe the machine as parked hardware.

Maintained by MCM Robotics, the official Unitree Robotics distributor for South Africa. This is our own engineering documentation: it is not Unitree's official documentation and is not endorsed by Unitree. Trademarks belong to their respective owners. Provided as-is, without warranty. Found an error? Tell us and we will correct it.

Buying or specifying

We import, commission and support these robots.

Official distributor for South Africa. Talk to the people who wrote this page.

View the fleet Talk to us →