@@ -265,7 +265,7 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
265
265
< span class ="sd "> \begin{aligned}</ span >
266
266
< span class ="sd "> \mathbf{x}_{k+1} &= \mathbf{f}(\mathbf{x}_k, \mathbf{u}_k, t_k) + \mathbf{w}_k,</ span >
267
267
< 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 >
269
269
< span class ="sd "> \quad \mathbf{v}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{R})</ span >
270
270
< span class ="sd "> \end{aligned}</ span >
271
271
@@ -285,7 +285,7 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
285
285
< span class ="sd "> 1. Priori State Estimation.</ span >
286
286
287
287
< 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 >
289
289
290
290
< span class ="sd "> 2. Priori Covariance Propagation.</ span >
291
291
@@ -302,12 +302,12 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
302
302
303
303
< span class ="sd "> .. math::</ span >
304
304
< 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 >
306
306
307
307
< span class ="sd "> 5. Posteriori Covariance Estimation</ span >
308
308
309
309
< 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 >
311
311
312
312
< span class ="sd "> where superscript :math:`\cdot^{-}` and :math:`\cdot^{+}` denote the priori and</ span >
313
313
< span class ="sd "> posteriori estimation, respectively.</ span >
@@ -361,7 +361,7 @@ <h1>Source code for pypose.module.ekf</h1><div class="highlight"><pre>
361
361
< span class ="sd "> introduces noise.</ span >
362
362
363
363
< 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 >
365
365
366
366
< span class ="sd "> * Dan Simon, `Optimal State Estimation: Kalman, H∞, and Nonlinear Approaches</ span >
367
367
< 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>
394
394
< 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 >
395
395
< 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 >
396
396
< 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 >
398
397
< 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 >
399
398
< 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 >
400
399
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 >
403
403
< 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 >
406
406
< 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 >
408
408
409
409
< span class ="nd "> @property</ span >
410
410
< 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