LiDAR Introduction

강형우·2023년 3월 18일
0

LiDAR

목록 보기
1/2

LiDAR Introduction

  • LiDAR(Light Detection And Ranging)는 빛을 탐지하고 범위를 측정하는 센서로 RADAR(RAdio Detection And Ranging)에서 사용하는 전파(Radio)를 빛(Light)으로 변경한 센서이다.
  • 일반적으로 LiDAR는 다음과 같은 종류가 있다.
      1. Single Point Distance Sensor -> 레이저 포인터와 같은 점
      1. 2D Scanner
      1. 3D Scanner
      1. Non-Repeationg Pattern Scanners
  • 2D LiDAR와 3D LiDAR 모두 반사도니 객체와의 직선 거리이기 때문에, 반사된 포인트의 위치를 파악하기 위해서는 별도 계산이 필요하다.(LiDAR 센서마다 방법이 다르다.) => Parsing
  • e.g)Velodyne VLP-16 LiDAR
      1. 센서마다 제공하는 데이터가 다르므로, 반드시 공식 문서를 참고한다.
      1. 센서의 SDK를 제공하는 경우도 있다.
  • 2D LiDAR와 3D LiDAR의 차이는 센서의 채널에 있다.
    • 2D LiDAR: 1개의 채널을 가지고 있다. (N,2)
    • 3D LiDAR: N개의 채널을 가지고 있어, 채널 수에 따라 객체의 입체적인 데이터를 가진다.(N,3)
  • 3D LiDAR는 N개의 채널을 만드는 방법에 따라 다양한 구조를 가지고 있다.
  • Mechanical 3D Spinning LiDAR
    • 발광부와 수신부가 직접 회전하는 방식
    • 360도 회전이 가능하다는 장점이 있다.
    • 발광부와 수신부의 개수에 따라 채널이 제한되고, 크기가 커지며, 진동에 의한 내구성이 약하다는 단점이 있다.
  • Solid-State LiDAR
    • 반사물질(대게 Mirror)
    • Single-Laser로도 N개의 채널을 표현할 수 있다.
    • 복잡한 동작 방식, 매우 높은 Hz(~160Hz) -> 그에 따른 내구성 문제가 존재한다
  • MEMS LiDAR
    • 반사 물질을 상/하 & 좌/우 반복운동 하고, N개의 Laser를 사용할 수 있어 데이터 취득에 더욱 용이하다.
    • Single-Laser로도 N개의 채널을 표현할 수 있다.
    • 높은 제작 난이도, 매우 높은 Hz(~800Hz) -> 그에 따른 내구성 문제가 존재한다.
  • 복합적인 요소를 사용하는 LiDAR도 존재한다.
    • L: 고정형 발광 & 수신, Mirror회전 방식 -> 낮은 Hz로도 넓은 FoV 확보 가능
    • R: (Non-Repeating Pattern Scanners 방식) -> 비반복적인 패턴을 사용해서 낮은 Laser로도 매우 높은 채널을 만들어 내는 방법
  • 자율주행차량은 다양한 센서를 사용할 수 있으며, 센서 구성에 정답은 없다.
  • 각 센서의 장/단점을 면밀히 파악하는 것이 중요하다.

LiDAR Data

  • LiDAR 데이터는 Point Cloud Data로 부르며 3차원 공간에 존재하는 특정한 점이다.
  • 일반적인 경우 LiDAR 센서는 이더넷 TCP/IP(UDP)를 통해 데이터를 수신하고, 데이터의 포맷은 Packet 형태를 가진다. 그 이유는 LiDAR 데이터가 크기 때문이며, 만약 충분히 적은 데이터를 가진 센서라면 다른 인터페이스를 사용하는 경우도 있다.
  • 많은 LiDAR 센서는 Ethernet Packet 구조를 사용하기 때문에, 라이브러리 또는 SDK를 제공하지 않는다면직접 Packet을 Un-Pack 하는 과정이 필요하다.(다행히 시중에 대부분의 센서는 라이브러리나 SDK를 제공한다.)
  • Ethernet Packet의 파일 확장자는 *.pcap을 사용하고, Packet Stream 또는 PCAP File을 Point Cloud Format으로 변환하여 사용한다.
  • 일반적으로 Point Cloud Data는 다음과 같은 데이터를 의미한다.
    • X, Y, Z: Point의 3차원 위치를 표현
    • (Optional) Intensity: 반사된 Laser의 세기
  • Point Cloud Data는 *.pcd, *.las, *.xyz 등을 사용한다.
  • 이미지를 다루는 라이브러리로 OpenCV가 있다면, Point Cloud를 다루는 라이브러리로 PCL(PointCloudLibrary)가 있다.
  • Open3D와 같은 유용한 라이브러리도 존재한다. (또는 OUSTER처럼 자체 SDK를 제공하는 경우도 있다.)
  • ROS를 사용한다면 PCL라이브러리는 설치 된다.
    • ROS 환경이 아니라면 sudo apt install libpcl-dev 명령어로 설치한다.
    • PCL은 의존 라이브러리가 많기 때문에 직접 컴파일 한다면, 반드시 공식 홈페이지를 참고하여 설치한다.(Mandatory, Optional 모두 설치해야 한다.)
  • PCL 라이브러리에서 Point Cloud를 다룰 때 사용하는 Container, Data Type으로 다음과 같은 것들이 있다.
    • 컨테이너
      • pcl::PointCloud<T>
      • pcl::PCLPointCloud2 // PCL 1.x버전 이상
    • 자료형
      • pcl::PointXYZ // 3D Scanner를 사용하는 경우
      • pcl::PointXYZI // 3D Scanner에서 intensity를 같이 사용하는 경우
      • pcl::PointXYZRGB // RGB-D Camera 또는 LiDAR & Camera Calibration을 통해 Point Cloud에 RGB 값을 부여한 경우
      • pcl::PointXY // 2D Scanner를 사용하는 경우
  • 이외에도 다양한 컨테이너와 자료형이 있으니, 공식 홈페이지를 참고하자.
  • PCL 라이브러리 기본 사용법 - CMakeLists.txt 작성 방법
  • PCL 라이브러리 기본 사용법 - PointCloud Container 작성 방법
  • PCL의 Container는 데이터를 내부적으로 std::vector<T>에 저장하기 때문에, 사용법이 STL와 유사한 부분이 많다.
  • PCL 라이브러리의 기본 사용법 - PCD File Read & Write 작성 방법
  • PCL 라이브러리 기본 사용법 - PCLPoint Cloud2 vs PointCloud<T>
  • PCL 라이브러리를 사용하다 보면 두 가지 Container를 보게 된다.
  • PCLPointCloud2는 Point Cloud의 데이터(x,y,z등) 뿐만 아니라 다양한 메타데이터를 포함하고, 데이터 저장 방식에 보다 효율적인 방법을 채택한 방식이다.
  • PCLPointCloud2는 Binary Blob 방식으로 데이터를 저장하고 있으며, 데이터를 주고 받을 때 (TCP/IP 등) 데이터의 크기를 효과적으로 절약할 수 있다.
    • PCLPointCloud2의 data 타입은 std::vector<std::uint8_t>로 8비트 데이터이다.
    • PointCloud<T>의 data 타입은 std::vector<PointT>로 pcl::PointXYZ 등 자료형의 크기에 비례한다.
      -> 하지만, 실제 데이터를 다루기 위해서는 결국 PCLPointCloud2와 PointCloud<T>사이의 변환이 필요하다.
      PCL2 vs PCL<T>
  • PCL 라이브러리 기본 사용법 - PCLPointCloud2 & PointClout<T> 사이의 변호나 코드 작성 방법
  • pcl::PointXYZ 뿐만 아니라 PointXYZI, PointXYZRGBA 등 다양한 데이터로 변환이 가능하다.(PCLPointCloud2에 없는 데이터는 기본 값으로 초기화 된다. -> 사용 유의)
  • PCL 라이브러리 기본 사용법 - PCL Visualization 방법 (PCLVisualizer, CloudViewer 두 가지 방법이 있다.)
  • PCLVisualizer 가 CloudViewer보다 사용법이 복잡하지만, 더 많은 기능을 가지고 있다.
    • Multi-Threading
    • Multi-View Point
    • Shape Display
    • ...
  • PCL의 공식 홈페이지 튜토리얼을 통해 필요한 기능을 추가적으로 학습한다.
    튜토리얼: https://pcl.readthedocs.io/projects/tutorials/en/master/index.html#
  • 추천하는 튜토리얼 목록

Basic Application

  • 자율주행 차량의 기본적인 LiDAR Application에 대해서 학습하고 활용 방안에 대해서 알아본다.
  • LiDAR의 기본적인 특성
    • Scanner에서 취득하는 데이터는 각 포인트에 대해 LiDAR와의 상대적인 위치와 반사 강도를 포함한다.
      아래 그림에 대해
    • a. 실제 존재하는 객체
    • b. LiDAR와의 상대적인 위치(x,y,z)만 존재한느 Raw-Data
    • c. Intensity를 포함하는 Raw-Data
    • d. Interpolation 등 다양한 후처리를 수행한 Data
  • LiDAR로 획득하는 Point Cloud Data는 각 Point간의 연관성을 포함하고 있지 않기 때문에, 알고리즘을 통해 연관성을 만들고 Point를 그룹화(Clustering)하는 것이 중요하다.
  • 연관성을 만들기 위해서는 연속된 Point Cloud Data를 Object별 Segment를 나누는 것이 필요하고, 그 첫 번째 대상이 지면(Ground)과 비지면(Non-Ground)을 분리하는 것이다.
  • 만약 지면에 붙어있는 보행자가 존재한다면, LiDAR의 Raw Data는 그림(a)와 같이 존재한다.
    지면과 보행자의 다리에 해당하는 Point Cloud Data가 인접해 있기 때문에, Clustering 알고리즘을 그대로 적용하기 어렵다.
    따라서, 지면과 지면이 아닌 객체를 분리하여 Clutering을 보다 정확하고 쉽게 전처리가 필요하다.
  • 가장 기초적인 수준에서 LiDAR의 프로세스는 다음과 같다.
  • ROI Filtering
    • 라이다 포인트를 내가 찾고자 하는 영역을 한정시킨다.(불필요한 데이터 제거 하고 필요한 데이터만 봄 e.g) 20~30m 위의 데이터)
  • Ground Plane Removal
    • 지면에 대한 데이터 제거

Basic Application - Calibration

  • LiDAR는 Scanner의 최대 탐지거리, Scanner 개수, Scanner 자세 등 환경에 따라 얻어지는 Point Cloud의 환경이 전부 달라진다.
  • 1대의 LiDAR로는 장거리의 Dense한 Point Cloud를 만들기 어렵기 때문에, 高채널 LiDAR 또는 다수의 LiDAR를 사용한다.
    • LiDAR는 센서와 대상 객체와의 상대거리를 출력하기 때문에 다수의 LiDAR를 사용하는 경우, 같은 객체여도 서로 다른 거리를 출력한다. -> LiDAR-to-LiDAR Calibration 필요
    • 또한 LiDAR는 1회의 Scan Data를 출력하기 때문에, 만약 누적된 데이터를 만들고 싶다면 IMU, GPS 등 다른 센서와의 Calibration이 필요하다.(많은 LiDAR가 GPS Signal을 입력 받고, IMU가 내장된 경우가 있는 이유)

Basic Application - ROI Filtering

  • LIDAR는 Point Cloud의 개수가 많고 넓은 범위를 획득하기 때문에, 유의미한 정보는 최댛나 살리면서 불필요한 데이터는 줄이는 기법이 필요하다.
  • LiDAR의 특징으로
    • 가까운 거리의 물체는 Resolution이 매우 높아 Dense한 Data를 가지지만 필요 이상의 Point Cloud가 존재할 수 있다.
    • 먼 거리의 물체는 Resolution이 낮아 Sparse한 Data를 가지고 있어, 유의미한 Cluster를 만들기 어려울 수 있다.
    • 위치(X,Y,Z)와 반사강도(Intensity)만을 포함한 Point Cloud Data는 ROI 설정이 함들기 때문에 추가적인 정보가 필요하다. (ROI Filtering이라는 추가 정보가 필요)
      (Option)
      LiDAR로 자율주행을 위한 Map을 만들 수 있기 때문에(LiDAR Map(=HD Map), Localization)정보를 활용해서 Dynamic ROI를 사용하는 경우도 있다. ROI Filtering의 가장 기초적인 Passthrough Filter와 Voxelization의 개념을 학습한다.
    • Passthrough Filter
      • 넓은 범위에 존재하는 라이다 데이터를 봐야하는 범위만 살리고 나머지 데이터는 삭제하는 기능
      • 단점: 아무런 부가적인 정보 없이 Passthrough를 쓰면 고정된 Passthrough에 대한 사이즈를 가질 수 밖에 없는데 자율주행을 위한 지도정보가 있다면 지도 정보를 활용해서 잘라내야 할 Passthrough 필터를 조정할 수 있다.
    • Volxelization
      • 3차원 공간에 해당하는 2차원 이미지에서 그리드에 해당하는 다수의 포인트가 존재할때 대표적인 포인트 하나를 살리고 voxel이라는 공간이 차있다 라고 하는 downsizing 하는 필터라고 보면 된다.(정육면체를이룸)
      • voxelization을 하는 큰방법으로는
        • hud tree
        • octo tree
  • LiDAR Point Cloud Data의 특징으로, 지면에 대한 Point Cloud 수가 상대적으로 많다.
    • 보행자, 차량 등 Dynamic Object를 검출하는데 불필요
    • 연석, 차선 등 지면에 대한 정보를 처리하는데 지면보다 높은 Point Cloud Data는 불필요
  • 따라서 지면을 찾는 과정이 매우 중요하다.
    -> Ground와 Non-Ground를 분리하면 필요한 Object를 검출하는데 필요한 Point Cloud 개수가 줄어든다.
    • 지면을 찾는 알고리즘 중에서 가장 기초가 되는 RANSAC 알고리즘을 학습한다.

Basic Application - Object Clustering

  • 한 Object 내에서도 다수의 Point Cloud Data가 존재하고, 위치(x,y,z)와 반사강도(intensity는 모두 다르게 나타난다.)
    따라서 같은 물체에 대한 Point Clouds에 대해 동일한 Label을 부여하는 것이 중요하다.
    -> Point Cloud Clustering 또는 Point Cloud Segmentation 등 다양한 이름이 있고, 최근 딥러닝을 이용한 방법 등 다양한 방법이 존재한다.
    • 기본적인 Clustering에 대해 이해하기 위해 K-means와 DBSCAN을 학습하여 Point Cloud에 실제 적용해보는 과정을 가진다.
    • (Optional)딥러닝을 사용하는 방법으로 Complex-Yolo가 가장 유명하다.

0개의 댓글