void Mapper::setMap(DP* newPointCloud) { // delete old map if (mapPointCloud) delete mapPointCloud; // set new map mapPointCloud = newPointCloud; icp.setMap(*mapPointCloud); // Publish map point cloud // FIXME this crash when used without descriptor if (mapPub.getNumSubscribers()) mapPub.publish(PointMatcher_ros::pointMatcherCloudToRosMsg<float>(*mapPointCloud, mapFrame, mapCreationTime)); }
TEST(icpTest, icpSequenceTest) { DP pts0 = DP::load(dataPath + "cloud.00000.vtk"); DP pts1 = DP::load(dataPath + "cloud.00001.vtk"); DP pts2 = DP::load(dataPath + "cloud.00002.vtk"); PM::TransformationParameters Ticp = PM::Matrix::Identity(4,4); PM::ICPSequence icpSequence; std::ifstream ifs((dataPath + "default.yaml").c_str()); icpSequence.loadFromYaml(ifs); EXPECT_FALSE(icpSequence.hasMap()); DP map = icpSequence.getInternalMap(); EXPECT_EQ(map.getNbPoints(), 0u); EXPECT_EQ(map.getHomogeneousDim(), 0u); map = icpSequence.getMap(); EXPECT_EQ(map.getNbPoints(), 0u); EXPECT_EQ(map.getHomogeneousDim(), 0u); icpSequence.setMap(pts0); map = icpSequence.getInternalMap(); EXPECT_EQ(map.getNbPoints(), pts0.getNbPoints()); EXPECT_EQ(map.getHomogeneousDim(), pts0.getHomogeneousDim()); Ticp = icpSequence(pts1); map = icpSequence.getMap(); EXPECT_EQ(map.getNbPoints(), pts0.getNbPoints()); EXPECT_EQ(map.getHomogeneousDim(), pts0.getHomogeneousDim()); Ticp = icpSequence(pts2); map = icpSequence.getMap(); EXPECT_EQ(map.getNbPoints(), pts0.getNbPoints()); EXPECT_EQ(map.getHomogeneousDim(), pts0.getHomogeneousDim()); icpSequence.clearMap(); map = icpSequence.getInternalMap(); EXPECT_EQ(map.getNbPoints(), 0u); EXPECT_EQ(map.getHomogeneousDim(), 0u); }
void Mapper::setMap(DP* newPointCloud) { // delete old map if (mapPointCloud) delete mapPointCloud; // set new map mapPointCloud = newPointCloud; cerr << "copying map to ICP" << endl; //FIXME: this is taking the all map instead of the small part we need icp.setMap(*mapPointCloud); // This do a full copy... cerr << "publishing map" << endl; // Publish map point cloud // FIXME this crash when used without descriptor if (mapPub.getNumSubscribers()) mapPub.publish(PointMatcher_ros::pointMatcherCloudToRosMsg<float>(*mapPointCloud, mapFrame, mapCreationTime)); }