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