Files
PythonRobotics/docs/modules/cgmres_nmpc.rst
Atsushi Sakai 621211aee9 fix gif URL
2019-01-31 18:39:36 +09:00

106 lines
2.7 KiB
ReStructuredText
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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/PythonRoboticsGifs/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 <https://github.com/Shunichi09/nonlinear_control>`__
- `非線形モデル予測制御におけるCGMRES法をpythonで実装する -
Qiita <https://qiita.com/MENDY/items/4108190a579395053924>`__