LiDAR - 빛을 탐지하고 범위를 측정하는 센서
- 활용 소재 : 레이저
- 형체 인식 가능
- 외부 환경 영향 있음
- 고가
RADAR - 전파를 빛으로 변경한 센서
- 활용 소재 : 전자파
- 정확한 형체 인식 불가능
- 외부 환경 영향 없음
- 저가
LiDAR의 종류
1. single point distance scanner -> 레이저 포인터와 같은 점
2. 2D scanner -> x,y 데이터 사용, 1개의 채널
3. 3D scanner -> 2D scanner를 여러 개 사용하는 효과, N개의 채널
4. Non-Repeating Pattern scanner
2D scanner와 3D scanner는 모두 반사된 직선 거리이기에 위치를 파악하기 위해서는 별도 계산 필요
- 거리 정보와 삼각 함수를 활용
3D LiDAR는 N개의 채널을 만드는 방법에 따라 다양한 구조가 있다
- Mechanical 3D Spinning LiDAR :
- 발광부와 수신부가 직접 회전하는 방식
- 360도 회전이 가능하다는 장점
- 발광부와 수신부의 개수에 따라 채널이 제한되고, 크기가 커지며, 진동에 의한 내구성이 약함
- Solid-State LiDAR :
- 반사물질
- Single-Laser로도 N개의 채널을 표현
- 복잡한 동작 방식, 매우 높은 Hz -> 내구성 문제 존재
- MEMS LiDAR :
- 반사물질을 상/하 & 좌/우 반복운동하고 , N개의 Laser를 사용할 수 있어 데이터 취득에 용이
- Single-Laser로도 N개의 채널 표현 가능
- 높은 제작 난이도, 매우 높은 Hz -> 내구성 문제 존재
- 복합적인 요소 사용 방식 :
- 고정형 발광 & 수신, Mirror 회전 방식 -> 낮은 Hz로 넓은 FoV 확보 가능
- Non-Repeating. Patter Scanner -> 비반복적인 패턴을 사용해서 낮은 Laser로도 매우 높은 채널을 만드는 방법
LiDAR 센서는 Ethernet Packet 구조를 사용 -> 라이브러리또는 SDK를 제공하지 않는다면 직접 Un-Pack해야함
일반적인 Point cloud data
- x, y, z : poin의 3차원 위치
- intensity : 반사된 Laser 세기
LiDAR 데이터를 다루는 라이브러리 : PCL 라이브러리
컨테이너
- pcl::PointCloud<T>
- pcl::PCLPointCloud2
자료형
- pcl::PointXYZ : 3D scanner 사용하는 경우
- pcl::PointXYZI : 3D scanner와 intensity를 같이 사용하는 경우
- pcl::PointXYZRGB : RGB-D Camera 또는 LiDAR & Camera Calibration을 통해 Point Cloud에 RGB 값을 부여하는 경우
- pcl::PointXY :: 2D scanner를 사용하는 경우
LiDAR Application
LiDAR로 획득한 point cloud data는 각 포인트간의 연관성 포함 X -> 연관성을 만들고 그룹화하는 것이 중요
-> 지면과 지면이 아닌 객체를 분리하여 clusterting을 보다 정확하고 쉽게 전처리 필요
Calibration
- LiDAR는 센서와 객체와의 상대거리를 출력하기 때문에 다수를 사용할 경우 서로 다른 거리 출력 -> LiDAR-to-LiDAR Calibration 필요
- 누적된 데이터를 만들고 싶다면 IMU, GPS 등 다른 센서와의 Calibration 필요
ROI Filtering
- LiDAR는 point cloud의 개수가 많고 넓은 범위를 획득하기에 유의미한 정보는 최대한 살리며 불필요한 데이터는 줄이는 기법 필요
Ground Plane Removal
- LiDAR 데이터는 지면에 대한 정보의 수가 상대적으로 많다
-> 지면과 지면이 아닌 정보를 분리하여 필요한 Object를 검출
Object Clustering
- 한 객체에서 다수의 point cloud data 존재 -> 위치와 반사강도 모두 다르게 나옴
-> 따라서 같은 물체에 대한 point clouds에 대해 동일한 Label을 부여하는 것이 중요
LiDAR Basic Algorithm
k-means
- 데이터를 지정된 개수의 그룹으로 나누는 알고리즘
순서
1. 임의의 k개의 중심점을 선택
2. 각 데이터를 가장 가까운 중심점에 속한 그룹으로 분류
3. 그룹의 중심점을 새로 계산
4. 2~3 단계를 반복하여 새로운 중심점과 기존 중심점이 충분히 일치할 때까지 반복
장점
- 알고리즘의 구현 난이도가 쉽다
- 다양한 데이터에 활용 가능하다
단점
- 그룹의 개수를 사전에 정의해야 한다
- 가중치 및 거리 정의가 필요하다
개선점
- 다양한 k 값을 갖는 알고리즘을 병렬로 실행할 수 있는지
- 다양한 결과에 대해 최적의 k 값을 어떻게 찾을 수 있는지
- for each k-means result : optimized(k) = argmin(d(Pmax -Pmin))
DBSCAN
군집화 알고리즘에서 활용성이 뛰어나고 대중적
- 고차원 공간에서의 군집화 알고리즘
- 밀도 기반의 군집화 알고리즘은 데이터 분포에 따라 그룹을 나누는 알고리즘 -> 일정 거리 이내에 데이터가 몇 개 이상이면 하나의 그룹
- 중심점, 경계점, 노이즈 개념 존재
순서
Core/Border/Noise 분류
1. 임의의 포인트 하나 선정
2. 선택한 포인트로부터 반겅 epsilon 만큼의 원을 만든다
3a. 원 안에 다른 포인트의 개수 확인
- 0: 노이즈로 문류
- 1~(min_points-1): Border Point로 분류
- >min_points: Core Point로 분류
3b. 모든 포인트에 대해 분류 반복
Core Points 그룹화
1. Core Points 중에서 하나의 point를 선택하여 하나의 그룹으로 설정
2. 선택한 point의 반경 안에 포함되는 core points를 같은 그룹으로 그룹화
3. 선택한 point에 가장 이웃한 core point를 선택하고, 반경안에 다른 core points가 포함되지 않을 때까지 반복
4. n_clusters를 하나 증가시키고, 방문하지 않은 core points 중에서 하나를 선택하고 2~3 단계 반복
Border Points 그룹화
1. Border Points 중에서 하나의 point를 선택하고 가장 이웃한 그룹화된 core point의 그룹으로 설정
2. 남은 Border Points가 없을 때까지 반복
장점
- 모든 데이터에 대해 그룹화를 진행하지 않으므로 노이즈 대처 가능
- 그룹의 수를 미리 지정 X
단점
- 듬성듬성한 데이터에 대해 잘 동작하지 않는다
- 선택한 Point에 대해 다른 Points와의 거리를 계산하기 때문에 계산 복잡도가 높다
개선점
- 모든 노드를 순회하기보다 Noise Point를 사전에 제외할 수 있는지
- Border Points에 대해 Cluster Point를 찾기보다 더 편한 비교 방법이 있는지
RANSAC
데이터셋에서 주어진 모델을 추정하는 알고리즘
순서
1. 샘플 데이터를 선택하고 이를 이용해 모델 추정
2. 샘플 데이터 외에 나머지 데이터를 이용해 추정 모델과 일치하는 데이터의 개수를 계산
3. 일치하는 데이터의 개수가 일정한 임계치 이상이라면 이를 최종 추정 모델로 사용
4. 새로운 샘플을 선택하고 일정 횟수만큼 반복
장점
- 예외(outlier)를 효과적으로 제거
- 구현 난이도가 낮고, 다양한 모델에 적용 가능
단점
- Sampling 결과에 따라 비효율적인 결과를 나타냄
- Prior Sampling을 사용하지 않기 때문에, 매 회 처음부터 다시 시잗
개선점
- max_trials을 고정하지 않고 조기에 종료할 수 있는 방법이 없는지
- Sampling 결과를 제한할 수 있는 방법이 없는지
'딥러닝' 카테고리의 다른 글
자율주행 perception aplication (1) | 2024.01.05 |
---|---|
딥러닝 : YOLO (0) | 2023.12.19 |
딥러닝 : object detection (0) | 2023.12.18 |
딥러닝 : pytorch (0) | 2023.12.14 |
딥러닝: 신경망 기초 (0) | 2023.12.13 |