@@ -265,7 +265,7 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
265265< span class ="sd "> \begin{aligned}</ span >
266266< span class ="sd "> \mathbf{x}_{k+1} &= \mathbf{f}(\mathbf{x}_k, \mathbf{u}_k, t_k) + \mathbf{w}_k,</ span >
267267< span class ="sd "> \quad \mathbf{w}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{Q}) \\</ span >
268- < span class ="sd "> \mathbf{y}_{k} &= \mathbf{g }(\mathbf{x}_k, \mathbf{u}_k, t_k) + \mathbf{v}_k,</ span >
268+ < span class ="sd "> \mathbf{y}_{k} &= \mathbf{h }(\mathbf{x}_k, \mathbf{u}_k, t_k) + \mathbf{v}_k,</ span >
269269< span class ="sd "> \quad \mathbf{v}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{R})</ span >
270270< span class ="sd "> \end{aligned}</ span >
271271
@@ -285,7 +285,7 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
285285< span class ="sd "> 1. Priori State Estimation.</ span >
286286
287287< span class ="sd "> .. math::</ span >
288- < span class ="sd "> \mathbf{x}^{-} = \mathbf{A} \mathbf{x} + \mathbf{B}\mathbf{ u}_k + \mathbf{c}_1 </ span >
288+ < span class ="sd "> \mathbf{x}^{-} = \mathbf{f}( \mathbf{x}_k, \mathbf{u}_k, t_k) </ span >
289289
290290< span class ="sd "> 2. Priori Covariance Propagation.</ span >
291291
@@ -302,12 +302,12 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
302302
303303< span class ="sd "> .. math::</ span >
304304< span class ="sd "> \mathbf{x}^{+} = \mathbf{x}^{-} + \mathbf{K} (\mathbf{y} -</ span >
305- < span class ="sd "> \mathbf{C} \mathbf{x}^{-} - \mathbf{D}\mathbf{u} - \mathbf{c}_2 )</ span >
305+ < span class ="sd "> \mathbf{h}( \mathbf{x}^{-}, \mathbf{u}) )</ span >
306306
307307< span class ="sd "> 5. Posteriori Covariance Estimation</ span >
308308
309309< span class ="sd "> .. math::</ span >
310- < span class ="sd "> \mathbf{P} = (\mathbf{I} - \mathbf{K}\mathbf{C}) \mathbf{P}^{-}</ span >
310+ < span class ="sd "> \mathbf{P}^{+} = (\mathbf{I} - \mathbf{K}\mathbf{C}) \mathbf{P}^{-}</ span >
311311
312312< span class ="sd "> where superscript :math:`\cdot^{-}` and :math:`\cdot^{+}` denote the priori and</ span >
313313< span class ="sd "> posteriori estimation, respectively.</ span >
@@ -361,7 +361,7 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
361361< span class ="sd "> introduces noise.</ span >
362362
363363< span class ="sd "> Note:</ span >
364- < span class ="sd "> Implementation is based on Section 5.1 of this book</ span >
364+ < span class ="sd "> Implementation is based on Section 13.2 of this book</ span >
365365
366366< span class ="sd "> * Dan Simon, `Optimal State Estimation: Kalman, H∞, and Nonlinear Approaches</ span >
367367< span class ="sd "> <https://onlinelibrary.wiley.com/doi/book/10.1002/0470045345>`_,</ span >
@@ -394,17 +394,17 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
394394 < span class ="n "> I</ span > < span class ="o "> =</ span > < span class ="n "> torch</ span > < span class ="o "> .</ span > < span class ="n "> eye</ span > < span class ="p "> (</ span > < span class ="n "> P</ span > < span class ="o "> .</ span > < span class ="n "> shape</ span > < span class ="p "> [</ span > < span class ="o "> -</ span > < span class ="mi "> 1</ span > < span class ="p "> ],</ span > < span class ="n "> device</ span > < span class ="o "> =</ span > < span class ="n "> P</ span > < span class ="o "> .</ span > < span class ="n "> device</ span > < span class ="p "> ,</ span > < span class ="n "> dtype</ span > < span class ="o "> =</ span > < span class ="n "> P</ span > < span class ="o "> .</ span > < span class ="n "> dtype</ span > < span class ="p "> )</ span >
395395 < span class ="n "> A</ span > < span class ="p "> ,</ span > < span class ="n "> B</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> A</ span > < span class ="p "> ,</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> B</ span >
396396 < span class ="n "> C</ span > < span class ="p "> ,</ span > < span class ="n "> D</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> C</ span > < span class ="p "> ,</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> D</ span >
397- < span class ="n "> c1</ span > < span class ="p "> ,</ span > < span class ="n "> c2</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> c1</ span > < span class ="p "> ,</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> c2</ span >
398397 < span class ="n "> Q</ span > < span class ="o "> =</ span > < span class ="n "> Q</ span > < span class ="k "> if</ span > < span class ="n "> Q</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="k "> else</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> Q</ span >
399398 < span class ="n "> R</ span > < span class ="o "> =</ span > < span class ="n "> R</ span > < span class ="k "> if</ span > < span class ="n "> R</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="k "> else</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> R</ span >
400399
401- < span class ="n "> x</ span > < span class ="o "> =</ span > < span class ="n "> bmv</ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> ,</ span > < span class ="n "> x</ span > < span class ="p "> )</ span > < span class ="o "> +</ span > < span class ="n "> bmv</ span > < span class ="p "> (</ span > < span class ="n "> B</ span > < span class ="p "> ,</ span > < span class ="n "> u</ span > < span class ="p "> )</ span > < span class ="o "> +</ span > < span class ="n "> c1</ span > < span class ="c1 "> # 1. System transition</ span >
402- < span class ="n "> P</ span > < span class ="o "> =</ span > < span class ="n "> A</ span > < span class ="o "> @</ span > < span class ="n "> P</ span > < span class ="o "> @</ span > < span class ="n "> A</ span > < span class ="o "> .</ span > < span class ="n "> mT</ span > < span class ="o "> +</ span > < span class ="n "> Q</ span > < span class ="c1 "> # 2. Covariance predict</ span >
400+ < span class ="n "> xm</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> .</ span > < span class ="n "> state_transition</ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> ,</ span > < span class ="n "> u</ span > < span class ="p "> ,</ span > < span class ="n "> t</ span > < span class ="o "> =</ span > < span class ="n "> t</ span > < span class ="p "> )</ span > < span class ="c1 "> # 1. System transition</ span >
401+
402+ < span class ="n "> P</ span > < span class ="o "> =</ span > < span class ="n "> A</ span > < span class ="o "> @</ span > < span class ="n "> P</ span > < span class ="o "> @</ span > < span class ="n "> A</ span > < span class ="o "> .</ span > < span class ="n "> mT</ span > < span class ="o "> +</ span > < span class ="n "> Q</ span > < span class ="c1 "> # 2. Covariance predict</ span >
403403 < span class ="n "> K</ span > < span class ="o "> =</ span > < span class ="n "> P</ span > < span class ="o "> @</ span > < span class ="n "> C</ span > < span class ="o "> .</ span > < span class ="n "> mT</ span > < span class ="o "> @</ span > < span class ="n "> pinv</ span > < span class ="p "> (</ span > < span class ="n "> C</ span > < span class ="o "> @</ span > < span class ="n "> P</ span > < span class ="o "> @</ span > < span class ="n "> C</ span > < span class ="o "> .</ span > < span class ="n "> mT</ span > < span class ="o "> +</ span > < span class ="n "> R</ span > < span class ="p "> )</ span > < span class ="c1 "> # 3. Kalman gain</ span >
404- < span class ="n "> e</ span > < span class ="o "> =</ span > < span class ="n "> y</ span > < span class ="o "> -</ span > < span class ="n " > bmv </ span > < span class ="p " > ( </ span > < span class ="n "> C </ span > < span class ="p " > , </ span > < span class ="n "> x </ span > < span class ="p "> ) </ span > < span class ="o " > - </ span > < span class =" n "> bmv </ span > < span class ="p "> ( </ span > < span class ="n "> D </ span > < span class ="p "> ,</ span > < span class ="n "> u </ span > < span class ="p " > ) </ span > < span class ="o " > - </ span > < span class ="n " > c2 </ span > < span class ="c1 "> # predicted observation error</ span >
405- < span class ="n "> x </ span > < span class ="o "> =</ span > < span class ="n "> x </ span > < span class ="o "> +</ span > < span class ="n "> bmv</ span > < span class ="p "> (</ span > < span class ="n "> K</ span > < span class ="p "> ,</ span > < span class ="n "> e</ span > < span class ="p "> )</ span > < span class ="c1 "> # 4. Posteriori state</ span >
404+ < span class ="n "> e</ span > < span class ="o "> =</ span > < span class ="n "> y</ span > < span class ="o "> -</ span > < span class ="bp " > self </ span > < span class ="o " > . </ span > < span class ="n "> model </ span > < span class ="o " > . </ span > < span class ="n "> observation </ span > < span class ="p "> ( </ span > < span class ="n "> x </ span > < span class ="p "> , </ span > < span class ="n "> u </ span > < span class ="p "> ,</ span > < span class ="n "> t </ span > < span class ="o " > = </ span > < span class ="n " > t </ span > < span class ="p " > ) </ span > < span class ="c1 "> # predicted observation error</ span >
405+ < span class ="n "> xp </ span > < span class ="o "> =</ span > < span class ="n "> xm </ span > < span class ="o "> +</ span > < span class ="n "> bmv</ span > < span class ="p "> (</ span > < span class ="n "> K</ span > < span class ="p "> ,</ span > < span class ="n "> e</ span > < span class ="p "> )</ span > < span class ="c1 "> # 4. Posteriori state</ span >
406406 < span class ="n "> P</ span > < span class ="o "> =</ span > < span class ="p "> (</ span > < span class ="n "> I</ span > < span class ="o "> -</ span > < span class ="n "> K</ span > < span class ="o "> @</ span > < span class ="n "> C</ span > < span class ="p "> )</ span > < span class ="o "> @</ span > < span class ="n "> P</ span > < span class ="c1 "> # 5. Posteriori covariance</ span >
407- < span class ="k "> return</ span > < span class ="n "> x </ span > < span class ="p "> ,</ span > < span class ="n "> P</ span > </ div >
407+ < span class ="k "> return</ span > < span class ="n "> xp </ span > < span class ="p "> ,</ span > < span class ="n "> P</ span > </ div >
408408
409409 < span class ="nd "> @property</ span >
410410 < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> Q</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
0 commit comments