2#include <ufo/map/integration/integration.hpp>
3#include <ufo/map/integration/integration_parameters.hpp>
4#include <ufo/map/node.hpp>
5#include <ufo/map/point_cloud.hpp>
6#include <ufo/map/points/points_predicate.hpp>
7#include <ufo/map/predicate/satisfies.hpp>
8#include <ufo/map/predicate/spatial.hpp>
9#include <ufo/map/types.hpp>
10#include <ufo/map/ufomap.hpp>
11#include <ufo/numeric/pose6.hpp>
12#include <ufo/util/timing.hpp>
25#include "ufo/map/point.hpp"
32bool stob(std::string s,
bool throw_on_error =
true)
36 std::istringstream is(s);
43 is >> std::boolalpha >> result;
46 if (is.fail() && throw_on_error) {
47 throw std::invalid_argument(s.append(
" is not convertable to bool"));
53void doStuff(std::filesystem::path folder,
bool should_transform)
55 if (std::filesystem::exists(folder /
"original")) {
56 std::ifstream poses_file(folder /
"original/poses.csv", std::ios::binary);
57 if (std::string line; std::getline(poses_file, line)) {
58 std::cout << line <<
'\n';
60 std::cerr <<
"Error processing " << (folder /
"original/poses.csv") <<
'\n';
64 std::unordered_map<std::size_t, ufo::Pose6d> poses;
71 poses_file >> index >> t >> timestamp >> t >> pose.x() >> t >> pose.y() >> t >>
72 pose.z() >> t >> pose.qx() >> t >> pose.qy() >> t >> pose.qz() >> t >>
77 std::vector<std::filesystem::path> pcds;
78 for (
auto const& entry :
std::filesystem::directory_iterator(folder /
"original")) {
79 if (
".pcd" == entry.path().extension()) {
80 pcds.push_back(entry.path().stem());
83 std::sort(std::begin(pcds), std::end(pcds));
87 std::execution::seq, std::cbegin(pcds), std::cend(pcds),
88 [&](std::string filename) {
89 std::cout << (filename +
'\n');
90 pose = poses[std::stoull(filename)];
93 ufo::readPointCloudPCD(folder /
"original" / (filename +
".pcd"), cloud);
95 if (should_transform) {
97 ufo::applyTransform(cloud, pose);
100 ufo::writePointCloudPCD(folder /
"pcd" / (filename +
".pcd"), cloud, pose);
103 for (std::string filename : pcds) {
104 std::cout << filename <<
'\n';
105 pose = poses[std::stoull(filename)];
106 std::cout << pose <<
'\n';
109 ufo::readPointCloudPCD(folder /
"original" / (filename +
".pcd"), cloud);
111 if (should_transform) {
112 ufo::applyTransform(cloud, pose);
115 ufo::writePointCloudPCD(folder /
"pcd" / (filename +
".pcd"), cloud, pose);
120 for (
auto const& entry :
std::filesystem::directory_iterator(folder)) {
121 if (std::filesystem::is_directory(entry)) {
122 doStuff(entry, should_transform);
128int main(
int argc,
char* argv[])
131 std::cout <<
"Usage: fix_pcd SHOULD_TRANSFORM FOLDER_PATH\n";
135 bool should_transform = stob(argv[1]);
137 std::filesystem::path folder(argv[2]);
139 doStuff(folder, should_transform);