PoseRTV.h
Go to the documentation of this file.
1 
7 #pragma once
8 
9 #include <gtsam_unstable/dllexport.h>
10 #include <gtsam/geometry/Pose3.h>
12 
13 namespace gtsam {
14 
16 typedef Vector3 Velocity3;
17 
23 class GTSAM_UNSTABLE_EXPORT PoseRTV : public ProductLieGroup<Pose3,Velocity3> {
24 protected:
25 
28 
29 public:
30 
31  // constructors - with partial versions
32  PoseRTV() {}
33  PoseRTV(const Point3& t, const Rot3& rot, const Velocity3& vel)
34  : Base(Pose3(rot, t), vel) {}
35  PoseRTV(const Rot3& rot, const Point3& t, const Velocity3& vel)
36  : Base(Pose3(rot, t), vel) {}
37  explicit PoseRTV(const Point3& t)
38  : Base(Pose3(Rot3(), t),Vector3::Zero()) {}
39  PoseRTV(const Pose3& pose, const Velocity3& vel)
40  : Base(pose, vel) {}
41  explicit PoseRTV(const Pose3& pose)
42  : Base(pose,Vector3::Zero()) {}
43 
44  // Construct from Base
45  PoseRTV(const Base& base)
46  : Base(base) {}
47 
49  PoseRTV(double roll, double pitch, double yaw, double x, double y, double z,
50  double vx, double vy, double vz);
51 
53  explicit PoseRTV(const Vector& v);
54 
55  // access
56  const Pose3& pose() const { return first; }
57  const Velocity3& v() const { return second; }
58  const Point3& t() const { return pose().translation(); }
59  const Rot3& R() const { return pose().rotation(); }
60 
61  // longer function names
62  const Point3& translation() const { return pose().translation(); }
63  const Rot3& rotation() const { return pose().rotation(); }
64  const Velocity3& velocity() const { return second; }
65 
66  // Access to vector for ease of use with Matlab
67  // and avoidance of Point3
68  Vector vector() const;
69  Vector translationVec() const { return pose().translation(); }
70  const Velocity3& velocityVec() const { return velocity(); }
71 
72  // testable
73  bool equals(const PoseRTV& other, double tol=1e-6) const;
74  void print(const std::string& s="") const;
75 
78  using Base::dimension;
79  using Base::dim;
80  using Base::Dim;
81  using Base::retract;
82  using Base::localCoordinates;
83  using Base::LocalCoordinates;
85 
88 
90  double range(const PoseRTV& other,
91  OptionalJacobian<1,9> H1=boost::none,
92  OptionalJacobian<1,9> H2=boost::none) const;
94 
97 
100  PoseRTV planarDynamics(double vel_rate, double heading_rate, double max_accel, double dt) const;
101 
106  PoseRTV flyingDynamics(double pitch_rate, double heading_rate, double lift_control, double dt) const;
107 
109  PoseRTV generalDynamics(const Vector& accel, const Vector& gyro, double dt) const;
110 
114  Vector6 imuPrediction(const PoseRTV& x2, double dt) const;
115 
119  Point3 translationIntegration(const Rot3& r2, const Velocity3& v2, double dt) const;
120 
124  inline Point3 translationIntegration(const PoseRTV& x2, double dt) const {
125  return translationIntegration(x2.rotation(), x2.velocity(), dt);
126  }
127 
129  inline Vector translationIntegrationVec(const PoseRTV& x2, double dt) const {
130  return translationIntegration(x2, dt);
131  }
132 
140  PoseRTV transformed_from(const Pose3& trans,
141  ChartJacobian Dglobal = boost::none,
142  OptionalJacobian<9, 6> Dtrans = boost::none) const;
143 
147 
150  static Matrix RRTMbn(const Vector3& euler);
151  static Matrix RRTMbn(const Rot3& att);
152 
155  static Matrix RRTMnb(const Vector3& euler);
156  static Matrix RRTMnb(const Rot3& att);
158 
159 private:
161  friend class boost::serialization::access;
162  template<class Archive>
163  void serialize(Archive & ar, const unsigned int /*version*/) {
164  ar & BOOST_SERIALIZATION_NVP(first);
165  ar & BOOST_SERIALIZATION_NVP(second);
166  }
167 };
168 
169 
170 template<>
171 struct traits<PoseRTV> : public internal::LieGroup<PoseRTV> {};
172 
173 // Define Range functor specializations that are used in RangeFactor
174 template <typename A1, typename A2> struct Range;
175 
176 template<>
177 struct Range<PoseRTV, PoseRTV> : HasRange<PoseRTV, PoseRTV, double> {};
178 
179 } // \namespace gtsam
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:155
int EIGEN_BLAS_FUNC() rot(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pc, RealScalar *ps)
Scalar * y
Vector translationVec() const
Definition: PoseRTV.h:69
Vector v2
Eigen::Vector3d Vector3
Definition: Vector.h:43
const Velocity3 & velocityVec() const
Definition: PoseRTV.h:70
PoseRTV(const Point3 &t, const Rot3 &rot, const Velocity3 &vel)
Definition: PoseRTV.h:33
Point3 translationIntegration(const PoseRTV &x2, double dt) const
Definition: PoseRTV.h:124
static const Velocity3 vel(0.4, 0.5, 0.6)
const Pose3 & pose() const
Definition: PoseRTV.h:56
Vector3 Velocity3
Velocity is currently typedef&#39;d to Vector3.
Definition: NavState.h:28
ArrayXcf v
Definition: Cwise_arg.cpp:1
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:43
PoseRTV(const Pose3 &pose, const Velocity3 &vel)
Definition: PoseRTV.h:39
Pose3 x2(Rot3::Ypr(0.0, 0.0, 0.0), l2)
const Rot3 & R() const
Definition: PoseRTV.h:59
Group product of two Lie Groups.
PoseRTV(const Point3 &t)
Definition: PoseRTV.h:37
Matrix trans(const Matrix &A)
Definition: base/Matrix.h:245
PoseRTV(const Base &base)
Definition: PoseRTV.h:45
const double dt
StridedVectorType vy(make_vector(y,*n, std::abs(*incy)))
constexpr int first(int i)
Implementation details for constexpr functions.
Eigen::VectorXd Vector
Definition: Vector.h:38
const Velocity3 & v() const
Definition: PoseRTV.h:57
const Point3 & t() const
Definition: PoseRTV.h:58
static const Pose3 pose(Rot3(Vector3(1,-1,-1).asDiagonal()), Point3(0, 0, 0.5))
Array< double, 1, 3 > e(1./3., 0.5, 2.)
RealScalar s
static const double r2
void serialize(Archive &ar, const unsigned int)
Definition: PoseRTV.h:163
Velocity3_ velocity(const NavState_ &X)
const mpreal dim(const mpreal &a, const mpreal &b, mp_rnd_t r=mpreal::get_default_rnd())
Definition: mpreal.h:2201
traits
Definition: chartTesting.h:28
PoseRTV(const Rot3 &rot, const Point3 &t, const Velocity3 &vel)
Definition: PoseRTV.h:35
ProductLieGroup< Pose3, Velocity3 > Base
Definition: PoseRTV.h:26
const Velocity3 & velocity() const
Definition: PoseRTV.h:64
PoseRTV(const Pose3 &pose)
Definition: PoseRTV.h:41
Both LieGroupTraits and Testable.
Definition: Lie.h:228
OptionalJacobian< 9, 9 > ChartJacobian
Definition: PoseRTV.h:27
const Point3 & translation() const
Definition: PoseRTV.h:62
StridedVectorType vx(make_vector(x,*n, std::abs(*incx)))
const G double tol
Definition: Group.h:83
Annotation indicating that a class derives from another given type.
Definition: attr.h:42
Vector3 Point3
Definition: Point3.h:35
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
3D Pose
Point2 t(10, 10)
Vector translationIntegrationVec(const PoseRTV &x2, double dt) const
Definition: PoseRTV.h:129
const Rot3 & rotation() const
Definition: PoseRTV.h:63


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:43:27