본문 바로가기

SLAM

(5)
Visual SLAM 이론에서 실습까지 (Visual SLAM From Theory to Practice) 연습문제 풀이, 3장 3D 강체 변환 1. 회전 행렬이 직교 행렬인지 증명하라. n차원이라 가정하면, n차원 좌표계에서 n개의 서로 다른 axis를 표현하는 벡터들의 집합 $V$를 다음과 같이 표현할 수 있다. $$V = \{v_1, v_2, ... , v_n\}$$ $$ v_1^T = [1, 0, 0, ...], v_2^T = [0, 1, 0, ...], ... , v_n^T = [0, 0, ... , 1]$$ 위 집합은 axis들의 집합이기 때문에 자명하게 직교집합이다. (직교집합은 모든 원소인 벡터들이 서로 수직 관계인 집합을 말한다) $V$의 원소벡터들을 임의의 n차원 회전행렬 $R_n$으로 회전시키면 다음과 같은 벡터 집합을 얻을 수있다. $$V_{rot} = \{R_nv_1, R_nv_2, ... , R_nv_n\}$$ 회전 행렬..
포인트의 3d 변환에서의 자코비안을 활용한 3d 포즈 최적화 (3d points ICP optimization) 이전 포스팅에서 자코비안 행렬을 구하는 방법을 정리하였고, 이번 포스팅에서는 구해진 자코비안을 활용해서 포즈(state)를 최적화 하는 내용을 정리하고자 한다. 일단, https://lss0815.tistory.com/10 에서 우리는 자코비안 행렬을 구하였기 때문에 state $x$와 3d 포인트들로 자코비안 행렬 $H$를 계산할 수 있다고 가정한다. 자코비안 행렬은 $x$에서의 도함수 행렬이고, state $x$에서 선형적으로 근사하여서 에러를 0으로 만드는 dx를 찾으면 실제 에러를 0에 가깝게 만들 더 나은 state를 계산할 수 있다. $$e(x + dx) \approx e(x) + H(x)dx$$ $$e(x) + H(x)dx = 0 $$ $$H(x)dx = -e(x)$$ H(x)는 3$n \t..
포인트의 3d 변환에서의 자코비안 행렬(Jacobian matrix while transforming 3d points) 포인트들의 3d 변환의 자코비안 행렬을 계산했던 것을 정리해보려 한다. 최종적으로 목표하는 것은, n개의 3d 포인트 쌍들($p_1$, $p'_1$, $p_2$, $p'_2$, ... , $p_n$, $p'_n$,)과 state $x$($r$, $t$)에 대한 자코비안 행렬을 구하고자 하는 것이다. 먼저 notation들을 정리하면, 3d 포인트 $p = \begin{pmatrix}p_1 \\ p_2 \\ p_2\end{pmatrix}$이고, 현재 State $x = \begin{pmatrix}r \\ t\end{pmatrix}$이다. 위에서 $r$은 : 3x1 rotation vector, $t$은 : 3x1 translation vector을 의미한다. 에러 벡터는 다음과 같다. $$e(x) = \b..
Wildcat Imitation - paper review (1) https://arxiv.org/pdf/2205.12595.pdf DARPA에서 공동 1등을 했다는 논문을 한 번 구현해보려고 한다. 긴 여정일 것 같은데, 한 번 도전해보겠다. Wildcat odometry - Surfels 라이다 포인트의 경우, 업데이트된 포즈 + IMU integration으로 월드로 가져다 놓고 복셀화 시킨 후에 시간이 가까운 포인트들로 surfel을 만든다. surfel을 만들고 ellipsoid(3d gaussian space, made by covariance of points)를 만든다. 여기서 ellipsoid의 eigen value를 통해 얼마나 평면을 표현하고 있는지를 측정하여 평면에 가까운 ellipsoid만 남긴다. 이 때, 계산에는 eigenvalue들로 계산한..
포즈와 좌표계 변환행렬 헷갈렸던 것 3차원 좌표계 간의 변환과 3D 포즈를 4x4 변환 행렬로 표현하는 것에서 회전 행렬과 평행 이동 벡터의 좌표계를 헷갈렸던 내용을 남기려고 한다. 일단, 프레임1($f_{1}$)에서의 포인트(혹은 포즈)를 프레임2($f_{2}$) 4x4 변환 행렬로 표현하면 다음과 같다. $$ ^{f_{2}}T_{f_{1}} = \begin{pmatrix} ^{f_{2}}R_{f_{1}} & ^{f_{2}}t \\ 0^{T} & 1 \end{pmatrix} $$ $$ ^{f_{2}}p = ^{f_{2}}T_{f_{1}}\times^{f_{1}}p $$ 이제 위 행렬을 보고, "$f_{1}$에서 $f_{2}$로 좌표계를 변환해주는 행렬이다."라고 읽으면 되고, 이를 이용해서 포즈차를 표현하려다가 헷갈리기 시작했었다. 결론..