21#include "pcl/io/pcd_io.h"
22#include "pcl/point_types.h"
25namespace localization {
29 pcd_folder_ = pcd_folder;
30 std::string stamp_file = pcd_folder_ +
"/pcd_timestamp.txt";
32 if ((stamp_file_handle_ = fopen(stamp_file.c_str(),
"a")) ==
nullptr) {
33 AERROR <<
"Cannot open stamp file!";
38 if (stamp_file_handle_ !=
nullptr) {
39 fclose(stamp_file_handle_);
44 AINFO <<
"Compensated pcd callback.";
46 msg.ParseFromString(msg_string);
48 static unsigned int index = 1;
50 std::stringstream ss_pcd;
51 ss_pcd << pcd_folder_ <<
"/" << index <<
".pcd";
52 std::string pcd_filename = ss_pcd.str();
54 WritePcdFile(pcd_filename, msg);
56 fprintf(stamp_file_handle_,
"%u %lf\n", index, timestamp);
61void PCDExporter::WritePcdFile(
const std::string &filename,
63 pcl::PointCloud<velodyne::PointXYZIT> cloud;
64 cloud.width = msg.
width();
65 cloud.height = msg.
height();
66 cloud.is_dense =
false;
67 cloud.points.resize(cloud.width * cloud.height);
69 if (cloud.width == 0 || cloud.height == 0) {
71 cloud.height = msg.point_size();
72 cloud.points.resize(msg.point_size());
75 for (
unsigned int i = 0; i < static_cast<unsigned int>(cloud.points.size());
77 cloud.points[i].x = msg.
point(i).
x();
78 cloud.points[i].y = msg.
point(i).
y();
79 cloud.points[i].z = msg.
point(i).
z();
80 cloud.points[i].intensity =
84 pcl::io::savePCDFileBinaryCompressed(filename, cloud);
Cyber has builtin time type Time.
double ToSecond() const
convert time to second.
void CompensatedPcdCallback(const std::string &msg)
PCDExporter(const std::string &pcd_folder)
optional double measurement_time
repeated PointXYZIT point
optional uint32 intensity