|
| CartesianPosPDController () |
|
const base::samples::RigidBodyStateSE3 & | update (const base::samples::RigidBodyStateSE3 &setpoint, const base::samples::RigidBodyStateSE3 &feedback) |
|
| PosPDController (size_t dim_controller) |
|
void | update () |
|
void | setPGain (const base::VectorXd &gain) |
|
const base::VectorXd & | pGain () |
|
void | setDGain (const base::VectorXd &gain) |
|
const base::VectorXd & | dGain () |
|
void | setFFGain (const base::VectorXd &gain) |
|
const base::VectorXd & | ffGain () |
|
void | setMaxCtrlOutput (const base::VectorXd &max_ctrl_out) |
|
const base::VectorXd & | maxCtrlOutput () |
|
void | setDeadZone (const base::VectorXd &dz) |
|
const base::VectorXd & | deadZone () |
|
base::VectorXd | getControlError () |
|
void | applySaturation (const base::VectorXd &in, const base::VectorXd &max, base::VectorXd &out) |
| Apply Saturation on the control output. If one or more values of <in> are bigger than the Corrresponding entry of <max>, all values will be scaled down according to the biggest ratio eta = in_i / max,i.
|
|
void | applyDeadZone (const base::VectorXd &in, const base::VectorXd &min, base::VectorXd &out) |
| Apply dead zone, i.e. minimum position control error. If one of the input value falls below minimum, it will be set to zero. Otherwise dead zone will be subtracted from the input value, to get a smooth transition:
|
|
The CartesianPosPDController class implements a PD Controller with feed forward on the RigidBodyStateSE3 type. The following control schemes are available:
- Velocity Output: \(\mathbf{v}_d = \mathbf{K}_d\mathbf{v}_r + \mathbf{K}_pe\)
- Acceleration Output: \(\mathbf{a}_d = \mathbf{K}_{ff}\ddot{\mathbf{e}} + \mathbf{K}_d\dot{\mathbf{e}} + \mathbf{K}_p\mathbf{e}\),
where pose, twist and accelerationerror are computed as \(
\renewcommand*{\arraystretch}{1.2}
\mathbf{e} = \left(
\begin{array}{c}
\mathbf{p}_r - \mathbf{p}_a \\
\mathbf{R}_a\cdot \theta \mathbf{\hat \omega}^a_r
\end{array}
\right)
\) , \( \dot{\mathbf{e}} = \mathbf{v}_r-\mathbf{v} \) and \( \ddot{\mathbf{e}} = \mathbf{a}_r-\mathbf{a} \)
\( \mathbf{p},\mathbf{p}_r \) - Actual and reference position
\( \theta\mathbf{\hat \omega}^a_r \) - Rotation error as angle-axis representation
\( \mathbf{R}_a \) - Rotation matrix, converts the rotation error to base frame
\( \mathbf{v},\mathbf{v}_r \) - Actual and reference twist
\( \mathbf{a}_r,\mathbf{a} \) - Reference and actual spatial acceleration
\( \mathbf{K}_d,\mathbf{K}_p \) - Derivative and proportial gain matrices
\( \mathbf{K}_{ff} \) - Feed forward gain matrix
\( \mathbf{a}_d,\mathbf{v}_d \) - Control output, desired acceleration or twist
Note: If an input is NaN, it might be ignored by the controller. E.g. if the reference or actual twist is none, the twist error will be set to zero in the controller