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 정확도 향상
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 계산
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 방법을 사용함
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 이용)
노트북에 윈도우와 ubuntu를 같이 사용하다보면 윈도우는 배터리 관리가 잘 되는 반면, Ubuntu는 배터리 관리와 관련된 옵션이 별로 없음을 알 수 있다. 이러한 문제를 쉽게 해결할 수 있는 방법이 TLP라는 패키지를 사용하는 것이다.
TLP는 한번 설치해 두면 알아서 전원을 관리하며, 재부팅 시에도 자동으로 적용되기 때문에 한번 설치해두고 잊어버리면 됩니다.
실제 TLP가 하는 역할은 다음과 같다고 합니다 (참고 포스팅 및 공식 홈페이지 참고)
전원 공급원에 따른 설정
“터보 부스트”/ “터보 코어”를 포함한 프로세서 속도 조절
멀티 코어/하이퍼 스레딩을 위한 전원 인식 프로세서 스케쥴러
하드 디스크 고급 전원 관리 레벨, 수준과 스핀다운 동작시간
SATA 적극적 연결 관리 설정
PCI express 활성 상태 전원 관리 - 리눅스 커널 2.6.35버전이나 그이상
라데온 KMS 전원관리
라데온 동적 전원 관리
WIFI 전원 절약 모드
오디오 전원 절약 모드
추가기능
I/O 스케쥴러
블랙리스트 기능을 포함한 USB 자동 중지 기능
시스템 시작이나 종료 시 메인보드 통합 wifi, 블루투스, WWAN장치 활성화/비활성화
Wake On Lan 기능 끄기
인텔 프로세서 전압 낮추기
설치방법
1. 저장소 추가
sudo add-apt-repository ppa:linrunner/tlp
2. apt update
sudo apt-get update
3. tlp 설치
sudo apt-get install tlp tlp-rdw
4. 싱크패드 사용자만! (싱크패드를 사용하는 경우 배터리 성능 효과를 위해 추가 설치)
sudo apt-get install tp-smapi-dkms acpi-call-tools
5. TLP 시작
sudo tlp start
한번 시작해 두면 OS를 재시작 해도 자동으로 적용됩니다.
추가 디테일 설정
일반적으로 잘 모르는 경우에는 기본 설정대로 사용하는걸 추천하지만, 혹시라도 개인적으로 전압이라던지 기타 설정을 변경하고 싶은 경우에는 다음의 파일을 수정하면 된다.
가장 안정적으로 odometry를 추정하는 것을 볼 수 있다. 하지만 사용되는 데이터가 10hz의 이미지이라 속도가 빠른경우 약간씩 tracking 실패를 보이기도 하며, 회전이 빠른경우 tracking에 실패한다. 일반적으로 moving object는 tracking과정에서 어느정도 filtering은 되는것으로 보이지만, 가끔씩 버스와 같은 큰 물체가 있는 경우 버스를 tracking하게 되면 모션이 이상하게 추정된다.
VINS-Fusion 알고리즘에서 IMU를 사용하지 않고 stereo module만 이용해서 알고리즘을 수행했다. ORB SLAM보다 불안정한 모습을 보이며 중간중간 pose가 튀는 에러가 발생하는 것을 알 수 있다. optimization 수행하는 과정에서 튀는 것으로 보인다. 어느정도 되는 것 처럼 보이다가 결국 발산한다. (발산하는 문제는 IMU가 재대로 들어가면 해결될 수도?)
IMU를 사용했을 경우 IMU data의 calibration 문제인지 발산하는 문제가 있어서 패스!