세 줄 요약: - ORB는 key point detector로 FAST, descriptor로 BRIEF를 각각 개선해 적용했다. - FAST에서 Rotation & Scale invariance, Multi-scale 개선을 통해 Robustness를 증가시켰다. - BRIEF의 경우 uncorrelated and high variant 한 pair selection을 통해 feature 품질을 향상했으며, 회전에 대한 보정을 주어 rotation invariance를 개선했다. Introduction 이전 게시물들을 통해 SLAM Frontend(Visual Odometry)가 무엇인지 다뤘습니다 (이전 게시물들은 Visual Odometry 태그 검색이나, [SLAM/VO] 제목 검색을 통해 보실 ..
Introduction 이전 게시물에서 SLAM Frontend(Visual Odometry) 중 대세인 Feature based VO 기법에 대해 소개하였습니다. 짧게 기억을 되살려보면, 우리는 이미지의 feature로서 corner를 선정했으며, 단순히 위치 정보로는 어려움이 있기 때문에 descriptor라는 녀석을 사용한다고 했습니다. 이번 시간에는 이를 모두 포함한 feature point의 개념을 소개하고, key point와 descriptor의 차이점을 알아보도록 하겠습니다. Feature Point Feature Point는 Key Point와 Descriptor로 이루어져 있습니다. 둘을 가장 쉽게 구분하는 방법은 key point는 단순히 feature의 위치 정보만을 담고 있고, d..
Introduction SLAM Framework을 다룬 앞선 게시물에서 SLAM은 크게 Frontend와 Backend로 나뉨을 설명했습니다. Frontend는 다른 말로 Visual Odometry라고도 하는데요. 오늘은 이 Visual Odometry(VO), 그중에서도 Feature based VO에 대해서 알아보도록 하겠습니다. Visual Odometry 우리의 친구 Wikipedia에서는 VO에 대해 아래와 같이 설명하고 있습니다. In robotics and computer vision, visual odometry is the process of determining the position and orientation of a robot by analyzing the associated ..
Issue 제 블로그는 아무래도 Coding/IT 관련 포스팅 위주로 블로그를 운영하다 보니, Code Block을 사용할 일이 많습니다. 보통 글을 작성한 후에 가독성이나 오탈자를 확인하기 위해 퇴고를 하는 편이지만, 제가 간과하고 있던 부분이 있었습니다. 그 부분 관련해 익명의 제보자께서 댓글을 남겨 주셨고, 이를 개선하는 과정을 이번 포스트에서 다루고자 합니다. 요약하자면 코드 색과 배경색이 같거나 거의 유사해 가독성이 심각하게 떨어진다는 내용입니다. 퇴고 중에는 느끼지 못했던 사실이라 찬찬히 살펴보았는데요. 문제는 제가 다크 모드를 너무 사랑했기 때문에 발생했습니다. 거의 모든 애플리케이션을 다크 모드만을 사용하다 보니 이상함을 느끼지 못하고 있었지만, hELLO 스킨은 라이트 모드와 다크 모드에..
Issue 현재 스터디원들과 함께 Ceres를 활용해 LDSO 최적화를 진행하고 있습니다. 그 일환으로 Gauss-Newton Method를 Ceres의 Residual Block으로 Refactoring 중 아래와 같은 에러가 발생했는데요. 빌드도 다 끝냈지만 링크 에러가 발생하고 말았는데요. 몇 가지 이해할 수 없는 부분이 있었습니다. Environment OS: macOS Ventura 13.3.1 Model: MacBook Pro 14 (2021, M1) Apple clang version 14.0.3 (clang-1403.0.22.14.1) Target: arm64-apple-darwin22.4.0 Error Log Undefined symbols for architecture arm64: "c..
한 줄 요약 겁나 복잡하고 어렵다 Introduction 지난 포스트에서는 DSO의 Photometric Energy Term, 즉 Residual을 구하는 이론적 접근을 다뤘습니다. 이번 포스트에서는 이론을 실전으로 옮겨보도록 하겠습니다. 과연 어떻게 코드에서는 구현되어 있을까요? 일단 어디에 구현되어 있는지부터 봅시다. 일단 해당 내용은 CoarseInitializer.cc의 calcResAndGS() 함수에 구현되어 있습니다. 이는 DSO 초기화를 담당하는 구현부인데요. 초기화 영역 말고 실행 중에도 Residual은 계속 호출이 될 것입니다. 이는 CoarseTracker.cc의 calcRes() 함수에 구현되어 있으나, 이번 포스팅에서는 초기화 부분만 우선 살펴보도록 하겠습니다. 변수 초기화 우..
세줄 요약 DSO/LDSO는 Photometric Energy Term을 Residual function으로 사용한다. 이는 두 프레임 $\textbf{I}_i, \textbf{I}_j$에서의 포인트 $\textbf{p}$에 대한 밝기 차이를 의미한다. 여기에 Huber norm과 Gradient에 대한 가중치를 주어 Robust 한 모델을 만들었다. Introduction Direct Approach를 사용하는 DSO/LDSO는 그에 걸맞게 Photometric Energy Term을 Residual Function으로 사용합니다. Model 생성 과정을 자세히 살펴보기 위해서는 LDSO보다는 DSO 논문을 추천합니다. 사실 LDSO Residual Function은 DSO와 같으며, 해당 내용에 대한..
이 포스트는 MacOS에서 LDSO를 실행하는 방법을 다루고 있습니다. 그러나 DSO 역시 실행 과정이 크게 다르지 않으니 같은 순서로 따라 하셔도 성공적으로 빌드할 수 있을 겁니다. Introduction SLAM, 특히 VSLAM을 공부하면서 다양한 Open source를 빌드하고 실행해 봤습니다. 그러다 1년 전에 DSO를 접하고, 근래에 LDSO를 접하게 되어 Deep dive를 하고 있습니다. Desktop에서는 Ubuntu 20.04 기반 환경에서 작업을 진행 중인데요. Ubuntu 기반의 환경에서는 작업을 하는데 어떠한 에러도 겪지 않았습니다. 그러나 M1 기반의 MacBook에서 LDSO를 빌드하려니 첩첩산중으로 문제가 발생했습니다. 이번 포스트에서는 제가 겪은 에러들에 대한 trouble..