explainer
Model uncertainty: bound a robot joint’s acceleration
Turn uncertain inertia, damping, and disturbance torque into an acceleration range. Compare a nominal command with an actual model, handle negative acceleration correctly, and understand the assumptions behind a worst-case bound.
What you will learn
- Distinguish uncertain model parameters, physical disturbances, and measurement noise.
- Calculate a nominal torque command and its acceleration under a different model.
- Derive acceleration extrema over a box with strictly positive inertia.
- Explain why a deterministic range carries no confidence level or probability distribution.
- State what an instantaneous model bound can and cannot establish about a real robot.
Before you start
An acceleration command can be correct for the model and wrong for the joint. In this lesson's example, the nominal calculation predicts 1 rad/s². A different allowed inertia, damping, and disturbance gives about 0.773 rad/s².
Model uncertainty makes that gap explicit. You will turn stated parameter ranges into an acceleration interval and identify the assumptions that give the interval its meaning.
Ask how far the prediction could be wrong
Dynamic parameter identification estimates a model from data. A fitted coefficient still has limits: measurements contain errors, operating conditions change, and the chosen equation can omit useful physics.
This lesson asks a narrower question: at one known speed, which accelerations can a torque command produce across a stated family of joint models? We will derive the smallest interval containing every answer in that family.
The range is conditional on the model and its bounds. It carries no probability distribution or confidence level. MIT's notes on robust and stochastic control distinguish analysis over allowed uncertainty sets from reasoning that also specifies probabilities.
Define the horizontal joint and torque signs
Consider a rigid joint rotating in a horizontal plane about a vertical axis. Its gravity torque about that axis is zero. Let v be angular velocity and a its instantaneous angular acceleration.
Ja = τ − Bv + d
a = (τ − Bv + d)/J, with J > 0 and B ≥ 0
| Symbol | Meaning | Units |
|---|---|---|
| J | Effective inertia about the joint | kg·m² |
| B | Viscous damping coefficient | N·m·s/rad |
| τ | Applied actuator torque | N·m |
| d | Additional physical disturbance torque | N·m |
| v, a | Joint velocity and acceleration | rad/s, rad/s² |
Positive torque increases the chosen joint angle. Physical damping torque is −Bv, so it opposes velocity. Positive d adds torque in the positive joint direction, regardless of the current velocity.
The lab assumes exact speed and exact applied torque. It omits sensor noise, actuator clipping, and motor electrical dynamics. Forward dynamics uses the same direction of reasoning: actual applied torques and a physical model determine acceleration.
Describe a family of allowed models
Choose nominal parameters Ĵ = 1 kg·m² and B̂ = 0.2 N·m·s/rad. A hat marks a model estimate. Around them, place bounds:
J ∈ [Ĵ − r_J, Ĵ + r_J] = [J_min, J_max]
B ∈ [B̂ − r_B, B̂ + r_B] = [B_min, B_max]
d ∈ [−D, D]
The default half-widths are r_J = 0.2 and r_B = 0.1, with D = 0.2 N·m. They give J ∈ [0.8, 1.2], B ∈ [0.1, 0.3], and d ∈ [−0.2, 0.2] in their respective units.
This rectangular uncertainty box allows every combination of those values. It makes no statistical independence claim. If physical constraints tie J and B together, the box can include impossible combinations and give a wider range than a more precise family would need.
The lab keeps J_min strictly positive and B_min nonnegative. MathWorks' uncertain real parameter documentation describes nominal values with bounded ranges or additive variations. A range alone does not say which values occur more often.
Apply a command based on nominal parameters
Request acceleration a_des and compensate nominal damping:
τ = Ĵ a_des + B̂v
a_nominal = (τ − B̂v)/Ĵ = a_des
This is a simple inverse-dynamics command. The actuator supplies it exactly in this experiment. Substituting the actual J, B, and d gives:
a − a_des = [(Ĵ − J)a_des + (B̂ − B)v + d]/J
The equation shows which uncertainty matters at the chosen state. Inertia error multiplies the acceleration request. Damping error multiplies velocity; its instantaneous contribution vanishes at v = 0.
Even if the coefficients match exactly, a nonzero disturbance can change acceleration. The nominal prediction sets d = 0. A future feedback controller can use measured error to adjust the command, with its own assumptions and limits.
Derive the acceleration interval
First bound the numerator N = τ − Bv + d at fixed τ and v:
N_min = τ + min(−B_min v, −B_max v) − D
N_max = τ + max(−B_min v, −B_max v) + D
This handles either velocity sign. Positive v makes larger damping reduce N; negative v makes larger damping increase N. Because B and d vary independently across closed intervals, both numerator endpoints are attainable.
Now account for inertia. Evaluate four quotients:
C = [N_min/J_min, N_min/J_max,
N_max/J_min, N_max/J_max]
a_min = min C, a_max = max C
For any fixed positive J, N/J increases with N. For a fixed N, the quotient changes monotonically with J: it decreases when N is positive and increases when N is negative. Thus an extremum occurs at an endpoint of each interval, including when N crosses zero.
Every candidate comes from an allowed numerator and inertia combination. The resulting interval is tight for this independent box in real arithmetic. The browser and Python example use floating-point arithmetic, and the displayed values round to six decimals.
Dividing N_min by J_max and N_max by J_min works when both numerators are nonnegative. A negative numerator reverses the relevant inertia choice. Checking all four quotients avoids a sign assumption hidden in the calculation.
Check positive, negative, and zero commands
Use the default box and v = 1 rad/s. Request a_des = 1 rad/s², giving τ = 1(1) + 0.2(1) = 1.2 N·m.
The numerator range is:
N_min = 1.2 − 0.3 − 0.2 = 0.7 N·m
N_max = 1.2 − 0.1 + 0.2 = 1.3 N·m
a ∈ [0.7/1.2, 1.3/0.8] ≈ [0.583333, 1.625000] rad/s²
For the selected interior example, J = 1.1, B = 0.25, and d = −0.1. It gives a = (1.2 − 0.25 − 0.1)/1.1 = 17/22 ≈ 0.772727 rad/s². Its error from the requested acceleration is about −0.227273 rad/s².
Now change only the request:
| a_des | Applied τ | Numerator range | Acceleration range |
|---|---|---|---|
| +1 rad/s² | +1.2 N·m | [0.7, 1.3] N·m | [0.583333, 1.625000] rad/s² |
| −1 rad/s² | −0.8 N·m | [−1.3, −0.7] N·m | [−1.625000, −0.583333] rad/s² |
| 0 rad/s² | +0.2 N·m | [−0.3, 0.3] N·m | [−0.375000, 0.375000] rad/s² |
For the negative request, the most negative acceleration is −1.3/0.8. For the zero request, both extremes use J_min = 0.8 because it increases the magnitude of either sign.
Define the worst absolute acceleration error as max(|a_min − a_des|, |a_max − a_des|). It is 0.625 rad/s² for either ±1 request and 0.375 rad/s² for the zero request. The range need not be symmetric about the nominal prediction.
Explore the uncertainty band
The shaded band includes every acceleration allowed by the box at each request. The orange line uses one selected actual model. The plot holds velocity fixed as it varies the requested acceleration.
Try these comparisons:
- Select Negative acceleration. Check which inertia endpoint produces the most negative result.
- Select Zero acceleration command. The nominal calculation predicts zero, while the bounded disturbance and damping mismatch allow either sign.
- Select Inertia uncertainty only, then set the desired acceleration to zero. At that request, the interval collapses despite the remaining inertia uncertainty.
- Select Exact nominal model. The entire band collapses onto the nominal and selected predictions.
The actual-model selector picks a fixed relative position in the box. Changing a half-width changes that selected physical model; its readouts show J, B, and d. Those values remain fixed across each command sweep.
The upper-parameter example uses J_max, B_max, and d = −D. The lower-parameter example uses J_min, B_min, and d = +D. Their names describe their parameters; the sign-sensitive interval calculation determines which cases attain acceleration extrema.
No time passes in the experiment. Its band bounds an instantaneous acceleration at an exact known state. It provides no trajectory-tracking or closed-loop stability proof.
Separate parameter uncertainty from missing physics
Different errors call for different model changes:
| Source | What changes | Example |
|---|---|---|
| Parameter uncertainty | A coefficient inside the chosen equation | J differs from the nominal inertia |
| Physical disturbance | A torque acts on the real joint | An external load adds d |
| Measurement noise | The reported state or input differs from its physical value | A speed sensor reports v plus an error |
| Missing physics | The equation leaves out a relevant effect or state | An elastic transmission stores energy |
A larger B range still represents viscous damping. Friction models show why dry friction and static holding need additional rules. Joint flexibility adds motion and stored energy that a single rigid inertia can miss.
An additive disturbance can cover an omitted torque only when its bound is valid over the conditions being analyzed. Choosing D without evidence does not automatically cover every modeling error. Uncertainty in measured velocity would need its own treatment, including its effect on the commanded torque.
The current box includes no measurement noise. A physical disturbance changes what the joint does; a sensor error changes what the controller believes. Both can matter together in a real system.
Test the assumptions behind the bounds
A mathematical enclosure guarantees containment only for the family you supplied. Check that family against evidence:
- Estimate parameter ranges from suitable measurements, calibration information, or physical tolerances.
- Test torque predictions on held-out motion and operating conditions.
- Inspect residuals for speed, load, temperature, or direction-dependent patterns.
- Verify the disturbance bound over the domain where you plan to use it.
The identification lesson compares a fit with a separate trajectory. A model that passes sampled validation still needs a justified uncertainty set. A finite collection of passing simulation cases cannot, by itself, prove containment for every untested parameter value.
Our four-quotient calculation has a different basis: the monotonicity argument establishes the extrema of this particular equation. A more complex nonlinear model can have interior extrema, so checking its corners alone may fail. Its bounds require a new argument or a method that certifies the relevant domain.
Instantaneous prediction and long-term simulation also answer different questions. MIT's system identification notes explain how a small local equation error can coexist with large simulation error. Here, future state changes and a feedback law remain outside the calculation.
Reproduce the bounds in Python
This standard-library example evaluates the four endpoint quotients. It keeps the actual model fixed while changing the desired acceleration, then shows what happens if an actual inertia falls outside the assumed range.
from itertools import product
Jhat, Bhat, velocity = 1.0, 0.2, 1.0
Jrange, Brange, Drange = (0.8, 1.2), (0.1, 0.3), (-0.2, 0.2)
actual_J, actual_B, actual_d = 1.1, 0.25, -0.1
def acceleration_bounds(torque, speed):
damping = [-B * speed for B in Brange]
n_min = torque + min(damping) + Drange[0]
n_max = torque + max(damping) + Drange[1]
candidates = [n / J for n, J in product((n_min, n_max), Jrange)]
return min(candidates), max(candidates)
for desired in (1.0, -1.0, 0.0):
torque = Jhat * desired + Bhat * velocity
low, high = acceleration_bounds(torque, velocity)
actual = (torque - actual_B * velocity + actual_d) / actual_J
worst = max(abs(low - desired), abs(high - desired))
print(f"desired={desired:+.1f}, torque={torque:+.6f}, range=[{low:+.6f}, {high:+.6f}]")
print(f"selected={actual:+.6f}, error={actual-desired:+.6f}, worst={worst:.6f}")
outside_acceleration = (1.2 - 0.2 * velocity) / 0.1
print(f"outside-box inertia 0.1: acceleration={outside_acceleration:.6f}")
Expected output:
desired=+1.0, torque=+1.200000, range=[+0.583333, +1.625000]
selected=+0.772727, error=-0.227273, worst=0.625000
desired=-1.0, torque=-0.800000, range=[-1.625000, -0.583333]
selected=-1.045455, error=-0.045455, worst=0.625000
desired=+0.0, torque=+0.200000, range=[-0.375000, +0.375000]
selected=-0.136364, error=-0.136364, worst=0.375000
outside-box inertia 0.1: acceleration=10.000000
The last case has J = 0.1 kg·m², below the assumed minimum 0.8. Its 10 rad/s² acceleration does not contradict the conditional bound. It violates the assumptions needed to apply that bound.
Try it yourself
Exercise 1: keep inertia uncertainty and remove the other uncertainty
Use Ĵ = 1, B̂ = B = 0.2, J ∈ [0.8, 1.2], and d = 0. At v = −2 rad/s, request a_des = −1 rad/s². Find the command, acceleration range, and worst absolute error.
Check your answer: The torque is τ = −1 + 0.2(−2) = −1.4 N·m. The actual numerator is −1.4 − 0.2(−2) = −1 N·m.
The interval is [−1/0.8, −1/1.2] = [−1.25, −0.833333…] rad/s². Its worst absolute error from −1 is 0.25 rad/s². The smaller inertia gives the larger negative acceleration magnitude.
Exercise 2: a zero command with uncertain damping and disturbance
Use the default box and nominal model, but set v = −2 rad/s and a_des = 0. Find the applied torque and acceleration range. Can this interval justify a claim that acceleration is negative with 50% probability?
Check your answer: The nominal command is τ = 0.2(−2) = −0.4 N·m. The numerator is −0.4 + 2B + d, so its endpoints are −0.4 and +0.4 N·m.
The acceleration range is [−0.4/0.8, 0.4/0.8] = [−0.5, 0.5] rad/s². Both signs are possible. The box supplies no probabilities, so symmetry of these endpoints cannot establish a 50% probability claim.
Sources and further study
- Russ Tedrake, MIT Underactuated Robotics: Robust and Stochastic Control explains uncertainty sets, probability models, and worst-case reasoning.
- MathWorks: Uncertain Real Parameters describes nominal parameter values with bounded numerical ranges or additive variations.
- Russ Tedrake, MIT Underactuated Robotics: System Identification connects model fitting, excitation, omitted effects, and the distinction between local prediction and simulation error.
Continue with feedback control to see how a controller uses measured error to adjust a command when the nominal model falls short.