31 PointCloudUtility::fusePointclouds(std::string file1, std::string file2, std::string out)
33 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr pc1 = loadPointCloud(file1);
34 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr pc2 = loadPointCloud(file2);
35 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr pc1Aligned =
36 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr(
new pcl::PointCloud<pcl::PointXYZRGBA>);
37 pcl::ApproximateVoxelGrid<pcl::PointXYZRGBA> filter;
39 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr temp1 =
40 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr(
new pcl::PointCloud<pcl::PointXYZRGBA>);
41 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr temp2 =
42 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr(
new pcl::PointCloud<pcl::PointXYZRGBA>);
51 pcl::IterativeClosestPoint<pcl::PointXYZRGBA, pcl::PointXYZRGBA> aligner;
52 aligner.setEuclideanFitnessEpsilon(1e-20);
53 aligner.setTransformationEpsilon(1e-20);
54 aligner.setMaximumIterations(10000000);
55 aligner.setUseReciprocalCorrespondences(
true);
56 aligner.setInputSource(pc1);
57 aligner.setInputTarget(pc2);
58 aligner.align(*pc1Aligned);
59 pcl::PointCloud<pcl::PointXYZRGBA> pcout = *pc2 + *pc1Aligned;
61 pcl::io::savePCDFileASCII(out, pcout);
65 PointCloudUtility::moveOrigin(std::string file, std::string out, Eigen::Vector3f translation)
68 transform.block<3, 1>(0, 3) = translation;
69 this->transformPointcloud(file, out,
transform);
73 PointCloudUtility::rotatePointCloud(std::string file, std::string out,
Eigen::Matrix3f rotation)
77 this->transformPointcloud(file, out,
transform);
81 PointCloudUtility::transformPointcloud(std::string file, std::string out,
Eigen::Matrix4f pose)
83 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr
pc = loadPointCloud(file);
84 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr transformed_cloud(
85 new pcl::PointCloud<pcl::PointXYZRGBA>());
86 pcl::transformPointCloud<pcl::PointXYZRGBA>(*
pc, *transformed_cloud, pose);
88 pcl::io::savePCDFileASCII(out, *transformed_cloud);
92 PointCloudUtility::showResult(std::string file)
94 pcl::visualization::PCLVisualizer viewer;
95 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr
pc = loadPointCloud(file);
96 viewer.addPointCloud(
pc);
97 viewer.addCoordinateSystem(1.0);
99 while (!viewer.wasStopped())
105 PointCloudUtility::process()
107 std::string file1 = getProperty<std::string>(
"PointCloud1").getValue();
108 std::string file2 = getProperty<std::string>(
"PointCloud2").getValue();
109 std::string out = getProperty<std::string>(
"ResultFileName").getValue();
110 bool merge = getProperty<bool>(
"Merge").getValue();
111 bool transform = getProperty<bool>(
"Transform").getValue();
112 bool view = getProperty<bool>(
"Show").getValue();
113 std::string temp =
"temp.pcd";
118 fusePointclouds(file1, file2, temp);
123 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr
pc = loadPointCloud(file1);
124 pcl::io::savePCDFileASCII(temp, *
pc);
128 Eigen::Vector3f tVector;
129 tVector << getProperty<float>(
"X").getValue(), getProperty<float>(
"Y").getValue(),
130 getProperty<float>(
"Z").getValue();
132 rot << getProperty<float>(
"Roll").getValue(), getProperty<float>(
"Pitch").getValue(),
133 getProperty<float>(
"Yaw").getValue();
135 VirtualRobot::MathTools::posrpy2eigen4f(tVector, rot,
transpose);
136 transformPointcloud(temp, out,
transpose);
141 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr
pc = loadPointCloud(temp);
142 pcl::io::savePCDFileASCII(out, *
pc);
165 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr
166 PointCloudUtility::loadPointCloud(std::string
filename)
169 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr model(
new pcl::PointCloud<pcl::PointXYZRGBA>());
175 else if (pcl::io::loadPCDFile<pcl::PointXYZRGBA>(
filename.c_str(), *model) == -1)