5 #include <pcl/common/transforms.h>
17 project(pcl::PointCloud<pcl::PointXYZ>& cloud)
19 std::for_each(cloud.points.begin(), cloud.points.end(), [](
auto& pt) { pt.z = 0.F; });
26 const float minRange) :
27 sensorPoses(sensorPoses),
28 robotPoseQueue(robotPoseQueue),
29 rangeFilter(minRange),
37 const auto& robot_T_sensor = sensorPoses.at(scan.header.frame);
39 const auto&
timestamp = scan.header.timestamp;
41 if (not robotPoseQueue.has(
timestamp.toMicroSeconds()))
47 const Eigen::Isometry3f map_T_robot =
48 robotPoseQueue.lookupInterpolate(
timestamp.toMicroSeconds())->pose;
49 const Eigen::Isometry3f map_T_sensor = map_T_robot * robot_T_sensor;
51 auto cloudSensorFrame = toCartesian<Point>(scan.data);
54 rangeFilter.applyFilter(cloudSensorFrame);
57 pcl::transformPointCloud(cloudSensorFrame, cloudMapFrame, map_T_sensor);
60 projector.
project(cloudMapFrame);
62 *cloud += cloudMapFrame;
69 scans.begin(), scans.end(), [&](
const armem::LaserScanStamped& scan) { add(scan); });
72 const LaserScanAggregator::PointCloud::Ptr&