ORCA Control¶
ORCA is a c++ whole-body reactive controller meant to compute the desired actuation torque of a robot given some tasks to perform and some constraints.
The problem is written as a quadratic problem :
\[ \begin{align}\begin{aligned}\min_{x} \frac{1}{2}x^tHx + x^tg\\\text{subject to}\\lb \leq x \leq ub\\lb_A \leq Ax \leq ub_A\end{aligned}\end{align} \]
xthe optimisation vectorHthe hessian matrix (\(size(x) \times size(x)\))gthe gradient vector (\(size(x) \times 1\))Athe constraint matrix (\(size(x) \times size(x)\))lbandubthe lower and upper bounds ofx(\(size(x) \times 1\))lbAandubAthe lower and upper bounds ofA(\(size(x) \times 1\))
Tasks are written as weighted euclidian distance function :
\[w_{task} \lVert \mathbf{E}x + \mathbf{f} \rVert_{W_{norm}}^2\]
xthe optimisation vector, or part of the optimisation vectorEthe linear matrix of the affine function (\(size(x) \times size(x)\))fthe origin vector (\(size(x) \times 1\))w taskthe weight of the tasks in the overall quadratic cost (scalar \([0:1]\))W normthe weight of the euclidean norm (\(size(x) \times size(x)\))
Given n_t tasks, the overall cost function is such that:
\[\frac{1}{2}x^tHx + x^tg = \frac{1}{2} \sum_{i=1}^{n_t} w_{task,i} \lVert \mathbf{E}_ix + \mathbf{f}_i \rVert_{W_{norm,i}}^2\]
Constraints are written as double bounded linear function :
\[lb_C \leq Cx \leq ub_C\]
Cthe constraint matrix (\(size(x) \times size(x)\))lbCandubCthe lower and upper bounds ofA(\(size(x) \times 1\))
The remainder of the documentation describes “classical” tasks and cosntraints which one may want to define
Optim¶
Tasks¶
Constraints¶