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_descriptionURDFs 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_descriptionURDF 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:
AgvBmsStatemsg 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.urdfships 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)
| Robot | IDL family | High-level client | Joints |
|---|---|---|---|
| GO2 / GO2-W / B2 / B2-W | unitree_go | SportClient | 12 |
| H1 (orig 19) | unitree_go | LocoClient (h1) | 19 |
| G1 | unitree_hg | LocoClient | 23/29 (+hands 43) |
| H1-2 | unitree_hg | LocoClient | 27 |
| H2 | unitree_hg | LocoClient | 31 |
| R1 | unitree_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/AS2returns 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.