[rclpy] point_cloud

About_work·2024년 2월 28일
0

ros2

목록 보기
19/41

1. sensor_msgs/PointCloud2.msg

std_msgs/Header header
uint32 height
uint32 width
sensor_msgs/PointField[] fields
bool is_bigendian
uint32 point_step
uint32 row_step
uint8[] data
bool is_dense
  • sensor_msgs/PointCloud2.msg는 ROS 메시지 타입으로, N차원 포인트 클라우드 데이터를 저장하고 전송하는 데 사용
  • 이 메시지 타입은 추가 정보(예: 법선, 강도 등)를 포함할 수 있는 N차원 포인트의 컬렉션을 포함
  • 포인트 데이터는 이진 블롭(binary blob)으로 저장되며, 그 구조는 fields 배열의 내용에 의해 설명됩니다.

1.1. 메시지 필드 설명:

  • Header header:
    • 내용물
      • 포인트 클라우드 데이터의 센서 데이터 취득 시간
      • 3D 포인트의 좌표계 ID
  • uint32 height, uint32 width:
    • 포인트 클라우드의 2D 구조를 설명
    • 클라우드가 정렬되지 않은 경우(height가 1), width는 포인트 클라우드의 길이
    • 2D 이미지처럼 조직된 포인트 클라우드는 스테레오 카메라나 시간 비행(depth sensors) 같은 카메라 깊이 센서에 의해 생성될 수 있습니다.
  • PointField[] fields:
    • 이진 데이터 블롭 내의 채널과 그 레이아웃을 설명
    • PointField는 데이터 내의 특정 요소(예: x, y, z 좌표, 강도)를 나타냄
  • bool is_bigendian:
  • uint32 point_step:
    • 바이트 단위로 측정한 하나의 포인트 길이
  • uint32 row_step:
    • 바이트 단위로 측정한 한 줄의 길이
  • uint8[] data:
    • 실제 포인트 데이터
    • 크기는 row_step * height
  • bool is_dense:
    • 유효하지 않은 포인트가 없으면 True
    • 이는 데이터가 '밀집'되어 있다는 것을 의미하며, 모든 포인트가 유효한 데이터를 가지고 있음을 나타냄
  • [중요] 사용법

2. PointCloud

std_msgs/Header header
geometry_msgs/Point32[] points
sensor_msgs/ChannelFloat32[] channels
  • sensor_msgs/PointCloud 메시지는 3D 포인트의 컬렉션을 저장하고 전송하는 데 사용되는 ROS 메시지 타입
  • 이는 추가적으로 각 포인트에 대한 정보(옵션)를 포함할 수 있습니다.
  • sensor_msgs/PointCloud2와 비교할 때, PointCloud는 더 단순하고 직관적인 구조를 가지고 있지만, PointCloud2가 제공하는 유연성과 세밀한 제어 기능은 덜합니다.

2.1. sensor_msgs/PointCloud 메시지 구조:

  • Header header: 포인트 클라우드 데이터의 센서 데이터 취득 시간과 좌표계 ID를 포함합니다. 모든 포인트는 헤더에 명시된 좌표계에서 해석되어야 합니다.
  • geometry_msgs/Point32[] points:
    • 3D 포인트의 배열
    • Point32는 x, y, z 좌표를 가진 3D 포인트로, 헤더에 지정된 좌표계에서 해석되어야 합니다.
  • ChannelFloat32[] channels:
    • 각 포인트에 대한 추가 정보를 포함하는 채널의 배열
    • 모든 채널은 포인트 배열과 같은 수의 요소를 가져야 하며,
    • 각 채널의 데이터는 각 포인트와 1:1로 대응해야 합니다.
    • 일반적으로 사용되는 채널 이름은 ChannelFloat32.msg에 나열됩니다.
    • 예를 들어, 강도(intensity)나 색상(rgb)과 같은 정보를 포함할 수 있습니다.

3. sensor_msgs/PointCloudsensor_msgs/PointCloud2의 비교:

  • 유연성:
    • PointCloud2PointCloud보다 데이터의 구조를 더 세밀하게 제어
    • PointCloud2는 데이터를 이진 블롭으로 저장하고, fields 배열을 사용하여 데이터 레이아웃을 설명
      • 이를 통해 다양한 형식의 데이터(예: 다차원 포인트, 추가 필드 등)를 유연하게 다룰 수 있습니다.
  • 효율성:
    • PointCloud2는 메모리 사용과 네트워크 전송 측면에서 PointCloud보다 효율적
    • 데이터가 이진 형태로 직접 저장되기 때문에, 변환 과정이 필요 없고, 처리 속도도 빨라질 수 있습니다.
  • 사용 용이성:
    • PointCloud는 구조가 더 단순하고 직관적이어서 사용하기 쉽습니다.
    • 각 포인트는 명시적으로 Point32 메시지 배열로 표현되며, 추가 데이터는 ChannelFloat32 배열을 통해 관리됩니다.
    • 반면, PointCloud2의 사용은 데이터 구조를 정의하고 해석하는 추가 작업을 필요로 합니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글