SLAM Engineer

๐ŸŒˆ [SymForce Tutorial 2ํŽธ] Sim(3) ์ตœ์ ํ™”์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ตฌํ˜„ํ•ด๋ณด์ž


Sim(3) Optimization ์ด๋ž€?

  • $\text{Sim}(3)$ ์ตœ์ ํ™”๋ž€, SLAM์—์„œ translation ๊ณผ rotation ๋ฟ ์•„๋‹ˆ๋ผ scale ์„ ํ•จ๊ป˜ ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ์ผ์ปซ๋Š”๋‹ค.
  • monocular visual SLAM์—์„œ loop closure ํ•  ๋•Œ ์ „์ฒด map์˜ scale consistency ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ธ๋‹ค.
    • ์นด๋ฉ”๋ผ ํ•˜๋‚˜๋กœ SLAM์„ ํ•˜๋Š” ๊ฒฝ์šฐ (i.e., monocular visual SLAM or SfM), keyframe ๋ฐ local map ๋“ค์˜ true scale ์„ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค (up-to-scale ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค).

Visual SLAM ์—์„œ์˜ ๊ด€๋ จ ๋…ผ๋ฌธ

  • ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ORB-SLAM: a versatile and accurate monocular SLAM system ๋…ผ๋ฌธ์„ ๋ณด๋ฉด scale-aware loop closing ์ด๋ž€ ๋ง์ด ๊ณ„์† ๋‚˜์˜ค๋ฏ€๋กœ ctrl+f ๋กœ scale์ด๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•ด์„œ ๋‚˜์˜ค๋Š” ๋ถ€๋ถ„ ์œ„์ฃผ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.
  • ๋ณด๋‹ค๋ณด๋ฉด Scale Drift-Aware Large Scale Monocular SLAM (RSS, 2010) ๋…ผ๋ฌธ์ด $\text{Sim}(3)$ optimization ์„ visual SLAM์— ์ ์šฉํ•œ ํŒŒ์ด์˜ค๋‹ˆ์–ด ๋…ผ๋ฌธ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ Sim(3) ์— ๊ด€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด ์ชฝ์— ์ข€ ๋” ์ž์„ธํžˆ ์ž˜ ๋˜์–ด ์žˆ๋‹ค.
    • ๋‹ค๋งŒ ์ด๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” rotation ์— ๊ด€ํ•œ (์ดˆ์‹ฌ์ž์—๊ฒŒ ์–ด๋ ค์›Œ๋ณด์ด๋Š”) ์ˆ˜์‹๋“ค์ด ๋‚œ๋ฌดํ•œ๋‹ค๋Š” ์ ์ด ์•ฝ๊ฐ„ ์žฅ๋ฒฝ์ด ๋  ์ˆ˜ ์žˆ๋Š”๋ฐโ€ฆ ์ด ํฌ์ŠคํŠธ์—์„œ ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ”๋Š”, SymForce ๊ฐ€ ๊ทธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์žฅ๋ฒฝ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ๋•Œ์— ์žˆ์–ด์„œ (๋ฌผ๋ก  rotation ๋ฏธ๋ถ„ ์ˆ˜์‹ ์ž์ฒด์— ๋Œ€ํ•ด ์ดํ•ด๋Š” ํ•ด์•ผํ•˜๊ฒ ์ง€๋งŒ) ์ƒ๋‹น ๋ถ€๋ถ„ ํ•ด์†Œํ•ด์ฃผ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, rotation์˜ ์„ธ ๊ฐ€์ง€ representation (1. angle-axis or also called rotation vector, 2. $\text{SO}(3)$ or also called rotation matrix, 3. Quaternion) ์ด ์žˆ๋‹ค๋Š” ์ •๋„๋งŒ ์•Œ๊ณ , SymForce ๊ฐ€ ๊ตฌํ•ด์ฃผ๋Š” Jacobian๊ฐ’์„ ์ด์šฉํ•ด์„œ, ๋ฐ”๋กœ ์‹ค์ „ optimization project ๋ฅผ ๊ตฌ์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ์— ์žฅ์ ์ด ์žˆ๋‹ค.
    • ๋”์šฑ์ด ์œ„์˜ ๋…ผ๋ฌธ์—์„œ ์ฒ˜๋Ÿผ (visual) SLAM์„ ํ•œ๋‹ค๋Š” ๊ฑด front-end ์—์„œ observation model ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ (์˜ˆ: image projection loss ๋“ฑ๋“ฑ..) back-end์—์„œ pose-graph ์˜ Sim(3)๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ residual ๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ, SymForce๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๋‹ค์–‘ํ•œ loss ๋“ค์„ ๋ชจ๋‘ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
      • ps. ์‚ฌ์‹ค ์ด๋Ÿฐ ์ผ(์‰ฌ์šด ์ตœ์ ํ™”)๋“ค์€ Ceres ๊ฐ€ ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ์ž˜ ํ•ด์ฃผ๊ณ  ์žˆ๋˜ ๋ถ€๋ถ„์ด๊ธด ํ•˜๋‹ค.
        • SymForce ์ €์ž๋“ค์€, Ceres ์™€ ๊ฐ™์€ Auto-diff ๋ฅ˜ (Jet์ด๋ผ๋Š” ์ด์›์ˆ˜ struct ๋กœ value ์™€ gradient ๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌ) ๋ณด๋‹ค Real-time์˜ ์ €์ „๋ ฅ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ robotics ๋ฌธ์ œ์— Symbolic์œผ๋กœ Jacobian์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒŒ ๋” ์ข‹๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ.
        • ๊ทธ๋‚˜์ €๋‚˜ ๊ฐœ์ธ์ ์œผ๋กœ๋Š” python์—์„œ nonlinear optimization ์„ ์ž์œ ์ž์žฌ๋กœ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์— (Ceres ์—์„œ ์ข€ ํ•˜๊ธฐ ์–ด๋ ต๋˜ ๋ถ€๋ถ„..) SymForce๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์žฌ๋ฏธ๋ฅผ ๋Š๋ผ๊ณ  ์žˆ๋‹ค ..
  • ์•”ํŠผ ์œ„์˜ RSS 2010 ๋…ผ๋ฌธ์˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์™œ Sim(3) ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์ด๊ฒŒ ์–ด๋–ค before-and-after ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ํ•œ๋ฒˆ ์ง์ ‘๊ฐ€์ ธ์™€๋ณด์•˜๋‹ค.

    • Mono camera ๋Š” lidar ์„ผ์„œ์™€ ๋‹ฌ๋ฆฌ 3D ๋ฅผ ์ง์ ‘ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— scale ์„ ์ถ”๋ก ํ•  ์ˆ˜ ์—†๊ณ  (ํ•˜์ง€๋งŒ ์žˆ๊ธฐ๋Š” ํ•ด์•ผ ํ•˜๋ฏ€๋กœโ€ฆ ์˜ˆ๋ฅผ ๋“ค์–ด, 1.0์œผ๋กœ ์„ธํŒ…ํ•ด์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค), ๋”ฐ๋ผ์„œ ์ฃผํ–‰์ด ์ง€์†๋˜๋ฉด์„œ ์ด scale ๊ฐ’์— drift ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ .. (a)์ฒ˜๋Ÿผ ๊ตฌ๊ฐ„๋งˆ๋‹ค ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ๋งˆ์น˜ ๋‹ค๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง„๋‹ค. ์ด๊ฒƒ์„ ํ•ด์†Œํ•ด์ฃผ๋Š” ๊ฒƒ์ด Scale-aware pose-graph optimization ์œผ๋กœ ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ. ์—ฌ๊ธฐ์„œ 7-dim optimization์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด์œ ๋Š” Sim(3) ์—์„œ ์ตœ์ ํ™”ํ•ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ 7-dim vector ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 3 for translation, 3 for rotation, 1 for scale ์ด๋ฏ€๋กœ ์ด 7 dim.
      • ps. ๊ทธ๋ฆฌ๊ณ  ๋งค๋ฒˆ ์ ๋Š” ๋“ฏ ํ•˜์ง€๋งŒ rotation ์˜ matrix ํ‘œํ˜„์ธ SO(3) ๊ณต๊ฐ„์€ nonlinear ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์˜ tangent space (๋Š” vector space์ด๋‹ค)๋กœ ๋‚ด๋ ค์™€์„œ ์ตœ์ ํ™”๋ฅผ ํ•˜๊ฒŒ ๋˜๊ณ  โ€ฆ ๊ทธ ๊ณต๊ฐ„์— ์‚ฌ๋Š” ์•„์ด๊ฐ€ rotation vector ์ด๊ณ , ๋ฌผ๋ฆฌ์  ์˜๋ฏธ๋กœ๋Š” angle-axis ์ด๊ณ  .. ์•”ํŠผ ๊ทธ๋Ÿฌํ•ด์„œ rotation ์˜ minimal ํ•œ representation์ธ rotvec์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ rotation๋„ 3 dim์ด ๋œ๋‹ค.

์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ (Feat. SymForce)

  • ์—ฌ๊ธฐ 2_nonlinear_icp_Sim3/nonlinear_icp_Sim3.ipynb ์— ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.
  • ๊ต์œก์šฉ ์˜ˆ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ณ  ์œ ๋ช…ํ•œ Stanford 3D Scanning model ๋กœ ์‹ค์Šตํ•ด๋ณด์•˜๋‹ค. ์œ„์˜ ๋ฆฌํฌ์— ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์žˆ๋‹ค.

์ฝ”๋“œ

  • ์•ž์„œ SymForce๋ฅผ ์ด์šฉํ•ด์„œ Nonlinear ICP ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ์—์„œ nonlinear model ์„ ์ด๋ ‡๊ฒŒ ์ •์˜ํ–ˆ์—ˆ๋‹ค.
    •   p_tgt_est = (rotmat * p_src) + transvec # The constraint: (R*p) + t == p'
      
    • ์—ฌ๊ธฐ์—์„œ ๊ทธ์ € scalar ๊ฐ’ ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
      •   scale = sf.V1.symbolic("s")
          p_tgt_est = (rotmat * p_src)*scale + transvec # The constraint: (sR*p) + t == p'
        
    • ๋„ˆ๋ฌด ์‰ฝ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด scale ์— ๋Œ€ํ•ด์„œ๋„ ๋ฏธ๋ถ„ํ•ด์ฃผ๊ณ 
      •   Je_scale_model = error_model.jacobian(scale)
        
    • ์•„๋ž˜์™€ ๊ฐ™์ด update ํ•  ๋•Œ Jacobian์ด ๊ธฐ์กด์˜ 6 dim (for $\text{SE}(3)$) ์—์„œ 7-dim ์ด ๋˜๋„๋ก scale ์— ๋Œ€ํ•œ ๋ฏธ๋ถ„๊ฐ’์„ appendํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
      •   J = np.hstack((Je_rot, Je_trans, Je_scale)) 
        
      • ๋‚˜๋จธ์ง€ Gauss-Newton ๊ณผ์ •์€ ์•ž์˜ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ์™€ ์™„์ „ ๋™์ผํ•˜๋‹ค (์ž์„ธํ•œ ICP routine ์€ ์•ž์˜ ๋ธ”๋กœ๊ทธ ๋ฐ ์ฝ”๋“œ) ์ฐธ๊ณ )!

์‹ค์Šต

์‹คํ—˜์„ธํŒ…

  • true correspondence ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , true transformation ์— noise ๋ฅผ ์ถฉ๋ถ„ํžˆ ์ฃผ์–ด initial guess ๋กœ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๊ฒฐ๊ณผ

  • ์—ฌ๊ธฐ์„œ๋Š” true correspondence ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ์ž˜ ์ˆ˜๋ ดํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๊ฐ€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜์ƒ์ด๋‹ค.

์ด Sim(3) nonlinear ICP๋ฅผ ์‹ค์ „์— ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” โ€ฆ

  • ์œ„์—์„œ๋Š” Jacobian๋งŒ SymForce๊ฐ€ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ , ์ด์™ธ์˜ Gauss-newton์„ ํฌํ•จํ•œ ๋ชจ๋“  ๊ณผ์ •์„ from-scratch ๋กœ ๊ตฌํ˜„ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—.. ์‹ค์ „์—์„œ ์“ฐ์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฌ์ „ํžˆ ๊ฐœ์„ ํ•ด์•ผ ํ•  ๋ถ€๋ถ„๋“ค์ด ์กด์žฌํ•œ๋‹ค (์‚ฌ์‹ค ์ด๋ฏธ ์ƒ์šฉ library๋“ค์€ ์ด๋ฏธ ์ด๋Ÿฐ๊ฒƒ๋“ค์ด ์ž˜ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฒƒ๊ณผ ๊ทธ๋ƒฅ ๊ฐ–๋‹ค ์“ฐ๋Š” ๊ฑด ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹คใ…Žใ…Ž)
  • ๋ณ‘๋ ฌํ™”๋กœ ์‹œ๊ฐ„ ๊ฐ€์†
    • per-point ๋กœ error์™€ jacobian์„ ๊ณ„์‚ฐํ•˜๋Š” ์ผ์€ ํ•˜๋‚˜์˜ iteration ์•ˆ์—์„œ๋Š” point ์‚ฌ์ด์—์„œ๋Š” ๋…๋ฆฝ์ ์ธ ์ž‘์—…์ด๋‹ค (race condition์ด ์—†๋Š”). ๋”ฐ๋ผ์„œ 2_nonlinear_icp_Sim3 ์˜ icp_once() ํ•จ์ˆ˜์—์„œ num_pts ๋ฅผ for loop ๋„๋Š” ๋ถ€๋ถ„์„ ๋ณ‘๋ ฌํ™”ํ•˜๋ฉด (H๋ฅผ ๋”ํ•ด๋‚˜๊ฐ€๋Š” ๋ถ€๋ถ„์—๋งŒ lock์„ ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค. ํ˜น์€ $\textbf{H}(i)$ ์— ๋Œ€ํ•œ array๋ฅผ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์žก์•„๋†“๊ณ  ์“ฐ๊ฒŒ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค..) ์ „์ฒด ์‹œ๊ฐ„ ํ–ฅ์ƒ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค (ํŠนํžˆ numba ๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ GPU๋กœ ์ด ๋ณ‘๋ ฌ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์ฃผ๋ฉด ์ˆ˜๋งŒ๊ฐœ ์ •๋„ ๋˜๋Š” ๋Œ€๊ทœ๋ชจ point cloud registration ์—์„œ๋„ ๋น ๋ฅธ a single iteration์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค).
    • ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ Generalized-icp ๋ฅ˜์—์„œ๋Š” point ์˜ covariance ๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. ์ด ์—ญ์‹œ per-point ๋งˆ๋‹ค ๋ณ‘๋ ฌํ™”๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๊ทธ๋ž˜์„œ VGICP (fast_gicp) ์™€ ๊ฐ™์€ CUDA๊ธฐ๋ฐ˜์œผ๋กœ covariance ๊ณ„์‚ฐ์„ ๊ฐ€์†ํ™”ํ•œ ICP library๋“ค๋„ ์กด์žฌํ•œ๋‹ค.
    • ps. ์‹ค์ œ๋กœ open3d ์˜ icp ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด multi core cpu ์˜ ๊ฒฝ์šฐ (๋ณ„๋„๋กœ cpu์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜์ง€ ์•Š์œผ๋ฉด) ๋ชจ๋“  core ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค (htop ๋“ฑ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค).
  • Robust loss ์‚ฌ์šฉ
    • ์œ„ Sim(3) ์˜ˆ์ œ์—์„œ๋Š” true correspondence ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข…์ ์œผ๋กœ ๋งค์šฐ ๊น”๋”ํ•œ ์ˆ˜๋ ด์— ์ด๋ฅผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ฒ• โ€ฆ per point jacobian ๋งˆ๋‹ค weight ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ฑธ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. $\textbf{H}$ ์— information (inverse of covariance) ์˜ sqrt ๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
      • ์ด ๊ณผ์ •์„ whitening ์ด๋ผ๊ณ ๋„ ํ•˜๊ณ  ์ž์„ธํ•œ ๊ฑด Factor Graphs for Robot Perception (2017) ์ฑ…์˜ ์„น์…˜ 2.3 ์„ ๋ณด๋ฉด ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. ์ด weight ์˜ ์ •๋„๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ Cauchy ๋‹ˆ Huber ๋‹ˆ GemanMcClur ํ•˜๋Š” ์œ ๋ช…ํ•œ ํƒ€์ž…๋“ค์ด ์กด์žฌํ•œ๋‹ค.
        • ์ด๋Š” Parameter Estimation Techniques: A Tutorial with Application to Conic Fitting (1995) ๋…ผ๋ฌธ์— ์ •๋ง ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๋‹ค.
        • ์ด ๋…ผ๋ฌธ์˜ Fig 4 ๋ฅผ ๋ณด๋ฉด ์—ฌ๋Ÿฌ m-estimator ๋“ค์˜ cost function (์ฒซ๋ฒˆ์งธ row) ์™€ ๊ทธ๊ฒƒ์˜ ๋ฏธ๋ถ„๊ฐ’ (๋‘๋ฒˆ์งธ row) ๋“ค์ด ์‹œ๊ฐํ™” ๋˜์–ด ์žˆ๋‹ค. ์žฌ๋ฐŒ๋Š” ๊ฒƒ์ด, cost function ์—์„œ ๋ณด๋ฉด ์ƒ๊น€์ƒˆ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ (์ •๋„์˜ ์ฐจ์ด๋งŒ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ), Huber ๋‚˜ Cauchy loss ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜๋ฉด ํฐ ์—๋Ÿฌ (์ค‘์•™์—์„œ ๋ฉ€์–ด์ง€๋Š”)๋ฅผ ๊ฐ€์ง€๋Š” correspondence ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฏธ๋ถ„๊ฐ’์ด ์ƒํ•œ์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜ (Huber) ๊ฑฐ์˜ 0์œผ๋กœ ์ˆ˜๋ ดํ•ด๋ฒ„๋ฆฐ๋‹ค๋Š” (Cauchy) ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ J~0 ๋˜๋Š” J < a small constant ๊ฐ€ ๋˜๋ฏ€๋กœ ์ž˜๋ชป update ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ž˜๋ชป update ๋˜๋Š” ์–‘์— ์ œํ•œ์ด ์ƒ๊ธด๋‹ค. ๋”ฐ๋ผ์„œ false correspondence ์— ๋Œ€ํ•ด์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ฐฉ๊ธˆํ•œ ๋ง์„ ๊ทธ๋ฆผ์— ์ •๋ฆฌํ•ด๋ณด๋ฉด ๋Œ€์ถฉ ์ด๋ ‡๊ฒ ๋‹ค. influence function ์ด๋‚˜ ์ด๋Ÿฐ ์šฉ์–ด์— ๋Œ€ํ•ด์„œ๋Š” ์œ„์˜ ๋…ผ๋ฌธ์„ ์ฐธ๊ณ ๋ฐ”๋žŒ.

  • dimension ๋‚˜๋ˆ ์„œ ํ’€๊ธฐ
    • ์ตœ๊ทผ TEASER++: fast & certifiable 3D registration ๊ฐ™์€ ๋…ผ๋ฌธ๋“ค์„ ๋ณด๋ฉด scale ๋จผ์ € ํ’€๊ณ , ๊ทธ ๋‹ค์Œ rotation ํ’€๊ณ , .. ์ด๋Ÿฐ์‹์œผ๋กœ transformation ๋“ค์„ ๋‚˜๋ˆ ์„œ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ด๋Ÿฐ ์ ‘๊ทผ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ์ด๋‹ค. SymForce ๋กœ ์ด๋Ÿฐ ๊ตฌํ˜„์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋„ ์—ญ์‹œ ๋งค์šฐ ํŽธํ•  ๋“ฏํ•˜๋‹ค.