0% found this document useful (0 votes)
29 views

Scirobotics - Adj7246 SM

Uploaded by

zhc5057
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

Scirobotics - Adj7246 SM

Uploaded by

zhc5057
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

Supplementary Materials for

Elastic energy-recycling actuators for efficient robots

Erez Krimsky and Steven H. Collins

Corresponding author: Steven H. Collins, [email protected]

Sci. Robot. 9, eadj7246 (2024)


DOI: 10.1126/scirobotics.adj7246

The PDF file includes:

Materials and Methods


Figs. S1 to S34
Tables S1 and S2
Legends for movies S1 to S5
Legends for data S1 and S2
Legends for design files
References (56–58)

Other Supplementary Material for this manuscript includes the following:

Movies S1 to S5
Data S1 and S2
Design Files
Materials and Methods

Design
Actuator Hardware Overview
The main structure of the actuator consists of two “walls” made from 3.18 mm thick sheets
of waterjet-cut quasi-isotropic carbon fiber (fig. S6A). On the end of the actuator opposite the
actuated arm, two split hub clamps connect these walls to a hollow aluminum cross-shaft which
provides a convenient mount for the actuator. On the other end of the actuator, the walls are
connected to a cross brace made from 3D printed nylon with carbon fiber reinforcement. On the
top and bottom of the actuator the walls are connected to assemblies consisting of 3.18 mm thick
laser-cut acrylic plates and 3D printed PLA cross-bars. These cross-bar assemblies substantially
increase the stiffness of the actuator in the direction normal to the carbon fiber w alls, which
increases the buckling resistance for the primary structural buckling modes of the actuator. In
addition to serving a structural purpose, the acrylic plates serve as mounting locations for the
embedded circuits in the actuator and the cross-bars provide mounting locations for the actuator
body panels. The body panels are 0.64 mm thick 5052 aluminum sheet metal components which
help to keep dust and contaminants out of the actuator while also preventing UV light from
degrading the natural rubber of the springs. The mass of all the energy-recycling components
(table S1) is about 0.56 kg which includes the spring and clutches (0.24 kg) and supporting
components (0.32 kg). The total mass of the actuator assembly is 2.7 kg
The springs in the actuator are connected to the actuator frame via two machined aluminum
plates (fig. S6B). E ach p late h as s ix p rotruding “ fingers” th at ar e in dividually instrumented
with strain gauges to provide a force reading for each spring. The fingers have a C-shaped cross
section to increase bending stiffness and reduce strains caused by induced bending at the spring
connection points, while keeping the cross-sectional area low enough to achieve a measurable
compressive strain.
The frame electrode mounting plates (fig. S6C) provide mounting locations for the six frame
electrodes in the actuator. Ribs on the inside surface of each plate create shelves for the frame
electrode bases to slide into which ensures proper alignment before the frame electrode bases
are screwed into place. The frame electrode mounting plates are connected to the walls using
machine screws that thread into brass heat-set inserts.
A machined aluminum output shaft connects the output electrodes and the motor to the
“arm” of the actuator (fig. S9A). The shaft is supported by crossed roller bearings on both ends
which are pressed into machined bearing cups that connect the bearings to the actuator frame.
The motor (T-Motor AK80-6) is connected to the shaft via a flanged shaft adapter which bolts
onto the output of the motor and is connected to the output shaft by a socket head cap screw
with a steel belleville spring washer to prevent the screw from backing out. A 3D printed spacer
offsets the motor from the wall of the actuator to provide clearance for the shaft adapter bolts
and other assembly bolts.
The twelve output cables which transmit the spring force to the output shaft are routed over
redirect pulleys (fig. S9) and connected to two drums mounted on the output s haft. Each drum
is comprised of semicircular drum body and a clamping bracket. Each drum body has six
tracks for the output cables and is made from 3D printed nylon with embedded carbon fiber for
increased stiffness. A protrusion on the side of each drum body limits the angular displacement
of the actuator by coming into contact with hard stops extending from the bearing mount cups at
both ends of the 90◦ angular displacement range. Four heat-set inserts in the drum body provide
threads for connecting the clamping bracket. The clamping brackets have slots for connecting
each of the copper wire terminations of the output cables. Each output cable is routed over a
redirect idler pulley so that the same drum radius can be used for each spring. The idler pulleys
are supported by four machined aluminum pulley mounts (fig. S9) that are bolted into a bracing
component that sits between the output shaft and the frame electrodes. Rope guides mounted
on the bracing component prevent the wire ropes from coming off of the groove in each redirect
pulley.
The arm of the actuator consists of a carbon fiber t ube w ith a 2 8.6 m m d iameter a nd a
1.59 mm wall thickness. The tube is connected to the output shaft via an aluminum framing
connector that bolts into the shaft with four machine screws. A 3D printed adapter is connected
to the end of the arm tube that facilitates connecting either a point foot or stack of weights to
the end of the arm (fig. S10).

Double Clutched Spring


Fabrication and Assembly
Each spring was glued to a rigid base using cyanoacrylate adhesive. The base components were
3D printed using carbon fiber e mbedded nylon f or i ncreased s tiffness. B rass h eat s et inserts
were used to provide mounting threads in the spring base components. Strips of 0.127 mm
thick FR4 measuring 88.9 mm × 12.7 mm were glued to the other end of the spring on both
sides using a cyanoacrylate adhesive to provide a stiff surface to connect the electrodes to the
spring. The spring-frame and spring-output electrodes were connected to 0.127 mm thick FR4
strips with VHB on the end that connects to the spring, and to 0.76 mm thick fiberglass bars
(122 mm × 7.8 mm) at the other end. Additional strips of VHB were used to adhere the FR4
that was glued to the spring to the FR4 connected to the electrodes. A strip of copper tape was
used to create a high conductivity surface to make electrical connections to each electrode. To
make an electrical connection between the copper and the aluminum coating of the electrode,
a small amount of acetone was applied with a laboratory wipe to strip off a small area of the
dielectric coating and expose the aluminum. Although the adhesive backing on the copper tape
is intended to be conductive, we found that electrical connections that relied solely on the copper
tape adhesive were unreliable. To increase conductivity between the electrode surface and the
copper, we deposited a nickel coating over the edge of the aluminum-copper interface with a
nickel pen (MG Chemicals 841AR-P). These connections were then reinforced with a strip of
conductive polyester fabric tape with a conductive acrylic adhesive, and covered with a layer of
Kapton (polyamide) tape for insulation.
The output electrode and frame electrode are connected to a 3D printed base at one end and
a fiberglass bar that facilitates connecting to the electrode tensioners on the other end (fig. S3).
Assembly “templates” were used to ensure alignment when affixing components to the elec-
trodes (fig. S5). To assemble the output electrodes, a strip of electrode material is first taped
with the dielectric side facing down on to a clean work surface. A laser-cut acrylic assembly
template is then aligned with the edges of the electrode and taped down. The output electrode
base and fiberglass are then attached to the electrode with VHB adhesive, using the assembly
template to guide the components into place. The assembly template is then removed, keeping
the output electrode taped down. Excess material that extends beyond the output electrode base
can be trimmed with a rotary cutter or other handheld blade. Approximately 7.6 mm of material
is intentionally left extending beyond the end of the fiberglass batten. A piece of double sided
tape (or VHB) is applied to this extension so that it can be wrapped around the fiberglass batten
and affixed to its back side. This provides a rounded edge of dielectric material and prevents
rubbing of the fiberglass batten directly on the spring-output electrode which could damage the
dielectric or leave fiberglass dust residue. Additionally, the exposed aluminum at the edge of the
cut electrode would be more likely to lead to dielectric breakdown or cause a short circuit with
the spring-output electrode. A similar process and assembly templates are used to ensure align-
ment when assembling the spring electrodes and frame electrode and when affixing the spring
electrodes to the spring. After assembly, slits were cut lengthwise in the output and frame
electrodes every 12.7 mm as this has been shown to improve the clutch response time (16).

Clutch Overlap Area


Given the spring displacement x and arm angular position θ, the overlap length (ℓol ) in the
clutches is given by

ℓol,frame = ℓol,frame,0 + x, (1)


ℓol,output = ℓol,output,0 + x + rθ (2)

for the frame clutch and output clutch respectively (where ℓol,frame,0 = 73 mm, ℓol,output,0 =
18 mm, r = 25 mm). The overlap width is simply the width of each clutch which is 89 mm for
all electrodes in the prototype.

Electrode Tensioning, Alignment, & Voltage Transmission


High voltage signals are transmitted to the spring-output electrodes and spring-frame electrodes
by the same insulated steel wire ropes that are used to tension the electrodes (fig. S3B). Each
wire rope terminates in a soldered connection to a short length of insulated copper wire soldered
to a small rectangular copper tab (∼5 mm×5 mm). These copper tabs are connected to the
copper tab of the spring electrodes via double-sided conductive polyester adhesive tape. An
additional piece of single-sided conductive polyester adhesive tape followed by Kapton tape are
placed over these connections to improve electrical and mechanical robustness.
High voltage signals are transmitted to the frame electrodes via cables soldered onto copper
tabs (fig. S4B). The copper tabs are connected to the frame electrode using the same process
that was used for the copper pads on the spring electrodes. High voltage signals are transmitted
to the output electrodes via the same output cables that transmit the output clutch force to the
output drum. The output cables are connected to ring terminals via a crimped connection. These
ring terminals are connected both mechanically and electrically to the output electrode via ma-
chine screws that thread into brass heat set inserts in the output electrode bases (fig. S4C). The
other end of each output cables features a crimped copper sleeve that facilitates the mechanical
connection to the output drum. For every output electrode, one of the two output cables is ter-
minated in a soldered or crimped connection to an insulated copper wire that transmits the high
voltage signal from a clutch driver board.
Frame and output electrode tensioners (fig. S7D) connect to the electrodes via holes in the
fiberglass b ars a ffixed to th e el ectrodes. A sm all pi ece of fis hing lin e is rou ted thr ough the
fiberglass bars and tied onto the ends of rubber rods that maintain electrode tension. The fishing
line is routed to prevent the end of the output electrode from rotating as it moves. The tensioners
are connected to the body of the actuator via a crimped eyelet components.

Communication
Communication between the Raspberry Pi and a host computer and data logging are achieved
via Lightweight Communications and Marshalling (LCM) (56) over ethernet. The Raspberry
Pi clock is synced with the host computer by running an NTP server on the host and an NTP
client on the Raspberry Pi. The host computer communicates with the motor in the actuator via
a commercially available USB to CAN board.

Spring Force Sensors


To calibrate the spring force sensing strain gauges, the motor and clutches stretched the springs
to different displacements, resulting in different levels of compressive strain on the strain gauges.
We found there was some mechanical crosstalk between the strain gauges that we accounted for
by stretching different subsets of springs together in the calibration process and then fitting a
map matrix C ∈ R6×6 from the data. The calibration fitting process minimizes the error be-
tween the total spring force fˆ multiplied by the drum radius r and the estimated motor torque τm.
The total torque that needs to be overcome by the motor can be written as r uTj fj + ko θj + fo ,
where fj ∈ R6 is the spring force, and u ∈ {0, 1}6 is a binary control vector where u = 1 in-
dicates that spring is engaged. The term ko θj + fo is included to account for the small torque
applied to the shaft from the tensioners on the output electrodes. We use a simple linear model
for the tensioner force where ko is an effective stiffness, fo is an offset force, and θj is the mea-
sured motor displacement angle. The amplified strain gauge signal for the jth point is denoted
by sj ∈ R6 . All signals are offset at startup so that sj = 0 when all springs are slack. If
there was no crosstalk between the sensors and each strain gauge had exactly the same gain, the
mapping matrix C could be simply represented by a scalar gain term multiplied by the identity
matrix. To account for small discrepancies in gains, we define g ∈ R6 to be the nominal gain
for each sensor and constrain C = diag(g) + G where G is a matrix that we optimize to account
for sensor crosstalk. The calibration matrix is then found by solving the following optimization
problem:

minimize τm + rfˆ + λ∥G∥F


fj ,fˆ,C,G,g 2

fˆj = uTj fj + ko θj + fo ∀ j

subject to
(3)
fj = Csj ∀ j
C = G + diag(g)
fj ⪰ fmin ,
where λ is a regularization weight on the Frobenius norm of G to prevent overfitting. As the
springs are exclusively loaded in tension, physically accurate spring forces should only take
on positive values. Instead of imposing the constraint fj ⪰ 0 for each spring, we set a small
negative spring force fmin as the lower bound to allow the optimization to fit small negative
spring forces, some of which may simply result from sensor noise. This optimization problem
is convex and can therefore be easily solved to optimality.

Control
Motor Controller
We use a computed torque controller (24) to achieve trajectory tracking with the motor in the
actuator (fig. S18A). This control architecture assumes we have a desired trajectory θdes (t) and a
model of the plant that allows us to compute required torques τdes (t) that would cause the robot
to exactly follow the desired trajectory.
The desired torque as a function of θdes and θ is given by

τdes = M (θ)θ̈des + G(θ), (4)

where M (θ) is the effective mass matrix and G(θ) is the gravitational torque. This motor control
approach allows the spring controller to assume that the motor will provide whatever torque is
required to achieve position tracking which greatly simplifies spring control. For a simple mass
m, connected to an arm with length ℓ, this can written as

τdes = mℓ2θ̈des + mgℓ cos(θ), (5)


where θ is the joint angle from horizontal and g is the acceleration due to gravity.
For the energy-recycling actuator where both the springs and motor apply torque on the
same joint, spring torques need to be accounted for in the torque commanded to the motor. We
will denote the binary spring control vector as u where uj = 1 denotes that the jth spring is
engaged and uj = 0 denotes that the jth spring is disengaged. Given an estimate of the spring
force f for each spring, the spring torque is estimated as
τs = rf T û, (6)
where r is the output drum radius. We use û instead of u to account for the response time of
the springs and avoid sharp changes in commanded motor torque. The effective spring control
vector û is calculated as
j
  
exp min{βd +td −t,0} uj = 0
j αd
û =   (7)
1 − exp tje −t u j
= 1,
αe

where t is the current time, tjd is the time at the start of the last disengagement, tje is the time
at the end of the last engagement, and βd , αd and αe are constants that shape the modeled
initial offset and exponential decay (or rise) of the spring torque (βd = 10 ms, αd = 28 ms,
αe = 20 ms).
The tensioners connected to the output electrodes apply a torque on the output shaft that
depends on the shaft angle θ. The tensioner torque, τtens , is given by
τtens = r(ktens θ + ftens,0 ), (8)
where ktens is an effective tensioner stiffness and ftens,0 is an effective tensioner force at θ = 0.
Given the spring torque τs , the feed-forward motor torque is then calculated as
τff = τdes − τs − τtens + τc sign(θ̇des ) + Jm θ̈des (9)
where τc and Jm θ̈des account for coulomb friction and motor rotor inertia. For motor-only
actuation τs = 0. We found that the viscous damping in the motor was not substantial enough
to require additional compensation. To account for model errors and disturbances, we add
proportional and derivative feedback terms with gains denoted kp and kd . The embedded motor
controller outputs a motor torque τm according to
τm = τff + kp (θ − θdes ) + kd (θ̇ − θ̇des ), (10)
where τff is the feed-forward torque.

Offline Spring Controller


In this section we explain our approach to solving for an optimized sequence of spring control
for a given predefined trajectory θdes(t) with known required torque τdes(t). Assuming the arm
will perfectly track the desired trajectory allows the spring displacement to be purely a function
of the spring engagement and disengagement times, and decouples the task of spring control
from arm position tracking.
The goal of the offline controller is to produce a pattern of spring torque that minimizes
motor electrical power consumption. Writing the motor electrical power as P = IV and sub-
stituting V = IR + kt θ̇, where R is the winding resistance, I is the q-axis current, and kt is the
torque constant, we can write the motor energy consumption as
Z T
W = IV dt
0
Z T  
= I IR + kt θ̇ dt
0
Z T Z T
2
= I R dt + Ikt θ̇ dt
0 0
 Z T Z T
R 2
= τ dt + τ θ̇ dt , (11)
kt2 0 0
where we use the substitution τ = kt I in the last step. This shows that motor electrical power
can be broken down into mechanical work delivered and wasted thermal energy from Joule
heating which is proportional to the square of the motor torque. To minimize the wasted heat
energy, we set the integral of the motor torque squared as the minimization objective.
In the following section we explain how we encode the optimal spring control problem as
a mixed integer quadratic program (MIQP). For a fixed number of time steps N , and number
of springs n, there are 2N n possibilities for the sequence of spring engagements and disengage-
ments which makes any type of brute force search approach intractable. The binary constraints
on the spring control variables make this optimization non-convex and NP-hard (57), however,
by structuring the problem as an MIQP and employing a sophisticated MIQP solver, the prob-
lem can be solved efficiently.
We pose this optimization as a discrete time problem with N time points. To reduce the
number of required time points and limit the dimensionality of the optimization problem without
sacrificing accuracy, we use a non-uniform time vector t ∈ RN , which uses smaller time steps
at points where there are sharper changes in θdes or τdes . Here we write the problem generally
for n springs where n = 6 for our prototype. We use a binary vector u ∈ {0, 1}n to denote the
spring control control vector. Subscripts are used to denote time indexing e.g. ui is the spring
control input at the ith time step. Superscripts correspond to individual springs e.g. u3 = 1
denotes spring 3 is engaged and u5 = 0 denotes spring 5 is disengaged. Spring displacements
are denoted x ∈ Rn .
Denoting the spring force as f , the total spring torque can be written as a function of the
control u and drum radius r (which is the same for each spring in our prototype) as
Xn
τout,i = rj fij uji . (12)
j=1
The bilinear term fij uji makes this constraint non-convex, however, as u is a binary variable this
constraint can be linearized by adding auxiliary constraints (23).
We approximate the polynomial spring model (eq. 30) with a piecewise linear function
(fig. S19), given by  j
m0 xi
 x ≤ x0 ,
j j
f i = m 1 x i + b1 x ≤ x 1 , (13)
j

m2 xi + b2 otherwise.

By associating binary variables with the range of the spring displacement, piecewise linear
constraints can be expressed as a series of simple linear constraints.
In addition to the binary spring control vector u, we define a binary spring engagement
vector e and disengagement indicator vector d where [eji = 1] ⇐⇒ [uji+1 − uji = 1] and
[dji = 1] ⇐⇒ [uji+1 − uji = −1]. The above logical constraints can be encoded as linear
inequalities by

di ⪯ui (14a)
ei ⪯1 − ui (14b)
ui+1 − ui ⪯ei − di . (14c)

These new variables are redundant once u has been defined, but they are useful in defining other
constraints. We also define a variable c ∈ Rn where
N
X
c= e i + di , (15)
i=1

such that cj gives the total number of control changes made for the jth spring. We denote the
engagement and disengagement displacement loss variables as γ and δ respectively (e.g. γ95
denotes how much spring displacement is lost by engaging spring 5 at the 9th time step). The
displacement loss is proportional to the initial spring force and inversely proportional to the sum
of the spring stiffness and clutch stiffness. This is given by
!
j
f
γij = i
eji (16a)
koc + ks
!
j
f
δij = i
dji , (16b)
kf c + ks

where koc and kf c are approximate clutch stiffnesses for the output and frame clutch, and ks is
an approximate linearized spring stiffness. Because e and d are binary, these constraints can be
converted to a linear form by adding auxiliary linear constraints.
Without engagement or disengagement displacement losses, the spring displacement dy-
namics could be written as xi+1 = xi − r∆θiui where ∆θi is the angular displacement of the
arm from time step i to i + 1, meaning that springs that are disengaged stay in place and springs
that are engaged move with the arm. To incorporate the displacement losses into the dynamics,
we write the spring dynamics as

xi+1 = xi − r∆θi ui − δi − γi . (17)

We also impose limits on the spring displacement to prevent the spring from going completely
slack or stretching beyond its predefined limits,

xmin ⪯ x ⪯ xmax . (18)

Enforcing cyclicality constraints on the spring displacements ensures that there is no net
energy loss or gain by the springs in each cycle. Due to the discretization of the time steps and
the binary constraint on the spring control values, the hard constraint x1 = xN might not be
feasible. Instead, we impose a limit ϵ, on the cyclicality error and enforce the constraints

xN − x1 ⪯ ϵ (19a)
xN − x1 ⪰ −ϵ. (19b)

Small cyclicality errors in displacement are then fixed in a cyclicality correction post processing
step. We impose hard cyclicality constraints (e.g. u1 = uN ) on the binary variables u, e and d.
We explicitly add constraints to set a minimum interval time for periods where the spring is
engaged or disengaged. This prevents attempting to change a spring state faster than the springs
can respond and allows the electrode vibrations to settle between subsequent control changes.
Denoting the minimum engagement interval as ∆ton and the minimum disengagement interval
as ∆toff we define the sets

Ei = {k | tk − ti mod p ≤ ∆ton } (20a)


Di = {k | tk − ti mod p ≤ ∆toff }, (20b)

where p is the period of the cyclical trajectory and mod p accounts for wraparound. We then
enforce the interval constraints with linear inequalities given by
X j
1 − uji + dk + ejk ≤ 2 (21a)
k∈Ei
X
uji + djk + ejk ≤ 2. (21b)
k∈Di

We use a longer ∆ton than ∆toff because engagement vibrations can take longer to settle.
The primary optimization objective is to minimize the mean square difference between the
desired torque and the spring torque. Additional terms in the cost function make the optimiza-
tion better posed. We add linear and quadratic costs terms on spring control changes c. We
also add a quadratic weight term on the spring displacements as using more springs at a lower
displacement is more robust to clutch failure than using fewer springs at larger displacements.
Lastly, we add a quadratic cost term on the cyclicality error. The optimization problem can then
be written as
minimize (τdes − τout )T Q(τdes − τout ) + w0 cT c + w1 ∥c∥1 +
τout ,x,u,f,e,d,c,γ,δ
N
X
w2 xTi xi + w3 (xN − x1 )T (xN − x1 )
i=1
subject to Torque Constraints (12)
(22)
Force Constraints (13)
Engagement/Disengagement Constraints (14), (15), (16)
Dynamics (17), (18)
Cyclicality (19)
Interval Constraints (21),

where w0 , w1 , w2 and w3 are scalar weights. The scaling matrix Q accounts for the non-uniform
time sampling in the time vector t. The optimization is solved using the commercial solver
Gurobi.
Due to the coarse discretization and the piecewise linearization of the spring model, the
resulting control sequences from solving the MIQP can result in spring displacements where
the initial spring position and final spring position differ by a few m illimeters. We employ a
simple approach to fixing cyclicality errors that consists of adjusting the timing of the first or last
control change in the sequence to ensure cyclicality. For each spring, we compute how much
the first o r l ast c ontrol c hange i n t he c ontrol s equence w ould n eed t o b e s hifted f orwards or
backwards in time to ensure cyclicality and choose whichever adjustment requires the smallest
temporal change from the nominal solution.

Online Spring Controller


The online spring controller attempts to minimize the error between the measured spring dis-
placements and the nominal offline spring d isplacements. Notably, the online spring controller
does not explicitly consider the required torque for the task and assumes that proper spring
torques will be provided by following the control sequence from the offline s olution. When
the spring is close to its nominal displacement, the dynamics of spring engagement and dis-
engagement naturally limit displacement drift. If a spring drifts to higher displacements than
nominal, the clutching displacement losses grow. If a spring drifts to lower displacements than
nominal, the clutching displacement losses shrink. This inherent stabilizing behavior can help
keep springs near their target displacements, but closed loop spring control is still required to
correct for initial displacement mismatches and to recover from disturbances.
The online spring controller increases or decreases a spring’s position by shifting spring
engagements or disengagements forwards or backwards in time. For example, if a spring is
going to be disengaged while extending, shifting the control time earlier would decrease the
spring displacement and shifting the control time later would increase the spring displacement
by having the spring be extended farther. An example of this behavior is shown schematically
in fig. S21.
In the following we will refer to adjustments to the spring displacements as spatial adjust-
ments and adjustments to the spring engagement or disengagement times as temporal adjust-
ments. For each engagement and disengagement for each spring we precompute a (1) temporal
adjustment direction d, an (2) adjustment gain g, a (3) forward temporal adjustment bound t+
and a (4) backward temporal adjustment bound t− for both spatial adjustment directions (“up”
and “down”).
The temporal adjustment direction d denotes whether a given engagement or disengagement
should be shifted forward or backward in time based on the sign of the spring displacement er-
ror x̃. To compute the temporal adjustment direction and gain for both spatial directions we first
compute “up” and “down” adjustment times, denoted ∆tu and ∆td respectively, corresponding
to how much temporal shifting is required to spatially shift the spring by a nominal displace-
ment value δ (here δ = 1 mm). To compute ∆tu and ∆td we first compute individual for-
ward and backward adjustment times for each spatial direction denoted ∆tuf , ∆tdf , ∆tub and ∆tdb
for “forward-up,”“forward-down,” “backward-up,” and “backward-down” respectively. This is
done with a simple linear forward and backward search over the desired arm displacement θdes
starting at the nominal engagement or disengagement time tnom . The search window is con-
strained to leave some minimum gap tmin before the next nominal control time and after the
previous nominal control time to prevent subsequent spring control changes from interfering
with each other. Denoting spatial adjustment directions with σ (where σ ∈ {u, d} for “up” and
“down”) and temporal adjustment directions with λ (where λ ∈ {f, b} for “forward” or “back-
ward”) we generically refer to these four times with ∆tσλ . If the adjustment time to spatially shift
the spring by δ would go beyond the search window bounds, the effective ∆tσλ is computed as
the time difference between the search window time boundary and tnom multiplied δ/δ̂ where δ̂
is the spatial adjustment that could be achieved by shifting the engagement or disengagement to
the boundary of the search window. If no adjustment can be made in the desired spatial direction
σ (i.e.,δ̂ = 0), the time is set to ∞. If the search window is large it may be possible to achieve
adjustments in both spatial directions by shifting in the same temporal direction, meaning both
∆tuλ and ∆tdλ may be finite. In this case, we set the larger of the two values to ∞.
The temporal adjustment directions d for both spatial directions are then calculated by


 “both” ∆tσf < ∞ and ∆tσb < ∞,
∆tσf < ∞,

“forward”
dσ = σ
(23)


 “backward” ∆t b < ∞,

“neither” otherwise.
A direction of “neither” or “both” can occur when tnom is at or near a local extrema of θdes . The
direction, or directions, are used in a forward or backward search to adjust the timing of the
engagements and disengagements in the closed loop controller.
The adjustment gain g is used to calculate how much the spring should be spatially shifted
for a given displacement error. After computing ∆tσλ for all possible combinations, we set
∆tσ = min{∆tσf , ∆tσb } for each spatial direction. The gains for each spatial direction, g σ are
set proportional to 1/∆tσ and scaled so that they sum to 1 for each spring. This scaling causes
the controller to spread out the adjustments over all the control changes instead of trying to
eliminate error by making a large temporal adjustment to a single control value. The spatial
adjustment made by the online controller is computed as g σ x̃ where x̃ is the spring position
error, and g σ is the appropriate gain for the sign of x̃. This means that larger adjustments will
be made at points with higher gains where a smaller temporal adjustment is needed. Gains that
are below some minimum threshold value are set to zero to prevent small displacement errors
leading to large temporal adjustments that would result in a large mismatch between the realized
spring torques and the offline spring torques.
The forward and backward adjustment bounds, tσ+ and tσ− , are used to limit the temporal
adjustments for each engagement and disengagement and ensure that temporal adjustments are
made with consideration of a minimum delay between subsequent control changes. These are
computed separately for both spatial directions σ. Consider two subsequent control changes for
a given spring at tnom,i and tnom,i+1 . The forward bound for the first control tσ+
i must not conflict
σ−
with the backward bound ti+1 of the next control. Denoting the time difference between the
control changes subtracted by the minimum interval gap tmin as β where
β = (tnom,i+1 − tnom,i ) − tmin , (24)
a simple approach would be to distribute the allowable adjustment time evenly between the two

control changes and set t+
i = tnom,i + β/2 and ti+1 = tnom,i+1 − β/2. Instead of distributing the
available adjustment time evenly, we use the adjustment gains to scale the bounds and set
giσ
 
σ+
ti = tnom,i + β (25a)
giσ + gi+1
σ

σ
 
σ− gi+1
ti+1 = tnom,i+1 − β , (25b)
giσ + gi+1
σ

where we set giσ to the adjustment gain for ith control if the adjust direction dσi is “forward” or
“both”, otherwise we set giσ to 0. Similarly, we set gi+1
σ
to the adjustment gain for control i + 1
σ σ
if the adjust direction di+1 is “backward” or “both”, otherwise we set gi+1 to 0. This process is
applied for each subsequent pair of control values, for both spatial directions while accounting
for the cyclicality of the control sequence. Temporal adjustment bounds for “up” adjustments
and “down” adjustments are allowed to overlap because the displacement error will be small
when it changes sign. Adjustment bounds may go beyond the end of the actuation cycle and
wrap around to the beginning. The adjustment bounds and gains for the rapid accelerations,
variable payload, and intermittent contact test cases are shown in fig. S20.
At each iteration of the spring control loop, the controller computes the next engagement or
disengagement time for each spring given the current spring position, the spring state (engaged
or disengaged), and the nominal spring state and spring displacement from the offline optimiza-
tion, and executes the new control if the desired time is within some range of the current time.
The outer control loop is summarized in Algorithm 1. The engagement and disengagement
control algorithms are summarized in Algorithm 2 and Algorithm 3.

Algorithm 1 SpringControlLoopIter
Inputs:
Desired nominal spring states: û, Spring states: u, Desired nominal spring displacements: x̂,
Spring displacements: x, Time: t, Arm angle: θ, Desired arm angle: θref
1: for spring num j in 1 . . . 6 do ▷ For each spring
2: if t−L AST C ONTROL C HANGE T IME(j)>MinInterval then ▷ Check interval limit
3: if S PRING A LWAYS E NGAGED(j) then ▷ Offline solution always engaged
4: uj ← S TABILIZE A LWAYS O N(x̂j , xj , t, θ, θref )
5: else ▷ Offline sequence has changes
6: if uj = 0 then ▷ Spring is disengaged
7: uj ← S PRING E NGAGEMENT(ûj , x̂j , xj , t, θ, θref )
8: else ▷ Spring is engaged
9: uj ← S PRING D ISENGAGEMENT(ûj , x̂j , xj , t, θ, θref )
10: A PPLY C ONTROLS(u)

Algorithm 2 SpringEngagement
Inputs: û, x̂, x, t, θ, θref
Outputs: u ▷ Next control value
1: u ← 0 ▷ Initialize output to keep spring disengaged
2: x̃ ← x̂ − x ▷ Compute spring position error
3: i ← G ET E NGAGEMENT I DX(t) ▷ Get index in offline control sequence
4: if S KIP E NGAGEMENT(x, x̂, i) then
5: return ▷ Skip if interval too short or engaging will cause spring to go slack
6: d, g ← G ET E NGAGE A DJUSTMENT D IRECTION(i, sign(x̃)) ▷ Direction d and gain g
7: tnom ← G ET N OMINAL E NGAGE T IME(i) ▷ Set nominal time to offline value
8: if abs(x̃) > ϵ then
9: t− +
e , te ← −∞, +∞ ▷ No bounds on next engagement time if error large
10: else
11: t− +
e , te ←G ETA DJUSTMENT B OUNDS (i, d) ▷ Set bounds on next engagement time
12: θe ←C LIP(θref (tnom ) + gx̃/r, θmin , θmax ) ▷ Set target arm engagement angle with bounds
13: if d = “neither” then
14: te ← tnom ▷ Set engagement time to nominal
15: else
16: if û ̸= 0 then ▷ If spring not in target engagement state
17: tnom ← t ▷ Set nominal time to right now
18: if d = “forward” or d = “both” then
19: te,f ← F ORWARD S EARCH(θref , θe , tnom , t+
e) ▷ Find θ = θe with bound t+e
20: te ← te,f
21: if d = “backward”or d = “both” then
22: te,b ← BACKWARD S EARCH(θref , θe , tnom , t− e) ▷ Find θ = θe with bound t−e
23: te ← te,b
24: if d = “both” then ▷ If could do both, choose whichever is closer to nominal
25: if te,f − tnom ≤ tnom − te,b then
26: te ← te,f
27: else
28: te ← te,b
29: if C HANGE I N C ONTROLW INDOW(t, te ) then ▷ If engage time close enough to t
30: u←1
Algorithm 3 SpringDisengagement
Inputs: û, x̂, x, t, θ, θref
Outputs: u ▷ Next control value
1: u ← 1 ▷ Initialize output to keep spring engaged
2: x̃ ← x̂ − x ▷ Compute spring position error
3: i ← G ET D ISENGAGEMENT I DX(t) ▷ Get index in offline control sequence
4: if S KIP D ISENGAGEMENT(x, x̂, i) then
5: return ▷ Skip if interval too short
6: tnom ← G ET N OMINAL D ISENGAGE T IME(i) ▷ Set nominal time to offline value
7: d, g ← G ET D ISENGAGE A DJUSTMENT D IRECTION(i, sign(x̃)) ▷ Direction d and gain g
8: if abs(x̃) > ϵ then
9: t− +
d , td ← −∞, +∞ ▷ No bounds on next disengagement time if error large
10: else
11: t− +
d , td ←G ETA DJUSTMENT B OUNDS (i, d) ▷ Set bounds on next disengagement time
12: if û ̸= 1 then ▷ If current target state is to be engaged
13: g ← 0.5g ▷ Reduce adjustment gain
14: tnom ← t ▷ Set nominal time to now
15: θd ←C LIP(θref (tnom ) + gx̃/r, θmin , θmax ) ▷ Set target arm disengagement angle with bounds
16: if d = “neither” then
17: td ← tnom ▷ Set disengagement time to nominal
18: else
19: if û ̸= 0 then ▷ If spring not in target engagement state
20: tnom ← t ▷ Set nominal time to right now
21: if d = “forward” or d = “both” then
22: td,f ← F ORWARD S EARCH(θref , θd , tnom , t+
d) ▷ Find θ = θe with bound t+
d
23: td ← td,f
24: if d = “backward”or d = “both” then
25: td,b ← BACKWARD S EARCH(θref , θd , tnom , t− d) ▷ Find θ = θe with bound t−
d
26: td ← td,b
27: if d = “both” then ▷ If could do both, choose whichever is closer to nominal
28: if te,f − tnom ≤ tnom − te,b then
29: te ← te,f
30: else
31: te ← te,b
32: if C HANGE I N C ONTROLW INDOW(t, td ) then ▷ If engage time close enough to t
33: u←0
For springs where the offline solution is to keep the spring always engaged, there are no
control changes to adjust and a different approach must be employed to get the spring to follow
the nominal trajectory. For a spring that is engaged but has displacement error x̃ > δ for some
threshold error δ, we disengage the spring before the arm would reach its maximum position
(at time tθmax ) when the spring would reach its minimum position, and then reengage the spring
at time tθmax . The amount of time to disengage before tθmax is based on the magnitude of the
displacement error. If a spring is engaged but has displacement error x̃ < −δ, we disengage the
spring at its minimum position (at time tθmax ) to minimize the disengagement losses and torque
error associated with disengaging the spring. If x̃ < 0 but the spring is within δ of the target
displacement, we reengage the spring. If x̃ < 0 but the spring is not close enough to the target
displacement, we reengage at the minimum arm position to reduce the spring displacement.
This approach is summarized in Algorithm 4.
Algorithm 4 StabilizeAlwaysEngaged
Inputs: u, x̂, x, t, θ, θref
Outputs: u ▷ Next control value
1: if u = 1 then ▷ Spring currently engaged
2: x̃ ← x̂ − x ▷ Compute spring position error
3: if x̃ > δ then ▷ Spring displacement too low
4: ∆x ← C OMPUTE D ISENGAGEMENTA ND E NGAGEMENT L OSS(x)
5: ∆θ ← (∆x + x̃)/r ▷ Angular correction
6: θd ← C LIP(θmax − ∆θ, θmin , θmax ) ▷ Target arm position to disengage at
7: td ← BACKWARD S EARCH(θref , θd , tθmax ) ▷ Find corresponding time for position
8: else if x̃ < −δ then ▷ Spring displacement too high
9: td ← tθmax ▷ Disengage when spring at lowest position
10: if C HANGE I N C ONTROLW INDOW(t, td ) then ▷ If disengage time close enough to t
11: u←0
12: else ▷ Spring currently disengaged
13: x̃ ← x̂ − x+C OMPUTE E NGAGEMENT L OSS(x) ▷ Compute spring position error
14: if x̃ ≥ 0 then
15: te ← tθmin ▷ Reengage when arm most retracted
16: else
17: if −x̃ < δ then
18: te ← t ▷ Reengage now
19: else
20: te ← tθmin ▷ Reengage when arm most extended
21: if C HANGE I N C ONTROLW INDOW(t, te ) then ▷ If engage time close enough to t
22: u←1

A limitation of the controller presented here is the reliance on offline computation of spring
trajectories for each scenario. However, this limitation is not inherent to the energy-recycling
actuator hardware and future developments could enable real time control for new trajectories.
One potential method could entail rapidly identifying an initial sequence of spring engagements
and disengagements by solving a coarser MIQP or by using an offline solution from a similar
trajectory and refining this solution with a secondary optimization over the continuous variables
of engagement and disengagement time. When a new task trajectory involves a small change in
task frequency or plant inertia, previously computed offline solutions may already capture the
relevant features of an optimal spring plan and only require minimal refinement. Another possi-
ble approach would be to generate a large number of offline MIQP solutions to train a supervised
learning model that outputs assignments for the binary control variables in real time (57). Us-
ing end-to-end learning to train a neural-network based spring control policy that takes a history
of desired joint torques and displacements as inputs and outputs a spring control value could
potentially eliminate the need for any explicit desired torque and arm trajectory.

High-Voltage Clutch Control


Control Circuitry
The high-voltage source for the electrodes (fig. S31) includes a DC-DC Converter (UMHV0505,
HVM Technology) with a closed loop analog control circuit that generates a regulated 300 V
output. Output capacitance of ∼7 µF is added to accommodate the spikes in current draw
that occur when a clutch is activated or clutch polarity is flipped. A n i solated 5 V DC-DC
transformer is included to generate a voltage source referenced 5 V below the high voltage rail
to drive the high side transistors on the clutch control boards. Schematics of the clutch driver
boards are shown in fig. S32 and fig. S33.

Engagement & Disengagement Timing


When switching spring states for a stretched spring, the required delay time before clutch de-
activation is a function of the spring stretch and the electrode overlap area of the frame clutch
and the output clutch. Clutch engagement response time is proportional to overlap area whereas
clutch disengagement time is inversely proportional to overlap area (16). When the electrode
overlap area is high for both the frame and output clutches, a short deactivation delay can be
used as the activation will be fast and the deactivation will be slow. To compute the deactivation
delay of the frame clutch during spring engagements, we define an effective overlap length ℓ′ol
as
ℓ′ol = ℓol + 0.1x, (26)
where ℓol is the actual overlap length in the output clutch and x is the spring displacement. The
spring displacement term is included to account for the slower frame clutch release time when
the overlap length in the frame clutch is greater. The initial deactivation delay for the frame
electrode is then set according to
ℓfast − max{ℓ′ol , ℓslow }
 
tdelay = tfast + max (tslow − tfast ) ,0 , (27)
ℓfast − ℓslow
where tfast , tslow , ℓfast and ℓslow are timing and length parameters tuned for each spring. An equiv-
alent approach with different timing parameters is used for the deactivation delay of the output
clutch in spring disengagements. For spring disengagements made while the spring is extending
with a velocity faster than 0.010 m·s−1 , we use the minimum deactivation delay on the output
clutch as using too long of a delay during extension can cause the frame clutch to buckle and
disconnect due to the spring movement.

AC Clutch Control
Driving an electroadhesive clutch with the same polarity continuously can cause an accumula-
tion of “space charges” within the dielectric which leads to high residual adhesion even after
the driving voltage has been removed from the electrodes and a slow release time (55). In ad-
dition to causing slow release times, charge accumulation can slow down engagement times.
Frequently flipping the polarity of the electric field within a clutch can reduce the space charge
accumulation and lead to a faster clutch response both in clutch engagement and release (17).
The time required for the clutch polarity to flip is governed by the R C electrical time con-
stant formed by the clutch capacitance C and effective series resistance R. During a polarity
flip from +300 V to −300 V, there is a point in time when there is no voltage differential be-
tween the electrodes. However, if the electrical time constant is fast enough, the clutch polarity
can be flipped and the electric field can be re-established before the clutch has time to mechan-
ically disconnect. If the series resistance is too high, the clutch will momentarily slip or may
disconnect entirely when the polarity is flipped. Even when there is no electrode slip, the elec-
trodes produce an audible “tick” when the field polarity flips. This may be produced from slight
movement at the edges of the electrodes.
After engaging a stretched spring, an audible “click” can be heard corresponding to the
clutch slipping a small amount during polarity flips. This behavior varies slightly from clutch
to clutch, but the clicks typically stop after a few polarity flips and the displacement loss in the
spring is limited to a few millimeters. One potential explanation for this behavior is that better
contact is established with each click as small wrinkles in the output electrode are smoothed
out leading to better adhesion. The presence of surface contaminants, which appear as small
gray dots in the surface of the dielectric after continued use, seems to correlate with increased
clicking behavior. It is possible that surface contaminants have an effect on the capacitance and
resistance of the air gap layer in clutch, but it is also possible that the effect is purely mechanical
and due to a drop in effective friction coefficient.

Characterization & Testing


Motor Model
The torque reported by the motor in the actuator (T-motor, AK80-6) does not account for friction
or gearbox losses. To correct for these effects and get a more accurate value for the torque
delivered by the motor, we ran a set of parameter identification tests. These included a velocity
sweep test, a frequency sweep test, and a series of three load lifting tests with different masses.
In the velocity sweep test the motor is disconnected from any load, and the commanded velocity
is swept linearly from 0 to θ̇max to −θ̇max then back to 0. In the frequency sweep test the motor
is disconnected from any load and is commanded to track a sinusoidal trajectory with linearly
increasing frequency. For the load tests, a fixed mass was attached to a drum connected to the
motor and the motor is commanded to raise and lower the mass at a constant velocity. For each
test, the embedded motor feedback controller is used to track the desired calibration trajectory.
Denoting the torque reported by the motor as τm , and the calibration torque, which is the
actual torque delivered by the motor, as τc , the motor model is fit by solving

minimize ∥τest − τc ∥2
b,c,η,J
 
subject to τest = η̂ τm − bθ̇ − J θ̈ − c · sign(θ̇)
 (28)
η τc θ̇ > 0

η̂ = η1 τc θ̇ < 0

1 otherwise,

where η is a gearbox efficiency term, b is a viscous damping term, c is a coulomb friction term,
and J is an effective reflected rotor inertia term. The η̂ accounts for the direction of power
flow through the gearbox, where η̂ = η when positive power flows from the motor out through
the gearbox. The parameters were fit using a non-linear least squares solver in Matlab. The fit
values were η = 0.962, b = 9.79 × 10−4 Nm·rad−1 , c = 0.18 Nm, and J = 4.1 × 10−3 kgm2 .
The effective inertia term J accounts for the gear ratio of 6 : 1, meaning the actual rotor inertia
for the motor would be 1.14 × 10−4 kgm2 .
When estimating the output torque from the motor for the plots presented in this work, we
use (
η(τm − bθ̇ − J θ̈) − c · sign(θ̇)
τm sign(θ̇) ≥ −c · sign(θ̇)
τest = 1
(29)
(τ − bθ̇ − J θ̈) − c · sign(θ̇)
η m
otherwise.
 
To avoid a sharp discontinuity at θ̇ = 0, we approximate sign(θ̇) ≈ π2 atan nθ̇ with n = 600.
Due to the difficulty of obtaining clean derivatives from noisy velocity data we set θ̈ = 0. As
the effective inertia of the motor is less than half of the inertia of the arm with the point foot
attached (and less than 10% of the effective inertia of the loaded arm in the low mass slow
sinusoid case), the effect of ignoring motor inertia on estimated torque is negligible.

Clutched Spring Efficiency


The efficiency of energy capture and return with the double clutched springs is dictated by the
energy dissipated during spring engagements and disengagements as well as well the energy
dissipated by the spring material itself. Natural rubber can be stretched to over six times its
initial length without inducing plasticity, however the material exhibits a tradeoff between peak
stretch and mechanical efficiency. When stretched beyond a critical stretch λc , natural rubber
undergoes strain-induced crystallization which leads to a sharp increase in material stiffness.
This crystallization behavior is beneficial for increased crack-growth resistance but leads to
energy losses under cyclic loading (7). However, unfilled natural rubber exhibits almost no
viscoelastic effects, rate dependence, or stress relaxation when stretched below λc (7). Uniaxial
tensile testing on 40A durometer natural rubber showed that the round-trip efficiency, defined
as the unloading energy normalized by the loading energy, was greater than 96% when the peak
stretch was less than 3.5 (figs. S1, S2), which is consistent with previously published data (20).
In the following section we explain the mathematical model of the double-clutched spring
that was used in the actuator controller. To account for the non-linear force-displacement rela-
tionship of elastomer springs, we used a polynomial equation (58) to model the springs, given
by

f = 2A λ − λ−2 C10 + C01 λ−1 + 2C20 λ2 + 2λ−1 − 3 +


 

2C02 2λ + λ−2 − 3 + 3C11 λ − 1 − λ−1 + λ−2 , (30)


 

where f is the spring force, A is the cross-sectional area of the spring, and λ is the spring stretch,
defined as the stretched spring length normalized by the unstretched spring length. The param-
eters were fit using the encoder and force estimates from the force sensor calibration process
(C10 = 372 kPa, C01 = −182 kPa, C20 = −82 kPa, C02 = 1.24 MPa, C11 = −1.28 MPa).
Here we derive a model for spring displacement losses during spring engagement or disen-
gagement. After a spring control change (engagement or disengagement), the newly activated
clutch will stretch slightly under the force of the spring and the spring will retract by a small
amount which we will denote ∆x. If we assume the clutch has a fixed stiffness k c , and that the
clutch stretches by ∆x, we can solve for the displacement loss by solving for force equilibrium.
Denoting the spring displacement and spring force before the control change as x0 and f0 , and
letting k0 be a spring stiffness linearized about x = x0 , force equilibrium is achieved at

f0 − k0 ∆x = kc ∆x. (31)

Solving for ∆x gives


f0
∆x = . (32)
kc + k0
Given that the clutch stiffness is much greater than the spring stiffness (kc ≫ k0 ) we can sim-
plify the denominator above to just kc to fit a simple linear model. Due to the compliance from
components between the output electrode and the output drum, the effective clutch stiffness for
the output clutch is lower than the effective stiffness for the frame clutch. We identified sepa-
rate values of clutch stiffness for estimating engagement and disengagement losses (fig. S13) to
account for this difference (27 kN·m−1 and 37 kN·m−1 ).

Trajectory Testing
Motor power consumption for all test cases and all cycles is shown in fig. S 15. T he spring
displacement for all cycles is shown in fig. S 16. F or t he s imple s inusoidal t asks t he online
spring controller briefly disengaged and re-engaged the springs in the first few cycles to adjust
the spring position and thereby increase spring torque. For the “intermittent contact” case,
power consumption was reduced after the first c ycle b ut i t r equired m ore c ycles t o g et the
springs into their target positions because the task did not involve substantial negative work at
any point.
We found that in addition to reducing the mean square motor torque, the energy-recycling
actuator was also able to reduce peak actuation torques once the springs had accumulated suffi-
cient energy. Over the last 10 actuation cycles, the peak torque was reduced by 29-80% (fig. S25).

Intermittent Contact Test Case


For the “intermittent contact” test case we used a switched controller that transitioned into a
force-feedback mode for the 0.75 seconds where the arm was commanded to maintain a contact
force equivalent to a torque of 5.5 Nm. When switching to force feedback mode, the position
gains were dropped to prevent small changes in arm angle leading to a large change in torque.
The feedforward term to the motor controller included a 5.5 Nm term that ramped up over a
50 ms period. Gain-scheduled PID force-feedback terms were used to reduce overshoot and
steady state error.
Torque was measured by an S-type load cell (DYLY 103, CALT Sensor) positioned such
that contact was made normal to the axis of the load cell and the actuator torque was equivalent
to the contact force multiplied by the arm length. The load cell signal was amplified by a Futek
IAA100 Strain Gauge Amplifier and read by a Teensy 3.5 microcontroller which streamed data
to the host computer. A small strip of adhesive backed padding was mounted on a 3D printed
plate connected to the load cell to prevent the arm from bouncing off the load cell when it made
contact. The amplified load cell signals were read by a microcontroller at 1 kHz. To get a
clean derivative of the force signal for the feedback controller, readings were filtered on the
microcontroller using a second order low pass filter with a cutoff frequency of 50 Hz, which
was then differentiated with a first-order finite difference method. The raw force signal, filtered
signal, and derivative error were streamed to a host computer at 250 Hz over USB serial. The
root-mean-square error in contact torque after the initial ∼75 ms transients from the last 10
actuation cycles were 0.15 and 0.13 Nm for the energy-recycling actuator and motor-only tests,
respectively (fig. S14).

Parallel-Elastic Comparison
In addition to comparing against motor-only actuation, we also compared against the simu-
lated performance of an optimized linear parallel-elastic actuator to illustrate how the energy-
recycling actuator differs from conventional parallel elastic actuators. For a parallel linear
spring, the torque is given by
τpar = k(θ − θ0 ), (33)
where k is a spring stiffness, θ is a spring displacement, and θ0 is the unstretched spring length.
To fit an optimal spring this is rewritten as τpar = kθ − τ0 (where τ0 ≡ kθ0 ) to avoid the
non-convexity introduced by the bilinear term kθ0 in the constraint. Here we consider a spring
optimized for each individual test case and consider a spring optimized over all five test cases.
To fit a spring to each test case we solved the constrained least square problem of minimizing
∥τest − kθ − τ0 ∥2 where τest and θ are the estimated torque and measured position from the
motor-only actuation tests respectively.
To optimize a spring over all test cases, we found the spring parameters that minimized
the average of the mean squared torques for each case, which can be written as the following
convex optimization problem
5 Ni
!
X 1 X
minimize (τest,j − (kθj + τo ))2 , (34)
k,τo ,e
i=1
N i j=1

where summation over j denotes summation over the points in each task, and summation over
i indicates summation over the different test cases. When optimized to each individual task, a
simple parallel spring could reduce the mean squared motor torque by 45% to 99% but when
optimized over all test cases, the parallel spring reduces the mean squared motor torque by 64%
in the best case but increases the mean squared torque for two out of the five test cases (fig. S22).
Figure S1. Natural rubber hysteresis behavior
Comparison of natural rubber stress-stretch behavior with different peak stretches. A
minimum prestretch of 1.1 is used to prevent the test specimen from going completely slack
upon unloading. The specimen was a 100 mm length of natural rubber tubing with an inner
diameter of 3.2 mm and an outer diameter of 9.5 mm. Tests were run at a rate of 10 mm·s−1 .
100%
Clutched Spring
Peak Stretch
Round Trip Efficiency
98%

96%

94%

92%

90%
1 1.5 2 2.5 3 3.5 4 4.5
Peak Stretch

Figure S2. Natural rubber round-trip efficiency


Comparison of natural rubber round trip efficiency with different peak stretches. For the peak
stretches used in the actuator prototype, the spring round trip efficiency is ∼ 96%.
Figure S3. Clutched spring assembly
(A) Exploded view of an electroadhesively clutched spring. Elastic tensioners keep the output
and frame electrodes taut and aligned. A small piece of foam between the two spring
electrodes helps to maintain contact with the mating electrodes in each clutch. (B) Two
clutched springs stacked together and connected to the spring electrode tensioners. (C) Section
view of a stack of two clutched springs.
Figure S4. Electrode photographs
(A) Photograph of elastomer spring connected to spring-frame and spring-output electrodes.
The spring-frame electrode is face down in this image. (B) Photograph of frame electrode
showing electrode tensioners and high voltage wire. (C) Photograph of the end of the output
electrode showing output cables that transmit force from the electrode to the output shaft while
also transmitting voltage to the output electrode.
A Fiberglass Output Electrode Base

Assembly
Template
Work Surface

C
Output Electrode Output Electrode Base
Fiberglass
Work Surface

Electrode Wrapped
Excess Material
Trimmed

Figure S5. Output electrode assembly template


Render showing (A) acrylic assembly template used to align the output electrode with the
output electrode base and fiberglass components. (B) View of electrode base and fiberglass
applied to the electrode with the template. Side view showing (C) output electrode after
electrode base and fiberglass components are attached and assembly template is removed and
(D) showing how overhanging electrode material is processed.
Figure S6. Actuator subassemblies
(A) Actuator structural frame showing carbon fiber walls and cross-bracing components. (B)
Spring mounting assembly. Threaded holes in the spring mounting plates are used to connect
the plates to the carbon fiber walls of the actuator frame. Each of the six protruding fingers on
both of the spring mounting plates are strain gauged to provide spring force measurements.
(C) Frame electrode mounting assembly. Threaded heat set inserts in the 3D printed frame
electrode mounting plates are used to connect the plates to the walls of the actuator frame.
Figure S7. Electrode tensioners
(A) Spring electrode encoder/tensioner assembly that provides tensioning for one side of two
sets of spring electrodes. The tensioner wire rope also transmits voltage to the electrodes. (B)
Cross-section view of encoder/tensioner. A strip of conductive polyester tape transmits the
high voltage from a wire terminated with an eyelet crimp to the inner race of the spool bearing.
Conductive carbon grease in the bearing creates a high conductivity path between the inner
race and outer race of the bearing. A second strip of conductive tape (not shown) routed
through a slot in the side of the spool electrically connects the outer race of the bearing to the
steel wire rope. The insulation is stripped off a small portion of the wire rope to connect to the
conductive tape. (C) Stack of three encoder/tensioner assemblies providing tensioning,
sensing, and voltage connection to spring-output electrodes of the six springs. A similar
assembly (without the encoder circuit boards) mounted on the opposite side of the actuator
provides tensioning and transmits voltage to the six spring-frame electrodes. (D) Tensioners
for the frame and output electrodes. An equivalent configuration is used on the opposite side of
the actuator.
Figure S8. Actuator rendering
(A) Rendering of energy-recycling actuator prototype. (B) Exploded view of actuator showing
motor, array of six double clutched springs, actuator structure, and sheet metal body panelling.
Figure S9. Actuator output shaft and output cable routing
(A) (Left) Rendering of output shaft assembly. (Middle) Exploded view of output shaft
assembly showing motor, bearings, bearing mounts, shaft adapter and output drum clamping
assembly. (Right) Cross-section view of connection between the flanged motor adapter and the
output shaft showing the connection bolt and belleville washer. (B) Rendering showing routing
of output cables over idler pulleys mounted in a structural cross-brace. (C) (Left) Detailed
view of pulley routing showing rope guides. (Right) View without cross-brace component.
Figure S10. Actuator arm assembly
(A) Arm assembly with point foot attached. (B) Exploded view of arm assembly showing
point foot and mounting adapter. (C) Arm assembly with a stack of weights instead of the foot.
(D) Exploded view of weight attachment showing adapter disks that accommodate the hole in
the plate weights.
Start
Engage
Disengage Activate Output
Activate Frame Set "Output1" Timer
Off Frame OutputWait1

"Output1" Timeout "Float" Timeout


Engage Float Frame Deactivate Frame
Activate Output Set "Output2" Timer Set "Deactivate" Timer
Set "Float" Timer

"Output2" Timeout
Output Deactivate Frame OutputWait2

Disengage
Activate Frame
Set "Frame1" Timer "Frame2" Timeout
"Frame1" Timeout "Deactivate" Timeout
Deactivate Output
Float Output Float Frame
Set "Frame2" Timer Set "Float" Timer
Set "Float" Timer
FrameWait1 FrameWait2

"Float" Timeout
Deactivate Output "Deactivate" Timeout
Set "Deactivate" Timer Float Output
Set "Float" Timer

Figure S11. Spring engagement and disengagement state machine


State machine used for controlling timing of clutch activations and deactivations in spring
engagements and disengagements. The states “FrameWait1” and “FrameWait2” detail the
intermediate steps in disengaging a spring. The states “OutputWait1” and “OutputWait2”
detail the intermediate steps in engaging a spring.
Electrode
Floated
Controlled
Decay

Figure S12. Controlled Clutch Deactivation


Oscilloscope data showing the stepped deactivation of the output clutch in a spring
disengagement. By toggling the spring -output electrode driver between “floated” and
“deactivated” (in this case, ground), the decay of the electric field in the output clutch is
prolonged, reducing the shock loads that occur from clutch deactivation on a stretched spring.
The control of these steps is detailed in fig. S11.
Figure S13. Engagement and disengagement losses
Linear fit for effective frame clutch and output clutch stiffness. By accounting for these
displacement losses, the spring controller can produce cyclical steady-state spring
displacements.
Figure S14. Contact force tracking results
Contact torque for motor-only and energy-recycling actuation. Load cell force data is read by a
dedicated microcontroller at 2 kHz and streamed to the host computer at 250 Hz. Data are
resampled at 200 Hz to produce average and standard deviation (shaded) values from the last
10 actuation cycles.
Figure S15. Multicycle motor power consumption
Motor power consumption comparison for motor-only actuation and energy-recycling
actuation. Each test starts with all springs completely slack. For energy-recycling actuation,
motor power consumption decreases over the first few actuation cycles as the springs approach
the desired steady state displacements (fig. S16)
Figure S16. Multicycle spring displacement
Spring displacements for all five tests for 16 actuation cycles. Each test starts with all springs
completely slack.
Figure S17. Dynamic tests hardware setup
Hardware test setup for (A) slow oscillation with a small payload (0.25 kg); (B) fast oscillation
with a large payload (1.45 kg); (C) rapid acceleration with a moderate payload (0.72 kg); (D)
variable payload (0 kg to 1.59 kg); and (E) intermittent, stiff contact with force control (0 to
12.3 N).
A
Spring Torque
Estimate Spring Force

Friction
Compensation
Desired
Plant
Trajectory

Computed Torque Controller (200 Hz) Embedded Motor


Controller (>500 Hz)

B
Online Spring Low Level Control (600 Hz)
Offline Spring Planning Controller (100 Hz)
HV Drivers

Desired Plant Cyclicality Timing Force


MIQP Ras. Pi.
Trajectory Model Correction Adjust Sensors
Spring
Encoders

Figure S18. Controllers


(A) Computed torque motor controller. (B) Combined online/offline spring controller for
closed loop trajectory tracking.
Figure S19. Spring linearization
Piecewise linearization of polynomial spring model used for approximating the spring model
in the mixed integer quadratic program.
Rapid Accelerations Variable Payload Intermittent Contact

Feedback clutch control time adjutments

Gain

Bound

Figure S20. Online spring controller temporal adjustment gains and timing bounds
The columns correspond to the “rapid acceleration”, “variable payload” and “intermittent
contact” cases and the rows correspond to different springs. The width of each box gives the
timing bound and the height of the box is proportional to the square root of the adjustment
gain.
A

B Offline Plan C D
Disengage
+
Displacement

Displacement

Displacement
Engage Δt Δt
Spring

Spring

Spring

+
+

+
td td td
Time te Time te Time te

Figure S21. Online control adjustment example


(A) Example control sequence whereby a spring is disengaged while the arm is extending and
reengaged while the arm is contracting. (B) The corresponding offline spring control plan
plotted against time with disengagement at td and engagement at te . (C) Example control
adjustment for this offline plan when the spring is too slack. (D) Example control adjustment
for this offline plan when the spring is stretched too much.
Spring Optimized for:

Motor Only

Figure S22. Parallel elastic torque comparison


Mean square motor torque comparison between the energy-recycling actuator and simulated
optimized parallel elastic actuators. Bar color denotes the test for which the spring is
optimized.
A Low Mass B High Mass C Rapid D Variable E Intermittent
Slow Sinusoid Fast Sinusoid Accelerations Payload Contact

+14%

+232% -66% -54% -66%

Figure S23. Comparison to simulated parallel elastic actuator


Comparison of motor torque and power consumption for a simulated parallel elastic (PE)
actuator optimized over all five test cases to the experimental performance of the
energy-recycling (ER) actuator and motor-only system.
Figure S24. Mechanical work comparison
Comparison of mechanical work done by the motor for energy-recycling and motor-only
actuation for all five test cases.
Figure S25. Peak torque comparison
Comparisons of peak motor torque for motor-only and energy-recycling actuation from the last
10 actuation cycles for all five test cases. Peak torques are reduced for every task.
Strain Gauges Strain Gauges
Springs 1-3 Springs 4-6

Spring Force Instrumentation Instrumentation


Amplifier & Amplifier &
Sensing Filtering (x3) Filtering (x3)

Multiplexed
Analog to Digital Spring Position
Converter Sensing
SPI
Encoder Encoder
Ethernet
I2C Bus
Raspberry Pi Adapter Board Encoder Encoder

Encoder Encoder

High Voltage
H-Bridges
Frame/Output Frame/Output
Spring Electrode Spring Electrode Spring Electrode
Electrode Driver Electrode Driver
Driver Board Driver Board Driver Board
Board Board

Frame and Ouput Frame and Ouput Spring Electrodes Spring Electrodes Spring Electrodes
Electrodes 1-3 Electrodes 4-6 1 and 2 3 and 4 5 and 6

Figure S26. Actuator electronics overview


Diagram of actuator electrical subsystems. The Raspberry Pi communicates with a host
computer over an ethernet connection. A custom adapter (fig. S27) facilitates communication
between the Raspberry Pi and the sensors and clutch drivers. Separate schematics are given for
the electrode driver boards (fig. S32,fig. S33), encoders (fig. S28), analog to digital converter
(fig. S30), and amplifier boards (fig. S29).
Power Input and Regulation Ras. Pi Header
GND
1 2
3.3V PWR_IN
C9 U2 3 4
SDA3.3
5 6
22-05-7028-02 SCL3.3
VCC 7 8
PWR_IN J3-1
1 5 9 10
PWR_IN VIN VOUT

GND
C12 11 12
J3-2 SG_CE CAN_CE
3 13 14

C8
VEN SR_OE
4 15 16
BYPASS CAN_INT
17 18

GND
2 19 20
GND
GND 21 22

PWR_IN
1 GND 23 24
25 26
GND

2
VCC LP3985IM5-5.0 27 28
C10 U3 29 30
PLS
31 32
33 34
C15 1 5 35 36
PWR_IN VIN VOUT VCCB MISO3.3 SR_CE
C11 37 38
3 MOSI3.3

C7
VEN 39 40
4 SPI_CLK3.3
GND BYPASS
2 GND GND
GND GND
GND

LP3985IM5-5.0

Outputs
I2C CAN-SPI A2D-SPI Electrode Drive
32 31
OUT32 OUT31
22-05-7078-07 22-05-7078-07 OUT30 30 29
OUT29
22-05-7048-04 VCCB J6-1 28 27
J4-1 J2-1 OUT28 OUT27
26 25
OUT26 OUT25
GND

GND
VCC
GND

VCC J2-2 J6-2 24 23


J4-2 OUT24 OUT23
22 21
OUT22 OUT21
CAN_CE5 J2-3 SG_CE5 J6-3 20 19
SCL5 J4-3 OUT20 OUT19
18 17
OUT18 OUT17
MISO5 J2-4 MISO5 J6-4 16 15
SDA5 J4-4 OUT16 OUT15
14 13
OUT14 OUT13
MOSI5 J2-5 MOSI5 J6-5 12 11
OUT12 OUT11
10 9
OUT10 OUT9
SPI_CLK5 J2-6 SPI_CLK5 J6-6 8 7
OUT8 OUT7
6 5
OUT6 OUT5
CAN_INT5 J2-7 PLS J6-7 4 3
OUT4 OUT3
2 1
OUT2 OUT1
JP1

Level Shifting
3.3V

VCC
C6

GND

U1
2 VCC3.3V
Q1
BSS138

VCCA
19
VCCB
C5

R2

R1
GND

10
OE
1 6
SPI_CLK3.3 A1 A5 SR_OE SDA3.3 SDA5
3 7
MOSI3.3 A2 A6 CAN_INT
VCC

4 8
MISO3.3 A3 A7 CAN_CE
5 9
SR_CE A4 A8 SG_CE 3.3V
20 15
SPI_CLK5 SR_OE5
Q2
BSS138

B1 B5
18 14
MOSI5 B2 B6 CAN_INT5
17 13
R4

R3

MISO5 B3 B7 CAN_CE5
16 12
SR_CE5 B4 B8 SG_CE5
GND

11
GND SCL3.3 SCL5

TXS0108EPWR

Shift Registers

Clock Gating
VCC
R5

SR_CLK

Q3
C2

C3
C1

C4
GND

GND
GND

GND

2N700
C14

SR_CE5
GND

VCC VCC VCC VCC


IC2
VCC IC1
IC5 14 15
14 15 SER QA OUT9
GND MOSI5 SER QA OUT1 1
1 1 QB OUT10
QB OUT2 11 2
4 11 2 SR_CLK SCK QC OUT11
SCK QC OUT3 10 3
2 10 3 SCL QD OUT12
SPI_CLK3.3 SCL QD OUT4 4
4 VCC QE OUT13
QE OUT5 12 5
74AHC1G08DBV SR_CE5VCC 12
RCK QF
5
OUT6
SR_CE5 RCK QF
6
OUT14
6 QG OUT15
QG OUT7 7
7 QH OUT16
QH OUT8
13 9
13 9 SR_OE5 G QH*
SR_OE5 G QH*
74HC595D
74HC595D
IC3 IC4
14 15 14 15
OUT17 OUT25
R6

SER QA SER QA
1 1
QB OUT18 QB
11 2 11 2
SR_CLK SCK QC OUT19 SR_CLK SCK QC OUT27
10 3 10 3
SCL QD OUT20 SCL QD OUT28
VCC

4 4
VCC QE OUT21 VCC 12 QE OUT29
12 5 5
SR_CE5 RCK QF OUT22 SR_CE5 RCK QF OUT30
6 6
QG OUT23 QG OUT31
7 7
QH OUT24 QH OUT32

SR_OE5 13 G QH*
9
SR_OE5 13
G QH*
9

74HC595D 74HC595D

Figure S27. Raspberry Pi adapter board


Circuit schematic for Raspberry Pi Adapter Board. Although the board design allows for CAN
communication over SPI, communication with the motor was done via a USB-CAN adapter
connected to the host computer.
VCC
P$1
P$1

4.7k

4.7k
R1

R2
VCC

GND
P$2
P$2

VCC SCL P$3


P$3

U1 P$4
AS5600 SDA P$4

GND
1 8
VDD5V DIR
2 7
VDD3V3 SCL SCL
C1 C2 P$1
3
OUT SDA
6 PWM P$1

GND
0.1uF 1uF 4
GND PGO
5
SDA

GND GND PWM

Figure S28. Spring position encoder circuit


Circuit schematic of spring position encoder boards using AS5600L encoder chip. The
encoders use I2C to communicate the Raspberry Pi which allows multiple boards to be
connected to the same set of voltage (Vcc), data (SDA), and clock (SCL) lines. The optional
pullup resistors R1 and R2 were excluded from these boards as pullup resistors were already
present on the data and clock lines.
Amplifier 1

VCC

V+
GND

C1

GND

R1
7
1k CF-1 2
S-1
RF-1 V+
1
RG_2
U1 6
Value V_OUT1
RG1

CF1 8 REF S-1 S+1


RG
1k 3
V-

5
S+1

R2
RF+1 V_REF

C2
4

GND
CF+1
JP1

V-
GND 1
V+
VSS 2
S+1
3
S-1
4
V-

Amplifier 2 V+
JP2
1
2
S+2
VCC

3
GND S-2
4

V+
V-
C3

GND

JP3
1
V+
2
S+3
3
7

CF-2 S-3
2 4
S-2 V-
RF-2 V+
1
R3
RG_2
U2 6 JP4
Value V_OUT2
RG2

1
CF2 8 REF S-2 S+2 V-
2
RG V+
3
RF+2 3
V- V_REF
4
5

VSS
S+2
5

R4
V_REF

GND
6
4

VCC 7
V_OUT3
C4

8
V_OUT2
GND

CF+2 9
V_OUT1
GND
V-

VSS

Amplifier 3
VCC

V+
C5

GND
GND
7

CF-3 2
R5

S-3
RF-3 V+
1
RG_2
U3 6
Value V_OUT3 S-3 S+3
RG3

CF3 8 REF
RG
RF+3 3
V-
5

R6

S+3
V_REF
4

C6

GND

CF+3
V-

GND

VSS

Figure S29. Strain gauge amplifier circuit


Circuit schematic for strain gauge amplifier board with three instrumentation amplifier ICs.
Two boards are used to measure the force on the six springs.
JP3

VCC
1 2
JP5 OUTB1 OUTA1
3 4
C5
SpiceOrder 1

JP4 OUTB2 OUTA2


1 5 6
V+ C15 OUTB3 OUTA3

GNDGND
2 1 7 8
V- CLK
2 9 10
SpiceOrder 2

C2 C1 D_OUT
3 11 12
D_IN VCC
4 13 14
CS V_REF
15 16
V+
22-05-7028-02 V- 17 18
J3-1
VCC GND
GND

J3-2

Offsetting A2D

VCC

VCC
VCC

R2
VCC

U7

C6

GND
16
IC1B CS VDD
3

2 5 10 12
CS/SHDN DOUT D_OUT
SCL
VCC

7 1
V_COMP CH0
C3

6 2
1
R1

V_REF CH1
GND

OPA 3
OUTB3 CH2
4
IC1A OUTB2 CH3
5
3

OUTB1 CH4
2 3 6

D2
OUTA2
REF

CH5
1 7
V_REF OUTA1 CH6
2 8
1

OUTA3 CH7
OPA 13
CLK CLK
11
4

D_IN DIN
15
GND V_COMP VREF

GND
14
AGND

GND
GND 9
DGND

MCP3008-I/SL

Figure S30. Analog to digital converter board


Circuit schematic for analog to digital converter board which reads the signals from the
amplifier boards and communicates with the Raspberry Pi over SPI. The potentiometer
labelled “REF” is used to set an offset reference voltage for the instrumentation amplifiers in
fig. S29. The potentiometer labelled “SCL” sets the scaling for the MCP3008 analog to digital
converter.
Power Input Isolated High-Side Drive Outputs
U$2 22-05-7038-03
HV_OUT J2-1

VCC

GND
GND NC
GND NC
22-05-7028-02 HSD J2-2
+VIN
J1-1 +VIN

GND
VCC VCC J2-3
C8
GND

+VOUT
J1-2 +VOUT HV_OUT
0V
HSD 0V

ISK0505A
22-05-7028-02
J4-1
GND R6 VCC

GND
C2
J4-2

HV Conversion
3.3V

3.3V

HV_CONV
3

R1
7

2 3 IC1
REF

6 PROG
PROG

GND
2 HVRTN
1

HVRTN
MCP6294
4

C7
GND

IN-
C10 IN- R5
HVOUT
R2

HVOUT HV_OUT
GND IN+
GND IN+
C1 VCC UMHV0505
GND

R3
C3 C4 C5 C6

R4

1 3
VIN VOUT 3.3V
2
VCC GND_(TAB)
C9
GND

GND
MCP1825S-3302E/AB
3.3V_SOURCE
HV Buffer Bleed Off GND

GND RELAY
1 8
NU1 NC1
R7

GND
2 7
IN+ NC2
VCC R8
GND

3 6
IN- NO1
4 5
NU2 NO2
LCC110S

Figure S31. Schematic of high voltage source circuit


The circuit runs off a 5 V power source and outputs a regulated 300 V source with buffer
capacitance to accommodate the spikes in current when activating clutches or changing clutch
polarity. The circuit also includes an isolated 300 − 5 V source used for driving the high side
transistors on the clutch driver boards.
Inputs
8
L1
7

Low-Side Gate Drive & Shoot-through Prevention


H1
L2 6 VCC VCC
5
H2
4 C1 C2
L3
3
H3
2
L4 L1
1
H4
JP1
GND GND 1 IC1A
IC3C D1 3
RG1
22-05-7028-02 RA1 RB1 LSD1
VCC

9 8 CF1 2
J1-1 H1
GND

74ACT08D
J1-2 74AC14D
VBUS

L2 GND
C3
4 IC1B
22-05-7038-03 22-05-7038-03 IC3B D2 6
RG2
J3-1 J2-1 RA2 RB2 LSD2
11 10 CF2 5
H2
V_HSD J3-2 J2-2 74ACT08D
HV_GND 74AC14D
J3-3 J2-3

L3 GND
D5

12 IC1D
IC3A D3 11
RG3
RA3 RB3 LSD3
13 12 CF3 13
H3
GND 74ACT08D
74AC14D

Optoisolated High-Side Gate Drive L4 GND

9 IC1C
IC3F D4 8
RG4
U1 RA4 RB4 LSD4
1 16 5 6 CF4 10
H1 1 16 HSD1 H4
R1 74ACT08D
74AC14D
GND

2 15
2 15
3 14 GND
H2 3 14 HSD2 IC3E
R2
GND

3 4
GND

4 13
4 13
V_HSD 74AC14D
5 12
H3 5 12 HSD3
R3 IC3D
GND

GND

6 11 1 2
6 11
7 10 74AC14D
H4 7 10 HSD4
R4
GND

8 9
8 9

Half Bridge (x4)


VBUS VBUS VBUS VBUS
VBUS VBUS VBUS VBUS
RPU2
RPU1

RPU3

RPU4
D10 SpiceOrder 2

HSD1 HSD2 HSD3 HSD4


D8

D12
SpiceOrder 2

Q2 Q4 Q6 Q8
SpiceOrder 1

SpiceOrder 2

DMP45H150DHE DMP45H150DHE DMP45H150DHE DMP45H150DHE


D6
SpiceOrder 2

SpiceOrder 1

SpiceOrder 1
SpiceOrder 1

JP3
RHS1

RHS3

RHS4

1
VO1
RHS2

2
VO2
3
VO3
4
VO1 VO2 VO3 VO4 VO4
PINHD-1X4/90
RLS1

RLS3

RLS4
D7

RLS2

D13
SpiceOrder 2

D9

D11
SpiceOrder 2

SpiceOrder 2
SpiceOrder 1

SpiceOrder 2
SpiceOrder 1

SpiceOrder 1

Q1 Q3 Q5 Q7
SpiceOrder 1

IPN70R1K2P7S IPN70R1K2P7S IPN70R1K2P7S IPN70R1K2P7S


LSD1 LSD2 LSD3 LSD4

HV_GND

Figure S32. Spring-frame/spring-output electrode driver board


High voltage driver board used to drive the spring-output and spring-frame electrodes. Each
board is capable of driving four electrodes. Three boards are used to drive the six
spring-output and six spring-frame electrodes in the actuator.
Inputs Half Bridge
2 VBUS VBUS
L1
1
H1
JP3

RPU
22-05-7028-02
VCC

J1-1 U2
1 4
H1 1 4
GND

J1-2 R1 Q2
DMP45H150DHE

GND
2 3
2 3 V_HSD
VCC VCC
RO1
C1 C2 RO2

RHS
JP2
1
RO3
2
3
RO4
GND GND 4
5
RO5

RLS
VBUS

6
C3 L1 RO6
22-05-7038-03
J2-1
IC2 Q1
1 IPN70R1K2P7S
V_HSD J2-2
IC1 D1 RG1
4
2 4
RA RB 2
HV_GND J2-3 H1 CF1

74AHC1G04DBV 74AHC1G08DBV
D5

HV_GND
GND

GND

Figure S33. Frame/Output electrode driver board


High voltage driver board used to drive the output and frame electrodes in the actuator. For an
individual spring, the frame and output electrodes are controlled together, allowing one board
to be used for multiple electrodes. Two boards are used in the actuator for driving the output
and frame electrodes of springs 1-3 and 4-6 together.
Figure S34. Clutch polarity flip conditions
Conditions used for allowing clutch polarity changes based on spring extension velocity and
displacement. Deferring polarity flips when outside the safe region prevents undesired releases
of the output clutch.
Table S1. Energy-Recycling Components Mass Breakdown

Component Mass (g)


Clutched Springs 240
Spring Sensors Circuits 34
High Voltage Circuits 57
Spring Tensioners 113
Frame & Output Tensioner Mounts 13
Redirect Pulley Assembly 30
Output Shaft Drums 68
Total 555
Table S2. Articulated Arm Mass Breakdown

Components Mass (g)


Motor 485
Frame Total 750
Carbon Fiber Walls (x2) 298
Pulley Mount Brace 36
Spring Mounting Plates (x2) 32
Mounting tube & Split hub clamps (x2) 118
Frame Electrode Mount Plates (x2) 14
Top & Bottom Acrylic Plates with Cross Braces (x8) 252
Body Panels Total 173
Pulley Assemblies Total 30
Machined Pulley Mounts (x4) 6
Pulleys (x12) 22
Rope Guides (x4) 2
Tube Arm Assembly Total 213
Carbon Fiber Tube 59
Shaft Connector 98
End Effector Adapter 24
Foot 33
Output Shaft Assembly Total 243
Shaft 93
Drums (x2) 68
Bearing Cups & Bearings (x2) 60
Motor Shaft Adapter & Offset Plate 22
Clutched Springs Total 240
Spring & Spring Electrodes (x6) 120
Frame Electrode with Base (x6) 66
Output Electrode with Base (x6) 54
Tensioner Assemblies Total 138
Tensioner Mount Plates (x4) 43
Spring Tensioner Assemblies (x6) 95
Circuits Total 156
Other (bolts, cabling, etc) 312
Articulated Arm Total 2740
Movie S1.
Energy-recycling actuator concept video explaining the sequence of steps for engaging and dis-
engaging a spring and demonstrating this behavior with one spring on the prototype hardware.

Movie S2.
Animated exploded view of the actuator design.

Movie S3.
Video demonstrating the ability to control the total spring torque applied to the arm by changing
the number of springs engaged.

Movie S4.
Video demonstrating the bandwidth capabilities of an individual spring in the actuator operating
at 12 Hz.

Movie S5.
Video of all five test cases being performed with both energy-recycling and motor-only actua-
tion.

Data S1. (separate file)


Data for the actuator characterization shown in Fig. 3 of the main text available at https:
//doi.org/10.5061/dryad.ttdz08m5h.

Data S2. (separate file)


Data for the dynamic trajectory tests shown in Fig. 4 of the main text available at https:
//doi.org/10.5061/dryad.ttdz08m5h.

Design Files
CAD hardware design files, printed circuit board design files, and list of circuit components
values for the actuator prototype available at https://drive.google.com/file/d/
15mmerK_G3rYKS-RbtPpbUAuucHN-HZYr/view?usp=sharing.

You might also like