108 {
109 if (frame == nullptr || frame->cloud == nullptr) {
110 return false;
111 }
112 if (frame->world_cloud == nullptr) {
113 frame->world_cloud = base::PointDCloudPool::Instance().Get();
114 }
115 if (frame->cloud->size() > 0) {
116 size_t size = frame->cloud->size();
117 size_t i = 0;
118 while (i < size) {
119 auto& pt = frame->cloud->at(i);
120 if (filter_naninf_points_) {
121 if (std::isnan(pt.x) || std::isnan(pt.y) || std::isnan(pt.z)) {
122 frame->cloud->SwapPoint(i, size--);
123 continue;
124 }
125 if (fabs(pt.x) > kPointInfThreshold ||
126 fabs(pt.y) > kPointInfThreshold ||
127 fabs(pt.z) > kPointInfThreshold) {
128 frame->cloud->SwapPoint(i, size--);
129 continue;
130 }
131 }
132 Eigen::Vector3d vec3d_lidar(pt.x, pt.y, pt.z);
133
134
135 Eigen::Vector3d vec3d_novatel = vec3d_lidar;
136 if (filter_nearby_box_points_ && vec3d_novatel[0] < box_forward_x_ &&
137 vec3d_novatel[0] > box_backward_x_ &&
138 vec3d_novatel[1] < box_forward_y_ &&
139 vec3d_novatel[1] > box_backward_y_) {
140 frame->cloud->SwapPoint(i, size--);
141 continue;
142 }
143 if (filter_high_z_points_ && pt.z > z_threshold_) {
144 frame->cloud->SwapPoint(i, size--);
145 continue;
146 }
147 ++i;
148 }
149 frame->cloud->resize(i);
150 TransformCloud(frame->cloud, frame->lidar2world_pose, frame->world_cloud);
151 AINFO <<
"Preprocessor filter points: " << size <<
" to " << i;
152 }
153 return true;
154}