Chapter 6: Actuation and Drive Systems
Lesson 6: Choosing Actuators for a Task
This lesson develops a rigorous, quantitative methodology for selecting an actuator (electric, hydraulic, pneumatic, or compliant variants) for a specific robotic task. We formalize task requirements, derive sizing equations from first principles, and show how to check feasibility against actuator envelopes, duty-cycle limits, stiffness and backdrivability needs, and integration constraints. The lesson ends with multi-criteria decision frameworks and small cross-language implementation examples.
1. Why Actuator Selection Is a Design Problem
In previous lessons we studied actuator types and drive elements. Here we answer: given a task, which actuator architecture and size are appropriate? Selection is not about choosing the strongest device; it is about matching the task requirement set to the actuator capability set under physical and economic constraints.
We model selection as a constrained optimization: choose actuator design \( a \in \mathcal{A} \) that minimizes a cost functional while satisfying task constraints.
\[ \begin{aligned} \min_{a \in \mathcal{A}} \quad & J(a) = \sum_{j=1}^p w_j\,\phi_j(a) \\ \text{s.t.} \quad & \mathbf{c}(a) \le \mathbf{0}, \\ & \mathbf{g}(a) = \mathbf{0}. \end{aligned} \]
Here \( \phi_j(a) \) are design attributes (mass, cost, energy per cycle, maintenance risk, etc.), \( w_j \) are weights, and \( \mathbf{c},\mathbf{g} \) encode feasibility: torque/force, speed, bandwidth, travel range, environmental limits, and safety.
flowchart TD
S["Start: define task"] --> R["Quantify requirements: force/torque, speed, range, bandwidth, stiffness, duty"]
R --> T1["Is task mainly rotary or linear?"]
T1 -->|rotary| M["Candidate motors + transmissions"]
T1 -->|linear| C["Candidate cylinders / linear motors"]
M --> E1["Check envelopes: tau-omega, power, efficiency"]
C --> E1
E1 --> E2["Check dynamic limits: acceleration, reflected inertia"]
E2 --> E3["Check compliance/backdrivability & safety"]
E3 --> E4["Check duty/thermal and environment"]
E4 --> D["Multi-criteria ranking or optimization"]
D --> A["Select actuator + size"]
2. Formalizing Task Requirements
Let a task be specified by trajectory demands and interaction needs. We capture these by a requirement vector \( \mathbf{r} \):
\[ \mathbf{r} = \big[ r_F,\; r_v,\; r_x,\; r_b,\; r_k,\; r_{\eta},\; r_d,\; r_e \big], \]
with:
- \( r_F \): peak force/torque needed at the joint or output.
- \( r_v \): peak speed (linear or angular).
- \( r_x \): stroke or angular range.
- \( r_b \): required closed-loop bandwidth (students know linear control, so interpret as desired tracking bandwidth).
- \( r_k \): required output stiffness/compliance.
- \( r_{\eta} \): minimum efficiency or energy constraint.
- \( r_d \): duty cycle / thermal profile.
- \( r_e \): environment constraints (temperature, moisture, cleanliness, EMI, explosion risk, etc.).
The actuator feasibility set is \( \mathcal{F} = \{a \in \mathcal{A}: \mathbf{r} \preceq \mathbf{cap}(a)\} \), where \( \mathbf{cap}(a) \) is the capability vector.
3. Rotary Tasks: Motor + Transmission Sizing
Most joints in manipulators and many wheels are rotary. Suppose the required output torque profile is \( \tau_L(t) \) and output speed is \( \omega_L(t) \). Neglecting kinematics (reserved for later courses), we use rigid-body dynamics at the joint:
\[ \tau_L(t) = J_L\,\alpha_L(t) + \tau_f(\omega_L) + \tau_{ext}(t), \]
where \( J_L \) is load inertia about the joint, \( \alpha_L \) is load acceleration, \( \tau_f \) friction torque, and \( \tau_{ext} \) external interaction torque.
With a gear ratio \( g = \omega_m/\omega_L \) and transmission efficiency \( \eta_g \), the torque-speed relations are:
\[ \omega_m(t)=g\,\omega_L(t), \qquad \tau_L(t)=g\,\eta_g\, \tau_m(t) - \tau_{loss}(t). \]
Ignoring small dynamic loss torque \( \tau_{loss} \), the required motor torque becomes:
\[ \tau_m(t) \approx \frac{\tau_L(t)}{g\,\eta_g}. \]
Including motor inertia \( J_m \), total motor torque is:
\[ \tau_m(t) = \frac{\tau_L(t)}{g\,\eta_g} + J_m\,\alpha_m(t), \quad \alpha_m(t)=g\,\alpha_L(t). \]
Substitute \( \alpha_m=g\alpha_L \):
\[ \tau_m(t) = \frac{\tau_L(t)}{g\,\eta_g} + g\,J_m\,\alpha_L(t). \]
This shows a fundamental trade-off: increasing \( g \) reduces reflected load torque but increases the motor inertial torque term.
The reflected inertia at the motor shaft is \( J_{ref}=J_L/g^2 \).
\[ J_{eq} = J_m + \frac{J_L}{g^2}. \]
Thus the motor sees an equivalent inertia \( J_{eq} \) and must provide \( \tau_m = J_{eq}\alpha_m + \tau_{fric,m} \).
Torque–speed feasibility. A candidate motor with continuous limits \( \tau_{cont} \) and \( \omega_{max} \) is feasible if
\[ \max_t |\tau_m(t)| \le \tau_{peak}, \qquad \max_t |\omega_m(t)| \le \omega_{max}. \]
Additionally the mechanical power requirement must fit the envelope:
\[ P_{mech}(t)=\tau_m(t)\,\omega_m(t), \qquad \max_t |P_{mech}(t)| \le P_{rated}. \]
4. Duty Cycle and Thermal Sizing: Why RMS Torque Matters
Motors are limited thermally by copper losses \( P_{cu} = i^2 R \). For many motor families, torque is proportional to current: \( \tau_m = k_t i \).
Therefore copper losses are proportional to squared torque:
\[ P_{cu}(t) = \left(\frac{\tau_m(t)}{k_t}\right)^2 R = \frac{R}{k_t^2}\,\tau_m^2(t). \]
Proposition (RMS criterion). Over a periodic task of duration \( T \), average copper heating is proportional to \( \tau_{rms}^2 \), where
\[ \tau_{rms} = \sqrt{\frac{1}{T}\int_0^T \tau_m^2(t)\,dt }. \]
Proof. The average copper loss is
\[ \bar{P}_{cu} = \frac{1}{T}\int_0^T P_{cu}(t)\,dt = \frac{1}{T} \int_0^T \frac{R}{k_t^2}\,\tau_m^2(t)\,dt = \frac{R}{k_t^2}\,\tau_{rms}^2. \]
Since motor steady temperature rise is approximately proportional to average loss, the continuous torque rating must satisfy \( \tau_{rms} \le \tau_{cont} \). Peak torque may exceed continuous rating if its duration is short enough. ■
5. Linear Tasks: Force/Speed Sizing
For tasks requiring direct translation (grippers, legs, clamps, tooling axes), we size by force \( F \) and velocity \( v \).
Hydraulic/Pneumatic cylinders. With working pressure \( P \) and piston area \( A \):
\[ F = P A - F_{loss}, \qquad v = \frac{Q}{A}, \]
where \( Q \) is volumetric flow rate. Mechanical power is
\[ P_{mech} = F v \approx P Q. \]
Therefore feasibility checks are:
\[ \max_t F(t) \le P_{max} A, \qquad \max_t v(t) \le Q_{max}/A. \]
Linear electric actuators. If a linear motor produces force constant \( k_f \), then \( F = k_f i \), and RMS-force sizing is identical to the torque RMS logic in Section 4.
6. Bandwidth, Stiffness, and Backdrivability Criteria
You already know how bandwidth depends on plant inertia and actuator gain. Here the key connection is: higher reflected inertia and friction reduce achievable bandwidth.
Approximate bandwidth bound. For a joint modeled near an operating point as \( J_{eq}\ddot{q} + b\dot{q} = \tau \), the open-loop pole magnitude is roughly
\[ \omega_p \approx \frac{b}{J_{eq}}. \]
To achieve a closed-loop bandwidth \( r_b \), a rough feasibility condition is \( r_b \lesssim \gamma\,\omega_p \), where \( \gamma \) depends on controller aggressiveness. Since \( J_{eq}=J_m+J_L/g^2 \), large gear ratios can reduce bandwidth by inflating motor-side friction and inertia effects.
Stiffness and compliance. If an actuator includes an elastic element (Series Elastic Actuator), motor-side stiffness \( k_m \) in series with spring stiffness \( k_s \) yields output stiffness
\[ \frac{1}{k_{out}} = \frac{1}{k_s} + \frac{1}{k_m} \quad \Rightarrow \quad k_{out} = \left(\frac{1}{k_s}+\frac{1}{k_m}\right)^{-1}. \]
Backdrivability. Using a Coulomb-viscous friction approximation at the output: backdriving is possible if external torque overcomes friction:
\[ |\tau_{ext}| > \tau_c + b\,|\omega_L|. \]
High-ratio gears increase \( \tau_c \) and make backdriving difficult, which is unsafe in human interaction tasks but useful for holding loads passively.
7. Practical Selection Rules (Quantitative Checklist)
- Compute required profiles \( \tau_L(t), \omega_L(t) \) or \( F(t), v(t) \) from task dynamics.
- Select architecture class: electric for clean/high-efficiency/broad control, hydraulics for extreme force density, pneumatics for cheap fast bursts or on–off tasks, SEA/VSA when compliance or shock tolerance is required.
- Pick transmission ratio \( g \) to satisfy speed and torque envelopes: \( \omega_m=g\omega_L \), \( \tau_m=\tau_L/(g\eta_g)+gJ_m\alpha_L \).
- Check peak torque/force and speed limits.
- Check RMS thermal limits: \( \tau_{rms} \le \tau_{cont} \) or \( F_{rms} \le F_{cont} \).
- Verify bandwidth and stiffness relative to task needs.
- Verify environment and integration (sealing, lubrication, noise, EMI, cleanliness, power supply).
- Rank feasible candidates with \( J(a)=\sum w_j\phi_j(a) \).
8. Python Lab: Selecting from a Catalog
We implement a minimal selector. Inputs are task profiles and a small actuator catalog. The code filters feasible actuators then ranks them.
import numpy as np
# --- Task requirement profiles (example) ---
# peak load torque and speed
tau_L_peak = 35.0 # Nm
omega_L_peak = 4.0 # rad/s
alpha_L_peak = 12.0 # rad/s^2
J_L = 0.9 # kg m^2
# desired duty cycle represented by an example torque waveform
tau_m_samples = np.array([0, 10, 30, 10, 0]) # Nm after gearing
tau_rms_req = np.sqrt(np.mean(tau_m_samples**2))
# bandwidth and stiffness needs (qualitative scalar here)
bw_req = 8.0 # rad/s (rough target)
k_out_req = 500.0 # Nm/rad
# --- Candidate actuator catalog (motor + gear) ---
catalog = [
dict(name="BLDC-A", tau_cont=12, tau_peak=40, omega_max=80, J_m=0.0008, mass=1.2, cost=300, eta=0.90),
dict(name="Servo-B", tau_cont=20, tau_peak=60, omega_max=40, J_m=0.0016, mass=2.2, cost=550, eta=0.85),
dict(name="Hydro-C", tau_cont=50, tau_peak=120, omega_max=25, J_m=0.0030, mass=6.0, cost=900, eta=0.70),
]
eta_g = 0.92
g_candidates = [5, 8, 12, 16]
def feasible(motor, g):
omega_m_peak = g * omega_L_peak
tau_m_peak = (tau_L_peak/(g*eta_g)) + g*motor["J_m"]*alpha_L_peak
return (tau_m_peak <= motor["tau_peak"] and
omega_m_peak <= motor["omega_max"] and
tau_rms_req <= motor["tau_cont"])
feasible_designs = []
for m in catalog:
for g in g_candidates:
if feasible(m, g):
feasible_designs.append((m["name"], g, m))
print("Feasible designs:")
for name, g, m in feasible_designs:
print(name, "gear", g)
# --- weighted ranking among feasible set ---
w_mass, w_cost, w_eta = 0.4, 0.4, 0.2
def score(m):
return w_mass*m["mass"] + w_cost*(m["cost"]/1000.0) - w_eta*m["eta"]
ranked = sorted(feasible_designs, key=lambda x: score(x[2]))
print("\nRanked feasible designs:")
for name, g, m in ranked:
print(f"{name} gear {g} score={score(m):.3f}")
Extending this to linear actuators is straightforward by replacing torque-speed checks with force-velocity checks.
9. C++ Mini-Example
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
struct Motor {
string name;
double tau_cont, tau_peak, omega_max, Jm, mass, cost, eta;
};
int main() {
double tauL_peak=35.0, omegaL_peak=4.0, alphaL_peak=12.0;
double eta_g=0.92;
vector<int> gears = {5,8,12,16};
vector<Motor> catalog = {
{"BLDC-A", 12, 40, 80, 0.0008, 1.2, 300, 0.90},
{"Servo-B",20, 60, 40, 0.0016, 2.2, 550, 0.85},
{"Hydro-C",50,120, 25, 0.0030, 6.0, 900, 0.70}
};
double tau_samples[] = {0,10,30,10,0};
double mean_sq=0;
for(double t: tau_samples) mean_sq += t*t;
double tau_rms_req = sqrt(mean_sq/5.0);
for(const auto& m: catalog){
for(int g: gears){
double omega_m_peak = g * omegaL_peak;
double tau_m_peak = (tauL_peak/(g*eta_g)) + g*m.Jm*alphaL_peak;
if(tau_m_peak <= m.tau_peak &&
omega_m_peak <= m.omega_max &&
tau_rms_req <= m.tau_cont){
cout << "Feasible: " << m.name << " gear " << g << endl;
}
}
}
return 0;
}
10. Java Mini-Example
import java.util.*;
class Motor {
String name;
double tauCont, tauPeak, omegaMax, Jm, mass, cost, eta;
Motor(String n,double tc,double tp,double om,double jm,double ms,double c,double e){
name=n; tauCont=tc; tauPeak=tp; omegaMax=om; Jm=jm; mass=ms; cost=c; eta=e;
}
}
public class ActuatorSelect {
public static void main(String[] args){
double tauLPeak=35.0, omegaLPeak=4.0, alphaLPeak=12.0, etaG=0.92;
int[] gears = {5,8,12,16};
List<Motor> catalog = Arrays.asList(
new Motor("BLDC-A",12,40,80,0.0008,1.2,300,0.90),
new Motor("Servo-B",20,60,40,0.0016,2.2,550,0.85),
new Motor("Hydro-C",50,120,25,0.0030,6.0,900,0.70)
);
double[] samples = {0,10,30,10,0};
double meanSq=0;
for(double s: samples) meanSq += s*s;
double tauRmsReq = Math.sqrt(meanSq/samples.length);
for(Motor m: catalog){
for(int g: gears){
double omegaMPeak = g*omegaLPeak;
double tauMPeak = (tauLPeak/(g*etaG)) + g*m.Jm*alphaLPeak;
if(tauMPeak <= m.tauPeak && omegaMPeak <= m.omegaMax && tauRmsReq <= m.tauCont){
System.out.println("Feasible: "+m.name+" gear "+g);
}
}
}
}
}
11. MATLAB/Simulink Mini-Example
% Task requirements
tauL_peak = 35; omegaL_peak = 4; alphaL_peak = 12;
eta_g = 0.92;
% Catalog: [tau_cont tau_peak omega_max Jm mass cost eta]
catalog = [
12 40 80 0.0008 1.2 300 0.90;
20 60 40 0.0016 2.2 550 0.85;
50 120 25 0.0030 6.0 900 0.70
];
names = ["BLDC-A","Servo-B","Hydro-C"];
gears = [5 8 12 16];
tau_samples = [0 10 30 10 0];
tau_rms_req = sqrt(mean(tau_samples.^2));
feasible = [];
for i=1:size(catalog,1)
for g=gears
tau_m_peak = (tauL_peak/(g*eta_g)) + g*catalog(i,4)*alphaL_peak;
omega_m_peak = g*omegaL_peak;
if tau_m_peak <= catalog(i,2) && omega_m_peak <= catalog(i,3) && tau_rms_req <= catalog(i,1)
feasible = [feasible; i g tau_m_peak omega_m_peak];
end
end
end
disp("Feasible designs [motorIndex gear tau_m_peak omega_m_peak]:");
disp(feasible);
% Simulink note:
% Use a "Signal Builder" for tau_L(t), a Gain block for 1/(g*eta_g),
% and an Inertia block for g*Jm*alpha_L(t) to verify motor torque demand.
In Simulink, your prior control knowledge lets you close the loop around the equivalent plant \( J_{eq}\ddot{q}+b\dot{q} \) to test if the required bandwidth is reachable with chosen actuator gains.
12. Problems and Solutions
Problem 1 (Gear Ratio Trade-off): A rotary joint has \( J_L=1.2 \,\text{kg m}^2 \), required peak load torque \( \tau_{L,peak}=48\,\text{Nm} \), peak load acceleration \( \alpha_{L,peak}=10\,\text{rad/s}^2 \), and peak load speed \( \omega_{L,peak}=3\,\text{rad/s} \). Candidate motor has \( J_m=0.001\,\text{kg m}^2 \), \( \tau_{peak}=25\,\text{Nm} \), and \( \omega_{max}=70\,\text{rad/s} \). Transmission efficiency is \( \eta_g=0.9 \). Find a range of feasible gear ratios.
Solution: Motor speed constraint:
\[ g\,\omega_{L,peak} \le \omega_{max} \Rightarrow g \le \frac{70}{3} \approx 23.33. \]
Motor peak torque demand:
\[ \tau_{m,peak}= \frac{48}{g\,0.9} + g(0.001)(10) = \frac{53.33}{g} + 0.01g. \]
Require \( \tau_{m,peak} \le 25 \):
\[ \frac{53.33}{g} + 0.01g \le 25. \]
Multiply by \( g \) (positive):
\[ 53.33 + 0.01 g^2 \le 25 g \Rightarrow 0.01 g^2 - 25 g + 53.33 \le 0. \]
Solve quadratic roots: \( g = \frac{25 \pm \sqrt{25^2 - 4(0.01)(53.33)}}{2(0.01)} \).
\[ g \approx \frac{25 \pm \sqrt{625 - 2.133}}{0.02} = \frac{25 \pm 24.957}{0.02}. \]
Thus \( g_1 \approx 2.15 \), \( g_2 \approx 2497.85 \). The inequality holds for \( g \in [2.15,\;2497.85] \), but speed restricts to \( g \le 23.33 \). Therefore feasible \( g \in [2.15,\;23.33] \).
Problem 2 (RMS Torque): A motor executes a periodic task with torque: \( \tau_m(t)=10\,\text{Nm} \) for 2 s, then \( \tau_m(t)=0 \) for 3 s. Compute \( \tau_{rms} \) and decide feasibility for a motor with continuous rating \( \tau_{cont}=7\,\text{Nm} \).
Solution: Period \( T=5\,\text{s} \).
\[ \tau_{rms}= \sqrt{\frac{1}{5}\left( \int_0^2 10^2 dt + \int_2^5 0^2 dt\right)} = \sqrt{\frac{1}{5}(100\cdot 2)} = \sqrt{40} \approx 6.32\,\text{Nm}. \]
Since \( 6.32 < 7 \), thermal feasibility holds.
Problem 3 (Cylinder Sizing): A linear clamping task needs peak force \( F_{peak}=8\,\text{kN} \) and peak closing speed \( v_{peak}=0.12\,\text{m/s} \). Available pneumatic supply is \( P_{max}=0.7\,\text{MPa} \), max flow \( Q_{max}=1.2\times10^{-3}\,\text{m}^3/\text{s} \). Find a feasible piston area range.
Solution: Force constraint:
\[ A \ge \frac{F_{peak}}{P_{max}} = \frac{8000}{0.7\times10^6} \approx 1.143\times 10^{-2}\,\text{m}^2. \]
Speed constraint:
\[ v_{peak} \le \frac{Q_{max}}{A} \Rightarrow A \le \frac{Q_{max}}{v_{peak}} = \frac{1.2\times10^{-3}}{0.12} = 1.0\times10^{-2}\,\text{m}^2. \]
The constraints conflict: \( A \ge 1.143\times10^{-2} \) but \( A \le 1.0\times10^{-2} \). So pneumatics cannot meet both force and speed; a hydraulic cylinder or a different supply is required.
Problem 4 (Series Elastic Stiffness): A SEA uses a spring of stiffness \( k_s=600\,\text{Nm/rad} \), and the motor + transmission behaves like stiffness \( k_m = 2400\,\text{Nm/rad} \). Compute output stiffness and comment on compliance.
Solution:
\[ k_{out} = \left(\frac{1}{600}+\frac{1}{2400}\right)^{-1} = \left(\frac{4+1}{2400}\right)^{-1} = \left(\frac{5}{2400}\right)^{-1} = 480\,\text{Nm/rad}. \]
Output stiffness is dominated by the weaker spring, producing substantial compliance suitable for safe interaction tasks.
13. Summary
Actuator choice is a constrained design problem. We formalized task requirements, derived rotary and linear sizing relations, proved the RMS thermal criterion, and integrated bandwidth, stiffness, and backdrivability into feasibility checks. Feasible candidates are then ranked using multi-criteria objectives. These ideas prepare you for later system-level design labs.
14. References
- Hogan, N. (1985). Impedance control: An approach to manipulation. ASME Journal of Dynamic Systems, Measurement, and Control, 107(1), 1–24.
- Salisbury, J.K. (1980). Active stiffness control of a manipulator in Cartesian coordinates. Proceedings of the 19th IEEE Conference on Decision and Control, 95–100.
- Whitney, D.E. (1982). Quasi-static assembly of compliantly supported rigid parts. Journal of Dynamic Systems, Measurement, and Control, 104(1), 65–77.
- Pratt, G.A., & Williamson, M.M. (1995). Series elastic actuators. Proceedings of IEEE/RSJ International Conference on Intelligent Robots and Systems, 399–406.
- Robinson, D.W., Pratt, J.E., Paluska, D., & Pratt, G.A. (1999). Series elastic actuator development for a biomimetic walking robot. Proceedings of IEEE/ASME International Conference on Advanced Intelligent Mechatronics, 561–568.
- Nakamura, Y., & Yamane, K. (2000). Dynamics computation of structure-varying kinematic chains. IEEE Transactions on Robotics and Automation, 16(2), 124–134.
- Peshkin, M., & Sanderson, A.C. (1988). The motion of a sliding object in a compliant grasp. IEEE Transactions on Robotics and Automation, 4(4), 397–412.
- Carignan, C.R., Cleary, K., & Kang, H. (2009). Novel scaling laws for robotic actuator selection. ASME Journal of Mechanisms and Robotics, 1(2), 021003.