Skip to content

Commit 7b2a5c8

Browse files
committed
Take nomalization from KISS
1 parent 16e514f commit 7b2a5c8

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

src/mapmos/pybind/Deskew.cpp

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,31 @@ std::vector<Eigen::Vector3d> Deskew(const std::vector<Eigen::Vector3d> &frame,
3737
const std::vector<double> &timestamps,
3838
const Sophus::SE3d &relative_motion) {
3939
const std::vector<Eigen::Vector3d> &deskewed_frame = [&]() {
40-
const auto &omega = relative_motion.log();
41-
const Sophus::SE3d &inverse_motion = relative_motion.inverse();
42-
std::vector<Eigen::Vector3d> deskewed_frame(frame.size());
43-
tbb::parallel_for(
44-
// Index Range
45-
tbb::blocked_range<size_t>{0, deskewed_frame.size()},
46-
// Parallel Compute
47-
[&](const tbb::blocked_range<size_t> &r) {
48-
for (size_t idx = r.begin(); idx < r.end(); ++idx) {
49-
const auto &point = frame.at(idx);
50-
const auto &stamp = timestamps.at(idx);
51-
const auto pose = inverse_motion * Sophus::SE3d::exp(stamp * omega);
52-
deskewed_frame.at(idx) = pose * point;
53-
};
54-
});
55-
return deskewed_frame;
40+
if (timestamps.empty()) {
41+
return frame;
42+
} else {
43+
const auto &[min, max] = std::minmax_element(timestamps.cbegin(), timestamps.cend());
44+
const double min_time = *min;
45+
const double max_time = *max;
46+
const auto normalize = [&](const double t) {
47+
return (t - min_time) / (max_time - min_time);
48+
};
49+
const auto &omega = relative_motion.log();
50+
std::vector<Eigen::Vector3d> deskewed_frame(frame.size());
51+
tbb::parallel_for(
52+
// Index Range
53+
tbb::blocked_range<size_t>{0, deskewed_frame.size()},
54+
// Parallel Compute
55+
[&](const tbb::blocked_range<size_t> &r) {
56+
for (size_t idx = r.begin(); idx < r.end(); ++idx) {
57+
const auto &point = frame.at(idx);
58+
const auto &stamp = normalize(timestamps.at(idx));
59+
const auto pose = Sophus::SE3d::exp((stamp - 1.0) * omega);
60+
deskewed_frame.at(idx) = pose * point;
61+
};
62+
});
63+
return deskewed_frame;
64+
}
5665
}();
5766
return deskewed_frame;
5867
}

0 commit comments

Comments
 (0)