InterpolatingTimeQueue.cpp
Go to the documentation of this file.
2
6
8{
9
10 // TODO(fabian.reister): remove and use simox
11 Eigen::Isometry3f
12 interpolatePose2(const Eigen::Isometry3f& posePre, const Eigen::Isometry3f& poseNext, float t)
13 {
15 t = std::clamp(t, 0.F, 1.F);
16
17 Eigen::Isometry3f pose = Eigen::Isometry3f::Identity();
18
19 pose.translation() = (1. - t) * posePre.translation() + t * poseNext.translation();
20
21 const Eigen::Quaternionf rotPrev(posePre.linear().matrix());
22 const Eigen::Quaternionf rotNext(poseNext.linear().matrix());
23
24 const Eigen::Quaternionf rotNew = rotPrev.slerp(t, rotNext);
25
26 pose.linear() = rotNew.toRotationMatrix();
27
28 return pose;
29 }
30
32 interpolate(const PoseStamped& posePre, const PoseStamped& poseNext, float t)
33 {
35 t = std::clamp(t, 0.F, 1.F);
36
37 PoseStamped ps;
38 ps.timestamp = posePre.timestamp + (poseNext.timestamp - posePre.timestamp) * t;
39
40 ps.pose = interpolatePose2(posePre.pose, poseNext.pose, t);
41
42 return ps;
43 }
44
45
46} // namespace armarx::localization_and_mapping::cartographer_adapter
Eigen::Matrix3f slerp(float, const Eigen::Matrix3f &)
Definition Pose.cpp:233
Quaternion< float, 0 > Quaternionf
Eigen::Isometry3f interpolatePose2(const Eigen::Isometry3f &posePre, const Eigen::Isometry3f &poseNext, float t)
PoseStamped interpolate(const PoseStamped &posePre, const PoseStamped &poseNext, float t)
#define ARMARX_TRACE
Definition trace.h:77