Humanoid robots in 2026 split into two groups: machines that move totes and parts for paying customers, and machines that move mainly on stage and in investor decks. The difference is measurable in verified deployments, revenue, actuator supply, and control-loop performance. This guide separates the groups, shows the control math that governs balance and manipulation, and gives you a ROS2 node you can run today.
Quick Takeaways
- Narrow tasks work. Tote handling and parts sequencing are the only categories with repeat commercial use. General-purpose labor is not here.
- Production claims need verification. Tesla has never published an Optimus production count, and Figure and Agility hold the strongest verified deployment records.
- Hardware is cheaper, software is the bottleneck. Unitree now offers its G1 for $13,500, but generalizable manipulation policies remain the hard problem.
- Supply chains and capital markets are under stress. Actuator sourcing, import rules, and IPO scrutiny now shape the roadmap as much as control theory does.
Deployment Reality Check: Who Has Robots Working
Status as of early October 2026. “Verified” means a named customer or plant in reporting, not a company slide.
| Robot | Verified Work | Status | Main Constraint |
|---|---|---|---|
| Agility Digit | Tote handling (GXO, Toyota Canada) | Commercial RaaS | Payload ~35 lb, ~4 h runtime |
| Figure 03 | Parts sequencing at BMW Spartanburg | Pilot to ramp | Low unit count |
| Boston Dynamics Atlas | Hyundai Metaplant pilot | Early production | Cost, allocation |
| Tesla Optimus | Internal prototype testing | Production just starting | No customer shipments |
| Unitree G1/H1 | Research, education, light commercial | Open sales | Thin deployment evidence |
| 1X NEO | Home use | Pre-orders | Autonomy in unstructured homes |
Agility has the clearest commercial record. Digit has moved more than 100,000 totes at GXO and has a commercial agreement with Toyota Canada. The money is still small. Agility reported $1.8M in revenue in its S-4 filing ahead of a SPAC merger, and it just unveiled Digit 5.
Figure’s story is about learning, not volume. BMW put Figure 03 on logistics sequencing in June 2026, and Figure reported its Helix 2.5 model completing chores across 30 previously unseen Bay Area homes. That is a meaningful generalization test. It is not a production throughput number. A separate tally put Figure 03 at more than 350 units by April 2026.
Boston Dynamics is building the application pipeline. It opened a Metaplant Application Center in September 2026 to train Atlas. Its 2026 units are committed to Hyundai and Google DeepMind.
Tesla remains the largest gap between claim and evidence. Optimus production at Fremont began around August 2026, but customer units had not shipped as of September. Treat any cumulative-unit figure without a source document as marketing.
What Is Hype
Hype signal 1: demo footage. A teleoperated or scripted clip says nothing about success rate. Ask for mean time between interventions (MTBI), cycle time against a human baseline, and task variance.
Hype signal 2: unit counts without definitions. “Deployed” can mean shipped, powered on, or doing paid work. Only the last matters.
Hype signal 3: valuations. China now has well over 100 humanoid companies, authorities have warned of a bubble, and the securities regulator is tightening IPO criteria to require sustainable revenue and commercial orders. Unitree’s Q1 2026 net profit fell 52 percent year-on-year even as it was shipping more humanoids than any Western rival.
Hype signal 4: speed records. Sprint and jump records at robot games show actuator power density and locomotion RL. They do not show dexterous manipulation or safe operation near people.
Control Stack Foundations
Every humanoid runs a layered stack. Understanding the layers tells you which claims are plausible.
| Layer | Rate | Job | Typical Method |
|---|---|---|---|
| Motor driver | 10-40 kHz | Current (torque) loop | FOC on BLDC |
| Joint controller | 1-2 kHz | Position/impedance | PD + feedforward |
| Whole-body controller | 200-1000 Hz | Contact forces, balance | QP / MPC / RL policy |
| Footstep/gait planner | 10-50 Hz | Step placement | LIPM, centroidal MPC |
| Task/skill policy | 5-30 Hz | Manipulation, navigation | VLA / diffusion policy |
Joint-Level Impedance Control
Each joint runs a PD law with gravity and inertia feedforward:
tau = Kp * (q_des - q) + Kd * (qd_des - qd) + tau_ff
q = measured joint angle (rad)
qd = measured joint velocity (rad/s)
tau_ff = model-based feedforward (gravity, Coriolis)
Tune Kp for stiffness and Kd for damping. A common starting point is critical damping: Kd = 2 * sqrt(Kp * J_eff), where J_eff is reflected inertia at the joint. Backlash and harmonic drive compliance limit how high Kp can go before the loop rings.
Rigid-Body Dynamics
The floating-base equation of motion drives whole-body control:
M(q) * qdd + h(q, qd) = S^T * tau + Jc^T * f
M(q) = joint-space inertia matrix
h = Coriolis, centrifugal, and gravity terms
S = actuation selection matrix (base is unactuated)
Jc = contact Jacobian
f = ground reaction forces
A QP-based controller minimizes task error subject to this equation, torque limits, and the friction cone |f_t| <= mu * f_n. Real-time solvers hit 500 Hz on onboard compute for a 30-DoF robot.
Balance with the Linear Inverted Pendulum
The LIPM reduces the robot to a point mass at constant height z_c:
omega0 = sqrt(g / z_c)
xdd = omega0^2 * (x - p) # p = center of pressure (ZMP)
xi = x + xd / omega0 # capture point (instantaneous)
If the capture point xi stays inside the support polygon, the robot can stop without stepping. If it leaves, the robot must step to p = xi or beyond. For z_c = 0.65 m, omega0 = 3.88 rad/s. A 0.5 m/s forward velocity puts xi about 0.13 m ahead of the CoM. That is more than most foot lengths, so a step is required.
Inverse Kinematics for Arm Tasks
Damped least squares avoids singularities near full arm extension:
dq = J^T * (J * J^T + lambda^2 * I)^-1 * e
e = 6D pose error (position + orientation)
lambda = damping, 0.01-0.1; raise near singularities
import numpy as np
def dls_ik_step(J: np.ndarray, err: np.ndarray, lam: float = 0.05) -> np.ndarray:
"""One damped-least-squares IK update.
J : 6xN geometric Jacobian at current joint config
err : 6-vector [dx, dy, dz, rx, ry, rz] (task-space error)
lam : damping factor
Returns dq (N-vector, rad) to add to the current joint angles.
"""
JJt = J @ J.T # 6x6
damped = JJt + (lam ** 2) * np.eye(6) # regularize near singularities
return J.T @ np.linalg.solve(damped, err) # avoids explicit inverse
Learning-Based Control vs. Model-Based Control
The 2026 stack is a hybrid. RL policies handle locomotion. Model-based controllers still handle safety limits and force-controlled contact.
| Approach | Strength | Weakness | Compute |
|---|---|---|---|
| LIPM + ZMP | Interpretable, certifiable | Flat-ground assumption | Low |
| Centroidal MPC | Handles contact timing | Needs accurate model | Medium-high |
| Whole-body QP | Strict constraint handling | Sensitive to state estimate | Medium |
| RL locomotion | Robust to terrain, fast gaits | Sim-to-real gap, hard to verify | Low at inference |
| VLA / diffusion policy | Generalizes across tasks | Latency, no guarantees | High (GPU) |
This is why the Figure Helix result is notable and why safety remains unresolved. Learned policies generalize, but you cannot formally bound their behavior. Agility and FORT Robotics announced a partnership on humanoid safety in September 2026, which signals that the industry now treats this as a first-order problem.
Hardware: The Actuator Bottleneck
Actuators set cost, torque density, and supply risk.
| Actuator Type | Torque Density | Backdrivability | Cost | Used For |
|---|---|---|---|---|
| BLDC + planetary gearbox | High | Medium | Low-medium | Legs, most mid-cost robots |
| BLDC + harmonic drive | Very high | Low | High | Arms, wrists |
| Quasi-direct drive | Medium | High | Medium | Dynamic legs |
| Linear roller screw | Very high | Low | High | Knees, ankles on larger robots |
| Hydraulic | Extreme | High | High | Legacy (Atlas retired it) |
The supply side is a risk. Apptronik’s CEO flagged actuator sourcing gaps inside the US in September 2026, and new FCC import restrictions on foreign humanoids are in play. Rare-earth magnets for BLDC rotors and precision gear cutting concentrate in a few countries. Price forecasts that ignore this are fragile.
Bringing Up a ROS2 Capture-Point Monitor
This node estimates the capture point from base odometry and warns when it leaves a support margin. It runs on any humanoid that publishes nav_msgs/Odometry, including simulated robots in Gazebo or Isaac Sim.
#!/usr/bin/env python3
"""capture_point_node.py -- LIPM capture-point monitor for ROS2 (Humble/Jazzy)."""
import math
import rclpy
from rclpy.node import Node
from nav_msgs.msg import Odometry
from geometry_msgs.msg import PointStamped
G = 9.81 # gravity, m/s^2
class CapturePointNode(Node):
def __init__(self):
super().__init__('capture_point_monitor')
# CoM height above ground (m). Set from your robot's URDF.
self.declare_parameter('com_height', 0.65)
# Support center in the odom frame (m). Replace with TF lookup of the stance foot.
self.declare_parameter('support_x', 0.0)
# Half the foot length (m). The capture point must stay within +/- this margin.
self.declare_parameter('support_half_length', 0.11)
self.omega0 = math.sqrt(G / self.get_parameter('com_height').value)
self.sub = self.create_subscription(Odometry, '/odom', self.cb, 10)
self.pub = self.create_publisher(PointStamped, '/capture_point', 10)
def cb(self, msg: Odometry):
# Pose is in header.frame_id; twist is in child_frame_id (body frame by convention).
q = msg.pose.pose.orientation
# Yaw from quaternion; rotate body-frame velocity into the world frame.
yaw = math.atan2(2.0 * (q.w * q.z + q.x * q.y),
1.0 - 2.0 * (q.y * q.y + q.z * q.z))
vx_b = msg.twist.twist.linear.x
vy_b = msg.twist.twist.linear.y
vx = math.cos(yaw) * vx_b - math.sin(yaw) * vy_b
vy = math.sin(yaw) * vx_b + math.cos(yaw) * vy_b
x = msg.pose.pose.position.x
y = msg.pose.pose.position.y
# Capture point: xi = x + xd / omega0 (per axis).
cp = PointStamped()
cp.header = msg.header
cp.point.x = x + vx / self.omega0
cp.point.y = y + vy / self.omega0
cp.point.z = 0.0
self.pub.publish(cp)
# Sagittal-plane margin check.
sx = self.get_parameter('support_x').value
half = self.get_parameter('support_half_length').value
if abs(cp.point.x - sx) > half:
self.get_logger().warn(
f'Capture point {cp.point.x - sx:+.3f} m outside +/-{half:.3f} m: step required')
def main():
rclpy.init()
node = CapturePointNode()
try:
rclpy.spin(node)
finally:
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
Run it and visualize in RViz:
python3 capture_point_node.py --ros-args -p com_height:=0.65 -p support_half_length:=0.11
ros2 topic echo /capture_point # verify output
# In RViz: add a PointStamped display on /capture_point, fixed frame = odom
The node uses base position as a CoM proxy. For production, use a CoM estimate from your kinematic model and the stance-foot pose from tf2.
Real-World Workflow: Pilot a Unitree G1 for Tote Handling
Unitree is the one platform you can order, which makes it the practical research entry point. The G1 stands 132 cm, weighs about 35 kg, offers 23 degrees of freedom on the base unit and up to 43 on EDU builds, and walks at roughly 2 m/s. The September 2026 G1+ adds neck degrees of freedom, stronger shoulder, waist, and arm motors, and an external power port.
- Define the task envelope. Fix tote weight (under 3 kg for a G1), pick height (0.4-1.0 m), and travel distance. Narrow beats general.
- Instrument everything. Log joint torque, IMU, and camera streams to
rosbag2at full rate. - Validate balance in simulation first. Run the capture-point node above in simulation with push disturbances of 20-60 N for 0.1 s.
- Teleoperate to collect data. Record 200+ demonstrations per task variant for imitation learning.
- Measure the right metrics. Track success rate, MTBI, cycle time, and battery per cycle. A G1 gives roughly 2 hours of standard operation, so compute the cost per tote against a human hourly rate.
- Gate autonomy with a safety supervisor. Use a hardware e-stop and a watchdog node that cuts torque if joint tracking error exceeds a threshold.
Expect to spend most of the effort on steps 2, 4, and 6. The robot is rarely the limiting factor.
What’s Next
- Safety standards. Expect pressure for humanoid-specific functional safety, since a bipedal robot cannot simply cut power without falling.
- Training data markets. A marketplace launched in September offering egocentric video, teleoperation recordings, and robot execution data. Data may become the main moat.
- New entrants. Sam Altman said OpenAI will “definitely do a humanoid,” with no ship date announced. Treat that as direction, not a product.
- Capital discipline. Unitree shares fell sharply in September from their first-day IPO close. Markets are repricing demos against revenue.
FAQ
Which humanoid robot is actually working in 2026?
Agility Digit has the clearest record of paid, repeated work, with named customers including GXO and Toyota Canada. Figure 03 at BMW Spartanburg is the strongest verified automotive pilot. Both do narrow material-handling tasks, not general labor.
Can I buy a humanoid robot in 2026?
Yes, but mainly from Unitree. The G1 is listed at $13,500. Tesla Optimus is not orderable, Atlas units are allocated to Hyundai and Google DeepMind, and 1X NEO is taking pre-orders for home delivery.
Why are humanoid robots still hard to build?
Three problems compound: actuator torque density and supply, whole-body control under contact uncertainty, and manipulation policies that generalize without verifiable safety bounds. Hardware cost is falling faster than software reliability is improving.
Are humanoid robots a bubble?
Parts of the market look overheated. Regulators in China are tightening IPO criteria around real revenue, and public humanoid stocks have been volatile. The technology is advancing, but valuations assume general-purpose capability that has not been demonstrated.




