[3D Perception] 2. LiDAR data의 protocol, format, library

happy_quokka·2024년 3월 22일
0

자율주행 Perception

목록 보기
18/19

1. LiDAR Data

  • point cloud data로 부르며 3차원 공간에 존재하는 특정한 점이다
  • 일반적인 경우 LiDAR 센서는 이더넷 TCP/IP (대부부은 UDP)를 통해 데이터를 수신하고 데이터의 포맷은 packet 형태를 가진다
  • LiDAR가 ethernet protocol을 통해 local로 data를 보내준다
  • ethernet 통신의 데이터를 packet이라고 한다
  • ethernet 통신을 하는 이유?
    • LiDAR 데이터가 크기 때문이다
    • 만약 충분이 적은 데이터를 가진 센서라면 다른 인터페이스를 사용하는 경우도 있다

1-1. Packet 구조

  • 많은 LiDAR 센서는 Ethernet Packer 구조를 사용하기 때문에 라이브러리 또는 SDK를 제공하지 않는다면 직접 packet을 un-pack(parsing)하는 과정이 필요하다
  • 이때는 LiDAR 회사의 공식 문서를 참고해야한다
  • 시중의 대부분의 센서는 라이브러리나 SDK를 제공한다
  • Ethernet packet의 파일 확장자는 *.pcap 을 사용하고 packet stream Ehsms PCAP file을 point cloud format으로 변환하여 사용한다

Velodyne VLP-16 LiDAR 데이터 구조

  • 한 packet의 크기는 1248bytes
  • packet의 시작과 끝을 찾고 그 안에 있는 데이터를 가지고 온다
    • header : 42bytes
    • tail : 6bytes -> 시간, factory(끝을 의미)하는 내용이 담겨있다
  • header와 tail을 제외한 데이터 : 1200 bytes
    • 12개의 data block (0 ~ 11 block)
    • Flag : data block의 시작을 확인할 수 있다, 16진수이기 때문에 2 bytes를 차지한다
    • Azimuth : Lidar의 각도
    • sequence : VLP-16은 16채널이기 때문에 채널에 대한 데이터가 각각 16개씩 들어있다

1-2. data format

  • 일반적으로 point cloud data는 다음과 같은 데이터를 의미한다
  • X, Y, Z : point의 3차원 위치를 표현
  • (optional) intensity : 반사된 laser의 세기
  • point cloud data는 .pcd, .las, *.xyz 등을 사용한다


2. PCL (PointCloudLibrary)

  • open3D와 같은 유용한 라이브러리도 존재한다
  • 또한 OUSTER처럼 자체 SDK를 제공하는 경우도 있다
  • ROS를 사용한다면 PCL 라이브러리는 자동으로 설치된다
  • ROS 환경이 아니라면 sudo apt install libpcl-dev 명령어로 설치한다
  • PCL은 의존 라이브러리가 많이 때문에 직접 컴파일한다면, 반드시 공식 홈페이지를 참고하여 설치한다
  • Mandatory, Optional 모두 설치해야한다

2-1. container, data type

container

  • 데이터를 담아두는 그릇
  • pcl::PointCloud<T>
  • pcl::PCLPointCloud2 : PCL 1.x 버전 이상

data type

  • 데이터를 표현하는 이름
  • pcl::PointXYZ : 3D scanner를 사용하는 경우
  • pcl::PointXYZI : 3D scanner에서 intensity를 같이 사용하는 경우
  • pcl::PointXYZRGB : RGB-D camera 또는 LiDAR & Camera calibration을 통해 point cloud에 RGB값을 부여한 경우
  • pcl::PointXYZRGBA : pcl::PointXYZRGB에 투명도가 추가된 것
  • pcl::PointXY : 2D scanner를 사용하는 경우

2-2. CMakeLists.txt 작성 방법

  • c++로 PCL을 사용할 경우 CMakeLists를 사용해야한다
cmake_minimum_required(VERSION 3.10)

project(project_name)
add_executable(project_name main.cpp)

find_package(PCL 1.12 REQUIRED)

if(PCL_FOUND)
  include_directories(${PCL_INCLUDE_DIRS})
  add_definitions(${PCL_DEFINITIONS})
  link_directoried(${PCL_LIBRAry_DIRS})
  target_link_libraries(project_name ${PCL_LIBRARIES})
endif()

2-3. PointCloud Container 작성 방법

0개의 댓글