SLAM Engineer

๐ŸŒˆ R2LIVE Reprojection Error Jacobian ์œ ๋„ํ•ด๋ณด๊ธฐ


์ž์ฝ”๋น„์•ˆ ์œ ๋„

  • ์–ด๋ ต์ง€ ์•Š์•„์š”

๊ฐœ๋ก 

  • ์ž์ฝ”๋น„์•ˆ, ์•ผ์ฝ”๋น„์•ˆ, โ€ฆ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ถˆ๋ฆฌ๋Š” ์ด ๋…€์„
  • ๊ทธ๋ƒฅ multi-dimensional ๊ธฐ์šธ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • Gauss-Newton optimization ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์šธ๊ธฐ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.
    • Kalman Filter ์—์„œ๋„ ์“ฐ์ธ๋‹ค. (ps. ์‚ฌ์‹ค iterative KF๋Š” GN ๊ณผ ๊ฐ™๋‹ค. ref: 1993 The Iterated Kalman Filter Update as a Gauss-Newton Method)
  • ์–ด๋–ค cost function $c$ ๊ฐ€ ์žˆ๊ณ , ๋ณดํ†ต ์ด๊ฑด SLAM์—์„œ $c := h(\textbf{x}) - \textbf{z} = \textbf{H}\textbf{x} - \textbf{z}$ ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋งŽ์ด ์“ฐ์ธ๋‹ค. H ๋Š” measurement function (ํ˜„์žฌ ์ƒํƒœ์—์„œ์˜ ์˜ˆ์ธก ์ธก์ • ๊ฐ’์„ ์œ„ํ•œ ๋ชจ๋ธ) ์ด๊ณ , z ๋Š” ์‹ค์ œ ์ธก์ • ๊ฐ’, ๊ทธ๋ฆฌ๊ณ  cost ๋ž€ ๊ทธ ๋‘˜์˜ ์ฐจ์ด ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒŒ ๋˜๊ฒ ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ (model์ด ์ž˜ ์„ค์ •๋˜์–ด ์žˆ๊ณ ) ํ˜„์žฌ state ๊ฐ’ $\textbf{x}$ ๊ฐ€ truth ์— ๊ฐ€๊น๋‹ค๋ฉด, ์˜ˆ์ธก ์ธก์ •๊ฐ’์€ ์‹ค์ œ ์ธก์ •๊ฐ’๊ณผ ๊ฑฐ์˜ ๊ฐ™๊ฒŒ (== ์ž‘์€ cost) ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋ฉด, ๊ทธ cost ๊ฐ€ ์ž‘์•„์ง€๊ฒŒ ํ•˜๋„๋ก ํ˜„์žฌ state ๊ฐ’ $\textbf{x}$ ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์œผ๋ฉด, ํ˜„์žฌ state ๊ฐ’ $\textbf{x}$ ์„ ๋” truth ์— ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ ์„ธ๊ณ„์˜ ๋ฌธ์ œ์—์„œ๋Š” cost ๋„ vector ์ด๊ณ , state ๋„ vector ์ด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, reprojection error ์˜ cost ๋Š” ๊ฐ€๋กœ pixel ์ฐจ์ด, ์„ธ๋กœ pixel ์ฐจ์ด ์˜ 2-dimension vector์ด๊ณ , state ๋Š” ์ •ํ•˜๊ธฐ ๋‚˜๋ฆ„์ด์ง€๋งŒ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” position ๊ณผ rotation (attitude) ๋ฅผ concat ํ•œ 6-dimension vector ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ cost ์˜ ๊ฐ ์„ฑ๋ถ„๋งˆ๋‹ค, state ์˜ ๊ฐ ์„ฑ๋ถ„์— ๋Œ€ํ•ด ๋ฏธ๋ถ„ํ•œ ๊ฒƒ์ด scalar ๋กœ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ
  • vector cost์— ๋Œ€ํ•œ vector state ์˜ ์ž์ฝ”๋น„์•ˆ์€ matrix ๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์ด ๋•Œ ์ž์ฝ”๋น„์•ˆ์˜ shape ์€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?
  • ์ž์ฝ”๋น„์•ˆ์€ ์ด๋ ‡๊ฒŒ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค. matrix ๋„ค๋ชจ์˜ ์„ธ๋กœ(์ฆ‰, row ๋“ค) ๋Š” cost, ๊ฐ€๋กœ(์ฆ‰, column๋“ค)๋Š” state.
    • ๊ทธ๋Ÿผ ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” 2x6 ๋ชจ์–‘์˜ ์ž์ฝ”๋น„์•ˆ ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ๊ตฌํ•ด์ง€๊ฒŒ ๋œ๋‹ค.
  • ์ด์ œ ํŠน์ • ์ƒํ™ฉ (์ฆ‰, ํŠน์ • state ์™€ ํŠน์ • cost) ์—์„œ์˜ ์ž์ฝ”๋น„์•ˆ ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ์•Œ๋ ค์ง€๋ฉด, ๊ทธ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์™„์ „ํ•œ ๊ณ„์‚ฐ๊ธฐ์ด๋‹ค.
    • GN์€ normal equation ์„ ํ’€๋ฉด ๋˜๊ณ ,
    • KF๋Š” ์œ ๋ช…ํ•œ KF equation ๋”ฐ๋ผ์„œ ํ’€๋ฉด๋œ๋‹ค.

๊ฐœ๋ก  2

  • ๊ทธ๋Ÿฐ๋ฐ ์„ธ์ƒ์€ nonlinear ํ•˜๋ฏ€๋กœ,
  • ์šฐ๋ฆฌ๋Š” vector space ์— ์‚ด๊ณ  ์žˆ์ง€ ์•Š์€ $\textbf{x}$ ๋ฅผ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์—†๊ณ ,
  • ๋Œ€์‹  vector space์— ์‚ด๊ณ  ์žˆ๋Š” $\delta\textbf{x}$ ๋ฅผ ์ตœ์ ํ™” ํ•ด์•ผ ํ•œ๋‹ค.
    • ์‚ฌ์‹ค SLAM์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ state์˜ rotation ์— ํ•œ์ •๋œ๋‹ค. $\mathbf{R} = \textbf{Exp}(\delta{r})$ ์ด ์–˜๊ธด๋ฐ โ€ฆ rotation formulation ์ด์•ผ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋‹ˆ ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๊ฒŒ์‹œ๊ธ€ ์•ž์˜ ๋ธ”๋กœ๊ทธ ํŠœํ† ๋ฆฌ์–ผ ๋กœ ๋งํฌ๋ฅผ ๋‚จ๊ธด๋‹ค ..
  • ์ฆ‰, $c = \textbf{H}\textbf{x} - \textbf{z}$ ๋Œ€์‹ , $\textbf{H}(\textbf{x} + \delta\textbf{x}) - \textbf{z}$ ์— ๋Œ€ํ•œ ์ž์ฝ”๋น„์•ˆ์„ ๊ตฌํ•œ๋‹ค.
  • ๋ญ”์†Œ๋ฆฌ๋ƒ๋ฉด, $\frac{d(\mathbf{H}\mathbf{x} - \mathbf{z})}{d\mathbf{x}}$ ๋Œ€์‹ ์—, $\frac{d(\mathbf{H}(\textbf{x} + \delta\textbf{x}) - \mathbf{z})}{d\delta\mathbf{x}}$ ๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ์–ด๋ ค์›Œ๋ณด์ด์ง€๋งŒ ๊ทธ๋ƒฅ cost ์™€ state ๊ฐ€ $\mathbf{x}$ ์—์„œ $\delta\mathbf{x}$ ๋กœ ๋ฐ”๋€๊ฒƒ์ด ์ „๋ถ€์ด๋‹ค. $\delta\mathbf{x}$ ๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ๊ดœํžˆ ์–ด๋ ค์›Œ ๋ณด์ด๋ฉด $\mathbf{x}_d$ ๋ญ ์ด๋Ÿฐ์‹์œผ๋กœ ์จ๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค. $\delta\mathbf{x}$ ๋„ ๊ทธ์ € vector์ด๋‹ค. ๋งŽ์€ ํ…์ŠคํŠธ๋ถ์—์„œ $\delta\mathbf{x}$ ๋ผ๊ณ  ์“ด๋‹ค.
  • ์ด ๋•Œ ํ•ต์‹ฌ์€, $\frac{d(\mathbf{H}(\textbf{x} + \delta\textbf{x}) - \mathbf{z})}{d\delta\mathbf{x}}$ ๋ผ๋Š” ๋ฏธ๋ถ„์—์„œ, $\mathbf{x}$ ์— ๋Œ€ํ•ด ๋ฏธ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์ด๋‹ค. ์ฆ‰, ์ด ๋•Œ๋Š”, $\mathbf{x}$ ๋Š” ์ƒ์ˆ˜๊ฐ’์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง์ „ ์‹œ์ ์˜ $\mathbf{x}$ ๊ฐ€ ์–ด๋–ค ๊ฐ’ $\mathbf{b}$ ์˜€๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿผ ๋ฐฉ๊ธˆ ์ „์˜ ๋ฏธ๋ถ„ ์‹์„ ์ข€ ๋” ์‹ฌ๋ฆฌ์ ์œผ๋กœ ์žฅ๋ฒฝ์ด ๋œํ•œ ํ˜•ํƒœ๋กœ ์จ๋ณด๋ฉด $\frac{d(\mathbf{H}(\textbf{b} + \textbf{x}_d) - \mathbf{z})}{d\mathbf{x}_d}$ ๋ญ ์ด๋ ‡๊ฒŒ๋„ ์จ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ์ข€ ๋” ๋งˆ์Œ์ด ํŽธ์•ˆํ•œ ํ˜•ํƒœ๋ฅผ ์œ„ํ•ด์„œ ๊ด„ํ˜ธ๋ฅผ ํ’€์–ด์„œ ์จ๋ณด๋ฉด $\frac{d(\mathbf{H}\textbf{x}_d - (\mathbf{z} - \mathbf{H}\textbf{b}))}{d\mathbf{x}_d}$ ์ด๋ ‡๊ฒŒ ์จ๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค. ์ฆ‰, ์›๋ž˜ ๊ฑฐ๋ž‘ ๋ชจ์–‘์ƒˆ๋Š” ๋˜‘๊ฐ™์œผ๋‹ˆ ์ซ„ ํ•„์š” ์—†๋‹ค.
  • $\frac{d(\mathbf{A}\mathbf{x})}{d\mathbf{x}} = \mathbf{A}$ ์ด๋ฏ€๋กœ $\frac{d(\mathbf{H}\textbf{x}_d - (\mathbf{z} - \mathbf{H}\textbf{b}))}{d\mathbf{x}_d} = \mathbf{H}$ ์ด๋‹ค. ์ฐธ ์‰ฝ์ฃ ?
  • ์ฆ‰, ๋ฏธ๋ถ„๋Œ€์ƒ์˜ 1์ฐจ linear term ๋งŒ ์žˆ์œผ๋ฉด ํŽธ๋ฏธ๋ถ„์€ ๋งค์šฐ ์‰ฝ๊ณ  ์ž๋ช…ํ•ด์ง„๋‹ค.
  • SLAM ๋…ผ๋ฌธ๋“ค์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ž์ฝ”๋น„์•ˆ ์œ ๋„์—์„œ๋Š” ์ด ํŠธ๋ฆญ์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค.
  • ์™œ๋ƒํ•˜๋ฉด,
    • ๋ฏธ๋ถ„์„ ํ•ด์•ผํ•˜๋Š” ๋Œ€์ƒ์€ ๋ณดํ†ต ์ผ๋ฐ˜์ ์œผ๋กœ position, rotation (attitude), velocity, bias ๋“ฑ์ธ๋ฐ,
    • ์—ฌ๊ธฐ์—์„œ rotation ์™ธ์—๋Š” ๋ชจ๋‘ ์ด๋ฏธ vector space ์—์„œ ์‚ด๊ณ  ์žˆ๋‹ค.
    • vector space ์— ์‚ฌ๋Š” ํ•ญ๋ชฉ๋“ค์€ ์œ„์˜ $\frac{d(\mathbf{A}\mathbf{x})}{d\mathbf{x}} = \mathbf{A}$ ๋ผ๋Š” ์‚ฌ์‹ค์„ ์ด๋ฏธ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ
        • ์–ด๋–ค position term์— ๋Œ€ํ•œ cost function ์ด position ์— ๋Œ€ํ•œ linear combination (๋‹คํ•ญ์ฐจ์ˆ˜) ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„,
        • iterative optimization ์—์„œ๋Š” ๋ฏธ์†Œ๋ณ€์œ„๋ฅผ ์ตœ์ ํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ์†Œ๋ณ€์œ„ position ์˜ 2์ฐจ ์ด์ƒ๋“ค์€ ๊ฑฐ์˜ 0์œผ๋กœ ๊ทผ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค, ์ด๋ ‡๊ฒŒ ํ•ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋ฉด
        • ๊ฒฐ๊ตญ ๋‚จ๋Š” ๊ฒƒ์€ 1์ฐจ term์œผ๋กœ ๊ฐ„์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ rotation term ์˜ ๋ฏธ์†Œ๋ณ€์œ„์ธ rotation vector (== lie algebra) ๋Š” default ํ˜•ํƒœ๋กœ๋Š” 1์ฐจ term๋งŒ์ด ๋‚จ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—,
    • ๋ช‡ ๊ฐ€์ง€ ํŠธ๋ฆญ๋“ค์„ ๋” ๋”ํ•ด์ค˜์„œ, $\frac{d(\mathbf{A}\mathbf{r})}{d\mathbf{r}} = \mathbf{A}$ ๊ณผ ๊ฐ™์ด ์œ„์˜ ๊ธฐ๋ณธ ํŠธ๋ฆญ์„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๊ณผ์ •์ด๋‹ค.
  • ๊ทธ ๋ช‡ ๊ฐ€์ง€ ํŠธ๋ฆญ๋“ค์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์‹ค์ œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.

R2LIVE reprojection error

  • R2LIVE ๋…ผ๋ฌธ์˜ appendix ์˜ reprojection error ์œ ๋„ ๊ณผ์ •์„ ์กฐ๊ธˆ ๋” ์ƒ์„ธํ•˜๊ฒŒ ํ’€์–ด์„œ ์จ๋ณด๋Š” ๊ฒŒ ์ด ํฌ์ŠคํŠธ์˜ ๋ชฉ์ ์ด๋‹ค.
\[\begin{align*} \mathbf{P}_{\mathbf{C}} (\check{\mathbf{x}}_{k+1} \boxplus \delta \check{\mathbf{x}}_{k+1}, {}^{\mathbf{G}}\mathbf{P}_s) = \left( {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}} \textbf{Exp} \left( {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}} \right) {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}} \textbf{Exp} \left( {}^{\mathbf{I}}\delta \check{\mathbf{r}}_{C_{k+1}} \right) \right)^T {}^{\mathbf{G}}\mathbf{P}_s - {}^{I}\check{\mathbf{p}}_{C}\\ - {}^{\mathbf{I}}\delta \check{\mathbf{p}}_{\mathbf{C}} - \left( {}^{\mathbf{I}}\check{\mathbf{R}}_{\mathbf{C}} \textbf{Exp} \left( {}^{\mathbf{I}}\delta \check{\mathbf{r}}_{\mathbf{C}} \right) \right)^T \left( {}^{\mathbf{G}}\check{\mathbf{p}}_{I_{k+1}} + {}^{\mathbf{G}}\delta \check{\mathbf{p}}_{I_{k+1}} \right) \end{align*}\]
  • ์œ„ ์ˆ˜์‹์„ ๊ฐ ๋ฏธ์†Œ๋ณ€์œ„ subvector ๋“ค์— ๋Œ€ํ•ด์„œ ํŽธ๋ฏธ๋ถ„ ํ•˜๋ฉด, ๊ทธ subvector์— ๋Œ€ํ•œ submatrix (block) Jacobian๋“ค์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ ๊ทธ์ € ์ž˜ ์Œ“์•„์„œ ํ•˜๋‚˜์˜ Jacobian matrix ๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, world ์ขŒํ‘œ๊ณ„์—์„œ์˜, position ์— ๋Œ€ํ•œ ๋ฏธ์†Œ๋ณ€์œ„ ${}^{\mathbf{G}}\delta \check{\mathbf{p}}_{I_{k+1}}$ ์— ๋Œ€ํ•ด ์œ„์˜ cost (reprojection error) ๋ฅผ ๋ฏธ๋ถ„ํ•˜๋ฉด,
    • $\mathbf{M}_{\mathbf{B}}$ ๋ผ๋Š” ๋ธ”๋ก์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    • ps. dp ์ž…์žฅ์—์„œ dr ์€ 0์œผ๋กœ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๊ฒฝ์šฐ์—, $\textbf{Exp} \left( {}^{\mathbf{I}}\delta \check{\mathbf{r}}_{\mathbf{C}} \right)$ ์€ $\mathbf{I}$ ๋กœ ๊ทผ์‚ฌํ•ด์„œ ์ €๋ ‡๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์•„๋ฌดํŠผ ์ด๋ฏธ vector space ์— ์‚ด๊ณ  ์žˆ๋Š” position term์— ๋Œ€ํ•ด์„œ๋Š” cost ๊ฐ€ 1์ฐจ term๋งŒ ์ด๋ฏธ ์˜ˆ์˜๊ฒŒ ๋‚จ๊ฒจ์ ธ์žˆ์„ ๋•Œ, ํŽธ๋ฏธ๋ถ„ํ•˜์—ฌ ์ž์ฝ”๋น„์•ˆ ๋ธ”๋ก์„ ์–ป์–ด๋‚ด๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ž๋ช…ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ rotation ์ชฝ term์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํŠธ๋ฆญ์„ ์•Œ์•„๋ณด์ž๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ฆ‰, ์•„๋ž˜์˜ $\mathbf{M}_{\mathbf{A}}$ ๋Š” ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ์–ป์–ด์ง€๋Š” ๊ฒƒ์ธ๊ฐ€?
  • ์ผ๋‹จ rotation term์— ๋Œ€ํ•œ cost (์ดˆ๋ก์ƒ‰ ๋ฐ•์Šค) ์—์„œ, ๋ฏธ๋ถ„๋Œ€์ƒ์ธ ${}^{\mathbf{I}}\delta \check{\mathbf{r}}_{\mathbf{C}}$ ๊ฐ€ 1์ฐจ term์œผ๋กœ ์กด์žฌํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ € ์ดˆ๋ก์ƒ‰ ๋ฐ•์Šค๋ฅผ ์ง€์ง€๊ณ  ๋ณถ์•„์„œ ${}^{\mathbf{I}}\delta \check{\mathbf{r}}_{\mathbf{C}}$ ์— ์–ด๋–ค ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ๊ทธ์ € ๋‹จ์ˆœํ•˜๊ฒŒ matmul๋กœ ๊ณฑํ•ด์ง„ ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ด์ œ ๋ชฉํ‘œ์ด๋‹ค.
  • ์ผ๋‹จ ๋…ผ์˜๋ฅผ ๋‹จ์ˆœํ™” ํ•˜๊ธฐ ์œ„ํ•ด
    • extrinsic parameter ๋Š” ๊ณ ์ •ํ•˜์ž. ์ฆ‰, IMU์— ๋Œ€ํ•œ camera ์˜ relative rotation ์— ๋Œ€ํ•œ ๋ฏธ์†Œ๋ณ€ํ™”๋Ÿ‰์ด ์—†๋Š” ๊ฒƒ์ด๋‹ค. ์กฐ์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—. ์ฆ‰, ${}^{\mathbf{I}}\delta \check{\mathbf{r}}_{C_{k+1}}$ ์„ $\mathbf{0}$ ์ด๋‹ค. ๊ทธ๋Ÿผ $\textbf{Exp} \left( {}^{\mathbf{I}}\delta \check{\mathbf{r}}_{C_{k+1}} \right)$ ๋Š” $\mathbf{I}$ ๊ฐ€ ๋œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋ฉด $\left( {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}} \textbf{Exp} \left( {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}} \right) {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}} \textbf{Exp} \left( {}^{\mathbf{I}}\delta \check{\mathbf{r}}_{C_{k+1}} \right) \right)^T {}^{\mathbf{G}}\mathbf{P}_s$ ๋Š”
    • ์ด๋ ‡๊ฒŒ $\left( {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}} \textbf{Exp} \left( {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}} \right) {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}} \right)^T {}^{\mathbf{G}}\mathbf{P}_s$ ๊ฐ€ ๋œ๋‹ค.
  • ํŠธ๋ฆญ 1: $\delta \mathbf{r} $ ์ด ์ž‘์„ ๋•Œ, $\textbf{Exp} (\delta\mathbf{r}) \approx \mathbf{I} + \left[ \delta\mathbf{r}\right]_{\times}$ ์ด๋‹ค.
    • ๊ทธ๋Ÿฌ๋ฉด $\left( {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}} \textbf{Exp} \left( {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}} \right) {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}} \right)^T {}^{\mathbf{G}}\mathbf{P}_s$ ๋Š”
    • ์ด๋ ‡๊ฒŒ $\left( {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}} \left(\mathbf{I} + \left[ {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}\right]_{\times}\right) {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}} \right)^T {}^{\mathbf{G}}\mathbf{P}_s$ ๊ฐ€ ๋œ๋‹ค.
  • ํŠธ๋ฆญ 2: $\left( \mathbf{A} \mathbf{B} \mathbf{C} \right)^{T} = \mathbf{C}^{T} \mathbf{B}^{T} \mathbf{A}^{T}$ ๋ฅผ ์ด์šฉํ•ด์„œ ์œ„์˜ ์‹์„ ํŽด์ฃผ๋ฉด
    • ์ด๋ ‡๊ฒŒ $ {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} \left(\mathbf{I} + \left[ {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}\right]_{\times}\right)^{T} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s$ ๊ฐ€ ๋œ๋‹ค.
  • ํŠธ๋ฆญ 3: $\left( \mathbf{A} + \mathbf{B} \right)^{T} = \mathbf{A}^{T} + \mathbf{B}^{T} $ ๋ฅผ ์ด์šฉํ•ด์„œ ์œ„์˜ ์‹์„ ํŽด์ฃผ๋ฉด
    • ์ด๋ ‡๊ฒŒ ${}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s + {}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} \left[ {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}\right]_{\times}^{T} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s$ ๊ฐ€ ๋œ๋‹ค.
    • ๊ทธ๋‚˜์ €๋‚˜ ์ฒซ๋ฒˆ์งธ ํ…€ ${}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s$ ๋Š” rotation ๋ฏธ์†Œ๋ณ€์œ„์— ๋Œ€ํ•ด์„œ๋Š” ์ƒ์ˆ˜์ด๋ฏ€๋กœ ๋ฏธ๋ถ„ํ•˜๋ฉด 0์ด ๋  ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ƒฅ ํŽธ์˜์ƒ ๊ฐ„๋‹จํ•˜๊ฒŒ $c$ ๋ผ๊ณ  ํ•˜์ž.
  • ํŠธ๋ฆญ 4: skew-symmetric matrix ์˜ ์ •์˜์ธ, $\left[\delta\mathbf{r}\right]_\times^{T} = - \left[\delta\mathbf{r}\right]$ ๋ฅผ ์ด์šฉํ•˜๋ฉด
    • ์ด๋ ‡๊ฒŒ $-{}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} \left[ {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}\right]_{\times} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s + c$ ๊ฐ€ ๋œ๋‹ค.
  • ํŠธ๋ฆญ 5: skew-symmetric matrix ๋Š” ๋‘ ๋ฒกํ„ฐ์˜ cross-product ์˜ matrix-vector ํ‘œํ˜„์‹๊ณผ๋„ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด the cross product is anticommutative ๋ผ๋Š” ์„ฑ์งˆ $ \mathbf {a} \times \mathbf {b} =-(\mathbf {b} \times \mathbf {a} )$ ๋ฅผ ์ด์šฉํ•˜๋ฉด
    • ์œ„์˜ ์‹์—์„œ ์ด ๋ถ€๋ถ„ $\left[ {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}\right]_{\times} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s = -\left[ {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s \right]_{\times} {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}} $ ๊ฐ€ ๋œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋ฉด $-{}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} \left[ {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}\right]_{\times} {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s + c$ ๋Š”
    • ์ด๋ ‡๊ฒŒ ${}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} \left[ {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s \right]_{\times} {}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}} + c$ ๊ฐ€ ๋œ๋‹ค.
  • ๋‹ค ์™”๋‹ค!
  • ์œ„ ์‹์„ ${}^{\mathbf{G}}\delta \check{\mathbf{r}}_{I_{k+1}}$ ์— ๋Œ€ํ•ด ๋ฏธ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ์ด์ œ ๊ทธ์ € $\frac{d(\mathbf{A}\mathbf{x})}{d\mathbf{x}} = \mathbf{A}$ ์˜ ์ž‘์—…์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋…ผ๋ฌธ์—์„œ jacobian block, ์ฆ‰ ์œ„์˜ ๊ทธ๋ฆผ์—์„œ $\mathbf{M}_{\mathbf{A}}$ block ์ด ${}^{\mathbf{I}}\check{\mathbf{R}}_{C_{k+1}}^{T} \left[ {}^{\mathbf{G}}\check{\mathbf{R}}_{I_{k+1}}^{T} {}^{\mathbf{G}}\mathbf{P}_s \right]_{\times}$ ์˜€๋˜ ๊ฒƒ์ด๋‹ค.
  • ์œ ๋„ ๋!

๊ฒฐ๋ก 

  • 1
    • ํ†ต์ƒ์ ์œผ๋กœ SLAM์—์„œ ํ‘ธ๋Š” state๋“ค์€ ํ•ญ์ƒ ๊ฑฐ๊ธฐ์„œ ๊ฑฐ๊ธฐ์ด๋‹ค. position, velocity, attitude (rotation), bias, gravity, โ€ฆ
    • ์ด๋“ค substate๋“ค์— ๋Œ€ํ•ด์„œ, ์ž์ฝ”๋น„์•ˆ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๊ณต์‹ํ™”๋˜์–ด์žˆ๋‹ค. ์ฆ‰, ๋Š˜ ํ•ญ์ƒ ๊ทธ๋Ÿฐ๋ฐฉ์‹์œผ๋กœ โ€ฆ ๊ฑฐ๊ธฐ์„œ ๊ฑฐ๊ธฐ.
    • The One Ring: ์—ฌ๋Ÿฌ ๊ทผ์‚ฌ(approximations)๋“ค๊ณผ linear algebera trick ๋“ค์„ ์ด์šฉํ•ด์„œ cost๋ฅผ substate ์— ๋Œ€ํ•œ 1์ฐจ์‹์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ๋
      • rotation์„ ์ œ์™ธํ•œ substate๋“ค์€ ์ด๋ฏธ vector space ์— ์žˆ์œผ๋ฏ€๋กœ ๋ฏธ๋ถ„์ด ์–ด๋ ต์ง€ ์•Š๊ณ ,
      • rotation ์ด๋ผ๋Š” term์€ ์–ด๋–ค ๋ฌธ์ œ๋“ค ํ’€๋˜ ์กด์žฌํ•˜๋Š” ์š”์†Œ์ด๋ฏ€๋กœ, ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ’€๋˜ ์œ„์˜ ํŠธ๋ฆญ๋“ค์ด ๊ฑฐ์˜ ํ•ญ์ƒ ์ด์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์—์„œ ์š”์•ฝํ•œ ๊ทธ ์ด์ƒ์œผ๋กœ ๋ญ”๊ฐ€ ๋” ํ•„์š”ํ•  ์ผ๋„ ๋ณ„๋กœ ์—†๋‹ค.
  • 2
    • ์š”์ฆ˜ Symforce ๋“ฑ manualํ•˜๊ฒŒ ๊ทผ์‚ฌํ•˜์ง€ ์•Š๊ณ  symbolic ํ•˜๊ฒŒ (์‚ฌ๋žŒ์ด ๋ณด๊ธฐ์—๋Š” ๋ณต์žกํ•˜๊ฒŒ) ์ž๋™์œผ๋กœ ํ’€์–ด์ฃผ๋Š” ๋ฏธ๋ถ„๊ธฐ๋“ค๋„ ์žˆ์œผ๋‚˜ โ€ฆ
    • ์œ„์™€ ๊ฐ™์ด manual ํ•˜๊ฒŒ ์ž์ฝ”๋น„์•ˆ์„ ๊ตฌํ•˜๋ฉด ์‚ฌ๋žŒ์ด ์ฝ๋Š” ์ฝ”๋“œ๊ฐ€ ์•„์ฃผ ์˜ˆ๋ป์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. interpretable ํ•œ ์ฝ”๋“œ์ธ์ง€๋„ ์œ ์ง€๋ณด์ˆ˜๊ด€์ ์—์„œ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ.
      • ๋ฌผ๋ก  Pytorch๋‚˜ Ceres ์ฒ˜๋Ÿผ automatic symbolic ์ด๋“  manual symbolic ์ด๋“  ๋‘˜ ๋‹ค ํ•˜์ง€์•Š๊ณ  ๊ณ„์‚ฐ๊ทธ๋ž˜ํ”„๋ฅผ ์œ ์ง€ํ•ด์„œ ๋ฏธ๋ถ„๊ฐ’ (value) ๋งŒ์„ ์•Œ์•„์„œ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ์ž์ฝ”๋น„์•ˆ์ด ์–ด์ฉŒ๋„ค ๋‹ค ๋ชฐ๋ผ๋„ ๋˜๊ธด ํ•˜์ง€๋งŒ โ€ฆ ์•Œ๊ณ  ์“ฐ๋Š” ๊ฒƒ๊ณผ ๋ชจ๋ฅด๊ณ  ์“ฐ๋Š” ๊ฒƒ์€ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ concise ํ•œ code base ๋“ค์—์„œ๋Š” ์ง์ ‘ ์ž์ฝ”๋น„์•ˆ์„ ๊ตฌํ•ด์„œ ๊ฐ„๋‹จํ•œ solve ๋ฅผ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค๋“ค๋„ ๋งŽ์œผ๋ฏ€๋กœ ์•Œ์•„๋‘๋ฉด ์œ ์šฉํ•  ๊ฒƒ์ด๋‹ค (์˜ˆ: kiss-icp). ๋ชจ๋ฅด๋ฉด ๋ฌด์ž‘์ • ๋‘๋ ต์ง€๋งŒ ์•Œ๋ฉด ์‰ฝ๋‹ค.