1#ifndef _STRUCT_SE3_CURVE_H
2#define _STRUCT_SE3_CURVE_H
5#include <boost/math/constants/constants.hpp>
23template <
typename Time =
double,
typename Numeric = Time,
bool Safe = false>
25 Eigen::Transform<Numeric, 3, Eigen::Affine>,
26 Eigen::Matrix<Numeric, 6, 1> > {
28 typedef Eigen::Transform<Numeric, 3, Eigen::Affine>
transform_t;
159 throw std::invalid_argument(
160 "The translation curve should be of dimension 3.");
163 throw std::invalid_argument(
164 "Min bounds of translation and rotation curve are not the same.");
167 throw std::invalid_argument(
168 "Max bounds of translation and rotation curve are not the same.");
179 throw std::invalid_argument(
180 "Translation curve should always be of dimension 3");
199 const Numeric
prec = Eigen::NumTraits<Numeric>::dummy_precision())
const {
211 const Numeric
prec = Eigen::NumTraits<Numeric>::dummy_precision())
const {
224 return !(*
this ==
other);
233 const std::size_t
order)
const {
235 throw std::invalid_argument(
236 "Translation curve should always be of dimension 3");
245 throw std::logic_error(
"Compute derivate for SE3 is not implemented yet.");
259 std::size_t
virtual dim()
const {
return dim_; };
287 template <
class Archive>
293 ar& boost::serialization::make_nvp(
"dim",
dim_);
296 ar& boost::serialization::make_nvp(
"T_min",
T_min_);
297 ar& boost::serialization::make_nvp(
"T_max",
T_max_);
304 throw std::invalid_argument(
"Tmin should be inferior to Tmax");
307 throw std::invalid_argument(
308 "Translation curve should always be of dimension 3");
318 SINGLE_ARG(
typename Time,
typename Numeric,
bool Safe),
#define DEFINE_CLASS_TEMPLATE_VERSION(Template, Type)
Definition archive.hpp:27
#define SINGLE_ARG(...)
Definition archive.hpp:23
interface for a Curve of arbitrary dimension.
Definition bernstein.h:20
Eigen::Vector3d point3_t
Definition fwd.h:71
Eigen::Matrix< double, 3, 3 > matrix3_t
Definition fwd.h:74
bool isApprox(const T a, const T b, const T eps=1e-6)
Definition curve_abc.h:25
Definition of a cubic spline.
Composition of a curve of any type of dimension 3 and a curve representing an rotation (in current im...
Definition se3_curve.h:26
SE3Curve()
Empty constructor. Curve obtained this way can not perform other class functions.
Definition se3_curve.h:57
Eigen::Matrix< Scalar, 6, 1 > point_derivate_t
Definition se3_curve.h:30
time_t max() const
Get the maximum time for which the curve is defined.
Definition se3_curve.h:265
const curve_translation_ptr_t translation_curve() const
const accessor to the translation curve
Definition se3_curve.h:270
SE3Curve< Time, Numeric, Safe > SE3Curve_t
Definition se3_curve.h:50
Eigen::Transform< Numeric, 3, Eigen::Affine > transform_t
Definition se3_curve.h:28
std::shared_ptr< curve_translation_t > curve_translation_ptr_t
Definition se3_curve.h:46
SE3Curve(const transform_t &init_transform, const transform_t &end_transform, const time_t &t_min, const time_t &t_max)
Constructor from init/end transform use polynomial of degree 1 for position and SO3Linear for rotatio...
Definition se3_curve.h:74
curve_abc< Time, Numeric, Safe, pointX_t > curve_X_t
Definition se3_curve.h:37
virtual point_t operator()(const time_t t) const
Evaluation of the SE3Curve at time t.
Definition se3_curve.h:177
virtual std::size_t dim() const
Get dimension of curve.
Definition se3_curve.h:259
SE3Curve(const point3_t &init_pos, const point3_t &end_pos, const Quaternion &init_rot, const Quaternion &end_rot, const time_t &t_min, const time_t &t_max)
Constructor from init/end pose, with quaternion. use polynomial of degree 1 for position and SO3Linea...
Definition se3_curve.h:90
polynomial< Time, Numeric, Safe, point_derivate_t > curve_derivate_t
Definition se3_curve.h:35
std::shared_ptr< curve_rotation_t > curve_rotation_ptr_t
Definition se3_curve.h:45
curve_translation_ptr_t translation_curve_
Definition se3_curve.h:279
curve_derivate_t compute_derivate(const std::size_t) const
Definition se3_curve.h:244
SO3Linear< Time, Numeric, Safe > SO3Linear_t
Definition se3_curve.h:48
virtual point_derivate_t derivate(const time_t t, const std::size_t order) const
Evaluation of the derivative of order N of spline at time t.
Definition se3_curve.h:232
std::shared_ptr< curve_X_t > curve_ptr_t
Definition se3_curve.h:44
virtual bool operator!=(const SE3Curve_t &other) const
Definition se3_curve.h:223
SE3Curve(curve_translation_ptr_t translation_curve, curve_rotation_ptr_t rotation_curve)
Constructor from from translation and rotation curves object.
Definition se3_curve.h:150
transform_t point_t
Definition se3_curve.h:29
Time time_t
Definition se3_curve.h:32
time_t min() const
Get the minimum time for which the curve is defined.
Definition se3_curve.h:262
virtual bool isApprox(const curve_abc_t *other, const Numeric prec=Eigen::NumTraits< Numeric >::dummy_precision()) const
isApprox check if other and *this are approximately equal given a precision threshold Only two curves...
Definition se3_curve.h:209
curve_abc< Time, Numeric, Safe, point_t, point_derivate_t > curve_abc_t
Definition se3_curve.h:34
virtual ~SE3Curve()
Destructor.
Definition se3_curve.h:66
curve_abc< Time, Numeric, Safe, point3_t, point3_t > curve_translation_t
Definition se3_curve.h:39
SE3Curve(curve_translation_ptr_t translation_curve, const Quaternion &init_rot, const Quaternion &end_rot)
Constructor from curve for the translation and init/end rotation, with quaternion....
Definition se3_curve.h:120
SE3Curve(curve_translation_ptr_t translation_curve, const matrix3_t &init_rot, const matrix3_t &end_rot)
Constructor from curve for the translation and init/end rotation, with rotation matrix....
Definition se3_curve.h:135
const curve_rotation_ptr_t rotation_curve() const
const accessor to the rotation curve
Definition se3_curve.h:274
time_t T_min_
Definition se3_curve.h:281
Eigen::Quaternion< Scalar > Quaternion
Definition se3_curve.h:31
SE3Curve(const point3_t &init_pos, const point3_t &end_pos, const matrix3_t &init_rot, const matrix3_t &end_rot, const time_t &t_min, const time_t &t_max)
Constructor from init/end pose, with rotation matrix. use polynomial of degree 1 for position and SO3...
Definition se3_curve.h:104
friend class boost::serialization::access
Definition se3_curve.h:285
std::size_t dim_
Definition se3_curve.h:278
curve_derivate_t * compute_derivate_ptr(const std::size_t order) const
Compute the derived curve at order N.
Definition se3_curve.h:252
polynomial< Time, Numeric, Safe, pointX_t > polynomial_t
Definition se3_curve.h:49
void serialize(Archive &ar, const unsigned int version)
Definition se3_curve.h:288
virtual std::size_t degree() const
Get the degree of the curve.
Definition se3_curve.h:268
bool isApprox(const SE3Curve_t &other, const Numeric prec=Eigen::NumTraits< Numeric >::dummy_precision()) const
isApprox check if other and *this are approximately equals. Only two curves of the same class can be ...
Definition se3_curve.h:197
Numeric Scalar
Definition se3_curve.h:27
virtual bool operator==(const SE3Curve_t &other) const
Definition se3_curve.h:219
curve_rotation_ptr_t rotation_curve_
Definition se3_curve.h:280
time_t T_max_
Definition se3_curve.h:281
curve_abc< Time, Numeric, Safe, matrix3_t, point3_t > curve_rotation_t
Definition se3_curve.h:42
Represents a linear interpolation in SO3, using the slerp method provided by Eigen::Quaternion.
Definition so3_linear.h:21
Represents a curve of dimension Dim. If value of parameter Safe is false, no verification is made on ...
Definition curve_abc.h:36
Represents a polynomial of an arbitrary order defined on the interval . It follows the equation : ...
Definition polynomial.h:35