본문 바로가기

Engineering

[SLAM] FAST-LIO2 논문 리뷰 (+ IKF, ikd-tree) 1. Introduction본 포스트에서는 FAST-LIO2 논문을 리뷰한다. FAST-LIO2는 HKU MaRS 연구실에서 22년도에 발표한 LIO 알고리즘으로 21년도에 발표한 FAST-LIO의 저널 버전이라고 할 수 있다. FAST-LIO2의 가장 큰 특징으로는 ikd-tree를 개발 및 적용하여 kNN 속도를 극적으로 향상시켰으며(kd-tree 대비 4% 시간 소요), 이에 따라 LOAM feature-based에서 Direct point registration 방식으로 LiDAR Odometry 방식이 변경된 것이다.  1.1. FAST-LIOFAST-LIO의 main contribution은 다음과 같다. 1. Iterated Kalman filter(IKF)를 사용하여 LiDAR와 IMU 센.. 더보기
[SLAM] ROVIO 논문 및 코드 리뷰 (+ IEKF) 1. Introduction to ROVIO ROVIO는 RObust Visual Inertial Odometry의 약자로 ETHZ의 ASL 연구실의 Bloesch et al.이 제안한 VIO 알고리즘이다. IROS 학회에 2015년에 처음 발표되었으며 이후 IJRR에 2017년 자세한 설명을 포함한 저널이 게재되었다. ROVIO는 MSCKF와 더불어 대표적인 필터링 기반 Tightly-coupled VIO이다. MSCKF와 가장 큰 차이점은 밝기 오차(photometric error)를 IEKF의 Update 과정에 사용한다는 점이다. 이를 통해 실시간 성능의 가벼우면서도 모션블러 및 텍스쳐가 적은 환경에 강인한 알고리즘을 제안하였다. 1.1. Loosely-coupled VIO vs Tightly-c.. 더보기
[SLAM] VINS-mono 논문 리뷰 (+ IMU preintegration) 본 포스팅은 Yibin Wu의 "Formula Derivation and Analysis of the VINS-Mono" 페이퍼를 주로 참고하여 작성하였다.1. Introduction카메라와 IMU 좌표계를 시각화하면 다음과 같다. 두 센서는 단일 보드에 고정되어 있으며 보드를 캘리브레이션하면 두 센서 사이의 상대 포즈인 외부 파라미터(extrinsic paramter) $\mathbf{T}^{b}_{C}$를 구할 수 있다. NOMENCLATURE행렬은 굵은(bold) 대문자로 표기한다 e.g., $\mathbf{R}$벡터는 굵은 소문자로 표기한다 e.g., $\mathbf{a}$스칼라는 일반 소문자로 표기한다 e.g., a벡터 변환과 관련된 좌표계는 위첨자$^{a}$와 아래첨자$_{a}$로 표기한다 e.. 더보기
[MVG] Stereo Camera Calibration 예제코드 및 설명 (C++) 해당 내용은 공부 목적으로 작성된 글입니다. 잘못된 부분이나 수정할 부분이 있다면 댓글이나 메일로 알려주시면 확인 후 수정하도록 하겠습니다. 본 포스트는 MVG part2 의 내용 중 "Image Rectification" 부분을 활용하여 두 이미지가 있을 때 이를 Stereo Camera Calibration(= Stereo Rectification) 수행하는 내용에 대해 리뷰한다. 또한 실제 스테레오 카메라를 캘리브레이션하는 방법에 대해서도 설명한다. 예제 코드는 우분투 18.04 환경에서 테스트하였으며 cmake 3.16, opencv 4.2, eigen 3.3.7 버전을 사용하여 정상적으로 작동하는 것을 확인하였다. 예제 코드는 링크를 클릭하여 다운로드하면 된다. Stereo Camera Cali.. 더보기
[MVG] Scene Plane-based Homography 예제코드 및 설명 (C++) 해당 내용은 공부 목적으로 작성된 글입니다. 잘못된 부분이나 수정할 부분이 있다면 댓글이나 메일로 알려주시면 확인 후 수정하도록 하겠습니다. 본 포스트는 MVG part2 에서 설명한 "Computing given the homography induced by a plane" 부분을 활용하여 homography와 fundamental matrix를 구하는 내용에 대해 리뷰한다. 예제 코드는 우분투 18.04 환경에서 테스트하였으며 cmake 3.16, opencv 4.2, eigen 3.3.7 버전을 사용하여 정상적으로 작동하는 것을 확인하였다. 예제 코드는 링크를 클릭하여 다운로드하면 된다. Scene Plane-based Homography Input Image Setup 실제 월드 상에서 평면이 존.. 더보기
[MVG] Vanishing Point-based Metric Rectification 예제코드 및 설명 (C++) 해당 내용은 공부 목적으로 작성된 글입니다. 잘못된 부분이나 수정할 부분이 있다면 댓글이나 메일로 알려주시면 확인 후 수정하도록 하겠습니다. 본 포스트는 MVG part1 에서 설명한 "Vanishing points and vanishing lines" 부분을 활용하여 metric rectification을 수행한 해당 github을 C++ 코드로 구현한 내용을 리뷰한다. 예제 코드는 우분투 18.04 환경에서 테스트하였으며 cmake 3.16, opencv 4.2, eigen 3.3.7 버전을 사용하여 정상적으로 작동하는 것을 확인하였다. 예제 코드는 링크를 클릭하여 다운로드하면 된다. Vanishing Point-based Metric Rectification Input Image Setup 실제 월.. 더보기
[MVG] Zhang's Calibration 예제코드 및 설명 (C++) 해당 내용은 공부 목적으로 작성된 글입니다. 잘못된 부분이나 수정할 부분이 있다면 댓글이나 메일로 알려주시면 확인 후 수정하도록 하겠습니다. 본 포스트는 MVG part1 에서 설명한 Zhang's method(ICCV 1999)[1] 부분을 C++ 코드로 구현한 내용을 리뷰한다. 예제 코드는 우분투 18.04 환경에서 테스트하였으며 cmake 3.16, opencv 4.2, eigen 3.3.7 버전을 사용하여 정상적으로 작동하는 것을 확인하였다. 예제 코드는 링크를 클릭하여 다운로드하면 된다. Zhang's Calibration Input Image Setup 20mm 간격으로 구성된 7x9 체커보드를 인쇄하여 평평한 보드에 붙인 후 다양한 각도에서 촬영한 5장의 사진을 준비한다. 간단한 예제 구현을.. 더보기
[MVG] Affine & Metric Rectification 예제코드 및 설명 (C++) 해당 내용은 공부 목적으로 작성된 글입니다. 잘못된 부분이나 수정할 부분이 있다면 댓글이나 메일로 알려주시면 확인 후 수정하도록 하겠습니다. 본 포스트는 MVG part1에서 설명한 "Recovery of affine and metric properties from images" 부분을 C++ 코드로 구현한 내용을 리뷰한다. 예제 코드는 우분투 18.04 환경에서 테스트하였으며 cmake 3.16, opencv 4.2, eigen 3.3.7 버전을 사용하여 정상적으로 작동하는 것을 확인하였다. 예제 코드는 링크를 클릭하여 다운로드하면 된다. Affine & Metric Recfitication 일반적으로 현실에 존재하는 물체를 이미지 평면 상에 프로젝션(촬영)하는 경우 직선의 성질만 보존될 뿐 평행한 성.. 더보기
[SLAM] g2o - Alternative Parameterizations 논문 섹션 리뷰 본 포스트는 공부 목적으로 작성하였습니다. 혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다. 해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 자세한 내용은 다음 링크를 통해 확인해주세요. https://www.facebook.com/groups/slamkr/permalink/894277280931917/ 본 포스트에서는 g2o 논문의 여러 섹션 중 "B. Alternative Parameterizations" 부분을 리뷰한다. 해당 부분은 A Tutorial on Graph-Based SLAM 논문에서 "C. Least Squares on a Manifold" 부분을 봐야 정확한 이해가 가능해서 해당 부분을 코드와 같이 리뷰한.. 더보기
[SLAM] g2o example 코드 리뷰 본 포스트는 공부 목적으로 작성하였습니다. 혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다. 해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 자세한 내용은 다음 링크를 통해 확인해주세요. https://www.facebook.com/groups/slamkr/permalink/943685952657716/ 본 포스트에서는 g2o example 폴더에 있는 예제 코드를 리뷰한다. 예제 코드를 통해 g2o 코드를 사용하여 최적화하는 방법을 익힐 수 있다. data_fitting/circle_fit 위와 같은 초록색 점들의 분포가 있을 때, 해당 데이터를 가장 잘 표현하는 원의 중점과 반지름을 구하시오. (정답: 회색 점선) This.. 더보기
[SLAM] Visual LiDAR Odometry and Mapping (V-LOAM) 논문 리뷰 본 포스트는 공부 목적으로 작성하였습니다. 혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다. 해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 자세한 내용은 다음 링크를 통해 확인해주세요. https://www.facebook.com/groups/slamkr/permalink/862881467404832/ 본 포스트는 DEMO와 LOAM의 저자가 ICRA 2015에 게재한 논문인 "Visual-Lidar Odometry and Mapping: Low-Drift, Robust, and Fast" (V-LOAM) 논문을 리뷰한 포스팅이다. 해당 논문은 사실 상 DEMO + LOAM = V-LOAM과 같이 두 알고리즘을 퓨전한 논문이.. 더보기
[SLAM] Depth Enhanced Monocular Odometry (DEMO) 논문 리뷰 본 포스트는 공부 목적으로 작성하였습니다. 혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다. 해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 자세한 내용은 다음 링크를 통해 확인해주세요. https://www.facebook.com/groups/slamkr/permalink/858942477798731/ 본 논문은 LOAM의 저자가 작성한 visual odometry 관련 논문이고 IROS 2014에 게재되었다. 해당 논문에서 설명하는 DEMO는 추후 LOAM과 결합하여 V-LOAM이 된다. 최근 Image + Depth가 있는 상태에서 visual odometry를 계산하는 방법들이 많이 연구되고 있다. 하지만 depth가 .. 더보기
[SLAM] Direct Sparse Odometry (DSO) 논문 및 코드 리뷰 (2) 4. Keyframes4.1. Inverse Depth UpdateTo be added4.2. Immature Point ActivationTo be added4.3. Sliding Window Optimization4.3.1. Error Function Formulation특정 프레임이 키프레임으로 결정되면 sliding window 내부의 키프레임들과 새로운 키프레임 사이에 에러함수를 업데이트해야 한다. 이 때, 키프레임 뿐만 아니라 이와 연결되어 있는 맵 상의 포인트들까지 같이 최적화하는 Local Bundle Adjustment (LBA)를 수행한다. 주목할 점은 하나의 맵포인트가 두 개의 키프레임(host, target)과 연결되어 최적화된다는 점이다. 여기서 host 키프레임은 해당 맵포인트를.. 더보기
[SLAM] Direct Sparse Odometry (DSO) 논문 및 코드 리뷰 (1) 본 포스트에서는 direct method 기반의 VO 알고리즘으로 유명한 DSO 논문을 리뷰한다. DSO 코드를 분석하면서 논문에서는 생략된 디테일한 부분들이 굉장히 많다는 것을 알게되었고 이미 잘 정리된 다른 분들의 자료를 참고하여 수식 유도부터 코드 리뷰까지 포함하는 정리본을 작성하게 되었다. 1. Initialization1.1 Calibrationdirect method는 밝기오차를 최적화하여 카메라의 포즈를 추정하기 때문에 이미지의 밝기 차이에 민감하다. SLAM에서 주로 사용하는 머신비전 카메라는 일반적으로 이미지의 밝기 변화에 따라 노출시간을 자동으로 조절하므로(auto exposure) 노출시간에 따른 밝기 변화가 심한 경우 direct method는 정상적으로 작동하지 않을 수 있다. 아.. 더보기
[SLAM] Lidar Odometry And Mapping (LOAM) 논문 리뷰 본 포스트는 공부 목적으로 작성하였습니다. 혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다. 해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 자세한 내용은 다음 링크를 통해 확인해주세요. https://www.facebook.com/groups/slamkr/permalink/809268749432771/ 본 논문은 6자유도 ($x,y,z,\theta_x, \theta_y, \theta_z$) 공간에서 2-axis LiDAR 센서가 생성하는 데이터로 Odometry와 Mapping을 실시간으로 계산하는 SLAM 알고리즘을 제안하였다. 기존의 방법들은 주로 offline에서 loop closure를 활용해 drift를 최소화한 3.. 더보기