# Acrobot

Russ Tedrake. Underactuated Robotics: Learning, Planning, and Control for Efficient and Agile Machines. Working Draft of Course Notes for MIT 6.832 (Chapter 3).

## Problem Formulation

The animation can be found here: http://tomdyn.com/examples/acrobot.avi

```% Copyright (c) 2009-2009 by Tomlab Optimization Inc.

m1  = 1;    m2  = 1;
l1  = 1;    l2  = 2;
g   = 9.81;
b1  = 0.1;  b2 = 0.1;
lc1 = l1/2; lc2 = l2/2;

I1 = m1*l1^2/3; I2 = 1; % solid rod

xd = [pi; 0; 0; 0];

toms t
tf0 = 4;
p = tomPhase('p', t, 0, tf0, 80);
setPhase(p);

tomStates x1 x2 x3 x4
tomControls u
x = [x1;x2;x3;x4];

x0 = {icollocate({x == [pi*t/4;0;0;0]})
collocate({u == 0})};

cbox = {-10 <= collocate(u) <= 10};

% Boundary constraints
cbnd = {initial(x == 0), final(x == xd)};

% ODEs and path constraints
c1 = cos(x1);    c2 = cos(x2);
s1 = sin(x1);    s2 = sin(x2);
s12 = sin(x1+x2);

tempA = m2*g*l2;
tempB = m2*l1*lc2;
h11 = I1 + I2 + m2*l1^2 + 2*tempB*c2;
h12 = I2 + tempB*c2;
h22 = I2;

phi1 = 2*tempB*s2*x3*x4 + tempB*s2*x4^2 - (m1*lc1 + m2*l1)*g*s1 - tempA*s12 - b1*x3;
phi2 = u - tempB*s2*x3^2 - tempA*s12 - b2*x4;
detH = h11*h22 - h12^2;

ceq = collocate({
dot(x1) == x3; dot(x2) == x4
dot(x3) == (h22*phi1 - h12*phi2)/detH
dot(x4) == (-h12*phi1 + h11*phi2)/detH});

objective = integrate(u^2);

% Solve the problem
options = struct;
options.name = 'Acrobot';
solution = ezsolve(objective, {cbox, cbnd, ceq}, x0, options);
```
```Problem type appears to be: qpcon
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2010-02-05
=====================================================================================
Problem: ---  1: Acrobot                        f_k       4.443242195366545700
sum(|constr|)      0.000003790677510858
f(x_k) + sum(|constr|)      4.443245986044056300
f(x_0)      0.000000000000000000

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv    1 ConstrEv 1105 ConJacEv 1105 Iter  433 MinorIter 2568
CPU time: 39.046875 sec. Elapsed time: 39.125000 sec.
```