본문 바로가기

전체 글

[SLAM] 에러와 자코비안 정리(Errors and Jacobians) 정리 Part 1 1. Introduction본 포스트에서는 SLAM에서 사용하는 다양한 에러에 대한 정의 및 이를 최적화하기 위해 사용하는 자코비안에 대해 설명한다. 본 포스트에서 다루는 에러는 다음과 같다.Reprojection error \begin{equation}   \begin{aligned}   \mathbf{e} & = \mathbf{p} - \hat{\mathbf{p}} \in \mathbb{R}^{2}  \end{aligned}  \end{equation}Photometric error \begin{equation} \begin{aligned} \mathbf{e} & =  \mathbf{I}_{1}(\mathbf{p}_{1})-\mathbf{I}_{2}(\mathbf{p}_{2}) \in \mathbb{.. 더보기
[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.. 더보기
Quaternion kinematics for the error-state Kalman filter 내용 정리 Part 3 5.Error-state kinematics for IMU-driven systems5.1 Motivation본 섹션에서는 에러 상태 방정식(error-state equations)을 통해 노이즈와 bias가 포험된 IMU의 가속도와 각속도를 표현하는 방법에 대해 설명한다. 이 때, 회전 표기법은 Hamilton 쿼터니언을 사용하였다. 일반적으로 가속도와 각속도는 IMU 센서를 통해 입력받으며 이를 누적하여 포즈를 추적하는 방법을 dead-reckoning이라고 한다. Dead-reckoning은 시간에 따라 에러가 누적되어 드리프트되는 현상이 발생하므로 이러한 문제를 해결하기 위해 일반적으로 카메라나 GPS 센서 정보를 퓨전하여 사용한다.Error-state Kalman Filter(ESKF)는 앞서 .. 더보기
[SLAM] 파티클 필터(Particle Filter) 개념 정리 본 포스트는 Claus Brenner의 SLAM 강의 중 Chapter E: Particle Filter 부분을 정리한 자료이다. Claus Brenner의 SLAM 강의는 [1]에서 볼 수 있다. Particle filter를 이해하는데 필요한 기반 지식은 확률 이론(Probability Theory) 개념 정리 포스팅을 참조하면 된다. Kalman filter (KF, EKF, ESKF, IEKF)에 대해 알고 싶으면 칼만 필터(Kalman Filter) 개념 정리 포스트를 참조하면 된다. Introduction 본 포스트에서는 Robot Localization에 사용하는 파티클 필터에 대한 내용을 다룬다. 따라서 맵의 크기와 Landmark의 좌표는 모두 알고 있다고 가정한다. 또한 Landmark.. 더보기
Quaternion kinematics for the error-state Kalman filter 내용 정리 Part 2 3 Quaternion conventions. My choice3.1 Quaternion flavors쿼터니언은 다양한 표기법이 존재한다. 일반적으로 다음과 같이 4개의 선택지가 존재한다.실수부와 허수부를 어디에 둘 것인가에 따라\begin{equation} \mathbf{q} = \begin{bmatrix} q_{w} \\ \mathbf{q}_{v} \end{bmatrix} \quad \text{vs.} \quad \mathbf{q} = \begin{bmatrix} \mathbf{q}_{v} \\ q_{w} \end{bmatrix} \end{equation}쿼터니언 대수학을 어떻게 정의하느냐에 따라\begin{equation} ij = -ji = k \quad \text{vs.} \quad ji = -.. 더보기
Quaternion kinematics for the error-state Kalman filter 내용 정리 Part 1 본 포스트는 Joan Solà의 "Quaternion kinematics for the error-state Kalam filter (2017)" 페이퍼를 정리한 포스트이다. 이는 Quaternion과 SO(3) 군, Error-state Kalman filter 모델링에 대해 자세히 나와있어서 SLAM을 공부할 때 이론적인 부분을 참고하면 좋은 페이퍼이다.1 Quaternion Definition and properties1.1 Definition of quaternion두 개의 복소수 $A = a+bi, C=c+di$가 주어졌을 때 이를 $Q=A+Cj$와 같이 구성하고 $k \triangleq ij$로 정의하면 $Q$는 쿼터니언 공간 $\mathbb{H}$ 안에 존재하는 수가 된다.\begin{equ.. 더보기
[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 일반적으로 현실에 존재하는 물체를 이미지 평면 상에 프로젝션(촬영)하는 경우 직선의 성질만 보존될 뿐 평행한 성.. 더보기
칼만 필터(Kalman Filter) 개념 정리 (+ KF, EKF, ESKF, IEKF, IESKF) 본 포스트는 필자가 Kalman filter 공부하면서 배운 내용을 정리한 포스트이다.Kalman filter를 이해하는데 필요한 기반 지식은 확률 이론(Probability Theory) 개념 정리 포스팅을 참조하면 된다.Particle filter에 대해 알고 싶으면 파티클 필터(Particle Filter) 개념 정리 포스팅을 참조하면 된다.Recursive bayes filter상태 추정 문제란 일반적으로 주어진 제어입력과 관측값이 있을 때 이를 바탕으로 현재 상태(e.g., 위치, 속도, 회전 등)를 추정하는 것을 의미한다. 제어입력과 관측값이 주어졌을 때 현재 상태 $\mathbf{x}_{t}$의 믿을만한 정도, 또는 $\mathbf{x}_{t}$에 대한 Belief $\text{bel}(\m.. 더보기
선형대수학 (Linear Algebra) 개념 정리 Part 2 본 포스트에서는 주로 행렬대수학과 관련된 내용을 다룬다.선형대수학 (Linear Algebra) 개념 정리 Part 1은 일반적인 선형대수학의 내용을 다룬다.확률 이론에 대한 내용을 알고싶으면 확률 이론(Probability Theory) 개념 정리 포스트를 참조하면 된다. Chapter 6 - Matrix algebraIdentity matrix항등행렬(Identity Matrix)는 대각성분이 전부 1이고 나머지 성분이 전부 0인 $n\times n$ 크기의 정방행렬을 의미한다. 일반적으로 $\mathbf{I} \in \mathbb{R}^{n\times n}$ 으로 표현한다.\begin{equation}\begin{aligned}\mathbf{I} = \begin{bmatrix} 1 & 0 & 0 \.. 더보기
[SLAM] Optical Flow와 Direct Method 개념 및 코드 리뷰 본 포스트에서는 optical flow와 direct method의 개념을 리뷰한다. direct method 관련 내용은 [4]에서 대부분의 내용을 참고했다. optical flow는 시간 경과에 따른 이미지 간 픽셀 이동을 계산하는 알고리즘을 말한다. 이와 달리 direct method는 시간 경과에 따른 3차원 공간 상 카메라의 포즈를 계산하는 알고리즘이다. optical flow, direct method 모두 이미지의 밝기 변화를 기반으로 알고리즘을 계산하기 때문에 다음과 같은 key assumption들이 존재한다 1. 밝기 항상성 (brightness consistency) : 어떤 물체의 픽셀은 프레임이 바뀌어도 그 값이 변하지 않아야 한다. gray 영상의 경우 추적하고 있는 물체의 픽셀.. 더보기
[SLAM] Bundle Adjustment 개념 리뷰 본 포스트는 공부 목적으로 작성하였습니다. 혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다. 본 포스트에서는 feature-based VO를 기반으로 reprojection 에러를 최소화하여 bundle adjustment(BA)를 수행하는 과정에 대해 설명한다. Bundle adjustment 두 개의 이미지 사이의 매칭점 쌍들이 주어진 경우 8-point 알고리즘을 사용하여 fundamental matrix $\mathbf{F}$를 추정할 수 있다. 만약 캘리브레이션된 카메라의 경우 $\mathbf{F}$를 통해 essential matrix $\mathbf{E}$를 구할 수 있다. \begin{equation} \begin{aligned} \.. 더보기