categories: robotics, automation & robotics, control theory
New sub-topic in the series: control theory in state space. Before you design any controller — pole placement, LQR, a Luenberger observer, whatever — there's a question you have to answer first, and it's easy to skip past because it sounds abstract: can your control input actually reach every part of the system's behavior at all?
What controllability actually means, and why you check it
Controllability asks: using the control signal $$u(t)$$, can you drive the system from any starting state $$x(0)$$ to any target state $$x(t_f)$$ in finite time? If the answer is no, the system is hiding at least one internal state variable that your input has zero influence over — no matter how cleverly you design $$u(t)$$, that variable does its own thing. Concretely: if you try to design a state-feedback controller (LQR, pole placement) for an uncontrollable system, the math will simply fail for those hidden states — there's no physical way for a controller to stabilize a variable it can't touch. This is why controllability is always the first thing you check, before you invest any time in a controller design.
Task: checking controllability of a general 2nd-order system
A linear time-invariant system is written in state-space form $$\dot{x}(t) = Ax(t) + Bu(t)$$. For a general second-order dynamic system, the matrices are: $$A = \begin{bmatrix} 0 & 1 \\ -a_0 & -a_1 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ b_0 \end{bmatrix}$$
Step 1 — build the controllability matrix K. For a system of dimension $$n=2$$, the controllability matrix is assembled column by column: the input matrix itself, then the system matrix applied to it, $$K=\begin{bmatrix}B & AB\end{bmatrix}$$. The intuition: $$B$$ is where the input can push the state directly (one time-step in); $$AB$$ is where that push can reach one step of the system's own dynamics later; for higher-order systems you'd keep going, $$A^2B$$, $$A^3B$$, etc., until you've covered every direction the input can eventually reach. $$AB = \begin{bmatrix} 0 & 1 \\ -a_0 & -a_1 \end{bmatrix}\begin{bmatrix} 0 \\ b_0 \end{bmatrix} = \begin{bmatrix} b_0 \\ -a_1 b_0 \end{bmatrix}$$ $$K = \begin{bmatrix} 0 & b_0 \\ b_0 & -a_1 b_0 \end{bmatrix}$$
Step 2 — apply the Kalman rank criterion. The system is fully controllable if and only if $$\text{rank}(K)=n$$ — for a square $$2\times2$$ matrix, that's the same as saying its columns aren't parallel, i.e. $$\det(K)\neq0$$: $$\det(K) = (0\cdot(-a_1b_0)) - (b_0\cdot b_0) = -b_0^2$$ $$\det(K)\neq0 \iff b_0\neq0$$ In plain terms: as long as the input actually enters the system at all ($$b_0\neq0$$), this particular system is controllable — which makes physical sense, since with only one input channel feeding a chain of two integrators, that single non-zero entry is the only thing that could ever break the connection between the input and the second state variable.
Controllability doesn't tell you how to control a system — it only tells you whether it's possible before you spend any effort trying. Next post: back to the 2R arm from a couple posts ago, this time asking a related but different question — not "can I get there," but "which joint configurations make the arm temporarily lose a direction of motion no matter what the motors do." Thank you for reading!
Read more