Joint Control Loops in Humanoid Robots: How a 50 Hz Policy Drives a 40 kHz Joint
Joint control loops: how a 50 Hz policy drives a 40 kHz joint
The neural network that makes a humanoid walk decides what each joint should do about 50 times a second. The joint itself corrects its current tens of thousands of times a second. Between the two sit a stiffness-and-damping law, a fieldbus and a set of gains, and that layered loop structure decides how compliant, stable and safe the robot feels.
Sources: Radosavovic et al. 2023; Liao et al. 2024 (Berkeley Humanoid); Katz 2018 (MIT thesis); Seeed Studio RobStride documentation; Synapticon.
Three loops nested inside every joint
Spec sheets list torque, speed and mass, but a humanoid joint is also a stack of feedback loops running at very different speeds. At the top, a whole-body controller or learned policy on the robot’s main computer decides where each joint should go. In the middle, the joint drive turns that target into a torque request using a spring-and-damper law. At the bottom, a field-oriented current loop in the same drive switches the motor phases so the motor actually produces that torque. Each loop is roughly an order of magnitude faster than the one above it.
The split exists because each layer has a different job. The policy needs to see the whole body and plan, which is computationally heavy, so it runs slowly. The torque law has to react to contact within a millisecond or less, so it runs in the drive next to the encoder. The current loop has to track a motor with very low inductance, so it runs as fast as the power stage switches. Ben Katz’s thesis on the MIT Mini Cheetah actuator is a clean public example: the drive switches at 40 kHz, closes the current loop at 40 kHz and runs the joint PD law synchronously with it.
Figure 1 · The cascaded control loop inside a humanoid joint
Illustration: humanoid.guide, after Katz 2018 and Liao et al. 2024. Schematic, not a specific product.
The five-number command
Most learned humanoid controllers do not send raw torques to the joints. They send a target position, and the drive turns it into torque with a proportional-derivative law: torque equals a stiffness gain kp times the position error, plus a damping gain kd times the velocity error, plus an optional feed-forward torque. Radosavovic and colleagues’ Digit controller is typical. The network runs at 50 Hz and outputs PD setpoints for 16 joints, plus predicted PD gains for 8 leg joints, while the joint PD controller runs at 1 kHz.
The low-cost actuator world has made this law into a wire format. The so-called MIT mode, inherited from the Mini Cheetah driver, packs five numbers into one CAN frame: desired position, desired velocity, kp, kd and feed-forward torque. CubeMars (T-Motor) documents the command for its AK-series motors. RobStride, whose modules appear in many Chinese humanoids and research robots, uses the same five fields over 1 Mbps CAN. Its documentation gives kp ranges of 0 to 500 and kd of 0 to 5 on the small RS-00 to RS-02 and RS-05 motors, rising to 5,000 and 100 on the larger RS-03, RS-04 and RS-06.
Sending gains as well as targets is what makes a joint compliant on demand. A high kp holds a pose stiffly. A low kp lets the limb give way when it touches something, and the controller can change that between one 20 ms tick and the next without touching hardware. This is impedance control, and it only works well if the joint is back-drivable and the inner loop is much faster than the outer one.
Figure 2 · Animated · One 20 ms policy step, and what the inner loops do inside it
Illustration: humanoid.guide. Rates from Radosavovic et al. 2023 (Digit: 50 Hz policy, 1 kHz PD) and Katz 2018 (Mini Cheetah: 40 kHz). CSS animation; stops when reduced motion is requested.
Published loop rates, robot by robot
Commercial humanoid makers rarely publish inner-loop rates, so most hard numbers come from research platforms and actuator documentation. The pattern is consistent anyway. Policies run at about 50 Hz, the bus runs at 1 to 4 kHz, and the drive’s own loops run from 1 kHz to 40 kHz.
Table 1 · Control loop figures published for humanoid and legged-robot joints
| Platform | High-level / policy | Joint PD loop | Bus | Actuator notes |
|---|---|---|---|---|
| MIT Mini Cheetah actuator | — | 40 kHz | CAN, 1 Mbps; 1.2 kHz achieved on a 3-DoF leg | 6:1 planetary, 17 N·m peak, 6.9 N·m continuous; current bandwidth 4.5 kHz at 4.5 N·m |
| Berkeley Humanoid | 50 Hz | 25 kHz | EtherCAT, 1–4 kHz (0.5–2 ms latency) | 9:1 QDD, four sizes, 9.7–81.1 N·m peak; state estimator at 1 kHz |
| Agility Digit (RL controller) | 50 Hz | 1 kHz | — | Policy outputs PD setpoints for 16 joints and gains for 8 leg joints |
| Unitree G1 (research papers) | 50 Hz | Targets updated every 20 ms; on-motor rate not published | — | Four motor types modelled, up to about 111–131 N·m |
| RobStride RS-series | — | MIT mode in the drive | CAN, 1 Mbps | kp 0–500 / kd 0–5 (small); kp 0–5,000 / kd 0–100 (large); 5.5–120 N·m |
| Synapticon SOMANET Circulo | — | Dual-loop control in the drive | EtherCAT DS402, up to 4 kHz | 60 V / 60 A rms; two 20-bit absolute encoders; hollow shaft |
Sources: Katz 2018; Liao et al. 2024; Radosavovic et al. 2023; He et al. 2025 and OmniXtreme 2026 (G1); Seeed Studio RobStride documentation; Synapticon product page. — means not published in these sources.
Chart 1 · Update rate of each layer, log scale
Sources: Radosavovic et al. 2023; Liao et al. 2024; Katz 2018; Synapticon. Each bar is a rate published for that platform, not a measured comparison.
The bus in the middle: CAN or EtherCAT
The fieldbus sets how often the main computer can update every joint, and it is a real bottleneck. Classic CAN runs at 1 Mbps and is shared by every motor on the line. Katz puts the theoretical limit for the Mini Cheetah at about 4 kHz divided by the number of actuators on a bus. In practice the team reached 1.2 kHz on a three-motor leg. That is why legged robots built from CAN modules split their joints across several buses, typically one per limb.
EtherCAT, the industrial Ethernet standard used by most cobot joints, removes most of that limit. Berkeley Humanoid runs its EtherCAT network at 1 to 4 kHz, with a maximum latency of 0.5 to 2 ms depending on the rate chosen. Synapticon specifies its Circulo integrated joint drives at up to 4 kHz on the standard DS402 servo profile, with FailSafe over EtherCAT for safety data. The cost is more expensive drive electronics and a master controller. That trade explains why bus choice tends to follow price class: CAN for low-cost modules, EtherCAT for industrial and higher-end humanoid joints.
What it means for buyers and builders
- Ask where the PD law runs. A joint that closes its impedance loop in the drive, at kHz rates, will behave consistently whatever the main computer is doing. A joint that waits for torque commands over the bus inherits the bus’s latency and jitter.
- Check the command interface. MIT mode (position, velocity, kp, kd, torque) is now a de facto standard on CAN modules from CubeMars and RobStride, which makes these actuators easy to drop into reinforcement-learning stacks. EtherCAT DS402 drives offer the same modes through a standard industrial profile.
- Gains are part of the spec. Gain range sets how stiff or soft a joint can be made. A 0–500 kp range on a small module and 0–5,000 on a 120 N·m one reflect very different load cases.
- Sim-to-real depends on the inner loop. Learned policies are trained against a model of the PD loop and the motor. The OmniXtreme G1 work models torque-speed limits, friction and back-EMF power limits for each motor type, because an inner loop that behaves differently from the simulator is a common cause of failed transfers.
Go deeper: The Humanoid Actuation Report
249 pages on motors, reducers, screws, bearings, encoders and drives, the vendors behind every major platform, and the cost curves that decide adoption to 2036.
The Humanoid Actuation Report All joints & actuators articles All humanoid.guide reportsKeep reading · Joints & actuators
Related articles
FAQ
Why do humanoid policies run at only 50 Hz?
Running a neural network for the whole body takes milliseconds on onboard computers, and 50 Hz is enough to plan steps and posture. Fast reactions are handled by the PD law in each joint drive, which runs at 1 kHz or more.
What is MIT mode on a robot actuator?
A command format, originating with the MIT Mini Cheetah driver, that sends desired position, desired velocity, stiffness gain kp, damping gain kd and feed-forward torque in one message. The drive computes torque from those five numbers at its own loop rate.
Is EtherCAT better than CAN for humanoid joints?
EtherCAT gives more bandwidth and lower latency for many joints on one network, which is why it is used on Berkeley Humanoid and on industrial joint drives. CAN is cheaper and simpler, and works well when joints are split across several buses and the PD loop runs inside the drive.
What is impedance control in a humanoid joint?
Controlling a joint as a virtual spring and damper rather than as a rigid position servo. The stiffness and damping gains decide how much the joint gives way when it meets resistance, which is central to safe contact and stable walking.
Sources
- B. Katz, A Low Cost Modular Actuator for Dynamic Robots, MIT thesis, 2018 (40 kHz current and PD loop, CAN limits, 6:1 ratio, 17 N·m)
- Liao et al., Berkeley Humanoid: A Research Platform for Learning-based Control, 2024 (50 Hz policy, 25 kHz PD, EtherCAT 1–4 kHz, actuator specs)
- Radosavovic et al., Real-World Humanoid Locomotion with Reinforcement Learning, 2023 (Digit: 50 Hz policy, 1 kHz PD, PD setpoints and gains)
- He et al., Learning Getting-Up Policies for Real-World Humanoid Robots, 2025 (Unitree G1, 50 Hz PD targets)
- OmniXtreme: Breaking the Generality Barrier in High-Dynamic Humanoid Control, 2026 (G1 at 50 Hz, motor torque-speed modelling)
- Seeed Studio, RobStride Control Library documentation (MIT mode fields, kp/kd ranges, CAN 1 Mbps, torque by model)
- TMotorCANControl, MIT CAN mode documentation (AK-series MIT-mode command law and gain ranges)
- Synapticon, SOMANET Circulo (EtherCAT DS402 up to 4 kHz, FSoE, dual 20-bit encoders, 60 V / 60 A)
