We have the idea that we might be able to use linear MPC to control kites modelled as differential-algebraic equations using MTK.
I have a student who has some issues with linearizing: It is easy to linearize a system around an equilibrium point. But what can you do if that doesn’t exist?
A kite that is flying figures of eight is nearly always accelerating (in the presence of gravity). There are only a few points on the trajectory where the acceleration is zero.
I know you can include control variables in the system to achieve equilibrium. But even that is often not sufficient.
Any other ideas on how to linearize a non-linear system that is not in equilibrium?
A linearization is always possible if the nonlinear model is differentiable at given point. Whether or not the point is an equilibrium is not important. In practice, however, many linearization tools, textbook and lecture content implicitly assume that the linearization point is an equilibrium of the nonlinear system, since the resulting equations are slightly simpler, and this typically what people want to do. Using such tools or equations won’t work if the point is not an equilibrium.
What tool did you used for the linearization ?
Okay, so I see that it returns the \mathbf{A}, \mathbf{B}, \mathbf{C} and \mathbf{D} matrices of the state-space representation. Assuming differentiable functions, these matrices will be always valid, disregard if the point is an equilibrium or not.
If the point is not an equilibrium, the issue arises in correctly simulating the resulting linear system. Because, strictly speaking, it won’t be a linear system, but an affine system. You must correctly handle the offsets everywhere. I’ve wrote the equations for the discrete-time case here. For continuous-time dynamics, it something that looks like this, for an ODE system:
\begin{aligned}
\mathbf{x_0}(t) &= \mathbf{x}(t) - \mathbf{x_{op}} \\
\mathbf{u_0}(t) &= \mathbf{u}(t) - \mathbf{u_{op}} \\
\mathbf{y_0}(t) &= \mathbf{y}(t) - \mathbf{y_{op}} \\
\mathbf{f_{op}} &= \mathbf{f}(\mathbf{x_{op}}, \mathbf{u_{op}}) \\
\mathbf{y_{op}} &= \mathbf{h}(\mathbf{x_{op}}, \mathbf{u_{op}}) \\
\mathbf{\dot{x}_0}(t) &= \mathbf{A x_0}(t) + \mathbf{B u_0}(t) + \mathbf{f_{op}} \\
\mathbf{y_0}(t) &= \mathbf{C x_0}(t) + \mathbf{D u_0}(t) \\
\end{aligned}
You can see that, strangely, there is an \mathbf{f_{op}} offset in the first state-space equation, but not in the second. That’s because:
\begin{aligned}
\mathbf{\dot{x}}(t) &= \mathbf{\dot{x}_0}(t) + \mathbf{\dot{x}_{op}} = \mathbf{\dot{x}_0}(t) + 0 = \mathbf{\dot{x}_0}(t) \\
\mathbf{y}(t) &= \mathbf{y_0}(t) + \mathbf{y_{op}}
\end{aligned}
edit: (also notice that the \mathbf{f_{op}} vanishes from the first state-space equation if the point is an equilibrium.)
TL;DR: please verify that you correctly took into account the operating points when you simulated the resulting linearized system. In the context of a MPC controller, ensure that ALL the operating points/offsets are correctly configured.
1 Like