Skip to content

Instantly share code, notes, and snippets.

@stefanbuettner
Created March 8, 2016 13:48
Example of inconsistent reading/writing of PCD files
#include <cstdlib>
#include <pcl/io/pcd_io.h>
#include <iostream>
using namespace pcl;
using namespace std;
int main (int argc, char* argv[])
{
PointCloud<PointXYZI> cloud;
PCLPointCloud2 cloud_blob;
PCLPointCloud2 cloud_blob_binary;
PCLPointCloud2 cloud_blob_ascii;
PCLPointCloud2 cloud_blob_binary_blob;
PCLPointCloud2 cloud_blob_ascii_blob;
cloud.width = 640;
cloud.height = 480;
cloud.points.resize (cloud.width * cloud.height);
cloud.is_dense = true;
srand (static_cast<unsigned int> (time (NULL)));
size_t nr_p = cloud.points.size ();
// Randomly create a new point cloud
for (size_t i = 0; i < nr_p; ++i)
{
cloud[i].x = static_cast<float> (1024 * rand () / (RAND_MAX + 1.0));
cloud[i].y = static_cast<float> (1024 * rand () / (RAND_MAX + 1.0));
cloud[i].z = static_cast<float> (1024 * rand () / (RAND_MAX + 1.0));
cloud.points[i].intensity = static_cast<float> (i);
}
toPCLPointCloud2(cloud, cloud_blob);
io::savePCDFile("cloud_binary.pcd", cloud, true);
io::loadPCDFile("cloud_binary.pcd", cloud_blob_binary);
cout << std::boolalpha << "binary: "
<< cloud_blob.data.size() << " = " << cloud_blob_binary.data.size()
<< " equal: " << (cloud_blob.data.size() == cloud_blob_binary.data.size())
<< endl;
io::savePCDFile("cloud_ascii.pcd", cloud, false);
io::loadPCDFile("cloud_ascii.pcd", cloud_blob_ascii);
cout << std::boolalpha << "ascii : "
<< cloud_blob.data.size() << " = " << cloud_blob_ascii.data.size()
<< " equal: " << (cloud_blob.data.size() == cloud_blob_ascii.data.size())
<< endl;
io::savePCDFile("blob_binary.pcd", cloud_blob, Eigen::Vector4f::Zero(), Eigen::Quaternionf::Identity(), true);
io::loadPCDFile("blob_binary.pcd", cloud_blob_binary_blob);
cout << std::boolalpha << "binary_blob: "
<< cloud_blob.data.size() << " = " << cloud_blob_binary_blob.data.size()
<< " equal: " << (cloud_blob.data.size() == cloud_blob_binary_blob.data.size())
<< endl;
io::savePCDFile("blob_ascii.pcd", cloud_blob, Eigen::Vector4f::Zero(), Eigen::Quaternionf::Identity(), false);
io::loadPCDFile("blob_ascii.pcd", cloud_blob_ascii_blob);
cout << std::boolalpha << "ascii_blob : "
<< cloud_blob.data.size() << " = " << cloud_blob_ascii_blob.data.size()
<< " equal: " << (cloud_blob.data.size() == cloud_blob_ascii_blob.data.size())
<< endl;
exit(EXIT_SUCCESS);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment