Introduction 이번 포스트에서는 3차원 변환을 나타내는 Lie Group SE(3)에서 Lie Algebra se(3)를 유도해 보도록 하겠습니다. 또한, 둘 간의 변환 관계를 지수, 로그 변환을 통해 정리하도록 하겠습니다. 많은 수학적 지식과 증명이 필요하나 수학자가 아닌 엔지니어로서 필요한 정도만 설명하는 게 목표이니 참고 바랍니다. Lie Algebra se(3) 이전 포스트에서 회전 변환을 나타내는 SE(3) 군이 Lie 군에 속함을 살펴보았습니다. SE(3) 군이 항등원과 역원이 존재하며 곱셈에 닫혀있음과 동시에 결합 법칙이 성립함을 알아봤습니다. $$SE(3)=\left\{ \mathbf{T}=\begin{bmatrix} \mathbf{R} & \mathbf{t} \\ 0^T & 1 ..
Introduction 이번 포스트에서는 회전 변환을 나타내는 Lie Group SO(3)에서 Lie Algebra so(3)를 유도해 보도록 하겠습니다. 또한, 둘 간의 변환 관계를 지수, 로그 변환을 통해 정리하도록 하겠습니다. 많은 수학적 지식과 증명이 필요하나 수학자가 아닌 엔지니어로서 필요한 정도만 설명하는 게 목표이니 참고 바랍니다. Lie Algebra so(3) 이전 포스트에서 회전 변환을 나타내는 SO(3) 군이 Lie 군에 속함을 살펴보았습니다. SO(3) 군이 항등원과 역원이 존재하며 곱셈에 닫혀있음과 동시에 결합 법칙이 성립함을 알아봤는데요. 여기에 추가적으로 SO(3) 자체의 제약(constraint)으로 교환 법칙이 성립되지 않고, $det(R)=1$임을 기억해 주시기 바랍니다...
Introduction 앞선 포스트들에서 회전(rotation)과 이동(translation)을 포함한 3차원 변환(3D transformation)을 다루었습니다. 그러면서 SO(3)와 SE(3)라는 낯선 이름들을 중간에 언급했었는데요. 이번 시리즈에서는 이들이 속한 군(Lie group)의 개념과 각각의 정의들, 그리고 실전에서 사용하기 위한 테크닉(Lie algebra)을 다루겠습니다. Group 수학적으로 군(group)은 집합(A)과 두 원소 간의 이항 연산(binary operation, *)으로 이루어진 대수적 구조를 의미합니다. 표현으로는 G(A, *)로 나타낼 수 있습니다. 군이 되기 위해서는 몇 가지 조건을 만족해야 하는데요. 아래 그 조건들을 나열해 봤습니다. A. Closure (C..
Introduction앞선 게시물에서 핀홀(pinhole) 카메라 모델을 통해 3차원 좌표가 어떻게 픽셀 좌표로 변환되는지 알아봤습니다. 그러면 이제 문제없이 카메라의 포즈를 구할 수 있는 걸까요? 아쉽게도 그렇지 않습니다. 핸드폰이 아닌 로봇이나 자동차의 카메라에서 얻은 영상을 보면 실물과 많이 다름을 알 수 있습니다. 핸드폰의 경우도 광각으로 찍은 사진은 묘하게 실제 풍경과 비율이 다르다는 느낌을 받는 경우가 많습니다. 이는 우리가 영상을 찍을 때 렌즈(lens)를 사용하기 때문입니다. 앞서 설명한 투영 과정은 렌즈가 평면인 경우를 가정합니다. 그러나 더 넓은 FOV(field of view)를 얻기 위해서 곡률이 큰 렌즈를 사용하기 마련인데요. 위 사진은 그 예시로 어안렌즈(fisheye camer..
Introduction SLAM 카테고리에서는 이미지를 활용해 카메라의 포즈(pose)를 구하는 방법들에 대해 다뤘습니다. 하지만 막상 Epipolar geometry, PnP, ICP 등 여러 알고리즘을 이용해 포즈를 구해보면 부정확한 결과를 얻게 되는데요. 왜 그런 걸까요? 이미지는 기본적으로 렌즈(lens)를 활용해 구해집니다. 초점을 모으기 위해서, 혹은 더 넓은 FOV(Field Of View)를 확보하기 위해서 등 다양한 이유로 렌즈는 평면이 아니고 굴곡을 띄게 됩니다. 여기서부터 이상과 현실에는 괴리가 존재하는 거죠. 또한, 카메라마다 기본적으로 초점 거리, 배율 등이 다릅니다. 같은 영상을 찍음에도 카메라마다 다른 카메라 포즈를 생성한다면 이것들을 구하는 의미가 있을까요? 이번 시리즈에서는..
Introduction Ubuntu 서버를 이용하거나 SSH 접속을 통해 외부에서 작업을 할 경우 익숙한 GUI 환경이 아닌 CLI 환경에서 작업을 해야 합니다. 보통의 경우 문제가 없지만 dataset을 다운받거나 필요한 파일을 웹 서버에서 다운로드할 때 난감한 경우가 있습니다. 이 경우 Apache 웹 서버를 지원하는 사이트인 경우 아래와 같이 CLI에서도 파일을 다운받을 수 있습니다. Download via wget 위 이미지는 제가 다운 받으려는 dataset이 위치한 사이트입니다. 하단에 Apache/2.4.29 (Ubuntu) Server 로 시작하는 부분을 주목해야 합니다. 해당 사이트는 Apache Web server에 파일이 업로드된 상태입니다. 이런 사이트들의 데이터들은 wget을 사용..
Issue libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast Solution 결론적으로 그래픽 드라이버를 잡지 못해서 발생하는 문제입니다. 대부분의 사용자가 사용하는 Nvidia 그래픽 드라이버의 경우 설치 방법이 구글링을 통해 쉽게 찾을 수 있기에, 이 글에서는 내장 그래픽이나 AMD Radeon 계열의 그래픽 카드를 사용하는 경우에 대해 살펴보겠습니다. 바로 제 그래픽 카드가 RX570 입니다. Mesa는 오픈 소스로 구현된 그래픽 드라이버입니다. OpenGL, Vulkan 등 그래픽 API들을 쉽게 사용할 수 있도록 도와주는 역할을 하고 있죠. 특히 Ubuntu 환경에서 그래픽 드..
Introduction 앞서 Epipolar Geometry를 소개하며 2D-2D feature를 이용한 포즈 추정 방법을 알아보았습니다. 그러나 2D 이미지만을 가지고 포즈 추정을 하게 되면 필연적으로 오차가 생길 수밖에 없으며, 속도 또한 정확도 대비 느리다는 문제가 있습니다. 그렇기에 monocular 카메라를 사용해야만 하는 상황이 아니라면 RGB-D, stereo vision을 사용하거나 좀 돈이 많은 곳은 라이다(lidar)를 사용해 정교한 정보들을 추출합니다. 더 많은 정보가 있을 때 우리는 어떻게 포즈를 추정할 수 있을까요? 앞선 포스트에서 2D-2D, 3D-2D, 3D-3D feature가 있을 때 각각 어떠한 방법을 사용해야하는지 소개했는데요. 오늘은 3D point cloud와 2D ..