diff --git a/electives/others/amr/autonomous-mobile-robots-cheatsheet.pdf b/electives/others/amr/autonomous-mobile-robots-cheatsheet.pdf index fd009d1..85279b6 100644 Binary files a/electives/others/amr/autonomous-mobile-robots-cheatsheet.pdf and b/electives/others/amr/autonomous-mobile-robots-cheatsheet.pdf differ diff --git a/electives/others/amr/autonomous-mobile-robots-cheatsheet.tex b/electives/others/amr/autonomous-mobile-robots-cheatsheet.tex index af4d5d2..e70ef83 100644 --- a/electives/others/amr/autonomous-mobile-robots-cheatsheet.tex +++ b/electives/others/amr/autonomous-mobile-robots-cheatsheet.tex @@ -11,7 +11,6 @@ \renewcommand{\subsectionnumbering}{section} \renewcommand{\numberingpreset}{off} \renewcommand{\definitionShortNamingEN}{Def} -\noverticalspacing \fboxsep 1pt \fboxrule 0.1pt @@ -23,6 +22,7 @@ \begin{document} +\noverticalspacing \vspace*{0mm} @@ -75,6 +75,8 @@ \input{parts/04_vision/00_keypoints.tex} \input{parts/04_vision/01_bootstrapping.tex} \input{parts/04_vision/02_place-recognition.tex} +\input{parts/04_vision/03_mapping.tex} +\input{parts/04_vision/04_dense-tracking_loop-closure.tex} % \input{parts/04_vision/} \end{document} diff --git a/electives/others/amr/parts/04_vision/01_bootstrapping.tex b/electives/others/amr/parts/04_vision/01_bootstrapping.tex index 22ae033..16d17e7 100644 --- a/electives/others/amr/parts/04_vision/01_bootstrapping.tex +++ b/electives/others/amr/parts/04_vision/01_bootstrapping.tex @@ -9,14 +9,12 @@ Find sol. for camera pose \textit{directly} Find good point in 3D. Fast sol: \bi{Midpoint Method}: \bi{1} Find p. along ray w/ min. dist (Lin. Least Squares) -\rmvspace[0.7] \[ \vec{\lambda}\! =\! [\lambda_1 \; \lambda_2]^\top\! = \! \argmin{} ||({_W}\vec{t}_{C_2} + \lambda_2 {_W}\vec{e}_2) - ({_W}\vec{t}_{C_1} + \lambda_1 {_W}\vec{e}_2)||^2 \] -\rmvspace[1] +\rmvspace \bi{2} Solve normal equation $\mat{A} \vec{\lambda} = \vec{b}$ with $\vec{q} = -{_W}\vec{e}^\top_1 {_W}\vec{e}_2$: -\rmvspace[0.7] \[ \mat{A} = \begin{bmatrix} 1 & \vec{q} \\ @@ -29,5 +27,4 @@ Find good point in 3D. Fast sol: \bi{Midpoint Method}: \end{bmatrix} \] -\rmvspace[0.7] \bi{3} Pick midp. ${_W}\vec{t}_P \! = \! 0.5(\tau_1 \! + \! \tau_2)$; $\tau_n \! = \! {_W}\vec{t}_{C_n} + \lambda_n{_W}\vec{e}_n)$ diff --git a/electives/others/amr/parts/04_vision/03_mapping.tex b/electives/others/amr/parts/04_vision/03_mapping.tex new file mode 100644 index 0000000..9c5fb0c --- /dev/null +++ b/electives/others/amr/parts/04_vision/03_mapping.tex @@ -0,0 +1,34 @@ +\newpage +\subsection{Mapping} +\bi{Problem Formulations} \textit{Localisation} {\scriptsize (always static given map)}:\\ +$\vec{x}^*_{R, k} = \text{argmax}\; \P(x_{R, k} \divider \vec{x}_M, \vec{z}_{1 : k}, \vec{u}_{1 : k})$ (recursive)\\ +$\vec{x}^*_{R, 1:k} = \text{argmax}\; \P(x_{R, 1:k} \divider \vec{x}_M, \vec{z}_{1 : k}, \vec{u}_{1 : k})$ (batch) + +\textit{SLAM} $\{ \vec{x}^*_{R, k}, \vec{x}^*_M \} \! = \! \text{argmax}\; \P(\vec{x}_R, \vec{x}_M \divider \vec{z}_{1 : k}, \vec{u}_{1 : k})$ (as $\uparrow$) + +\textit{Mapp.}: $\vec{x}_M^* \! = \! \text{argmax}\; \P(\vec{x}_M \divider \vec{x}^*_{R, 1:k}, \vec{z}_{1 : k}, \vec{u}_{1 : k})$ with given poses $\vec{x}^*_{R, 1:k}$. +Thus temp. model $\vec{u}_{1:k}$ doesn't matter. + +\bi{Prob. Occ. Grid} $\P(f_j) = \P(\neg o_j) = 1 - \P(o_j)$, with $\P(o_j)$ prob. cell $j$ occupied; pairwise independent. + +\bi{Occ. Map. w/ depth sensor} $\P(o_j \divider \vec{x}_{R, 1:k}) =$ +\[ + \frac{ + {\color{MidnightBlue} \P(o_j \divider \vec{x}_{R, k}, \vec{z}_k)} + \P(\vec{z}_k \divider \vec{x}_{R, k}) + {\color{ForestGreen} \P(o_j \divider \vec{x}_{R, 1 : k - 1}, \vec{z}_{1 : k - 1})} + }{{\color{DarkOrchid} \P(o_j)} \P(\vec{z}_k \divider \vec{x}_{R, 1 : k}, \vec{z}_{1 : k - 1})} +\] +{\color{DarkOrchid} map prior}; {\color{ForestGreen} Prev. occ. est.}; {\color{MidnightBlue} Occ. based on curr. range meas.}; + +\bi{Update function}: +$l(a) := \log(\text{Odds}(a))$ with $\text{Odds}(a) = \frac{\P(a)}{1 - \P(a)}$ (inv. sensor model): +$l(o_j | \vec{x}_{R, 1 : k}, \vec{z}_{1 : k})$ = +\[ + l(o_j | \vec{x}_{R, k}, \vec{z}_k) + l(o_j | \vec{x}_{R, 1 : k - 1}, \vec{z}_{1 : k - 1}) - l(o_j) +\] + +\shade{gray}{In 3D} 3D voxel $j$ as signed dist. $s$ and weight $w$, update: +$\displaystyle s_k = \frac{w_{k - 1} s_{k - 1} + \tilde{s}_k}{w_{k - 1} + 1}$ with $w_k = \min(w_{\max}, w_{k - 1} + 1)$ + +\bi{Impl.} Using HashTables or octree diff --git a/electives/others/amr/parts/04_vision/04_dense-tracking_loop-closure.tex b/electives/others/amr/parts/04_vision/04_dense-tracking_loop-closure.tex new file mode 100644 index 0000000..1555b25 --- /dev/null +++ b/electives/others/amr/parts/04_vision/04_dense-tracking_loop-closure.tex @@ -0,0 +1,2 @@ +\subsection{Dense Tracking and Loop Closure} +Idea: Min. sum of sq. errors over all pixels w/ Gauss-Newton.