gtsam_points
Loading...
Searching...
No Matches
bspline.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2021 Kenji Koide (k.koide@aist.go.jp)
3
4#pragma once
5
6#include <gtsam/slam/expressions.h>
7
8namespace gtsam_points {
9
22gtsam::Pose3_ bspline(const gtsam::Pose3_& pose0, const gtsam::Pose3_& pose1, const gtsam::Pose3_& pose2, const gtsam::Pose3_& pose3, const gtsam::Double_& t);
23
37gtsam::Pose3_ bspline_se3(const gtsam::Pose3_& pose0, const gtsam::Pose3_& pose1, const gtsam::Pose3_& pose2, const gtsam::Pose3_& pose3, const gtsam::Double_& t);
38
50gtsam::Rot3_ bspline_so3(const gtsam::Rot3_& rot0, const gtsam::Rot3_& rot1, const gtsam::Rot3_& rot2, const gtsam::Rot3_& rot3, const gtsam::Double_& t);
51
63gtsam::Vector3_ bspline_trans(const gtsam::Vector3_& trans0, const gtsam::Vector3_& trans1, const gtsam::Vector3_& trans2, const gtsam::Vector3_& trans3, const gtsam::Double_& t);
64
76gtsam::Vector3_
77bspline_angular_vel(const gtsam::Rot3_& rot0, const gtsam::Rot3_& rot1, const gtsam::Rot3_& rot2, const gtsam::Rot3_& rot3, const gtsam::Double_& t, const double knot_interval);
78
90gtsam::Vector3_ bspline_linear_vel(
91 const gtsam::Vector3_& trans0,
92 const gtsam::Vector3_& trans1,
93 const gtsam::Vector3_& trans2,
94 const gtsam::Vector3_& trans3,
95 const gtsam::Double_& t,
96 const double knot_interval);
97
109gtsam::Vector3_ bspline_linear_acc(
110 const gtsam::Vector3_& trans0,
111 const gtsam::Vector3_& trans1,
112 const gtsam::Vector3_& trans2,
113 const gtsam::Vector3_& trans3,
114 const gtsam::Double_& t,
115 const double knot_interval);
116
129gtsam::Vector6_ bspline_imu(
130 const gtsam::Pose3_ pose0,
131 const gtsam::Pose3_ pose1,
132 const gtsam::Pose3_ pose2,
133 const gtsam::Pose3_ pose3,
134 const gtsam::Double_& t,
135 const double knot_interval,
136 const gtsam::Vector3& g);
137
138// Utility functions
139inline gtsam::Pose3_ bspline(const gtsam::Key key1, const gtsam::Double_& t) {
140 return bspline(gtsam::Pose3_(key1 - 1), gtsam::Pose3_(key1), gtsam::Pose3_(key1 + 1), gtsam::Pose3_(key1 + 2), t);
141}
142
143inline gtsam::Pose3_ bspline_se3(const gtsam::Key key1, const gtsam::Double_& t) {
144 return bspline_se3(gtsam::Pose3_(key1 - 1), gtsam::Pose3_(key1), gtsam::Pose3_(key1 + 1), gtsam::Pose3_(key1 + 2), t);
145}
146
147inline gtsam::Vector6_ bspline_imu(const gtsam::Key key1, const gtsam::Double_& t, const double knot_interval, const gtsam::Vector3& g) {
148 return bspline_imu(gtsam::Pose3_(key1 - 1), gtsam::Pose3_(key1), gtsam::Pose3_(key1 + 1), gtsam::Pose3_(key1 + 2), t, knot_interval, g);
149}
150
151} // namespace gtsam_points