ROS message to Voxel

  • ROS message를 pcl::VoxelGrid 타입의 voxel_grid_로 변환
  • voxel_grid_2D로 압축 (pointcloud_2dd_ptr_) (왜 use_height_를 사용하지 않는가) (double check)

KDTree 생성

  • pointcloud_2dd_ptr_을 사용하여 KDTree (tree) 생성

클러스터링 실행

  • treeEuclidean Clustering 방법을 사용하여 클러스터링 수행
  • 결과는 cluster_indices에 저장되며, cluster index와 각 index에 해당되는 voxel grid의 voxel grid index가 저장됨

Index Map 생성

  • 복셀 그리드 인덱스에서 클러스터 인덱스를 검색하기 위한 맵 생성
    • key: 복셀 그리드 인덱스 value: 클러스터 인덱스
    • voxel grid에 속한 각 포인트의 cluster_idx를 index map의 voxel grid index 위치에 저장

Vector Index 생성

  • 클러스터 인덱스에서 해당 클러스터에 속하는 raw pointcloud의 포인트를 검색하기 위한 벡터 생성
  • 모든 raw_pointcloud_ptr에 대하여 각 포인트들의 복셀 그리드 인덱스를 구한 뒤, v_cluster의 해당 인덱스 위치에 포인트 저장

cluster_pub 출력 메시지 구성

  • 모든 cluster index에 대하여 각 인덱스마다 포함된 point index에 해당되는 raw_pointcloud_ptr_의 point를 cloud_cluster에 저장
    • cluster index 하나당 하나의 cloud_cluster 생성
    • cloud_cluster의 width는 포함된 points의 개수로 설정하고, height는 1로 설정
  • feature_objectcloud_cluster를 저장하고, 해당 클러스터에 포함된 포인트들의 평균 좌표값을 구하여 feature_object.object.state.pose_covariance.pose.position에 저장
  • feature_objectoutput.feature_objects에 저장되며, 모든 cluster index에 대해 수행된 후 publish

Flow From ...

Flow To ..