Nonlinear Model Predictive Control with C-GMRES ----------------------------------------------- .. code-block:: ipython3 from IPython.display import Image Image(filename="Figure_4.png",width=600) .. image:: cgmres_nmpc_files/cgmres_nmpc_1_0.png :width: 600px .. code-block:: ipython3 Image(filename="Figure_1.png",width=600) .. image:: cgmres_nmpc_files/cgmres_nmpc_2_0.png :width: 600px .. code-block:: ipython3 Image(filename="Figure_2.png",width=600) .. image:: cgmres_nmpc_files/cgmres_nmpc_3_0.png :width: 600px .. code-block:: ipython3 Image(filename="Figure_3.png",width=600) .. image:: cgmres_nmpc_files/cgmres_nmpc_4_0.png :width: 600px .. figure:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/cgmres_nmpc/animation.gif :alt: gif gif Mathematical Formulation ~~~~~~~~~~~~~~~~~~~~~~~~ Motion model is .. math:: \dot{x}=vcos\theta .. math:: \dot{y}=vsin\theta .. math:: \dot{\theta}=\frac{v}{WB}sin(u_{\delta}) \ (tan is not good for optimization) .. math:: \dot{v}=u_a Cost function is .. math:: J=\frac{1}{2}(u_a^2+u_{\delta}^2)-\phi_a d_a-\phi_\delta d_\delta Input constraints are .. math:: |u_a| \leq u_{a,max} .. math:: |u_\delta| \leq u_{\delta,max} So, Hamiltonian is .. math:: J=\frac{1}{2}(u_a^2+u_{\delta}^2)-\phi_a d_a-\phi_\delta d_\delta\\ +\lambda_1vcos\theta+\lambda_2vsin\theta+\lambda_3\frac{v}{WB}sin(u_{\delta})+\lambda_4u_a\\ +\rho_1(u_a^2+d_a^2+u_{a,max}^2)+\rho_2(u_\delta^2+d_\delta^2+u_{\delta,max}^2) Partial differential equations of the Hamiltonian are: :math:`\begin{equation*} \frac{\partial H}{\partial \bf{x}}=\\ \begin{bmatrix} \frac{\partial H}{\partial x}= 0&\\ \frac{\partial H}{\partial y}= 0&\\ \frac{\partial H}{\partial \theta}= -\lambda_1vsin\theta+\lambda_2vcos\theta&\\ \frac{\partial H}{\partial v}=-\lambda_1cos\theta+\lambda_2sin\theta+\lambda_3\frac{1}{WB}sin(u_{\delta})&\\ \end{bmatrix} \\ \end{equation*}` :math:`\begin{equation*} \frac{\partial H}{\partial \bf{u}}=\\ \begin{bmatrix} \frac{\partial H}{\partial u_a}= u_a+\lambda_4+2\rho_1u_a&\\ \frac{\partial H}{\partial u_\delta}= u_\delta+\lambda_3\frac{v}{WB}cos(u_{\delta})+2\rho_2u_\delta&\\ \frac{\partial H}{\partial d_a}= -\phi_a+2\rho_1d_a&\\ \frac{\partial H}{\partial d_\delta}=-\phi_\delta+2\rho_2d_\delta&\\ \end{bmatrix} \\ \end{equation*}` Ref ~~~ - `Shunichi09/nonlinear_control: Implementing the nonlinear model predictive control, sliding mode control `__ - `非線形モデル予測制御におけるCGMRES法をpythonで実装する - Qiita `__