[SLAM survey] IROS2019 SLAM 관련 논문 정리
on Paper Review
SuMa++Efficient LiDAR-based Semantic SLAM
- Opensource: https://github.com/PRBonn/semantic_suma/
- 3차원 LiDAR scan data를 이용하여 semantic 정보를 추출하고 이 정보를 이용한 surfel 기반의 mapping approach
- LiDAR데이터를 spherical projection하고 convolution network 를 이용하여 semantic 정보 추출 (depth image)
- surfel based mapping은 이전 논문인 SuMa와 동일
- 모든 포인트는 point-wise로 semantic 정보를 포함
- semantic 정보는 moving object를 filtering하는데 사용되며, scan matching을 할 때 semantic constraint으로도 활용 (Moving object를 검출해서 filtering할 때 자동차와 같은 object를 다 제거하지 않고, 실제 움직이는 물체만 제거 함. 주차되어 있는 자동차와 같은 object는 odometry 계산을 할 때 좋은 feature가 되기 떄문에)
- Network는 IROS2019에 함꼐 발표한 Range++의 network를 사용하였으며 semantic KITTI로 training
- 잘못 계산된 semantic 정보를 제거 하기 위해 flood-fill algorithm을 사용(semantic 마스크의 edge부분을 수축 시켜 작은 semantic pixel들을 제거, 그다음 range 데이터를 이용해서 senmatic pixel을 확장)
- frame-to-model ICP를 할 때 sementic 정보를 이용(weight를 error function에 추가)
- contribution
- Semantic 정보를 이용하여 moving object(실제 움직이고 있는)를 제거함으로써 odometry 정확도 향상
- Youtube: https://youtu.be/uo3ZuLuFAzk
SuMa (Efficient Surfel-Based SLAM using 3D Laser Range Data in Urban Environments) - RSS2018
- dense opproach to laser based mapping
- surfel을 사용하여 odometry 및 loop closure 수행
- surfel은 point의 3차원 위치, normal vector, radius를 갖는 표현 방법
- Pointcloud를 Vertex map과 Normal map으로 표현 (이미지로 표현)
- Verex map은 각 pixel 값이 point의 3차원 위치정보를 갖고 있음
- Normal map은 각 pixel이 point의 normal vector 값을 갖고 있음 (normal vector를 계산할 때 image space에서 계산을 해서 빠르다)
- Odometry: measurement에서 계산한 vertex map과 normal map을 surfel map (global) 에서 렌더링한 vertex map과 normal map과 비교를 통해서 odmetry 계산. 이때 코드가 Shader로 되어 있어서 계산이 빠르다.
- 계산된 odometry 기반으로 surfel map update
- Loop closure 기준은 시간이 오래된 inactive map에서 euclidean distance가 가까운 node 기준으로 relative pose 계산
- Loop 가 검출되면 validate를 위해 일정 기간동안 더 지켜 봄
- Youtube: https://youtu.be/-AEX203rXkE
RangeNet++: Fast and Accurate LiDAR Semantic Segmentation
- Opensource: https://github.com/PRBonn/lidar-bonnetal
- Velodyne과 같은 Rotational LiDAR 센서 데이터만을 이용한 semantic segmentation
- Pointcloud를 spherical image로 변환하여 사용 (Suma++과 동일)
- RangeNet53은 Karknet53을 backbone으로 함
- Semantic KITTI 데이터를 이용하여 trainning
- input은 range, x, y, z, remission 데이터를 갖는 [5 x h x w] 사이즈의 tensor
- 실제 3차원 데이터를 spherical image로 projection할 때 약 130,000개의 포인트가 32,768 정도의 pixel 데이터로 변환되기 때문에, network를 통해 추정한 semantic 정보를 raw point cloud로 가져기가 위해서 모든 pixel은 pointcloud의 index정보를 갖고 있다.
- 물체의 edge 부분에서 다른 물체지만 같은 pixel로 mapping되는 경우가 있기 떄문에, 이런 경우 semantic 정보가 raw pointcloud로 잘못 프로젝션됨
- 이런 경우를 필터링하기 위해서 pointcloud의 3D coordinate에서 K-NN search를 사용하며, 속도를 높이기 위해 fast, GPU-enabled k-NN search 방법을 사용함
- Youtube: https://youtu.be/wuokg7MFZyU
Robot Localization in Floor Plans Using a Room Layout Edge Extraction Network
- 메모리와 계산 효율적인 mono 카메라 기반 indoor localization
- Particle filter 기반 localization
- 건물의 평면도를 map으로 활용
- Monocular image에서 실내 벽면이 만나는 edge(room layout edge)를 CNN network를 이용해서 검출
- 이 AdapNet++ model의 입력은 monocular RGB 이미지와 colorized vanishing lines 이 overlay된 이미지
- 평면도에서 바닥면과 천장의 가로 edge를 세우고, corner에서 세로 엣지를 세워서 3차원 맵으로 만듬
- 방의 높이는 fix라고 함 (known)
- Measurement model은 floor plan으로 생성한 3차원 맵을 이미지로 projection한 pixel과 AdapNet++ 출력으로 나온 edge의 pixel distance의 합으로 정의함
- Youtube: https://youtu.be/8pa4MUqkjxc
Free-Space Features: Global Localization in 2D Laser SLAM Using Distance Function Maps
- 2D LiDAR Navigation system에서 local submap 사이의 matching을 위한 방법
- submap을 distance transform 하여 사용(SDF를 사용)하여 place recognition으로 사용
- SDF는 signed distance function
- Key point의 detection은 DoH(Determinant of Hessian)을 이용
- Key point는 SIFT와 HOG처럼 histogram of gradient orientation 방법을 사용하여 descripter를 정의함
- 또한 descripter의 rotation invariance한 특성을 위해 histogram에서 dominant한 orientation을 찾아서 변환
- RANSAC 방법을 통해 두 submap 사이의 relative pose를 계산 (앞에서 정의한 descripter를 이용하여 matching)
FLAME: Feature-Likelihood Based Mapping and Localization for Autonomous Vehicles
- 저장 공간을 많이 차지하는 3차원 LiDAR맵의 용량을 줄이기 위한 map을 제안
- 또한 이 map을 이용하여 real-time alignment (localization) 방법을 제안
- 제안한 map의 이름 FLAME(Feature Likelihood Acquisition Map Emulation)
- FLAME는 기존의 3D pointcloud 맵 대비 0.1%의 저장 공간을 차지
- FLAME은 planar, pole, curbe feature를 LiDAR 데이터에서 검출하고 추정된 각 feature들은 Likelihood 분포로 정의
- Localization 단계에서는 FLAME으로 정의된 맵과 현재 measurement에서 검출한 각 feature들의 matching을 통해 위치추정
ORBSLAM-Atlas: a robust and accurate multi-map system
- 제한없이 여러개의 submap을 다루기 위한 시스템 (multi session)
- Submap 간의 Overlap을 검출하고, merge 하고!
- 기존 ORB-SLAM은 tracking loss가 발생하면 mapping을 멈춤! 하지만 ORBSLAM-Atlas는 tracking loss가 발생하면 새로운 submap을 생성하고, 이전의 submap과 동일한 영역에 있을 때 submap을 merge 함
- 결과적으로 이런 과정을 통해 여러개의 더 정확한 submap으로 분리되며, 최종적으로 정확한 global map으로 merge 됨
- Multi map 의 표현을 Atlas라고 표현
- 각 atlas는 효율적인 place recognition을 위해 각각의 unique한 DBoW(Distributed Bag of Words)를 갖고 있음
- 새로운 map 생성/ Relocalization/ Mergeing
- 카메라 pose가 정확하지 않을 때 tracking loss에 대한 새로운 정의 제안. 이 방법은 잘못된 loop가 발생하여 Graph가 깨지는 것을 방지
Exploiting Sparse Semantic HD Maps for Self-Driving Vehicle Localization
- Uber 회사의 논문
- Camera, LiDAR, GPS, Encoder, IMU와 HD map을 이용한 Localization
- 약 312 km에서 약 0.05m의 lateral accuracy, 1.12m의 longitudinal accuracy를 보여주며, HD map의 경우 LiDAR 맵에 비해 약 0.3%의 저장공간이 필요
- HD map은 Lane과 sign의 위치를 포함하고 있음
- Lane: lateral position and heading
- Sign: Longitudinal position
- Measurement에서 Lane 검출은 multi-sensor convolutional network를 사용하며 input은 front-view camera image와 raw LiDAR intensity값을 BEV(bird eye view)로 projection한 이미지
- Traffic sign은 PSPNet기반의 Convolutional Network를 이용해서 검출
- 최종적으로 검출된 lane과 HD map의 lane, 검출된 sign과 HD map의 sign의 matching을 이용하여 discretize된 parameter 공간에서 posterior probaility 계산
- GPS와 IMU+Encoder를 이용하여 각 probabilty를 구하고 모든 probabilty의 곱으로 최종 probabilty 계산
- 계산된 probabilty를 이용하여 위치 추정
Lane Marking Learning based on Crowdsourced Data
- 자율주행을 위한 맵이 outdated 되어 있는 경우 문제를 발생시킬 수 있음
- 현재 HD 맵을 만들기 위해서는 고가의 장비를 사용하기 때문에 빠른 업데이트를 하기 어려움
- 따라서 이런 고가의 장비가 아닌 일반 도로의 자동차들 (floating car)로 부터 데이터를 수집해서 HD map을 업데이트 시키는 것이 필요 (crowdsourced data)
- 이런 경우 가격적인 문제와 전송 문제 때문에 data가 spase하며 noisy 하다
- floating car data가 입력되면 첫번째로 차량의 경로를 optimization하고 alignment한다. optimization은 GPS데이터와 odometry 데이터를 이용하여 graph-optimization으로 풀고, 여러대의 데이터는 traffic sign, reflector pole 과 같은 feature들을 이용해서 alignment한다.
- Crowdsource data간에 alignment가 되었으므로, 그 데이터를 DBSCAN(density-based spatial clustering of application with noise)기반으로 clustering함
- clustering한 데이터를 필터링을 하고, 필터링된 데이터들을 연결해서 inital graph를 만들며, 최종적으로 optimization을 통해 부드럽게 만든다
Fusing Lidar Data and Aerial Imagery with Perspective Correction for Precise Localization in Urban Canyons
- LiDAR 데이터와 항공사진(aerial image)를 이용한 localization
- Particle filter 기반의 방법
- 일반적으로 제공되는 (google, naver 등) aerial image는 true orth-image(모든 건물을 수직으로 바라본 것 과 같은 이미지)가 아니기 때문에 건물에 따라 distortion이 발생해 있다.
- 따라서 LiDAR measurement를 바로 항공사진에 matching을 할 경우 이러한 distortion에 의해 에러가 발생
- 이러한 distortion을 보정하기 위해 CNN 사용
- CNN을 통해 위성사진에서 건물의 Roof와 Wall을 검출하고, roof를 wall의 끝 쪽으로 이동시킴으로써 이러한 distortion을 보정
- 이러한 distortion 보정을 위해서는 CNN으로 검출된 roof와 wall의 pair를 알아야 함
- 보정된 항공사진의 edge와 pointcloud 사이의 matching을 위해서는 WMI (weighted Mutual Information)을 사용
- WMI를 계산할 때는 pointcloud를 top-view 이미지로 변환해서 사용
- Predict step: encoder data를 이용해서 state prediction
- Update step: WMI를 이용한 matching을 통해 위치 update
- KAIST complex urban dataset를 이용하여 실험하였으며, ground truth와 비교했을 때 상당히 좋은 성능을 보여줌
Automatic Spatial Template Generation for Realistic 3D Modeling of Large-Scale Indoor Spaces
- 이 논문은 LiDAR와 카메라를 이용하여 3차원 맵핑한 point cloud를 현실감 있게 modeling을 하는 방법을 제안
- 이 논문을 정리하면, 3차원 맵을 rendering할 때 다양한 물체들이 있는 경우 vertex로 만들기 복잡하며, realistic 하게 만들기 어렵다. 따라서 3D pointcloud에서 learning을 통해 background와 object를 분리하고, object를 제거한다. 또한 이미지를 이용하여 texture mapping을 해야 하므로 object에 해당하는 pixel을 제거하고, inpainting과정을 통해 제거된 물체를 채운다.
- Indoor point clud generation
- 3D LiDAR, 360 spherical camera, inertial sensor를 통해 indoor mapping
- Global target generation
- 3D pointcloud를 object와 structure로 구분 (PointNet algorithm 이용)
- 각 포인트들이 각 카메라의 위치에서 보이는 point인지, 보이지 않는 포인트인지에 대한 정보를 미리 계산한다. 이를 위해서 HPR(Hidden Point Removal) algorithm을 이용
- Global Guidline Generation
- 3D pointcloud에서 object point를 제거하면 hole이 생긴다
- model-driven mesh generation method를 이용해서 3차원 mesh를 만든다.(hole이 제거되고 3차원 mesh생성)
- 3차원 mesh를 카메라에 projection
- 카메라에 projection 이미지에서 보이는 edge를 뽑고 이를 global guideline이라고 하며, 이것은 뒤에서 image inpainting에서 edge를 명확하게 하기 위해 사용
- Image Segmenation
- 이미지에서 object를 추정 (Deeplab V3 이용)
- Feature Propagation and Image Inpainting
- 이미지에서 object에 해당하는 pixel을 제거하고, guideline-based algorithm을 이용해서 image impainting (앞에서 계산한 이미지에서의 global guidline 이용)
- Youtube: https://youtu.be/XiWSAuXrSlc
A Robust Laser-Inertial Odometry and Mapping Method for Large-Scale Highway Environments
- Laser-inertial odometry and mapping method
- real-time, low drift, robust pose estimation in highway environment
- Scan pre-processing Module
- IMU data를 이용하여 LiDAR data의 motion distortion을 보정
- LiDAR의 motion distortion 보정은 LiDAR가 회전을 하며 데이터를 획득하기 때문에 데이터를 획득하는 과정에서 발생하는 움직임을 보정해 주는 것
- Dynamic Object Detection
- 2D X-Y coordinate으로 projection하여 input으로 사용
- CNN을 이용하여 moving object 검출하고, background cloud 만을 이용하여 pose estimation과 mapping을 수행
- Laser-Inertial Odometry Module
- ESKF(Error State Kalman Filter) 사용
- motion prediction: IMU 사용
- Measurement Update: LiDAR pointcloud 사용(multi-threaded NDT method 이용)
- Laser Mapping Module
- Mapping module은 LOAM과 유사하지만 feature기반이 아닌 NDT(Normal Distribution Transform) 방법으로 frame-to-model matching을 수행
- Youtube: https://youtu.be/AQJ9wFK8jwQ
- LiDAR odometry에 semantic 정보를 추가해서 accuracy를 높이는 방법이 계속 연구되는 듯
Visual-Inertial Localization with Prior LiDAR Map Constraints
- Stereo visual inertial localization system
- MSCKF(Multi-state Constraint Kalman Filter) 기반의 visual inertial odometry (VIO)
- 3D Pointcloud map을 prior로 사용하여 correction
- Tightly-coupled state estimator for visual inertial localization
- Depth refinement를 한 후 NDT(Normal Distribution Transform)을 통해 pointcloud map과 registration (P2D NDT사용)
- Youtube: https://youtu.be/76fXMVhhX4E
Degeneracy-Aware Factors with Applications to Underwater SLAM
- Point-plane ICP의 경우 point 분포에 따라서 unconstraint되는 경우가 생김 (point 의 구조에 따라서 발생)
- 이런 문제를 해결하기 위해 degeneracy-aware ICP algirhtm 제안
- degeneracy-aware ICP에서 나온 결과를 이용하여 contraint된 파라미터만 이용하는 partially constrainted loop closure factor 추가
- Degeneracy-aware ICP
- Optimization problem에서 계산된 Eigen value를 이용하여 unconstrainte 된 parameter는 업데이트 하지 않음
- 즉 well conditioned direction 만 update를 함
- Uncontraint 여부는 eigen value를 이용하여 threshold 하여 판단하는데 이 논문에서는 maximum eigen value와 minimum eigen value의 비율을 threshold value로 사용
Visual-Inertial Odometry with Point and Line Features
- Line과 point를 사용한 Tigltly-coupled monocular VINS(visual-inertial navigation system)
- 3D line triangulation algorithm 기반의 sliding window 방법을 제안
- triangulatation 이 실패하는 3가지의 degenerate camera motion을 보임
- MSCKF(Multi-state Constraint Kalman Filter) 기반 알고리즘
LIC-Fusion: LiDAR-Inertial-Camera Odometry
- LiDAR + Camera + Inertial 센서 fusion
- 위의
Visual-Inertial Odometry with Point and Line Features
논문과 같은 연구실 논문, 내용이랑 용어가 비슷함 - MSCKF framework 알고리즘
- IMU measurement, sparse visual features, two different LiDAR feature 사용
- IMU: Motion prediction에 사용
- LiDAR: Feature 기반으로 relative tracking (LOAM과 마찬가지로 edge, plane feature사용)
- Camera: FAST feature, KLT optical flow 사용하며, feature reprojection error사용
- EKF update할 때 computation을 줄이기 위해 Givens rotation을 이용한 QR decomposition 이용
- IMU랑 camera를 같이 썼으니 Loam보다는 당연히 좋아야 될거 같은데 결과에서 LOAM이 한번 튀기 전까지 LOAM이 좀 더 좋아 보임
- Youtube: https://youtu.be/5UP_PerEJ-E
Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping
- LiDAR + Inertial + stereo! 모든 센서 다 써버리겠다는 논문
- 기본 tightly-coupled stereo VIO (Visual Inertial odometry) + LiDAR Mapping + LiDAR enhanced visual loop closing
- Image에서는 ORB feature의 KLT tracker 사용
- Stereo + inertial 센서로 기본 odometry 추정
- LiDAR mapping 파트에서는 IMU rate의 VIO motion을 이용해서 motion distortion 보정 후 이전에 누적된 mapping과 매칭을 통해 pose update
- LiDAR feature는 LOAM과 마찬가지로 plane, edge feature
- mapping과의 매칭할 때도 이전까지 누적된 plane, edge feature들과 현재 LiDAR pointcloud의 feature간의 매칭
- Loop closing은 image feature와 LiDAR 모두 사용
- Image 기반의 Bag of Word를 사용하여 loop detection
- LiDAR 기반의 ICP는 initial에 크게 영향을 받으므로 Initial pose를 계산하기 위해 image feature를 사용 (PNP problem)
- 계산된 initial pose 기반으로 ICP를 하여 최종 loop 계산
- Youtube: https://youtu.be/bmD3IMroeh4