SLAM Engineer

๐ŸŒˆ IMU์™€ LiDAR๋ฅผ ํ“จ์ „ํ•ด์•ผ ํ•˜๋Š” ์ด์œ  1 (Feat. PyPose)


IMU ์™€ LiDAR์˜ ์ƒ๋ถ€์ƒ์กฐ

  • IMU์—๊ฒŒ๋Š” (์ค‘๋ ฅ ์„ฑ๋ถ„์„ ๋ณด์ƒํ•˜๊ธฐ ์œ„ํ•ด) ์ข‹์€ global attitude๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด (์งง์€ ์‹œ๊ฐ„๋™์•ˆ์—๋Š”) ์ข‹์€ relative motion์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.
  • LiDAR์—๊ฒŒ๋Š” ์ข‹์€ initial transformation ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด registration์„ ์ž˜ ํ•ด์„œ ์ข‹์€ global pose ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.
  • ๊ทธ๋ž˜์„œ ์„œ๋กœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค!

Pypose

  • Pypose ๋ผ๊ณ  pytorch ๊ธฐ๋ฐ˜์˜ pose solver ๊ฐ€ ์ง€๋‚œ 11์›”์— ๋‚˜์™”๋‹ค.
  • ๋‚˜์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ ํˆด์ด๊ธฐ๋„ ํ•˜๊ณ  ์ข‹์•„๋ณด์—ฌ์„œ ์‹ค์Šต์„ ํ•ด๋ณด๊ณ  ์žˆ๋‹ค.
    • ์˜ˆ์ „ ๋ธ”๋กœ๊ทธ ๊ธ€๋“ค์—์„œ ํ•ญ์ƒ ํ•˜๋Š” ์–˜๊ธฐ ๋ฅผ ์œ„ํ•œ library์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
      • ๊ทธ ์–˜๊ธฐ๋ž€: robotics ํŠนํžˆ slam ์€ pose estimation ์ด๋‹ค. pose ์—๋Š” rotation์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. rotation์€ nonlinear ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ rotation ์„ฑ๋ถ„์— ๋Œ€ํ•ด์„œ ์ตœ์ ํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ๊ฒƒ์˜ tangent space ์ธ angle-axis ์—์„œ optimal error state ๋ฅผ ๊ตฌํ•ด์„œ ์›๋ž˜์˜ manifold space ์— boxplus ๋กœ ๋”ํ•˜๋Š” ์ž‘์—…์„ (์ˆ˜๋ ดํ•  ๋•Œ๊นŒ์ง€ iterative ํ•˜๊ฒŒ) ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹คโ€ฆ
    • ์ฆ‰, ์ด๋ ‡๊ฒŒ manifold ์™€ ambient space ๋ฅผ ์˜ค๊ฐ€๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด์•ผ pose ๋ฅผ ํ‘ธ๋Š” ๋ฌธ์ œ์—์„œ ์“ฐ๊ธฐ ์ข‹์€ library๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
      • ํ•˜์ง€๋งŒ pytorch ์ž์ฒด๋กœ๋Š” ํŠน๋ณ„ํžˆ ์ด์— ๋Œ€ํ•œ ์ž‘์—…์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (๊ทธ๋ž˜์„œ quaternion์„ 4-dim tensor ์— ๋‹ด์•„์„œ ๊ทธ๋ƒฅ backprop ํ•ด์„œ ์ตœ์ ํ™”ํ•˜์ž~ ์ด๋Ÿฌ๋ฉด ์•ˆ๋œ๋‹ค), ๊ธฐ์กด์— python์œผ๋กœ pose ๋ฅผ ํ’€๊ณ  ์‹ถ๊ฑฐ๋‚˜ (ceres C++๋ฅผ pybindํ•ด์„œ ์จ์•ผํ•˜๋Š” ๊ท€์ฐฎ์Œ์ด ์žˆ์Œ) deep learning module ๋“ค๊ณผ pose solving ์„ ํ•จ๊ป˜ (python์—์„œ) ๋ฌผ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ, ๋‹ต๋‹ตํ•จ์ด ์žˆ์—ˆ๋‹ค.
    • ps. ์ตœ๊ทผ์— facebook ์—์„œ๋Š” ์—ญ์‹œ ๋™์ผํ•˜๊ฒŒ ์ด๋ ‡๊ฒŒ nonlinear ํ•œ pose ๋ฅผ ํ‘ธ๋Š” ์šฉ๋„๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š” pytorch ๊ธฐ๋ฐ˜์˜ library์ธ theseus ๋ฅผ ๊ณต๊ฐœํ•˜๊ธฐ๋„ ํ•˜์˜€๋‹ค.
  • library์˜ ํŠน์ง•
    • Pypose ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ rotation์— ๊ด€ํ•œ ์—ฐ์‚ฐ๊ณผ ์ด์— ๋Œ€ํ•œ (pytorch๊ธฐ๋ฐ˜) ๋ฏธ๋ถ„์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ๋„ ํŠน์ง•์ด๊ณ 
    • ๊ฒŒ๋‹ค๊ฐ€ robotics ์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ํŠนํ™”๋œ ์˜ˆ์ œ ์ฝ”๋“œ๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๊ฒŒ ํŠน์ง•์ด๋‹ค.
  • ์•”ํŠผ ์‚ฌ์„ค์ด ๊ธธ์—ˆ๋Š”๋ฐ pypose ์˜ imu preintegration ์‹ค์Šต์„ ํ•ด๋ณด๋‹ค๊ฐ€ ์žฌ๋ฏธ์žˆ๋Š” ์ด์•ผ๊ธฐํฌ์ธํŠธ๊ฐ€ ์žˆ์–ด์„œ ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

Pypose imu integration ์‹ค์Šต

IMU integration ์ด๋ž€?

  • ์งง์€ ์‹œ๊ฐ„ $\delta t$ ์‚ฌ์ด์˜ gyro๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” angular velocity ์™€ accelerometer ๋กœ ๋ถ€ํ„ฐ ์˜ค๋Š” linear acceleration ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ, ์•„๋ž˜ ์ˆ˜์‹ (์ถœ์ฒ˜: Pypose docs)์— ์˜ํ•ด, IMU์„ผ์„œ์˜ relative pose (์—ฌ๊ธฐ์„œ๋Š” position, attitude, and velocity) ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    • note: attitude ๋ผ๋Š” ์šฉ์–ด๋Š” global coordinate ์—์„œ์˜ rotation ์„ ์˜๋ฏธํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค (rotation์ด๋ผ๋Š” ๋‹จ์–ด๋Š” relative ๋ฅผ ์˜๋ฏธํ•  ๋•Œ๋„ ์ž์ฃผ ์“ฐ์ด๋ฏ€๋กœ).

  • ์ด๋ ‡๊ฒŒ ์–ป์€ relative transformation ์„ ์ง์ „ pose ์— ๊ณ„์† ๋”ํ•ด๋‚˜๊ฐ„๋‹ค๋ฉด, ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ inertial odometry๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
    • state ๋ฟ ์•„๋‹ˆ๋ผ uncertainty ๋„ ํ•จ๊ป˜ evolve ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.
  • ์ด๋Ÿฌํ•œ IMU kinematics์— ๊ด€ํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ์„œ๋Š” ์ƒ๋žตํ•˜๋ฉฐ ์•„๋ž˜ ์ž๋ฃŒ๋ฅผ (๋Š˜) ์ถ”์ฒœํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์ค€๋น„

  • ๋จผ์ €, KITTI dataset ์˜ raw data๋ฅผ ๋‹ค์šด๋ฐ›์ž.
    • ์—ฌ๊ธฐ์— ๋กœ๊ทธ์ธ ํ•˜๋ฉด ์ด๋Ÿฐ ํ™”๋ฉด์ด ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

    • ์—ฌ๊ธฐ์„œ synced+rectified data ์™€ calibration ์„ ๋‹ค์šด๋ฐ›๊ณ  unzipํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
      • data๋“ค๊ณผ calib ํŒŒ์ผ์€ ๋‹ค์Œ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋‚ ์งœ์ด๋ฆ„์œผ๋กœ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉด ๋œ๋‹ค.

        • ์ด๋ ‡๊ฒŒ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์œ„์˜ ์ฝ”๋“œ ์˜ yaml ๋ฐ dataloader๊ฐ€ ์•Œ๋งž๊ฒŒ ์ž‘๋™ํ•  ๊ฒƒ์ด๋‹ค.

์‹ค์Šต

  • sh docker_build.sh ํ•˜๊ณ  sh docker_run.sh ํ•˜๋ฉด log ๋ฐ‘์— ๊ฒฐ๊ณผ ๊ทธ๋ฆผ์ด ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค.
    • docker_run.sh ์— ๊ฒฝ๋กœ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์œผ๋‹ˆ ๋ณธ์ธ๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    • yaml์— ์žˆ๋Š” noise ๋“ฑ๋“ฑ์„ ๋ฐ”๊ฟ”๋ณด๋ฉด์„œ ์‹ค์Šตํ•ด๋ณด๋ฉด ์žฌ๋ฐŒ๋‹ค.

๊ฒฐ๊ณผ (ํฌ๋งํŽธ)

  • ๊ฝค๋‚˜ ๊ทธ๋Ÿด๋“ฏ ํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค.
    • ์˜ˆ์‹œ 1: KITTI06 ์œผ๋กœ ์ž˜ ์•Œ๋ ค์ง„ 2011_09_30_0020
      • ํŒŒ๋ž‘์ƒ‰์ด IMU๋กœ๋งŒ ์˜ˆ์ธกํ•œ ๊ฒฝ๋กœ, ๋นจ๊ฐ„์ƒ‰์ด ground-truth (๊ณ ๊ฐ€์˜ GPS+INS ์„ผ์„œ๊ฐ€ ์ œ๊ณตํ•œ ๊ฐ’) ์ด๋‹ค.
      • Gaussian ellipsoids ๋Š” xy space์— ๋Œ€ํ•ด์„œ 3-sigma ์˜ uncertainty bounds ๋ฅผ ์‹œ๊ฐํ™”ํ•œ ๊ฒƒ์ด๋‹ค.

    • ์˜ˆ์‹œ 2: KITTI05 ๋กœ ์ž˜ ์•Œ๋ ค์ง„ 2011_09_30_0018 ์˜ 2D/3D view.

      • ์—ญ์‹œ ๊ฝค๋‚˜ ๊ทธ๋Ÿด๋“ฏํ•˜๋‹ค. drift ๊ฐ€ ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ฃผ๋ณ€ ๊ตฌ์กฐ๋ฌผ ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•˜๊ฑฐ๋‚˜ GPS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  IMU ๋งŒ ์ด์šฉํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ์›๋ž˜์˜ ๊ถค์ ์„ ๊ฑฐ์˜ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‹ ๊ธฐํ•˜๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์ด ๊ฒฐ๊ณผ์—๋Š” ๋น„๋ฐ€์ด ํ•˜๋‚˜ ์žˆ๋‹ค.
  • ์ด๊ฑธ ์™œ ์ค˜์•ผ ํ•˜๋Š”๊ฐ€?
    • ๊ฐ€์†๋„๊ฐ’์˜ measurement ์—๋Š” ์‚ฌ์‹ค ์ค‘๋ ฅ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๋นผ์ฃผ์–ด์•ผ ํ•˜๊ณ , ์ด๋ฅผ ๋นผ์ฃผ๋ ค๋ฉด ํ˜„์žฌ ์ž์„ธ(attitude) ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.
      • ์ด ๊ด€๊ณ„๋Š” ์•„๋ž˜ ์‹ 230๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค (์ถœ์ฒ˜: Quaternion kinematics for the error-state Kalman filter). $a_m$ ์ด ์‹ค์ธก๊ฐ’ (raw measurement from a sensor) ์ด๋‹ค. ์•ž์„œ โ€˜IMU integration ์ด๋ž€?โ€™ ์—์„œ ์†Œ๊ฐœํ•œ imu integration ๋ชจ๋ธ์— ์‚ฌ์šฉ๋  ๊ฐ’์€ true (nominal) acceleration ๊ฐ’ $a_t$ ์ด๋ฏ€๋กœ ์‹ 230 ์˜ ์–‘๋ณ€์„ ์˜ฎ๊ธฐ๊ณ  ์ •๋ฆฌํ•˜๋ฉด ์‹ 232์™€ ๊ฐ™์ด ๋œ๋‹ค. ์ฆ‰ ์‹ค์ธก๊ฐ’์— ํ˜„์žฌ ์ž์„ธ๋ฅผ ๊ณฑํ•˜๊ณ  ์ค‘๋ ฅ (์ข์€ ์ˆ˜๋ฐฑ๋ฏธํ„ฐ ์˜์—ญ์˜ mobile robot application์—์„œ๋Š” ๋ณดํ†ต constant๋กœ ๊ฐ€์ •) ์„ ๋”ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • ์ด ๊ณผ์ •์ด ๋‹น์—ฐํžˆ pypose ์—๋„ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ด ๋•Œ ์ •๋ฐ€ํ•œ global attitude (rotation) ์„ ์•Œ ๊ณ  ์žˆ๋‹ค๋ฉด gravity ๋ณด์ƒ์„ ๊ทธ๋งŒํผ ๋” ์ž˜ํ• ํ…Œ๊ณ , ๊ทธ๋งŒํผ ๋” ์‹ค์ œ ๋ชจ์…˜์— ๊ฐ€๊นŒ์šด relative transformation ์„ imu kinematics model ์ด ๊ณ„์‚ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ข‹์€ ์ธํ’‹์ด ๋“ค์–ด๊ฐ”์œผ๋‹ˆ ์ข‹์€ ์•„์›ƒํ’‹์ด ๋‚˜์˜ค๋Š” ๊ฒƒ. ์ด ๋•Œ ๊ฐ€์žฅ ์ข‹์„ ์ˆ˜ ์žˆ๋Š” (ground-truth global attitude๋ฅผ ๊ณต๊ธ‰ํ•˜์˜€์„ ๋•Œ) ๊ฒฐ๊ณผ๊ฐ€ ์œ„์˜ ๊ฒฐ๊ณผ ์บก์ฒ˜๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ณผ (์‹ค์ „ํŽธ)

  • ์ด ๊ฐ’์ด ๋ณ„๋„๋กœ ์™ธ๋ถ€์—์„œ ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ง์ „ pose ์˜ attitude ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.
  • ๊ทธ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • ์ฒ˜์Œ์— ใ„ฑ์ž ํ„ด ์ •๋„๋Š” ๋”ฐ๋ผ๊ฐ€๋Š”๊ฐ€ ์‹ถ๋”๋‹ˆ ์–ด๋А์ƒˆ ๋ฐœ์‚ฐํ•ด๋ฒ„๋ ธ๋‹ค.

๋ ˆ์Šจ

  • ์ด ์‹คํ—˜์„ ํ†ตํ•ด์„œ ๋‹ค์Œ (๋‹น์—ฐํ•œ) ์‚ฌ์‹ค์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    1. IMU ๊ธฐ๋ฐ˜์˜ motion propagation ์„ ์œ„ํ•ด์„œ๋Š” ์ข‹์€ global rotation ์ด ํ•„์š”ํ•˜๋‹ค.
      • IMU Only ๊ธฐ๋ฐ˜์˜ navigation (== relative motion estimation, == odometry) ๊ฐ€ ์™œ ๋ฐœ์‚ฐํ•˜๊ฒŒ ๋˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
      • == ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด IMU Only์—์„œ๋„ ๋ฐœ์‚ฐ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. - ๋”ฐ๋ผ์„œ imu ์„ผ์„œ๋Š” ์งง์€ ์‹œ๊ฐ„์˜ drift ๋ฅผ ๋ณด์ƒ (ํŠนํžˆ global rotation) ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ์„ผ์„œ์™€ ์œตํ•ฉ๋˜์–ด์•ผ ํ•œ๋‹ค!
      • ๊ทธ๋ž˜์„œ ํ•ญ๋ฒ•์ชฝ์—๋Š” gps-aided inertial navigation ์ด๋Ÿฐ ์šฉ์–ด๋กœ ๋งŽ์ด ์—ฐ๊ตฌ๋˜์–ด ์™”๊ณ , robotics ์—์„œ๋Š” visual-inertial slam, lidar-inertial odometry, ์ด๋Ÿฐ ์‹์˜ ์šฉ์–ด๋กœ ๋งŽ์ด ์—ฐ๊ตฌ๋˜์–ด ์™”๋‹ค.
    2. ๊ทธ๋Ÿฐ๋ฐ gps, camera, lidar ๋“ฑ์˜ ๋ณด์™„์„ผ์„œ๊ฐ€ imu์ข‹์€์ผ๋งŒ ์‹œํ‚ค๋Š” ๊ฒƒ์ธ๊ฐ€? ํ•˜๋ฉด ๊ทธ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ imu์™€ visual or lidar ์˜ ๊ถํ•ฉ์ด ์ข‹์€ ๊ฒƒ์ด๋‹ค.
      • visual sensor ๋‚˜ lidar sensor ๋Š” ๋ณดํ†ต 10-30hz ์ •๋„์ด๋ฉฐ ์ด๋Š” fast motion (or highly dynamic environment such as urban sites) ์—์„œ a big pose jump ๋‚˜ data์˜ degradation (image ์˜ motion blur ๋˜๋Š” lidar point cloud scan์˜ motion distrotion) ์„ ์œ ๋ฐœํ•œ๋‹ค. ์ด๋Š” ๊ฒฐ๊ตญ front-end ์—์„œ cost function์„ ๋งŒ๋“ค ๋•Œ, wrong correspondences ๋ฅผ ์•ผ๊ธฐํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ relative motion cost ๋ฅผ ์ค„์ด์ง€ ๋ชปํ•˜๊ณ , relative motion estimation ์— ๊ฒฐ๊ตญ ์‹คํŒจ (ํ˜น์€ ์„ฑ๋Šฅ์ €ํ•˜)ํ•˜๊ฒŒ ๋œ๋‹ค.
      • ๊ทธ๋Ÿฐ๋ฐ visual or lidar ์„ผ์„œ๊ฐ€ ์ข‹์€ global rotation ๊ฐ’์„ imu์— ์ง์ „๊นŒ์ง€ ๊ณต๊ธ‰ํ•ด์™”๋‹ค๋ฉด, ๋น ๋ฅธ ๋ชจ์…˜์—์„œ๋„ imu ๋Š” 100-500~ hz ์˜ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•˜๋ฏ€๋กœ ์งง์€ ์‹œ๊ฐ„๋™์•ˆ์—๋Š” ์—ฌ์ „ํžˆ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” (initial) relative transformation ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์•ž์˜ ์‹คํ—˜์—์„œ ๋ณด์•˜๋“ฏ์ด, KITTI 05 ์™€ ๊ฐ™์€ ๊ธด ๊ฒฝ๋กœ์˜ ์ฃผํ–‰์—์„œ๋„ ์ „์ฒด trajectory ์˜ ๊ถค์ ์˜ ๋ชจ์–‘์ƒˆ๋ฅผ ์œ ์ง€ํ•  ์ •๋„๋กœ ์‹ ๋ขฐ๊ฐ€๋Šฅํ•˜๋‹ค (๋ฌผ๋ก  ์—ฌ์ „ํžˆ drift๋Š” ๋ˆ„์ ๋˜๋ฉฐ, ์งง์€ ์‹œ๊ฐ„๋‚ด์—์„œ ์‹ ๋ขฐ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค). ๋”ฐ๋ผ์„œ ๋น ๋ฅธ ๋ชจ์…˜์—์„œ๋„ imu๋Š” visual or lidar sensor ์— ์ข‹์€ initial ์„ ๊ณต๊ธ‰ํ•ด์ฃผ๊ฒŒ ๋˜๊ณ , ์ด๋Š” harsh ํ•œ input data ํ’ˆ์งˆ์—์„œ๋„ ๊ฐ•๊ฑดํ•œ correspondences๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ข‹์€ relative motion estimation ํ’ˆ์งˆ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๊ฒฐ๊ตญ lidar ๊ฐ€ ๋ณด์™„ํ•œ imu๊ฐ€ ๋‹ค์‹œ lidar ์—๊ฒŒ ๋„์›€์„ ์ฃผ๊ณ  ์ด๊ฒŒ ๋‹ค์‹œ imu์˜ good integration ์— ๊ธฐ์—ฌํ•˜๊ณ  โ€ฆ ์˜ ์ƒ๋ถ€์ƒ์กฐ.

๊ฒฐ๋ก 

  • ๋„ˆ๋ฌด ๋‹น์—ฐํ•œ ์†Œ๋ฆฌ (IMU์„ผ์„œ์™€ ๋‹ค๋ฅธ exteroceptive sensor์˜ ํ“จ์ „์ด ํ•„์š”ํ•œ ์ด์œ )๋ฅผ ์‹คํ—˜๊นŒ์ง€ ๊ณ๋“ค์—ฌ ๊ฐ€๋ฉฐ ์•Œ์•„๋ณด์•˜๋‹ค.

Future works

  • ์œ„์˜ ์‹คํ—˜์—์„œ๋Š” ground-truth global attitude ๋ฅผ ๊ณต๊ธ‰ํ•ด์„œ ์ €์ •๋„์˜ ์„ฑ๋Šฅ์„ ์–ป์—ˆ์ง€๋งŒ, ์‹ค์ „์—์„œ ground-truth global attitude ๋ฅผ ์ค„ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋ ˆ์Šจ2 ์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ gps, camera, or lidar ์„ผ์„œ๋ฅผ ์ด์šฉํ•ด์„œ global attitude ๋ฅผ ๊ณ„์† ์ž˜ ์œ ์ง€ํ•ด๋‚˜๊ฐ€๋Š” ์‹์œผ๋กœ fusion system ์„ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, lidar ์ชฝ์—์„œ๋Š” fast-lio ๊ฐ€ ์š”์ฆ˜ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์˜ˆ์‹œ์ธ ๋“ฏํ•˜๋‹ค.
    • faster-lio์˜ C++ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•ž์˜ pypose ์˜ integrate() ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ rot์„ ๊ณฑํ•˜๊ณ  g๋ฅผ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

      • ๋‹ค๋งŒ ์ด ๋•Œ์˜ rot ์€ imu only ๋กœ ๊ณ„์† ์Œ“์•„๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, lidar-aiding ์„ ํ†ตํ•ด์„œ ๊ณ„์† ๋งค ์Šค์บ”๋งˆ๋‹ค ๋ณด์ •(filtering) ๋˜๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ข‹์€ ํ’ˆ์งˆ์˜ gravity ๋ณด์ •์ด ์ด๋ฃจ์–ด์งˆ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค (์‹ค์ œ๋กœ fast lio์˜ ๋ฐ๋ชจ ๋น„๋””์˜ค๋“ค๋„ ๊ทธ๋Ÿฌํ•˜๊ณ ).
  • ์ด ๊ณผ์ • (lidar ํ“จ์ „)์„ python๋งŒ ์ด์šฉํ•ด์„œ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด์ž.
    • ์•ž์˜ ์‹คํ—˜์ฝ”๋“œ pypose-practice/tree/main/imu/integration ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™•์žฅํ•ด๋ณด์ž.
      • ps. ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค KITTI ๋Š” ์‰ฌ์šด ๋ฐ์ดํ„ฐ์…‹์ด๋ผ A-LOAM ๊ฐ™์€ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด IMU๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  lidar ๋งŒ์œผ๋กœ๋„ KITTI05 ์™€ ๊ฐ™์€ ๊ณณ์€ ์ถฉ๋ถ„ํžˆ ์ข‹์•„๋ณด์ด๋Š” odometry ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์„ฑ๋Šฅ๋“ค์€ scan to scan์ด ์•„๋‹ˆ๋ผ scan to map registration ๊ณผ ๊ฐ™์€ registration ์ชฝ์—์„œ์˜ ๊ธฐ๋ฒ•๋“ค๋กœ๋ถ€ํ„ฐ ์–ป์–ด์ง„ ๊ฒƒ๋“ค๋„ ๋งŽ๋‹ค.
  • ํ˜น์€ ๋ณ„๋„ ์ถ”๊ฐ€์„ผ์„œ ์—†์ด global rotation guide ๋ฅผ ์ž˜ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด? ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ž๋™์ฐจ๋Š” roll ๊ณผ pitch motion ์ด ๋งŽ์ด ์—†์Œ์„ ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฐ€์ •๋“ค์„ ์ •๋Ÿ‰ํ™”ํ•ด์„œ virtual measurement ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฐœ์‚ฐ์„ ๋Šฆ์ธจ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.