DEEP.I - Lab

오프라인 공간의 지능화를 꿈꾸는 딥아이 연구실입니다.

Matlab

[Matlab] 변환 행렬 (Transformation matrix)을 이용한 LIDAR 라이다 PCD 데이터 전처리 #3

Jongwon Kim 2021. 1. 25. 11:34
반응형

Concept

이번 포스팅의 주제는 라이다 데이터 전처리 기법 #3, 변환 행렬 (Transformation matrix)를 이용한 라이다 PCD 변환입니다.

 

지상에서 수집되는 라이다는 수집되는 장치 또는 위치에 고정된 형태로 시스템이 구축된 상태에서 가동됩니다. 설치과정에서 축을 고정하게 되어 별도의 전처리가 필요하지 않지만, 예외인 경우가 있습니다. 대표적으로 드론 탑재 시스템이 있습니다.

 

그림 1. 드론에 탑재된 라이다 센서 [출처: https://altigator.com/]

 

그림 2. 수집된 지상 3D 지도 정보 [출처: https://altigator.com/]

 

3차원 축을 기준으로 움직이는 드론에 탑재된 라이다의 기준 축은 필연적으로 잡음이 섞이게 됩니다. 예측 필터로 그려지는 SLAM 모델링에서는 어느정도 잡음이 억제되지만, 순간순간의 PCD 프레임은 축이 기울거나 흔들릴 수 있습니다.

 

이럴때 간단하게 변환 행렬 (Transformation matrix)을 통해 축 변환을 PCD에도 적용할 수 있습니다.

 

POST

1.라이다 데이터 전처리 [KITTI DATASET 활용하기]

2. 각도에 따라 라이다 데이터 분할하기 [Segmentation]

3. 변환 행렬을 이용하여 라이다 데이터 축 변환하기 [Transformation]
4. 복셀화를 이용한 LIDAR 라이다 PCD 데이터 압축 [Voxcelization]

 

 

Algorithm (Transformation Matrix)

 

그림 3. 변환행렬 적용 예시

 

축 변환을 위해 선형대수학 변환 행렬의 개념이 도입됩니다. 3차원 공간의 좌표축의 중심(원점)을 기준으로 θ 만큼 회전시키는 행렬은 식 1과 같습니다. 각도와 변환을 원하는 축에 따라 PCD 데이터에 행렬 곱셈을 해주면 반시계 방향으로 회전됩니다.

 

  • X축 회전 $R_{X}(\theta) =$ \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & \sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix}
  • Y축 회전 $R_{Y}(\theta) =$ \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}
  • Z축 회전 $R_{Z}(\theta) =$ \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}

SourceCode

1.Source Code 및 데이터 다운로드

github.com/DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab

 

DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab

Pre-processing Technique of LIDAR PCD Data Using KITTI-Dataset - DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab

github.com

git clone github.com/DEEPI-LAB/LiDAR-Point-Cloud-Preprocessing-matlab

2. 변환 행렬 함수 만들기

function output = transformation(input, angle)

x = input;
% 각도 라디안 변경
z  =deg2rad(angle);

% Transformation 행렬
u_1 = [cos(z) ; 0; -sin(z)];
u_2 = [0 ; 1 ;0];
u_3 = [sin(z) ; 0 ;  cos(z)];
P = [u_1 , u_2 , u_3];

x_p = x(:,1);
y_p = x(:,2);
z_p = x(:,3);

% 행렬 연산
new_x = (P*[x_p' ; y_p' ; z_p'])';
output= new_x;

end

 

저는 Y축을 기준으로 회전하기 위해 Y축 변환 행렬을 적용하였습니다. 다각도 회전을 위해서는 순차적으로 변환 행렬 곱셈을 연산하면 됩니다. 추가로 드론에서 지상 SLAM 구현을 위해 수집된 라이다 데이터 일부를 업로드했습니다. VLP16 모델이라 해상력은 낮지만 본 포스팅의 변환행렬 예시로는 좋은것같습니다. 

 

그림 4. 변환된 PCD 데이터 (좌) 원본 (우) Y축 기준 60도 회전

 

Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발

인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
 

딥아이 DEEP.I | AI 기반 지능형 기업 솔루션

딥아이는 AI 기술의 정상화라는 목표를 갖고, 최첨단 딥러닝 기술 기반의 기업 솔루션을 제공하고 있으며, 이를 통해 고도의 AI 기반 객체 탐지, 분석, 추적 기능을 통합하여 다양한 산업 분야에

deep-i.ai

 

반응형