From 274bfda8e63e3cfcfb064da139696594b31a5b81 Mon Sep 17 00:00:00 2001 From: Atsushi Sakai Date: Thu, 15 Nov 2018 21:11:00 +0900 Subject: [PATCH] update docs --- ...edictive_speed_and_steering_control.ipynb} | 62 +- docs/conf.py | 1 + docs/jupyternotebook2rst.py | 56 ++ .../Localization/Kalmanfilter_basics.rst | 563 ++++++++++++++++++ .../Localization/Kalmanfilter_basics_14_1.png | Bin 0 -> 5780 bytes .../Localization/Kalmanfilter_basics_16_0.png | Bin 0 -> 12196 bytes .../Localization/Kalmanfilter_basics_19_1.png | Bin 0 -> 18638 bytes .../Localization/Kalmanfilter_basics_2.rst | 329 ++++++++++ .../Localization/Kalmanfilter_basics_21_1.png | Bin 0 -> 18200 bytes .../Localization/Kalmanfilter_basics_22_0.png | Bin 0 -> 38658 bytes .../Localization/Kalmanfilter_basics_28_1.png | Bin 0 -> 3606 bytes docs/modules/path_tracking.rst | 12 +- 12 files changed, 993 insertions(+), 30 deletions(-) rename PathTracking/model_predictive_speed_and_steer_control/{notebook.ipynb => Model_predictive_speed_and_steering_control.ipynb} (79%) create mode 100644 docs/jupyternotebook2rst.py create mode 100644 docs/modules/Localization/Kalmanfilter_basics.rst create mode 100644 docs/modules/Localization/Kalmanfilter_basics_14_1.png create mode 100644 docs/modules/Localization/Kalmanfilter_basics_16_0.png create mode 100644 docs/modules/Localization/Kalmanfilter_basics_19_1.png create mode 100644 docs/modules/Localization/Kalmanfilter_basics_2.rst create mode 100644 docs/modules/Localization/Kalmanfilter_basics_21_1.png create mode 100644 docs/modules/Localization/Kalmanfilter_basics_22_0.png create mode 100644 docs/modules/Localization/Kalmanfilter_basics_28_1.png diff --git a/PathTracking/model_predictive_speed_and_steer_control/notebook.ipynb b/PathTracking/model_predictive_speed_and_steer_control/Model_predictive_speed_and_steering_control.ipynb similarity index 79% rename from PathTracking/model_predictive_speed_and_steer_control/notebook.ipynb rename to PathTracking/model_predictive_speed_and_steer_control/Model_predictive_speed_and_steering_control.ipynb index 81214aa2..ad4c4b96 100644 --- a/PathTracking/model_predictive_speed_and_steer_control/notebook.ipynb +++ b/PathTracking/model_predictive_speed_and_steer_control/Model_predictive_speed_and_steering_control.ipynb @@ -4,11 +4,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Model predictive speed and steering control\n", + "## Model predictive speed and steering control\n", + "\n", + "![Model predictive speed and steering control](https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/model_predictive_speed_and_steer_control/animation.gif?raw=true)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "\n", "code:\n", "\n", - "https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathTracking/model_predictive_speed_and_steer_control/model_predictive_speed_and_steer_control.py\n", + "[PythonRobotics/model\\_predictive\\_speed\\_and\\_steer\\_control\\.py at master · AtsushiSakai/PythonRobotics](https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathTracking/model_predictive_speed_and_steer_control/model_predictive_speed_and_steer_control.py)\n", "\n", "This is a path tracking simulation using model predictive control (MPC).\n", "\n", @@ -23,7 +32,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# MPC modeling\n", + "### MPC modeling\n", "\n", "State vector is:\n", "$$ z = [x, y, v,\\phi]$$ x: x-position, y:y-position, v:velocity, φ: yaw angle\n", @@ -49,18 +58,31 @@ "metadata": {}, "source": [ "subject to:\n", + "\n", "- Linearlied vehicle model\n", + "\n", "$$z_{t+1}=Az_t+Bu+C$$\n", + "\n", "- Maximum steering speed\n", + "\n", "$$|u_{t+1}-u_{t}|=30) + +.. code:: ipython3 + + import matplotlib.pyplot as plt + import random + a=np.zeros((100,)) + for i in range(100): + x=[random.uniform(1,10) for _ in range(1000)] + a[i]=np.sum(x,axis=0)/1000 + plt.hist(a) + + + + +.. parsed-literal:: + + (array([ 1., 4., 9., 12., 12., 20., 16., 16., 4., 6.]), + array([5.30943011, 5.34638597, 5.38334183, 5.42029769, 5.45725355, + 5.49420941, 5.53116527, 5.56812114, 5.605077 , 5.64203286, + 5.67898872]), + ) + + + + +.. image:: /Users/atsushisakai/Dropbox/Program/python/PythonRobotics/docs/modules/Localization/Kalmanfilter_basics_14_1.png + + +Gaussian Distribution +''''''''''''''''''''' + +A Gaussian is a *continuous probability distribution* that is completely +described with two parameters, the mean (:math:`\mu`) and the variance +(:math:`\sigma^2`). It is defined as: + +.. math:: + + + f(x, \mu, \sigma) = \frac{1}{\sigma\sqrt{2\pi}} \exp\big [{-\frac{(x-\mu)^2}{2\sigma^2} }\big ] + + Range is [$-:raw-latex:`\inf`,:raw-latex:`\inf `$] + +This is just a function of mean(\ :math:`\mu`) and standard deviation +(:math:`\sigma`) and what gives the normal distribution the +charecteristic **bell curve**. + +.. code:: ipython3 + + import matplotlib.mlab as mlab + import math + import scipy.stats + + mu = 0 + variance = 5 + sigma = math.sqrt(variance) + x = np.linspace(mu - 5*sigma, mu + 5*sigma, 100) + plt.plot(x,scipy.stats.norm.pdf(x, mu, sigma)) + plt.show() + + + + +.. image:: /Users/atsushisakai/Dropbox/Program/python/PythonRobotics/docs/modules/Localization/Kalmanfilter_basics_16_0.png + + +Why do we need Gaussian distributions? +'''''''''''''''''''''''''''''''''''''' + +Since it becomes really difficult in the real world to deal with +multimodal distribution as we cannot put the belief in two seperate +location of the robots. This becomes really confusing and in practice +impossible to comprehend. Gaussian probability distribution allows us to +drive the robots using only one mode with peak at the mean with some +variance. + +## Gaussian Properties +---------------------- + +**Multiplication** + +For the measurement update in a Bayes Filter, the algorithm tells us to +multiply the Prior P(X_t) and measurement P(Z_t|X_t) to calculate the +posterior: + +.. math:: P(X \mid Z) = \frac{P(Z \mid X)P(X)}{P(Z)} + +Here for the numerator, :math:`P(Z \mid X),P(X)` both are gaussian. + +:math:`N(\bar\mu, \bar\sigma^1)` and :math:`N(\bar\mu, \bar\sigma^2)` +are their mean and variances. + +New mean is + +.. math:: \mu_\mathtt{new} = \frac{\sigma_z^2\bar\mu + \bar\sigma^2z}{\bar\sigma^2+\sigma_z^2} + + New variance is + +.. math:: + + + \sigma_\mathtt{new} = \frac{\sigma_z^2\bar\sigma^2}{\bar\sigma^2+\sigma_z^2} + +.. code:: ipython3 + + import matplotlib.mlab as mlab + import math + mu1 = 0 + variance1 = 2 + sigma = math.sqrt(variance1) + x1 = np.linspace(mu1 - 3*sigma, mu1 + 3*sigma, 100) + plt.plot(x1,scipy.stats.norm.pdf(x1, mu1, sigma),label='prior') + + mu2 = 10 + variance2 = 2 + sigma = math.sqrt(variance2) + x2 = np.linspace(mu2 - 3*sigma, mu2 + 3*sigma, 100) + plt.plot(x2,scipy.stats.norm.pdf(x2, mu2, sigma),"g-",label='measurement') + + + mu_new=(mu1*variance2+mu2*variance1)/(variance1+variance2) + print("New mean is at: ",mu_new) + var_new=(variance1*variance2)/(variance1+variance2) + print("New variance is: ",var_new) + sigma = math.sqrt(var_new) + x3 = np.linspace(mu_new - 3*sigma, mu_new + 3*sigma, 100) + plt.plot(x3,scipy.stats.norm.pdf(x3, mu_new, var_new),label="posterior") + plt.legend(loc='upper left') + plt.xlim(-10,20) + plt.show() + + + +.. parsed-literal:: + + New mean is at: 5.0 + New variance is: 1.0 + + + +.. image:: /Users/atsushisakai/Dropbox/Program/python/PythonRobotics/docs/modules/Localization/Kalmanfilter_basics_19_1.png + + +**Addition** + +The motion step involves a case of adding up probability (Since it has +to abide the Law of Total Probability). This means their beliefs are to +be added and hence two gaussians. They are simply arithmetic additions +of the two. + +.. math:: + + \begin{gathered}\mu_x = \mu_p + \mu_z \\ + \sigma_x^2 = \sigma_z^2+\sigma_p^2\, \square\end{gathered} + +.. code:: ipython3 + + import matplotlib.mlab as mlab + import math + mu1 = 5 + variance1 = 1 + sigma = math.sqrt(variance1) + x1 = np.linspace(mu1 - 3*sigma, mu1 + 3*sigma, 100) + plt.plot(x1,scipy.stats.norm.pdf(x1, mu1, sigma),label='prior') + + mu2 = 10 + variance2 = 1 + sigma = math.sqrt(variance2) + x2 = np.linspace(mu2 - 3*sigma, mu2 + 3*sigma, 100) + plt.plot(x2,scipy.stats.norm.pdf(x2, mu2, sigma),"g-",label='measurement') + + + mu_new=mu1+mu2 + print("New mean is at: ",mu_new) + var_new=(variance1+variance2) + print("New variance is: ",var_new) + sigma = math.sqrt(var_new) + x3 = np.linspace(mu_new - 3*sigma, mu_new + 3*sigma, 100) + plt.plot(x3,scipy.stats.norm.pdf(x3, mu_new, var_new),label="posterior") + plt.legend(loc='upper left') + plt.xlim(-10,20) + plt.show() + + +.. parsed-literal:: + + New mean is at: 15 + New variance is: 2 + + + +.. image:: /Users/atsushisakai/Dropbox/Program/python/PythonRobotics/docs/modules/Localization/Kalmanfilter_basics_21_1.png + + +.. code:: ipython3 + + #Example from: + #https://scipython.com/blog/visualizing-the-bivariate-gaussian-distribution/ + import numpy as np + import matplotlib.pyplot as plt + from matplotlib import cm + from mpl_toolkits.mplot3d import Axes3D + + # Our 2-dimensional distribution will be over variables X and Y + N = 60 + X = np.linspace(-3, 3, N) + Y = np.linspace(-3, 4, N) + X, Y = np.meshgrid(X, Y) + + # Mean vector and covariance matrix + mu = np.array([0., 1.]) + Sigma = np.array([[ 1. , -0.5], [-0.5, 1.5]]) + + # Pack X and Y into a single 3-dimensional array + pos = np.empty(X.shape + (2,)) + pos[:, :, 0] = X + pos[:, :, 1] = Y + + def multivariate_gaussian(pos, mu, Sigma): + """Return the multivariate Gaussian distribution on array pos. + + pos is an array constructed by packing the meshed arrays of variables + x_1, x_2, x_3, ..., x_k into its _last_ dimension. + + """ + + n = mu.shape[0] + Sigma_det = np.linalg.det(Sigma) + Sigma_inv = np.linalg.inv(Sigma) + N = np.sqrt((2*np.pi)**n * Sigma_det) + # This einsum call calculates (x-mu)T.Sigma-1.(x-mu) in a vectorized + # way across all the input variables. + fac = np.einsum('...k,kl,...l->...', pos-mu, Sigma_inv, pos-mu) + + return np.exp(-fac / 2) / N + + # The distribution on the variables X, Y packed into pos. + Z = multivariate_gaussian(pos, mu, Sigma) + + # Create a surface plot and projected filled contour plot under it. + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.plot_surface(X, Y, Z, rstride=3, cstride=3, linewidth=1, antialiased=True, + cmap=cm.viridis) + + cset = ax.contourf(X, Y, Z, zdir='z', offset=-0.15, cmap=cm.viridis) + + # Adjust the limits, ticks and view angle + ax.set_zlim(-0.15,0.2) + ax.set_zticks(np.linspace(0,0.2,5)) + ax.view_init(27, -21) + + plt.show() + + + + +.. image:: /Users/atsushisakai/Dropbox/Program/python/PythonRobotics/docs/modules/Localization/Kalmanfilter_basics_22_0.png + + +This is a 3D projection of the gaussians involved with the lower surface +showing the 2D projection of the 3D projection above. The innermost +ellipse represents the highest peak, that is the maximum probability for +a given (X,Y) value. + +numpy einsum examples +''''''''''''''''''''' + +.. code:: ipython3 + + a = np.arange(25).reshape(5,5) + b = np.arange(5) + c = np.arange(6).reshape(2,3) + print(a) + print(b) + print(c) + + + +.. parsed-literal:: + + [[ 0 1 2 3 4] + [ 5 6 7 8 9] + [10 11 12 13 14] + [15 16 17 18 19] + [20 21 22 23 24]] + [0 1 2 3 4] + [[0 1 2] + [3 4 5]] + + +.. code:: ipython3 + + #this is the diagonal sum, i repeated means the diagonal + np.einsum('ij', a) + #this takes the output ii which is the diagonal and outputs to a + np.einsum('ii->i',a) + #this takes in the array A represented by their axes 'ij' and B by its only axes'j' + #and multiples them element wise + np.einsum('ij,j',a, b) + + + + +.. parsed-literal:: + + array([ 30, 80, 130, 180, 230]) + + + +.. code:: ipython3 + + A = np.arange(3).reshape(3,1) + B = np.array([[ 0, 1, 2, 3], + [ 4, 5, 6, 7], + [ 8, 9, 10, 11]]) + C=np.multiply(A,B) + np.sum(C,axis=1) + + + + +.. parsed-literal:: + + array([ 0, 22, 76]) + + + +.. code:: ipython3 + + D = np.array([0,1,2]) + E = np.array([[ 0, 1, 2, 3], + [ 4, 5, 6, 7], + [ 8, 9, 10, 11]]) + + np.einsum('i,ij->i',D,E) + + + + +.. parsed-literal:: + + array([ 0, 22, 76]) + + + +.. code:: ipython3 + + from scipy.stats import multivariate_normal + x, y = np.mgrid[-5:5:.1, -5:5:.1] + pos = np.empty(x.shape + (2,)) + pos[:, :, 0] = x; pos[:, :, 1] = y + rv = multivariate_normal([0.5, -0.2], [[2.0, 0.9], [0.9, 0.5]]) + plt.contourf(x, y, rv.pdf(pos)) + + + + + + +.. parsed-literal:: + + + + + + +.. image:: /Users/atsushisakai/Dropbox/Program/python/PythonRobotics/docs/modules/Localization/Kalmanfilter_basics_28_1.png + + +References: +~~~~~~~~~~~ + +1. Roger Labbe’s + `repo `__ + on Kalman Filters. (Majority of the examples in the notes are from + this) + +2. Probabilistic Robotics by Sebastian Thrun, Wolfram Burgard and Dieter + Fox, MIT Press. + +3. Scipy + `Documentation `__ diff --git a/docs/modules/Localization/Kalmanfilter_basics_14_1.png b/docs/modules/Localization/Kalmanfilter_basics_14_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5901d1927bf565803576f5f2fe9cb1cad236e6d GIT binary patch literal 5780 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 V;7}od4A?;iVXYi23l95S`ajKZS9kyb literal 0 HcmV?d00001 diff --git a/docs/modules/Localization/Kalmanfilter_basics_16_0.png b/docs/modules/Localization/Kalmanfilter_basics_16_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4de1087aff6af7e7c70af6635e2982f3ab5b257d GIT binary patch literal 12196 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 literal 0 HcmV?d00001 diff --git a/docs/modules/Localization/Kalmanfilter_basics_2.rst b/docs/modules/Localization/Kalmanfilter_basics_2.rst new file mode 100644 index 00000000..91bf3e01 --- /dev/null +++ b/docs/modules/Localization/Kalmanfilter_basics_2.rst @@ -0,0 +1,329 @@ + +# *KF Basics - Part 2* +---------------------- + ++-----------------------------------------------------------------------+ +| ### Probabilistic Generative Laws | ++=======================================================================+ +| \*1st Law**: | ++-----------------------------------------------------------------------+ +| he belief representing the state :math:`x_{t}`, is conditioned on all | +| past states, measurements and controls. This can be shown | +| mathematically by the conditional probability shown below: | ++-----------------------------------------------------------------------+ + +.. math:: p(x_{t} | x_{0:t-1},z_{1:t-1},u_{1:t}) + +1) :math:`z_{t}` represents the **measurement** + +2) :math:`u_{t}` the **motion command** + +3) :math:`x_{t}` the **state** (can be the position, velocity, etc) of + the robot or its environment at time t. + +‘If we know the state :math:`x_{t-1}` and :math:`u_{t}`, then knowing +the states :math:`x_{0:t-2}`, :math:`z_{1:t-1}` becomes immaterial +through the property of **conditional independence**’. The state +:math:`x_{t-1}` introduces a conditional independence between +:math:`x_{t}` and :math:`z_{1:t-1}`, :math:`u_{1:t-1}` + +Therefore the law now holds as: + +.. math:: p(x_{t} | x_{0:t-1},z_{1:t-1},u_{1:t})=p(x_{t} | x_{t-1},u_{t}) + +**2nd Law**: + +If :math:`x_{t}` is complete, then: + +.. math:: p(z_{t} | x-_{0:t},z_{1:t-1},u_{1:t})=p(z_{t} | x_{t}) + +:math:`x_{t}` is **complete** means that the past states, controls or +measurements carry no additional information to predict future. + +:math:`x_{0:t-1}`, :math:`z_{1:t-1}` and :math:`u_{1:t}` are +**conditionally independent** of :math:`z_{t}` given :math:`x_{t}` of +complete. + +The filter works in two parts: + +:math:`\bullet` $p(x_{t} \| +x_{t-1},u_{t}):raw-latex:`\rightarrow `$\ **State Transition +Probability** + +:math:`\bullet` $p(z_{t} \| x_{t}) +:raw-latex:`\rightarrow `$\ **Measurement Probability** + +### Conditional dependence and independence example: +---------------------------------------------------- + +:math:`\bullet`\ **Independent but conditionally dependent** + +Let’s say you flip two fair coins + +A - Your first coin flip is heads + +B - Your second coin flip is heads + +C - Your first two flips were the same + +A and B here are independent. However, A and B are conditionally +dependent given C, since if you know C then your first coin flip will +inform the other one. + +:math:`\bullet`\ **Dependent but conditionally independent** + +A box contains two coins: a regular coin and one fake two-headed coin +((P(H)=1). I choose a coin at random and toss it twice. Define the +following events. + +A= First coin toss results in an H. + +B= Second coin toss results in an H. + +C= Coin 1 (regular) has been selected. + +If we know A has occurred (i.e., the first coin toss has resulted in +heads), we would guess that it is more likely that we have chosen Coin 2 +than Coin 1. This in turn increases the conditional probability that B +occurs. This suggests that A and B are not independent. On the other +hand, given C (Coin 1 is selected), A and B are independent. + +### Bayes Rule: +--------------- + +Posterior = $:raw-latex:`\frac{Likelihood*Prior}{Marginal}` $ + +Here, + +**Posterior** = Probability of an event occurring based on certain +evidence. + +**Likelihood** = How probable is the evidence given the event. + +**Prior** = Probability of the just the event occurring without having +any evidence. + +**Marginal** = Probability of the evidence given all the instances of +events possible. + +Example: + +1% of women have breast cancer (and therefore 99% do not). 80% of +mammograms detect breast cancer when it is there (and therefore 20% miss +it). 9.6% of mammograms detect breast cancer when its not there (and +therefore 90.4% correctly return a negative result). + +We can turn the process above into an equation, which is Bayes Theorem. +Here is the equation: + +:math:`\displaystyle{\Pr(\mathrm{A}|\mathrm{X}) = \frac{\Pr(\mathrm{X}|\mathrm{A})\Pr(\mathrm{A})}{\Pr(\mathrm{X|A})\Pr(\mathrm{A})+ \Pr(\mathrm{X | not \ A})\Pr(\mathrm{not \ A})}}` + +:math:`\bullet`\ Pr(A|X) = Chance of having cancer (A) given a positive +test (X). This is what we want to know: How likely is it to have cancer +with a positive result? In our case it was 7.8%. + +:math:`\bullet`\ Pr(X|A) = Chance of a positive test (X) given that you +had cancer (A). This is the chance of a true positive, 80% in our case. + +:math:`\bullet`\ Pr(A) = Chance of having cancer (1%). + +:math:`\bullet`\ Pr(not A) = Chance of not having cancer (99%). + +:math:`\bullet`\ Pr(X|not A) = Chance of a positive test (X) given that +you didn’t have cancer (~A). This is a false positive, 9.6% in our case. + +### Bayes Filter Algorithm +-------------------------- + +The basic filter algorithm is: + +for all :math:`x_{t}`: + +1. :math:`\overline{bel}(x_t) = \int p(x_t | u_t, x_{t-1}) bel(x_{t-1})dx` + +2. :math:`bel(x_t) = \eta p(z_t | x_t) \overline{bel}(x_t)` + +end. + +:math:`\rightarrow`\ The first step in filter is to calculate the prior +for the next step that uses the bayes theorem. This is the +**Prediction** step. The belief, :math:`\overline{bel}(x_t)`, is +**before** incorporating measurement(\ :math:`z_{t}`) at time t=t. This +is the step where the motion occurs and information is lost because the +means and covariances of the gaussians are added. The RHS of the +equation incorporates the law of total probability for prior +calculation. + +:math:`\rightarrow` This is the **Correction** or update step that +calculates the belief of the robot **after** taking into account the +measurement(\ :math:`z_{t}`) at time t=t. This is where we incorporate +the sensor information for the whereabouts of the robot. We gain +information here as the gaussians get multiplied here. (Multiplication +of gaussian values allows the resultant to lie in between these numbers +and the resultant covariance is smaller. + +### Bayes filter localization example: +-------------------------------------- + +Given - A robot with a sensor to detect doorways along a hallway. Also, +the robot knows how the hallway looks like but doesn’t know where it is +in the map. + +1. Initially(first scenario), it doesn’t know where it is with respect + to the map and hence the belief assigns equal probability to each + location in the map. + +2. The first sensor reading is incorporated and it shows the presence of + a door. Now the robot knows how the map looks like but cannot + localize yet as map has 3 doors present. Therefore it assigns equal + probability to each door present. + +3. The robot now moves forward. This is the prediction step and the + motion causes the robot to lose some of the information and hence the + variance of the gaussians increase (diagram 4.). The final belief is + **convolution** of posterior from previous step and the current state + after motion. Also, the means shift on the right due to the motion. + +4. Again, incorporating the measurement, the sensor senses a door and + this time too the possibility of door is equal for the three door. + This is where the filter’s magic kicks in. For the final belief + (diagram 5.), the posterior calculated after sensing is mixed or + **convolution** of previous posterior and measurement. It improves + the robot’s belief at location near to the second door. The variance + **decreases** and **peaks**. + +5. Finally after series of iterations of motion and correction, the + robot is able to localize itself with respect to the + environment.(diagram 6.) + +Do note that the robot knows the map but doesn’t know where exactly it +is on the map. + +### Bayes and Kalman filter structure +------------------------------------- + +The basic structure and the concept remains the same as bayes filter for +Kalman. The only key difference is the mathematical representation of +Kalman filter. The Kalman filter is nothing but a bayesian filter that +uses Gaussians. + +For a bayes filter to be a Kalman filter, **each term of belief is now a +gaussian**, unlike histograms. The basic formulation for the **bayes +filter** algorithm is: + +.. math:: + + \begin{aligned} + \bar {\mathbf x} &= \mathbf x \ast f_{\mathbf x}(\bullet)\, \, &\text{Prediction} \\ + \mathbf x &= \mathcal L \cdot \bar{\mathbf x}\, \, &\text{Correction} + \end{aligned} + +:math:`\bar{\mathbf x}` is the *prior* + +:math:`\mathcal L` is the *likelihood* of a measurement given the prior +:math:`\bar{\mathbf x}` + +:math:`f_{\mathbf x}(\bullet)` is the *process model* or the gaussian +term that helps predict the next state like velocity to track position +or acceleration. + +:math:`\ast` denotes *convolution*. + +### Kalman Gain +--------------- + +.. math:: x = (\mathcal L \bar x) + +Where x is posterior and :math:`\mathcal L` and :math:`\bar x` are +gaussians. + +Therefore the mean of the posterior is given by: + +.. math:: + + + \mu=\frac{\bar\sigma^2\, \mu_z + \sigma_z^2 \, \bar\mu} {\bar\sigma^2 + \sigma_z^2} + +.. math:: \mu = \left( \frac{\bar\sigma^2}{\bar\sigma^2 + \sigma_z^2}\right) \mu_z + \left(\frac{\sigma_z^2}{\bar\sigma^2 + \sigma_z^2}\right)\bar\mu + +In this form it is easy to see that we are scaling the measurement and +the prior by weights: + +.. math:: \mu = W_1 \mu_z + W_2 \bar\mu + +The weights sum to one because the denominator is a normalization term. +We introduce a new term, :math:`K=W_1`, giving us: + +.. math:: + + \begin{aligned} + \mu &= K \mu_z + (1-K) \bar\mu\\ + &= \bar\mu + K(\mu_z - \bar\mu) + \end{aligned} + +where + +.. math:: K = \frac {\bar\sigma^2}{\bar\sigma^2 + \sigma_z^2} + +The variance in terms of the Kalman gain: + +.. math:: + + \begin{aligned} + \sigma^2 &= \frac{\bar\sigma^2 \sigma_z^2 } {\bar\sigma^2 + \sigma_z^2} \\ + &= K\sigma_z^2 \\ + &= (1-K)\bar\sigma^2 + \end{aligned} + +**:math:`K` is the Kalman gain. It’s the crux of the Kalman filter. It +is a scaling term that chooses a value partway between :math:`\mu_z` and +:math:`\bar\mu`.** + +### Kalman Filter - Univariate and Multivariate +----------------------------------------------- + +\ **Prediction**\ + +:math:`\begin{array}{|l|l|l|} \hline \text{Univariate} & \text{Univariate} & \text{Multivariate}\\ & \text{(Kalman form)} & \\ \hline \bar \mu = \mu + \mu_{f_x} & \bar x = x + dx & \bar{\mathbf x} = \mathbf{Fx} + \mathbf{Bu}\\ \bar\sigma^2 = \sigma_x^2 + \sigma_{f_x}^2 & \bar P = P + Q & \bar{\mathbf P} = \mathbf{FPF}^\mathsf T + \mathbf Q \\ \hline \end{array}` + +:math:`\mathbf x,\, \mathbf P` are the state mean and covariance. They +correspond to :math:`x` and :math:`\sigma^2`. + +:math:`\mathbf F` is the *state transition function*. When multiplied by +:math:`\bf x` it computes the prior. + +:math:`\mathbf Q` is the process covariance. It corresponds to +:math:`\sigma^2_{f_x}`. + +:math:`\mathbf B` and :math:`\mathbf u` are model control inputs to the +system. + +\ **Correction**\ + +:math:`\begin{array}{|l|l|l|} \hline \text{Univariate} & \text{Univariate} & \text{Multivariate}\\ & \text{(Kalman form)} & \\ \hline & y = z - \bar x & \mathbf y = \mathbf z - \mathbf{H\bar x} \\ & K = \frac{\bar P}{\bar P+R}& \mathbf K = \mathbf{\bar{P}H}^\mathsf T (\mathbf{H\bar{P}H}^\mathsf T + \mathbf R)^{-1} \\ \mu=\frac{\bar\sigma^2\, \mu_z + \sigma_z^2 \, \bar\mu} {\bar\sigma^2 + \sigma_z^2} & x = \bar x + Ky & \mathbf x = \bar{\mathbf x} + \mathbf{Ky} \\ \sigma^2 = \frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2} & P = (1-K)\bar P & \mathbf P = (\mathbf I - \mathbf{KH})\mathbf{\bar{P}} \\ \hline \end{array}` + +:math:`\mathbf H` is the measurement function. + +:math:`\mathbf z,\, \mathbf R` are the measurement mean and noise +covariance. They correspond to :math:`z` and :math:`\sigma_z^2` in the +univariate filter. :math:`\mathbf y` and :math:`\mathbf K` are the +residual and Kalman gain. + +The details will be different than the univariate filter because these +are vectors and matrices, but the concepts are exactly the same: + +- Use a Gaussian to represent our estimate of the state and error +- Use a Gaussian to represent the measurement and its error +- Use a Gaussian to represent the process model +- Use the process model to predict the next state (the prior) +- Form an estimate part way between the measurement and the prior + +### References: +--------------- + +1. Roger Labbe’s + `repo `__ + on Kalman Filters. (Majority of text in the notes are from this) + +2. Probabilistic Robotics by Sebastian Thrun, Wolfram Burgard and Dieter + Fox, MIT Press. diff --git a/docs/modules/Localization/Kalmanfilter_basics_21_1.png b/docs/modules/Localization/Kalmanfilter_basics_21_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd6c9d4b43c958679baedf76858c84fa0ada5ef GIT binary patch literal 18200 zcmZ_01z1#Xw>~^WcT0Cl3et^A$dCd8(%p@84bm;rjiewc(%}e_(%s$N4fEgp-t(RJ zyyrTfTr$I4d!D_XTKB!~wVoZJsw{_%L5=|efw1M@N~?iDU?}kZ9t{Qf?XT)u4ZI+^ zzLwWO1OEA1l+pgE?r8DR!`Q_fWN-Y@$Ea(C#>*4Tkzi(#{bBI#qK}<-$aT=GjU~ZL zV(7|e@P_&wFH&ri+TN+vG9y8Dq^N*U>FeS zFx`H<5e%IFC3Q#vE6(xP$xnokL#T2Hp^1q^bq)(Qb!61}RaKuqeL|=iI3{fhcvPaj zdhz)Vg_gcMR7Wlh`hVTq*8wZ{g@}mAb572}+S&;_by-C_JC3`{1Kv5Tded4Rc@-7G zIjk62UL-vN5dH^{7)mfGKocT9t|8;?!y)!B^Ph_fBgKJxV>%l zl9v}h{;TE{D>(&4L~N`8&{|&N>UwWNVsdi2eWYwY8A4DfRGJaVld=J$2ho8jzD1%> z2GIjC=UgZml>?;+j0t6-Jiv~aoYW*BBz$<>r1=((77-BvUioUx_dA%~6to4Bfs`;n zO5Bb3o$P5g{88>Pw!KIih_%ZTZPX!D$dSO;$^6c)?9aFIN3Llq(4@#!N7wvH*0crb zUsCj_LRxvoo5*7%hsP&-BV)pD8d}Ee)Wu#~zhRa1IkMa@o3pNCC4aHnM=E6)=e|IJ z9u;9ZeneAdQAOqm{2tv(2sWjd*Rb6fpMjAot`zG8E4>GJkEbZGLIZMuACC$xhm_PJjxR9KzX1CLDlaP+ zCi*d=z>g#^tLn>)8I>|$EjEz)y9_LI9R(tydfx67rwKYz|4rsxi(ttHMYAj^We9+e zCv_dcvO;D%qlI?URe_nAln$*In%Tam@(#@hb-cS)zA2Z3T#E~aog`=KWY4JE$E7h% z^XRXq79kZ`8}N<~cQ%*K-!Ad4GCgoXDa?j_k@@VN_Hf(#p%ysLj7Utevo%wdnoX7( zn;a{@JnIE!cQwtG+nE;Rna~tSXc6B2?u8cXMbVw&l>`|XS$~EgE;Pfjt?>@!v9{9h zAo>R?4kax+dlX<7D4F9!dshra^U&3Mxiud<){4UF@`M-bg&-sRmD7^m7LVL?WuKJZ z$(T$*9P%>(;!Q3j+RpU${py;V?%x5a*2!H8*PW2%?1s~VLsoAUw~uW{?44z5meFoG zvb4p8*o+dwI#Dvq^AYF^-CU_+p%c20Y28Iw^tljWIfd{Ml}{Y2Y0+omvqnMJ50mEi z4rfPJ2X>w0HvA(%H%A(wp|F#+?wjrWIFRQ_CrRURJLVmysCgd|ux?n{*btV1C9=F4 z_2M!zi~Op3!-~^u%_O|eUt-VF!J@^v;yUqzMPmrpL?>#uq|xK`O)*uDq_M=orF&iG zw8uX8MrevzB1v1>KCxuH7OJ|sf9u;W%KiW9lxt>tZITgl>PY+hOAtqeh#od{ zL`~YrMz$(c=NH5Z6A~zkW|NCXo?pN7^)8!a{5#*#w(B=uKf(LLbkVvy>qwI0W*Do6 z&*0C|YbgtpYHiQml4501O+7u|**nV|zq-2%^A!EA%Y!);(WS*j|EGoQ^0P};AuQ|u z=QQu&Mseql?tujSmVvrcdr&`_;MUKzhS00WiWz+p>^J68<6j1;{!I&n&X`)d0_zal{&7xnVEGBEZjA$E z7-m@C1&3zd@b@b4BP|;h1{7VWLaM*pknpNmoO}6O^eKWaHIFWeK9Il22M}u~ERT&s zxYw_kRz5bCc9y*FDZ z%RVUPNMv0t1<*jheH+RVG4$GamdvG(0RtRk1&L5KOGg*kewQCAnh!-P z8aK&*{P=O*LGuXfz?JOZpQ#Z(YB~E>&aYWTE#aGrj7jWtIb+Ei@aTJaw6x@x)qK>J zfyvbXjUZ%kFRpJpYP<77um}sM)i3!|e4pq8_DJKy z<=jk@8~b<7^3^`}%Js*)qi%=#vH5wiZ`i1~)ay&|M?pF|y8GiW$^A2LP_xI81;9{# z*44fAIyIyA-lnT_TpAR=n(sIpk{t5*b*G>F!f;SsMO?<+T_DHz6n*LOvfgVe%LDW# zQ^0=q&*Q`0hXyA)U|Pg+C9Y|I-3&N-uEi{h2B1)PvSc*n9N(Gxwp&SKRUfm6>{C&S zyCqVbI*?Xns?*|3Q17}{r*^?lM8Vt%Wn~&X1?g zpJgn8y0SstaWt0m4bJm!Q~LYU)rj~z%6NhvhkD7Jy0UU|s8jkLR5ca@wPR z6V>_Jz<@d_DT(1>?B*GSHFko}_44`}{P#o0Yf=)?NE1mysOd#_6}#w6M34^%6sAml z8v22p@K_Y=v?0HsE-fwn@mHNT$HEaOF=kd)R&a1|6=0Q%t4e^*?T$(S1OmYj^*AhO zYs)SuU<7eBZPN=l%=bvbZ&Vx_H;CJ=T92If%ImX0P9xBc<2dBnFr0=$oa@!ouwc;>Eg86!EQ{DS?kv zvSz%Ood7Cvdbb2`y9?b>MA9-eRI#yP13di1cP-O;ii|ueQTOQebu))w5AFb53)I>3 zx>Obv6jTBHsi~>S^I}3P%vW41JR*XQo&CFy0;G@#=r?7R^2d)KVGdSH318G@pK~$z zkLQ~663D(&6ZPC4OmXTuuUV}@;b5UR>om6pqZy$*1L32CsZlEsPN5W8g4fh#YLE@~ zLJROO1nNWQLjc{A*I07T=-}IOl6m?0K>#>$``v!@KhLKDA0IddWIQ3(*`R1#US8f| z@pXIqYm0&OPGFaRsIkCax*7BUc^>~py%|ku`vdGPh>gwe=gKX%fQLOpuP4qT?8-b= zq_jsZeHaI{j7Lu1*Pq6V=#6*XuojvfKMcpBWg$DsFR`)9uQinx&GJqHh8>TZV6b7^ zIVgD`a%lIGln)%PW&@*H_BHa0yOIR?b4%S&1PW4B@&+yh>E~~$C@aVA4lK6%3<+&k z^6~Md+JEYvZuY43zFP1Y5HS5CcH$79e*7S)VQSk=w&i_wG+|$8(|)z28pigp<*I)^ zN}u%5ye~0yakwPzxR5UkH~G1{yLwC4=*x#^f>ehU;R;ee|tc^=20TdgpnTK)WGYFkH!F zEfSQ7KqkIejA)LSXoxL_o||ZcI7?Y6>E?+h44ce;mZ-)KeFkc5Y%I;qUH*x3bucIQ z@#E45vWJ+it}f_~f@7H``@47V&L8jZV{#k;szvsWh$z#qtFgVkee8B>qVRh0&XFK3 z@ztx}L@#uN#nMI7O9Cph&x*5Ee&2uM9lSa;d~J>(IsfqH3p3L@?t}i*N9m(BYrPEQ zpU6GL@f`T*sKki2KE!zO*@TgmC^*8gEW#-9`0)`^0=aUDd=gP=kw2PJ z_-dwd?=-h)=yJb!Go*`3xVI>5WNpMw(Ojh}k)M%{BdS8&B75{<-n2;CC5f{P^teV? zB4x;j1o3|Zah8c>uThujm%;cuNc%7<2rGP1UYBrqoZn-3-hpKxgf&-rbXC^5T?J`b z`+*0<{72cT#5a>aHZ?r;&^sO0UKnBoDRF}}8Fc&4uU&ZDmeiwY^AaHPlRK`q#20sd z(68X-av-9it~g1Qcj&xfJSs(9=J+lSg-NpnozYjeUg~(X*M6-6yf(G(@he>If}I%N z#5EfO<_QyFX;2>wQS<3~Q}BPBMScG2l)&0dDdr@8!q7 zLPty>8`i96X;+5NRr<}5&K|AZ7^M)qu%NpDw?x@nQG|bh|EGJM3AUR!U(t!*y$Wct z1((gev3{WX#%W@iE*TLO=lFa~h1YRW3_!oGC*nc_zm^lQo0d{m#;ITQW`FA5(`#kh zE!*AIk(~6m@821?xMD*vNnB>kQ=I>D)`OgYHy0VPjh3@pPegkzwE3_pO4qS9iAf>3 z%4Gv`*mmb&;B!z51Y)6bGJcq>)%e;R4~~hW8ROb(MTVMFeKQp?<>|8We&{!>H*ZSU zh@uIxSyB_Zoe+d$0=~YHdPB>=5ae~X33fUg5UeroKmnLmPj4^SsP_w#-F!oQYAPwP z^Oml=1g`;{8QdPR+)Ug_i}eDCoG*a+1uZQtcfLbEhs2*IuVJSs1JtmQtULYFdMwwC zuR>jOY1Z$JN7A@ZG3v0$TY1-akax4H5Lv~p2 zhA+Lu(Xp}3&o&31;!Oa^&cY<`zuxsO_8RS^`V{%OPcUokS=|=rwI$80t%Yi^h|nkY z9OL!v`uVU~>Dy8%Q7Ls`fWh9Bw4f1c7@m;-y%3GxIX>t`+ckZPp}#P|Sr#Z-T7c+F z&-bJg;1|1ldpD~jzk2fHBxd~*;$maFEO?VAaapK%VaOzUu-%F8V1|q>AUNB;^haTb zu(FZsG@IU5(9=i9)T$Y5%~3wfEf!V2_!EJ`c31+yPnvs@AdKLF&@PG zLyuo;X_nbfa>A3rVwcmV*@y1Ks&nJYK9(e=rlAtU!UB^JnVQZ3Yuo&h+ z^6rQ(!fb8@Q~E~|gqQeHo$cx>S#8AwK#=C%CCgD#QewB*aua195ya75h z_c!AwRy|_PH%6vp}X8 zfPblGHIBoV+hp~?4%=Ce$h_CT9bs$evcRm(wJte^0*nAOiBNJf(fqDDbE!1 zdP(c>GB8{%GJypUg>J9dM*2cE2^bjAFv)JG+F3zuEyT;x9TCPM0WdU*nWU_~B8Z@F zArIj%QY2*+m102J+ugOPQ6l3hFE95G$lu5OJ^}Ie7U_&Vh2zS&tZxRD~l zK&E-^_$Ld&PE?mTrRk-iR0uAM=YQ=tf)dBC3H|XAMy*<2y*Fj=?KlU$e#5~iE33MZ zPc3Dx&V(Ujqp@4HE4sInCKVW>fIv%+DZLI2CyMAH^NNsJ$HAXrq8F7mO9)@T5V}H? zYel4YDHM&FvYM9(YmG`!I$)H;l@v=MAY7@Tmh#F!S(lhUR)T0?eEL|QkB$Yfx$f+? zI7BV57c55H@fb&wweU1atp;ic#ueS&G~TBZ!`23gt;{oM=btbE0@d@*Dsd2WeH)F< zZyeD{qOn*OcL))!Huwu=TA4T$)bR{=nKJh+tD7|I1Wp-B#lZ(asTy9hXI###aOJGh zVVx*S6u}@8o&~5)7BBAi$TbL?MW+?Eo99#E+ezKKnaFa(@*t zme4>CDwGe!sJJy8a93_A6vM>%R>R+sP*o3Lv+m^hlaDk8Z%L7V|FX4GN!P@tZ&xZ`* zg5nYEajd#fJN#aPc&F%B3$@~y;cwmJ>a`HVC@ZJ_Tc=#^=Sw4x>D3Udizg+M$QxGr z!4M){J8*^aiQVp5M>fJPBfm%z*My8)4g5vVI4RaH_<5m-%sQ8mI37aT{}2^n`t&Zs z!{E$zH2CuKD}pMLZKOjD$c`C3c}{*)by5L77AS}Z1=N;?`)yuxus<=4!KQIR1cq9JNCJZNxJOU=N2Z*DEiX*;<-84ciyZ zi$^tu_W@Frc>!#We%VS3TqIxH0!ThjL}_T9u{roaUfK%HIltqZ&3QSVs*)?VyE)B? zdUH*i0T!_kAoL)K>+467&-I9dxVylu?OG5xh!~_atUfjR$})w# z8Wr@J(!LD&m?;y1TMZXRZo{-lu2QH}9E?K*=rf8NHyHj52bn2l)uxqdXvP z>4LlxlRpPmzKEQl^xST;8jmp4&+BO5o6${~!Ouz%v%c^-ateOUI4}|(kP>+nH-_jG z1(KE-o}7^})!ho8b0K+FhmqHjAAuD|>8xv--{tN@L=Kn3gfeeCe+LPX1lHKN#FMA3-NvN z(*Vu$fUt5@m?jLQjB=5s2+x5Pz{6~_zCv?7k9b@-0Rs%E2j&bIFspwCY$C>wZ%<~Rkf)H?E-xh>X zKq5#)&!5`iKgiMtXl;WM2v$wnFNXxv{|?P!jD;{tzdpBF2E78h_)U0by$zV$FTOp9 zPW2!_>v|ijI0;bACp*W59LEpIk=*Mx*mr0%Rd#{*D5jKB#X)FTPoqHY!G+-Zg^22v zy}IZn*V))Bp`3BKA7s9c=O$IK-%Q~DjH21;ePq^o@n>l13B5CGqIz(;hh`Vu_{n*l z2Pd5!Hdk=~V5#z8waJ)WnA~(Kse1oeh%LVAGk1M$2{Nq{sRrmj@;3&Zb%?HsYP?V_ zsNsdsR9<5G#`TA7=4O8K`sETlyk$c5SM2HY^%&Fg5HpOVI!F%0vzUy!!t*~9IYS7L z5|1Rcf!KN)#GONa_52eoVCes7zo`z55yK89G=!k83*i9f?ePZQPS)=~8?|Adsk&b_OF=Mey>1mE9?-+sP#f3fI7G6*&o ze>M(xHdnuHBPclExr^u-fKe{5QipZ37xqb;(I3Z#@2f$m4&OTpS5eZkvPJ-?rDb=e zU?-4qn1k#5?PmzL(~O1I?bN8XueiiwV@hynUObr)LZVtCf8vO9X-E0PcOmmX@TJ*v z;-r&D2874UUpv@(_)s<4{O-Gtxn&-7_>GheG!5FU6A#<@iEOU-67=*TFuP?wuqvb+ zqzPKz+${a{=@Xq>d(LwX4(Y2QkL#uK5Jd`-H?Mww;7al+41lnf9kt5XxriVmw}$;~ zku%k0u&0#YJA8Dr)yIujk-Jf=*0G|0B{X9@xZ> zpMlW?hCoV6sk_%?7~4<0vAA)k_qf*h)8khMrJa<0nW%zYi(=>ANX1^BE7HO(|D9wB z#4{>Xvxy5A1KGWYlq36NOM_pCs_jyH^k1i8+`p4<;{LPwsxT2yfK`TPjk_l&cP9Bk z%D%>qMwZmHz^X+IukRwXKp#WE12qsJyk@P%(Vp6yj`L}0YsvAZLAYVyQO!RgT8M(p z?}MQ{&(5!VH-BS#<9QSZI?>Y?NEdEL=YpXI=w;|SnJU}ar=b39l zWO6|Vq$NSlAOF^vW}XtyZ+ z;xM5Gn9Ea7ePL2MaMuypcThoINZ@(50=Po&vWLK94Qg7Jk(CkcH|5@J-*N!4pD@w$ zC3bK^fz=s7yB8a<8SzH|uLpXvv7jr+nic?oG*X09BXTqr5vpMLzrNw}tSX^k8*Nut z#A@&S(WC@J7uh(Od$s(8x;gX`bWij2?LP?sf<*H;^E=6?BeT9^6&kJa2?pk)kK%$) zH9!_{iqA_N>=^#gGfFo}0{1QUFqS3lNdR1Dfo!46j}1nEFUA?jtqK1G3H4h5RR;g6 z1+e<`1waJ?h7R;<&qH)!;n`U~PDgd)@3j1E6Zun47>e)JCuo`Y+amubVf6FM{G}y* z8QEh=|KpW3^SMyHv^0*ee{#c^XN*OIrwe{+!lADeGdi?b9AtUtO$iGi`%g!>D5~#> zy7|1&0#ph5z2QT3`;W~pF=P@`k_9dQHU(X`~3gM z4-P&YNuZ2URaPP`YCcuz+ru&t$CW4|1Ic5WcXrjrr)S^Bo|J*0)x~PI{?ZQ^8D1^_f_BH+d~vi zjKyAHIgvZ|fyg3lkw1+vY7TvA328`3!SIOcB{R|Em)lfU%KjT-rFUr-8P;q-@}Bkc z$eN#s>SXiha6O!PT)nbHo4t4SxmpYDi*8B(Ln_Plh=+cys=`~4be%CA0UfmrAzLaH z8+8p^^kLNoRB9a>DL9vF!I?WnBaKP){6;1eqjQ7`n%*23-e!M%ZSuzVh!=j%>Uk7~ zmw+=R9a=Kgz0YK_@WR~H`0?LyORi#9eDAaFvM6>@)&DR2K>yYT{tV+Y-M$DeqEah_>u64 zaO02DR&j=Zw?<#>-&5FK8>ae;b9m#F@%W`gK|W)Q1V|U*9(3+@$Gu#?-&4Nt-`^0|{F_D}#ou=j zFTR6d1&#er0rS{tXDdxCbY`FDbf=$R&te{*Csl0AS_*+Cm*E%d?3J;6%;HnV-8{r8V!DZ{7Jq-X-laG#|myrU1gx3#RL1W zwA^x!nQ4Ti=miuS#p1fr&+Y1f^*U28WA{B{^XCy`Qe9r??45I3nV3v;)$r#%+zhVgLV)pGXK zg$U|Y$H-Ogau{Bk(2qKTAItZS9fKq*e*~_kx7MCK_%kK@EWX+~`IAvnkQC(Sge@KI zR>C!)=K}+k$&X|EZGsXv_pgIkIg8>aVfae6z>5|VSteL0z9*r7FhKWJS9}Ssl2JiI zVxXg7Xp=bTMF>>-Pb!8@C~DQ+k!mdoS1ZlydA`m`a>O$@W^4;)XU6Z+F}3}pqs#D>3-!9+OsoA+D|Vh*?(wUuy1k%( zj9#FIrl17=PDLM|o|IQ;-VzLZ;RqyA7(WTwW_DL@{2{_MTGII@j7H*z%i+)#6B6^u zYbkK`YUR57(0;D_Y0%h80b7sIp{^~zcl8CGYyaBb4Jc3Qhzn#rycPWC8A*A1KX(?|> z`X5k&y{}!P6@$|R$;o6hY{Yyx6aLjl^4XST)E@c%=UX;LL!nUeIdW?|M=U$=bPK}k zcH_a9Lxz~kEslY$*b;t|qElxtpLmCi`5W6S!p3?$d^M9Y>MKwtT`Ke$bP~lh>F~S~ zM|@?@NxqN&5^K6?w1<@3=xI8z>ki+;7O}yBJb3%oV5dcBD<`NLzd9O&YQqbBz3({e z!0Uc~%Dm-ENUltZ*bWZ;->CUkx-Q~vak$>nUgkozg7%fNF?kG`#yEwbkz-My6R;Hv zM?3xzwLmQ|K=kdv>ddqfTWO4Xj;#BLwPrz~E9{++$sW@hQhz_wJavH(gaHi?2K|@r zLjPsz`?RwW>+sZOIwz#$Lu^inU*?om%cnE+c`Ps~g=t}4+eE$(qNpQmF&hQrGjYNs zrxf+dwVZ4lT)5urko>_Ioo5o6k~KIXtTn(7cQq2#2}iXcQ6w+X22~TWxV%jj@{GMu z0`ZfrC{>K%$~ma3E1dzvN#!1Qi0zxVf&?%jX*p@1ee#ER;;hXNxXWXfbo3}i0iCW> zq~SAyLBX)Pt%1h2Fee$%DD(^Ukpfk>UMCy9uFSeAext+NNozibg7y_~H2-hJw-Fcj z8pDJ!EN`Pu9>*kwkaAaoEyXf7b*9hA*I&FOwn}@Y$hK~PEc%F%b+9?T4Az?=s;zv+ z`{pL`Kf;o%O}U8wk)(QKwfL)Q#;z%Vx!T^4BHsA8H|z+vIcDXuay2m?b=&YL;PnjY z(7sGd}c&P`|p4SK`Y}*6i7&n zJn)9S@2>xnJ*@cZw@inFX~RQ?#$5jkNw1Xkem#s$Gb{sRQa%Sqv%}!Ve_6!uW9xZ; zyk<7gV&jSJ(fH~&6JAk_TA2@{lRMeP=C>B&XNP25E~M3_XpgQg^^`ADyW z@jsx^(!0tO5NRU;vCXAWsS0vkWRLQ){_?+K9M;6C`Y$%G?`df1`GWuS93MKPc>qjL z#!`!Ahi8Y{I)FQK%I!`u_aK1h^hEKO|M8DSqe-RQrf6hqFjV39+kY!T-k7ph-#l7z z1Ml%?zl}tv;`oqE)Cs7q_2Yw}<3j8kZk*KC%>}Inao__Zg|{&mz$ay01^$A@{X@lPOz*QzazzH)88BMC|p zNHoE&{UXFRa$w&asf(QZl@jNd>H7WEc+ravCNYB33f@U(Pg_Dt+$S_AN}Qso_Tbe7 zi;``T1{?>IsE(?>*7=yOCD^p1B&&$Rgw1sL0qb&RDf;(hnqX`TrwaF;ECbI%n_z#P z8Bk6%jD&3NRxT|UOkjGksQI~7-Yqz%Z%>Q?v}W4f+`91fGk!*3`GTyU?n4i`8isq> zr*l`MezPmmEr%{ckTao?rQy!dJy6!0o|{`%(K!xa{2C>K>Skb?RQFz7h5%xZysV;Z zJtsq+o#;3vclHmzXHlJKDpX!Wl~YLny88uZbQG^6h?JH|00CcU#R9y&zgtjN9eu*H z=?zlGHT#25btZ!r0kt-C4|-2+wrL_ow!$U}lnygLe_m>E6%*SO8YB4a)*V?r2_T z(6qeG{PVtfF_dNBRRK|?M1rK(sZ4fe)KVjJ!)mr=4Hu{u3s%A3`|2|6d#j$%$1{`1 zqXtm3e+qpE!u~;uiWzFC3Ll!`Zb z_;sfpeh2_eB4m%Mr5^roo=1cWa6Q3YXlT_eg{vZ6HPtCtvt>C z^+qe~2ndtn0N6DCo>xCmXV&vH;9@MwwRk4@>h1`8F=Lp*&V7Eyxj+ew@9GW>EiYHX zkFJ-q2OXZ|izoDqDnZr$$&xOkg|gE&VeoSFfBLOFUdt`e1+fahfgkRmH0@e>6>1Czf8?g$BQR#CCFO#qT<0=!eT%@lh9@Yt*O& z2Q0hd=8h`?j3m<3t!)jg7|y#->OyMO&4w3+55JPL;1X!pYMx59@BRGGogpf zNt*?RQ{u(b<2P2uosmTJ2;lD!#qarK>C)4OQA#Szn>Wa=Vc2K60~tHA9PU{=^`_pp zq%!j5K4Q>(H#u-m2$xg_cMYKDqMs&^-Jx)r~OGKB)A;LU;A$ z{|U`irCJL}%Pg=)m@rI5`cHStl{G>HVX=-X#>-VdIZzi%bkQFrYS@T+CxZbUX*T$)wQ-OQJX_Tz(G4=Hs0AA!fdYSaZM%RgoURjri`N5$(h9TT% zmew)h-xzz^+TUUud%&}CvtiG`ZxOwjub#V6x`xD$Pguz+%9o!M94JsrdAD259_VZE z$NF-@Mw;>qq>H#k`aNz_o~3Lwp;m42Z`%cakf=LYb4q(~t9swQf(?uiL4_U0(o`mg z7LC4MDLeh&zzvYRygU&xanp1Q+_+}uBfO;t6?GQ97Pe?lQ@w;ehPg2EtI1|<=lBAf z=5q%3kA;dls)er9&pZxy8OOaup=%fXhHV0|W1o0ktp+ z2@5E0*?#njBT=aPB3u-q@S<^=^Pn+5AdO$?{&MU!LD!Zlx1|~Syz-$?uS^kGW&b`jUg>vomnxH|3cPsF?&YIrPXVfyko%7`MVd%>Q2ZDAKlGH9R5Mae zx|S477fgz=SLOOO%q*mrloD>9%b(`pCRpi%*Xbl>r}Q! z4IL2zMe%6=fz_VHl}+q{NeqDIOhya{*FQf__foFu0>!Aoe?}-pXZZ32G6l7_29r2zA|$TnVFFVkI#Ickqkq4SHKnLLkr5;V0lRi@j10?MU@38S2C zx@;oxtXEJL(Gk!nY2L?gm#T2&I&s{Q67Cz9BeD&pqJU@ZvK@6>0PH`~o0m zCYdz5-ZZnAh=S_cgxR8%tc!L{= zf{!K3c(@?QK3&s!(Y z^(gnt;$2Sci$46>lzgSw6wk{-n(B-gEcZKE66jLS)6g(>D+`Rx6sGP6A;OfIS>&7> zygd=BDrXz2m8p0qvX~oVMvU{*@B~*rg1-qP$u03_MneOR*}rYwQ;jhtt;MRrkCj zv=zHf(y@-o@+n93StzH>j~}Qz0DWYAUO{#nx$MV(2NbwO9DjDg)!w8oicRYaOaMlA z=4&n3{eB{qh9=3b&U%r_i_J_QDFeRmYMoaLSn(w&DJD9qmf+b+^ViV*bt_nv+qeCa z**6AiM}BF(QP#af93rl$P@=28F;>LDlW4W#o1-PvA_6*l=AfQp!u5OZCRY*jt5 z2H|zR#A)G7NP~9*i4LJ(1}t>PfXZ_vm@`n~jMGf-QFhb?&sr~%#+^Z&eqW1ueUCn; z1!Nk{O!SCrVp~v8K5%a+SY()S)wJPE3SBSr)Nt-RNzlvFT8kjqxW>{Y2vk%g>)KM6 z)-{QfvbSG09l<}oJH`vmoF^3z+)wsySms(|6-tc=e`$eq059fYnnZm9cA?8;emrWE zlU_!r)-(YwV(7!0V+41NLnGNftk;}vqOb$AlJaCoQ`LsPZ5?ad??w+PDTqN7R85mN?nDH;o%&3@rd+ljPzF*&JwSsA2)^I5#eScv6hiE-a)GGq{YY7Oa}xynEjpAlB7XE=4`T#Ma%^v*z-thn!&{LlY3o~ zBkvsflJTMkC{QU5ATi58^#vVl4fbA&+9^N$JR9mu;RIpjC-X$|{MOyr@lWh7I&W4l zJH}F2tRplr|H{8901X=cIfwYKWnl$6Ecpi~s9z~#PrgQ0c?L(Q3g_>Q$4fT0#yJOU zybOo^kg5mdu~v|l7}OO?UpS6ms3BTKzD+gUOzh;~cZT7Vc5U*-MG00@^AiV}w&TpK zyDDnvNTt4nm^oHB&%V=!Vx>gYXW=vee z%b46smYc<9igT?ZO47szQS>91_SyZl-f9-6BDJ4jlW`A+^`5_C|wN& zwcLHcT+3hSP@)hYZDYBe8h7x`nk4dv{5^Sey_-(Tii-{S^WL=bbb872&x3m8%-m52 zIrR|B!Pqt%huOyiE279}dzwz}Ene(_1CLAlO4{4VnJh!jr;hO6Me8NOZUEAtlCT@t zE%i|V=ss5~?E-caJM~oxo7V5=d$fMCZEs;=VYbg+{}lWF&QG2BH5sd%23xGjOkL8#+<81=l{r3+WI7Yz~pdlX`}X(V=a_s?BxlM z4p&6_5y;Si&lY3B?Ve+m+gcM<)770}-}hPA)>kZtT6Du#bvFSQA^}>yk3MTPpB&z{ z3aJmk>h&r2Sv{-mol5XTwnj2Y+<)dN>6r?n{$f4`Z>7BSZtWe~yny zn|;ln9+S!oCjws~43^}PfO8^xl%s#Ih$gDl9v%kEA|Cg?Gwq0J{D97^`|{)903^4r z#1BT*z9@Q04aAwebdz#dqYuYdPNk$3_ZwssZF+o<^b*f+pg7HY?Abw|j^8%i7k4Gc zi)sM|aFqi!v*qfLjpv2TtcCt7LYJn6<2v1YnuX)QvNtOn7Y2?$#;(~Ws*M3z_arq- z)+83iGrjMkBTiSqqy9pUc|4Y@YYcuzM=_X{SA_LRF)j z9vR{1AP`rdd>%k`sF>U=Gj)L$$G#NBQ;%I?Px9?5td!qH4;T!RdDd65v*`DtGSLhV zZ|W@O=jJb?eon=Vp?*pI1B$@OCW|`Oj?MOco?x9|?7Q#Eq6SMk zLq45H&J*k36@Qe`H0>YnQgunx8~Tr;nPb5wgtf+ICQ4eNk7zaRDR8uyXU9W6F~jL$ zKqmUcC(<@uNW**$(~H$2<0U;%RN}0xiQsrtE_QIOE8{paGV!}s-It^Av};M~Hz|dl$e|{~<|_Bt)l9J~%N5iage> zreQ8>pHh`_)usp(Tx=EJ4d27xz(d>NL1a-eSrvM;;{<)RjZ;4^VLCdZy5e@ZG`w(w zRBg~+8>;!7xHl_sg!$JNjp$z?pVwkLC;0;c=703~#h*oy`XK-U`EpL!V=wlY1MMFz z_wiB*v`UVkMC;>1IU}?&H4+s=#W%W$j?~^`K`6Jv$#~bhkZ?#SiQ}hGmm&Q=Q%+mp zeCAbz_oWt}%R!m5MaC*IP-)V@EgGR!p95Pg^t2vQ04j-H)E|{BGAxF*(F0nkUw0Uv zu%XeUZyTh$v9iXqiq)Sr{>DV*jgN3ziyGF!{q6wO9Ky=91rJ~I2h6Fx_WTxNYk8@x zy7z0Infl#RfVZp6qBdau z^+mH|)y*G^L!mpICGCg1T`E;qJYx6+X&EK+-ys9#l-<<`PL+m{1`yMoOT!`S^F=eo zdN@y)xP=t zj(BLm$XjPw{6Vty!5Sk9^XAvzfZpI>#=`)&6ootFJBnYA?Ug(GyX$lC`%CB@t(909 zP!?kNZfbropsgXRnn&}n*`{=6vmr}Asrhu~975y9sN056xGsC2sIM+L~~TIFpBgy&JW`l?aFZBOKy|R*zbzqHkch8nz@@Q7*VU}q^YFP_o5oBU7`N&gx$q73f2?;-3 zW!>nBbixVSE-cjA8670|-0K2dMaRArUwr5?!3Sm>W9WrwSpT25K)%YLZnQ=^MDApE z%3!VJdk(!Q9fhrx(Z!G!I#mnWzv{fCj@)(@%oEkJ=+$r;MPdWyzdJ0K%}jZQ%vX<; z>4{9)@rre=?nHeM^Q%@cf6*tunwQClt80cs-!8c2J7&lG3FE2mm4CZ6=;K3@b0OFN z$+Y4|9?lFA8XY@2p8=`cm)r7XL4e@@^l%BH z|Mgr7U(Tb@a6Sao{<@B!Xs}JcKzq=?A2J~Yl;^%}Ms4In+c(E~UbvZRA6$$VU;gjz zA?63XDbIf+^*o_QLBI7yu@h12)8`mwNVsq_N zc=1W}YE1OaK9mZ0@%1w6pVvHE(gb3I{clOQmqhV<@!~yX%yQP+Zm7CX==?$@7(g(G zWp-FsHY%d0Zm(RTS`DS-9?FZuxrPR}Z@*k4*3K}3OM-_?d~>{AXsTYZCSlt-wOnas zZ}dODTJ}8>352Ubl#mAz4?p@Yg`Sh$MuVOgUa}V6>VS&slg@GVW<)gB7@ijjn3x?N z$Pbn4=O9*`mA-Q*$azG@f|R%vjtg|}$r{mgIYhm=#qyK=e*x$L7ybYSpsy_{17Taq zyF}zOhpXzhu67Rs^>cEffPaa|r;Z)$0+AG@R5=(o7$DhXdptp)eeV#FOkg(f2}Ar0 zy($1A@^2B@-N(;BPl_&WE9q+t($^<}Nx&?i9QduN#<~Z;{G5isJf+lG7$L4ZMdTv0 z4blvmfcxHwNEEOJ_^wi_VW{=JnhHWGb@?!=xwNgMuii|%0(mClhjt|DkmoWyw{T)}f4)se!BvM48ov(o_2#n9HH$As@T>`vrqAhMGkiK^! zA{aX{?o&!V+~d@cK0}{b2qq$527V7D0d>F*rPP&0FeLzhsQ?ZJ<#7zUQ*i(Q N002ovPDHLkV1oIieJ%h1 literal 0 HcmV?d00001 diff --git a/docs/modules/Localization/Kalmanfilter_basics_22_0.png b/docs/modules/Localization/Kalmanfilter_basics_22_0.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb39a5bbefc78e7ed037455cee941045c89195e GIT binary patch literal 38658 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 literal 0 HcmV?d00001 diff --git a/docs/modules/Localization/Kalmanfilter_basics_28_1.png b/docs/modules/Localization/Kalmanfilter_basics_28_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b299e4824749ab3d564558d35cef955e816290fd GIT binary patch literal 3606 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 UP;Ko^xQ7EES5Iv9zT;>A33W7cYybcN literal 0 HcmV?d00001 diff --git a/docs/modules/path_tracking.rst b/docs/modules/path_tracking.rst index 24e6c9c5..1aff1107 100644 --- a/docs/modules/path_tracking.rst +++ b/docs/modules/path_tracking.rst @@ -90,19 +90,11 @@ Ref: Conference Publication `__ -Model predictive speed and steering control -------------------------------------------- - -Path tracking simulation with iterative linear model predictive speed -and steering control. - -.. raw:: html - - +.. include:: ./PathTracking/model_predictive_speed_and_steer_control/Model_predictive_speed_and_steering_control.rst Ref: -- `notebook `__ +- `notebook `__ .. |2| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/move_to_pose/animation.gif .. |3| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/pure_pursuit/animation.gif