Introduction: Thermal Drift Below the Protection Limit

Consider a robot whose standing posture sags or whose jumps become lower as it warms up, even with the same policy and torque commands. These are illustrative symptoms to investigate, not a new experiment reported here. A temperature log can reveal a correlation, but confirming the cause requires checking torque response and the driver’s current limits. Torque can change before thermal protection limits the current.

If heat is only a protection problem, the explanation stops here. Too hot and the current is cut, touch it and you get burned, run it long enough and the insulation degrades; so if the limit was never crossed, nothing should have happened. But even below the limit, winding resistance rises and magnet flux falls, so the same current produces a different torque and the same torque produces more heat. The actuator’s parameters can change even while the policy and controller settings remain fixed.

Commanding torque with current, and reading torque and external force from current, all rest on one line.

τj≈η N Kt iq\tau_j \approx \eta\,N\,K_t\,i_q

03 covered η\eta and NN, and 05 covered the ripple and electrical angle error mixed into iqi_q. This post looks at the one left, the torque constant KtK_t, because it is the value temperature changes most directly. A datasheet lists KtK_t as a single number, but in practice it differs from motor to motor, with current, and with temperature, and temperature changes in the middle of an experiment. Here I expand on the heat that 02 introduced in one paragraph, examine the thermal cost of low gear ratios in QDD, and then wrap up the actuator part.

Definition and Units of the Torque Constant

KtK_t is the torque produced by 1 A of q-axis current. In an ideal surface-mounted permanent magnet motor (SPMSM) it is set by the magnet flux linkage λm\lambda_m and the number of pole pairs pp, and the flux linkage includes the number of turns and layout of the winding along with the magnet strength. So KtK_t is determined by the magnets and the winding together, and when the magnet flux changes, KtK_t changes with it.

The torque constant and the back-EMF constant KeK_e are a pair that come from the same flux. If the current and voltage conventions are chosen so that power is conserved, the two are equal in SI units. Real datasheets and drivers, however, each use their own convention, so the numbers written for the same motor differ by factors such as 3/23/2, 2\sqrt 2, or 3\sqrt 3, depending on whether phase current is given as peak or RMS, and whether quantities are per phase or line-to-line. If the definition of iqi_q reported by the driver differs from the datasheet’s, the torque estimate is off by tens of percent even with no other error at all. This definition is the first thing to align in system identification.

Math: torque constant, back-EMF constant, and current definitions

With the amplitude-invariant dq transform, the q-axis back-EMF is eq=p λm ωme_q = p\,\lambda_m\,\omega_m, and iqi_q and eqe_q have the same magnitude as the peak phase current and phase voltage. Three-phase power is P=32(vdid+vqiq)P = \tfrac{3}{2}(v_d i_d + v_q i_q), so from the mechanical output τ ωm=32 eq iq\tau\,\omega_m = \tfrac{3}{2}\,e_q\,i_q,

τe=32 p λm iq,Kt=32 p λm,Ke,pk=p λm\tau_e = \tfrac{3}{2}\,p\,\lambda_m\,i_q, \qquad K_t = \tfrac{3}{2}\,p\,\lambda_m, \qquad K_{e,\mathrm{pk}} = p\,\lambda_m

That is, in this convention Kt=32Ke,pkK_t = \tfrac{3}{2}K_{e,\mathrm{pk}}, and with the power-invariant transform the two become equal. Written in terms of RMS phase current, the same torque gives Kt,rms=2 Kt,pkK_{t,\mathrm{rms}} = \sqrt 2\,K_{t,\mathrm{pk}}, and a back-EMF constant given in line-to-line voltage is 3\sqrt 3 times larger than one given in phase voltage. Copper loss must follow the same definition: PCu=32Rs(id2+iq2)P_{Cu} = \tfrac{3}{2} R_s (i_d^2 + i_q^2) in amplitude-invariant dq, and PCu=3Irms2RphaseP_{Cu} = 3 I_{\mathrm{rms}}^2 R_{\mathrm{phase}} in RMS phase current. The examples and demo below fold these factors into a single equivalent RR and write PCu=R iq2P_{Cu} = R\,i_q^2.

What Changes the Torque Constant

As the table in 02 showed, even motors of the same model have a KtK_t that differs from the nominal value because of manufacturing variation in the magnets and air gap. This difference is fixed for each joint, so it can be corrected after one measurement. The rest changes with operating conditions.

Current. At high current the iron core saturates, and each added amp produces less added torque. The onset and size of this saturation depend on the motor. A measured current–torque curve is needed to determine where a constant KtK_t ceases to be an adequate approximation.

Electrical angle. If the encoder zero is off by Δθe\Delta\theta_e, only cos⁡Δθe\cos\Delta\theta_e of the current the controller believes is on the q-axis produces torque (05). In a measurement it looks as if KtK_t has shrunk, but the cause is the angle, not the motor.

Temperature. The flux of NdFeB magnets drops by about 0.1% for every 1 K rise. Manufacturer material gives an example in which KtK_t falls by about 5% when the motor is 50 °C hotter 1. Within the normal operating temperature range this change is reversible and recovers when the motor cools. Beyond the allowed temperature, or with a strong reverse field applied at the same time, irreversible demagnetization occurs, and then KtK_t does not return to its original value even after cooling.

This distinction shows the point of view of this post. Irreversible demagnetization is exactly the case where the protection view is right: crossing the limit damages the motor, so the limit must not be crossed. Reversible temperature change, on the other hand, happens continuously far below the limit, and it is not something to prevent but a state to track with a model. Irreversible demagnetization means the motor is broken; a reversible change means the motor has temporarily become a different motor.

Same Current, Different Torque: What Temperature Changes

Temperature does not change only KtK_t. The resistance of a copper winding rises by about 0.39% per 1 K 1. Following the series example, if the winding and magnets go from 25 °C to 75 °C, resistance rises by about 19.5% and KtK_t falls by about 5%. The same current produces 5% less torque, and the same torque costs more heat.

The two changes push in the same direction. Producing the same torque takes 1/0.951/0.95 times the current, and that current passes through a larger resistance, so copper loss rises by about 32%. Higher loss means more heat, which forms a feedback loop, but with enough cooling the temperature settles at a higher equilibrium. This feedback does not by itself mean thermal runaway; it raises the equilibrium temperature.

At first, the current controller hides the rise in resistance. As long as there is voltage headroom, it applies more voltage and keeps the current the same. As speed rises, back-EMF also consumes voltage headroom. Once the total required voltage reaches the inverter limit, current can no longer follow the command and torque drops. Rising resistance shows up first as loss and lost voltage headroom; falling torque constant shows up directly as less torque for the same current.

Math: resistance, torque constant, and copper loss versus temperatureR(T)=R25 [1+α(T−25)],Kt(T)=Kt,25 [1+β(T−25)]R(T) = R_{25}\,[1 + \alpha(T - 25)], \qquad K_t(T) = K_{t,25}\,[1 + \beta(T - 25)]

For copper α≈0.0039 /K\alpha \approx 0.0039\,/\mathrm{K}, and for NdFeB flux β≈−0.001 /K\beta \approx -0.001\,/\mathrm{K}. The copper loss needed to hold the same torque τ\tau is PCu=R (τ/Kt)2P_{Cu} = R\,(\tau/K_t)^2, so

PCu(75 ∘C)PCu(25 ∘C)=1.1950.952≈1.32\frac{P_{Cu}(75\,^\circ\mathrm{C})}{P_{Cu}(25\,^\circ\mathrm{C})} = \frac{1.195}{0.95^2} \approx 1.32

The steady-state q-axis voltage with id≈0i_d \approx 0 is vq≈R iq+ωeλmv_q \approx R\,i_q + \omega_e \lambda_m, and when this exceeds the inverter’s voltage limit, the current loop saturates. Rising resistance increases the first term, while falling magnet flux reduces the back-EMF term at a given speed. The net voltage margin depends on both changes and on the requested current.

The demo below computes the winding temperature of a joint holding a load at zero speed. The example motor is much larger than the series example joint from 02–04; it is the size used in QDD joints, with R25=0.09 ΩR_{25} = 0.09\,\Omega, Kt,25=0.32 N m/AK_{t,25} = 0.32\,\mathrm{N\,m/A}, a thermal resistance of 0.42 K/W, and a heat capacity of 105 J/K. The current limit starts at 60 A, decreases linearly from 80 °C, and reaches zero at 115 °C (example values). Commanding 11 N·m at the motor shaft with the nominal KtK_t fixes the current at 34 A, and the winding settles at about 79 °C, but the actual torque there is 10.4 N·m, about 5% short. Commanding with a KtK_t corrected for temperature keeps 11 N·m, but the current rises to 37 A, the winding climbs to about 89 °C, and it enters the derating range, cutting the usable current limit to 45 A. Match the torque and the heat goes up; save on heat and the torque falls short. In both cases the temperature stays far below the 115 °C protection limit. The compensated case has entered derating, although its requested current remains below the reduced limit. Thermal drift and protection are already affecting different parts of the actuator model.

Interactive example · Winding heat

How the motor heats up while holding the same load

25°C
derating zone
Winding temperature [°C] · dashed: predicted steady state
25801150100200300
Load torque (dashed) and output torque [N·m]
0150100200300
Current iq [A]
0500100200300
Time [s] · thermal time shown ×10
Motor parameters (example values)

Thermal time constant RthCth = 44 s

Winding temperature25.0 °CPredicted steady state79 °CResistance R(T)90.0 mΩKt(T)0.320Current iq34.4 ACopper loss106 WOutput / load100%

First-order lumped thermal model of a joint holding a load at zero speed. Only copper loss R(T)·iq² is modeled; the current limit starts at 60 A and falls from 80 °C to zero at 115 °C. Default parameters are the example values used in the post, not measurements.

Heat per Unit Torque and the Gear Ratio

Rewriting copper loss in terms of torque gives PCu=(τ/Km)2P_{Cu} = (\tau/K_m)^2. Km=Kt/RK_m = K_t/\sqrt R is the motor constant, the torque that can be produced per 1 W of copper loss. The heat it takes to hold a given torque is set not by KtK_t alone but by the ratio of KtK_t to resistance, and as temperature rises KtK_t falls while RR rises, so KmK_m gets worse from both sides. The example motor has Km≈1.07 N m/WK_m \approx 1.07\,\mathrm{N\,m/\sqrt W} at 25 °C and needs about 106 W to hold 11 N·m.

At the joint, the reducer multiplies the motor constant by ηN\eta N. Copper loss for a given joint torque is proportional to 1/(ηNKm)21/(\eta N K_m)^2, so lowering the gear ratio by 10 times makes the copper loss 100 times larger with the same motor. This is the heat that 04 listed as a cost QDD pays, and it is also why QDD uses outrunner motors with a large air-gap radius: to raise KmK_m for the same volume 2. Copper loss stays even when the joint does not move, so holding a squat, holding an arm out horizontally, and pushing against the ground for a long time are the most expensive motions thermally. Mechanical output is zero, and all the power becomes heat. That for QDD this cost does not end with heat is something we come back to later.

Losses other than copper loss grow with speed. Iron loss, eddy current loss, bearing and reducer friction, and inverter switching loss all increase with motor speed, so a higher gear ratio raises these losses at the same joint speed. That is why the motor’s most efficient operating point lies inside the torque–speed plane, and the best gear ratio from a thermal standpoint differs for each duty cycle. Regenerative braking during deceleration can return part of the mechanical energy, but the I2RI^2R loss already dissipated in the winding does not come back.

What Changes Before It Stops: Continuous Torque and Thermal Time Constant

How long an actuator can keep producing force is decided by heat, not by peak torque. Heat capacity lets it ride through short peaks, and thermal resistance sets the loss it can sustain. The example motor has a thermal time constant of about 44 seconds, so a short peak produces less temperature rise than the same loss sustained to equilibrium. Its acceptability still depends on loss magnitude, initial temperature, and current limits; longer loads require the equilibrium temperature as well. Two actuators with the same peak torque can have very different continuous torque depending on the contact between winding and stator, potting, housing area, and airflow inside the joint.

The datasheet’s continuous torque and the driver’s derating answer the question of when to stop. The question this post asks is what changes before it stops. Even running below continuous torque, the winding rises to its equilibrium temperature, and KtK_t and resistance at that temperature differ from their cold values. Continuous torque is the range in which the motor is not damaged, not the range in which the motor does not change.

A single thermal node cannot represent the different time constants of the winding and the housing. Right after a large current is applied, the winding heats up first and the housing and magnets follow later, so even at the same housing temperature, the winding and magnet temperatures differ depending on the recent operating history.

Math: one-node and two-node thermal modelsCth T˙=Ploss−T−TambRth,τth=RthCthC_{th}\,\dot T = P_{\mathrm{loss}} - \frac{T - T_{\mathrm{amb}}}{R_{th}}, \qquad \tau_{th} = R_{th} C_{th}

The equilibrium temperature is Tamb+RthPlossT_{\mathrm{amb}} + R_{th} P_{\mathrm{loss}}, and with the example values τth=0.42×105≈44 s\tau_{th} = 0.42 \times 105 \approx 44\,\mathrm{s}. Splitting into winding TwT_w and housing ThT_h,

CwT˙w=PCu−Tw−ThRwh,ChT˙h=Tw−ThRwh+Pother−Th−TambRhaC_w \dot T_w = P_{Cu} - \frac{T_w - T_h}{R_{wh}}, \qquad C_h \dot T_h = \frac{T_w - T_h}{R_{wh}} + P_{\mathrm{other}} - \frac{T_h - T_{\mathrm{amb}}}{R_{ha}}

and since usually Cw≪ChC_w \ll C_h, the winding’s time constant is much shorter. A sensor on the housing sees only ThT_h, so many values of TwT_w correspond to the same ThT_h.

The Rotor Temperature That Cannot Be Measured Directly

What changes KtK_t is the magnet temperature, and the magnets are attached to the rotor and spin with it. A thermistor is easy to attach to the winding and stator, but measuring rotor temperature requires a slip ring or wireless telemetry, which adds mass to the rotating part, wiring, and failure points. So most robot actuators measure only a single stator temperature. Whether this is adequate for protection depends on how the sensor and thermal model bound the winding and magnet temperatures. For tracking KtK_t, though, it means not seeing the temperature that actually matters.

Magnet temperature is estimated indirectly from electrical signals. Measuring back-EMF at a known speed gives the flux linkage, and since flux varies with magnet temperature, the magnet temperature can be back-calculated 3. Winding temperature is estimated from the change in resistance. Both estimates depend on the accuracy of current measurement, electrical angle, and motor parameters, so they are often combined into an observer together with the stator sensor and a thermal model.

Measuring and Calibrating the Torque Constant

KtK_t is obtained by mounting a load cell or F/T sensor on the output shaft and measuring torque while stepping the current. Measuring at standstill mixes in friction, so measure in both directions and average, and measuring up to large currents gives the saturation curve as well. Repeating this cold and fully warmed up gives the temperature coefficient. The result is a lookup table indexed by current and stator temperature.

This table has two limitations. First, its temperature axis is stator temperature, while KtK_t is set by magnet temperature, so with a different operating history the actual KtK_t differs even within the same cell. Second, thermal resistance and heat capacity are not intrinsic to the actuator but depend on how it is mounted. A large aluminum jig on the bench acts as a heat sink, while on the robot the actuator may be enclosed under a plastic cover or, conversely, the whole link may become a heat sink. Use the thermal model from single-unit tests as a starting point, and refit it with operating logs after the actuator is mounted on the robot.

Reading Torque and External Force from Current

A robot without joint torque sensors reads joint torque from current and subtracts its own dynamics to estimate external force 4. The error in this approach comes from two parts. One is the path from current to actuator torque, which includes this post’s KtK_t, the efficiency and friction from 03, and the ripple and backlash from 05. The other is the path from actuator torque to external force, where errors in the link inertia, gravity, and friction models go straight into the external force estimate. During fast acceleration or under large gravity loads, the terms to subtract are larger than the external force, and small external forces get buried in model error.

QDD can control contact force from current alone because it reduces friction and reflected inertia, two of these error sources, in hardware. The low gear ratio makes the internal torques to be subtracted small, and Proprioceptive Actuation in the MIT Cheetah demonstrated this structure 5. Reducing those errors can make KtK_t calibration more consequential, but current sensing, electrical-angle error, and robot-model error still remain. In a high-reduction joint, friction and efficiency uncertainty can also limit current-based estimation; an output torque sensor bypasses part of that transmission uncertainty.

A fast current loop does not mean fast torque either. Current loop bandwidth only means the measured current follows the command quickly. It does not guarantee that the measured current equals the actual current, that the electrical angle is correct, that KtK_t is constant, or that the reducer and structure transmit that torque as is.

Math: current-based external force estimationτ^act=η^ N K^t(iq,T) iq,τ^ext=τ^act−M^(q)q¨−C^(q,q˙)q˙−G^(q)−τ^f(q,q˙)\hat\tau_{\mathrm{act}} = \hat\eta\,N\,\hat K_t(i_q, T)\,i_q, \qquad \hat\tau_{\mathrm{ext}} = \hat\tau_{\mathrm{act}} - \hat M(q)\ddot q - \hat C(q,\dot q)\dot q - \hat G(q) - \hat\tau_f(q, \dot q)

Since q¨\ddot q is noisy, in practice this is implemented in a form that does not use acceleration directly, such as a momentum observer. For a square, nonsingular Jacobian and an external wrench at the modeled end-effector, F^=J−⊤τ^ext\hat F = J^{-\top}\hat\tau_{\mathrm{ext}}. A redundant robot or contacts at other locations require a corresponding estimation formulation. A relative error δ\delta in K^t\hat K_t multiplies the entire actuator torque, not the external force, so in a joint holding a gravity load GG it creates a bias of δ G\delta\,G in the external force estimate.

Current-Based Force Estimation in QDD

QDD designs that estimate contact force from current rely on the current–torque relationship. With the same motor and efficiency, a lower gear ratio requires more current for a given joint torque. Sustained current increases copper loss and temperature; high current can also introduce magnetic saturation.

The example motor from the demo makes the difference clear. 11 N·m at the motor shaft is 66 N·m at a 6:1 QDD joint. Holding the same 66 N·m with a 50:1 joint takes 1.3 N·m of motor torque, about 4 A of current, and about 1.5 W of copper loss, so the temperature rises by less than 1 K. At 6:1 it takes 34 A and about 106 W, the winding rises to about 79 °C, and KtK_t falls by about 5% (example values, ignoring efficiency). Just standing with bent knees is enough to create this difference.

Large current pulls KtK_t away from its nominal value along two paths. During momentary high torque, as in landing or jumping, core saturation lowers KtK_t; under sustained loads, copper loss turns into heat, lowering KtK_t and raising resistance. The example uses 34 A against a 60 A current limit, but that fraction does not establish where magnetic saturation begins. That needs a measured current–torque curve. Likewise, whether KtK_t error dominates requires comparing it with sensing, friction, and model errors under the intended operating conditions.

This error shows up directly in the robot’s posture and force. A knee joint whose KtK_t has dropped 5% holds 5% weaker than the torque commanded with the nominal KtK_t, and the robot sags until the position controller makes up the difference. Seen from the external force estimation side, the same error reads about 5% of the gravity load as external force. This is one possible mechanism behind the posture drift described in the introduction.

That does not mean QDD is the wrong choice. QDD designs reduce this cost by raising KmK_m with outrunner motors that have a large air-gap radius and by designing a heat path out through the housing 2. And this error is not random; it is tied to current and temperature, so it can be measured and corrected. The required compensation accuracy follows from the force-estimation error allowed by the task. For a QDD design relying on current-based force estimates, that error budget must include thermal drift in KtK_t as well as the remaining sensing and transmission errors.

The Slow State That Simulators and Policies Do Not See

What the simulator models and the policy learns is a cold actuator. In a simulator, an actuator usually has the same KtK_t, the same resistance, and the same torque limit at the start and end of an episode. On a real robot, earlier motions change the actuator for later ones. A policy that cannot observe temperature has no way to know why the same state and action produce a different acceleration, and once derating begins, the torque limit shrinks in a way it never saw in training. If some joints heat up before others, left–right symmetry breaks too.

The policy does not need to see every internal temperature. If the low-level driver computes the torque currently available from temperature and voltage and passes it up, the policy can act based on the torque range it can actually use instead of the temperature of a single sensor. This amounts to moving the temperature sensor from an input of the protection circuit to an input of the policy. On the training side, per-joint randomization of KtK_t and resistance, including slow drift within an episode, is one way to expose a policy to these changes. Its benefit must be evaluated over the intended thermal range. Using springs, counterbalances, brakes, and posture so that static loads are not held by current alone is the hardware-side answer to the same problem.

Actuator Part Summary

Every error covered from 02 through this post comes down to the same question: where does the real actuator differ from the simulator’s ideal torque source, and should that difference be measured and modeled, covered with randomization, or shown to the policy?

ErrorIdentificationHow to put it in the simulatorDetails
Current loop bandwidth and delayCurrent step response, time delay between commanded and measured torqueActuator delay, first-order filter02, 04
Speed-dependent torque limitDatasheet KeK_e, resistance, bus voltageTorque–speed limit, bus voltage randomization02
reflected inertiaAcceleration in response to a torque stepJoint armature03
Friction and backdrivabilityMean current in constant-speed sweeps, backdrive breakaway torqueCoulomb and viscous friction, per-joint randomization03
Reducer stiffness and resonanceTorque–twist curve with output locked, chirp responseTwo-inertia model or observation delay03
Contact impedanceLow-frequency torque–displacement slope, frequency responseFit kp·kd together with armature and friction04
Torque ripple and electrical angle errorTorque versus position at low constant speedPeriodic disturbance tied to electrical angle05
Reducer transmission errorInput-angle analysis of input–output encoder difference at low constant speedPeriodic position error tied to input rotation05, reducer subposts
Backlash and lost motionBidirectional torque–deflection loopDead zone and direction hysteresis, observation of recent motion direction05
Momentary load limitMomentary peak torque and shock limit per reducer (datasheet)Impact torque monitoring, penalty or episode termination when exceeded03, reducer subposts
Torque constant unit variation, saturation, temperatureCurrent–torque with a load cell, up to large currents, repeated cold and warmPer-joint KtK_t and RR randomization, slow drift, available-torque observationThis post

Not every item needs to be included. In tasks such as fast walking, where the ripple frequency is far above the mechanical bandwidth, omitting ripple may have little effect on link motion, and in position-control-oriented tasks the torque constant error is masked by the position loop. Include an item when its error falls inside the task’s bandwidth, as in contact, force control, slow precise motion, and sustained loads. What the errors in this table have in common is that they are tied to state, not random. Knowing whether that state is position, direction, speed, or temperature tells you which errors to measure and what to show the policy.

This concludes the actuators that move a single joint. The next part looks at the sensors a robot uses to read its own state and forces.

References

[1] maxon motor ag, “maxon Motor Data and Operating Ranges.” Manufacturer PDF

[2] S. Seok et al., “Design Principles for Energy-Efficient Legged Locomotion and Implementation on the MIT Cheetah Robot,” IEEE/ASME Transactions on Mechatronics, vol. 20, no. 3, pp. 1117–1129, 2015. Paper

[3] Y. Xiao and A. Griffo, “PWM-Based Flux Linkage and Rotor Temperature Estimations for Permanent Magnet Synchronous Machines,” IEEE Transactions on Power Electronics, vol. 35, no. 6, pp. 6061–6069, 2020. Paper

[4] A. Wahrburg, J. Bös, K. D. Listmann, F. Dai, B. Matthias, and H. Ding, “Motor-Current-Based Estimation of Cartesian Contact Forces and Torques for Robotic Manipulators and Its Application to Force Control,” IEEE Transactions on Automation Science and Engineering, vol. 15, no. 2, pp. 879–886, 2018. Paper

[5] P. M. Wensing, A. Wang, S. Seok, D. Otten, J. Lang, and S. Kim, “Proprioceptive Actuator Design in the MIT Cheetah: Impact Mitigation and High-Bandwidth Physical Interaction for Dynamic Legged Robots,” IEEE Transactions on Robotics, vol. 33, no. 3, pp. 509–522, 2017. Paper