apollo代码地址:/apollo/modules/perception/lidar/common/lidar_frame.h
定义了一个LidarFrame结构体
struct LidarFrame
结构体中包含哪些内容呢?
// point cloud
std::shared_ptr<base::AttributePointCloud<base::PointF>> cloud;
// world point cloud
std::shared_ptr<base::AttributePointCloud<base::PointD>> world_cloud;
// timestamp
double timestamp = 0.0;
// lidar to world pose
Eigen::Affine3d lidar2world_pose = Eigen::Affine3d::Identity();
// lidar to world pose
Eigen::Affine3d novatel2world_pose = Eigen::Affine3d::Identity();
// hdmap struct
std::shared_ptr<base::HdmapStruct> hdmap_struct = nullptr;
// segmented objects
std::vector<std::shared_ptr<base::Object>> segmented_objects;
// tracked objects
std::vector<std::shared_ptr<base::Object>> tracked_objects;
// point cloud roi indices
base::PointIndices roi_indices;
// point cloud non ground indices
base::PointIndices non_ground_indices;
// secondary segmentor indices
base::PointIndices secondary_indices;
// sensor info
base::SensorInfo sensor_info;
// reserve string
std::string reserve;
内容解释:
cloud:
world_cloud:
timestamp:
lidar2world_psoe: lidar to world pose
novatel2world_pose:
hdmap_struct:
segmented_objects:
tracked_objects:
roi_indices:
non_ground_indices:
secondary_indices:
sensor_info:
reserve:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW ?
void FilterPointCloud(base::PointCloud<base::PointF> *filtered_cloud,
const std::vector<uint32_t> &indices) {
if (cloud && filtered_cloud) {
filtered_cloud->CopyPointCloudExclude(*cloud, indices);
}
}
FilterPointCloud 通过indices来删除部分点云,在结构体中定义了3中indices,所以可以filter3种类型的点。