Pose3.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
17 // \callgraph
18 #pragma once
19 
20 #include <gtsam/config.h>
21 
23 #include <gtsam/geometry/Point3.h>
24 #include <gtsam/geometry/Rot3.h>
25 #include <gtsam/base/Lie.h>
26 
27 namespace gtsam {
28 
29 class Pose2;
30 // forward declare
31 
37 class GTSAM_EXPORT Pose3: public LieGroup<Pose3, 6> {
38 public:
39 
41  typedef Rot3 Rotation;
43 
44 private:
45 
46  Rot3 R_;
48 
49 public:
50 
53 
55  Pose3() : R_(traits<Rot3>::Identity()), t_(traits<Point3>::Identity()) {}
56 
58  Pose3(const Pose3& pose) = default;
59 
60  Pose3& operator=(const Pose3& other) = default;
61 
63  Pose3(const Rot3& R, const Point3& t) :
64  R_(R), t_(t) {
65  }
66 
68  explicit Pose3(const Pose2& pose2);
69 
71  Pose3(const Matrix &T) :
72  R_(T(0, 0), T(0, 1), T(0, 2), T(1, 0), T(1, 1), T(1, 2), T(2, 0), T(2, 1),
73  T(2, 2)), t_(T(0, 3), T(1, 3), T(2, 3)) {
74  }
75 
77  static Pose3 Create(const Rot3& R, const Point3& t,
79  OptionalJacobian<6, 3> Ht = {});
80 
82  static Pose3 FromPose2(const Pose2& p, OptionalJacobian<6,3> H = {});
83 
89  static std::optional<Pose3> Align(const Point3Pairs& abPointPairs);
90 
91  // Version of Pose3::Align that takes 2 matrices.
92  static std::optional<Pose3> Align(const Matrix& a, const Matrix& b);
93 
97 
99  void print(const std::string& s = "") const;
100 
102  bool equals(const Pose3& pose, double tol = 1e-9) const;
103 
107 
109  static Pose3 Identity() {
110  return Pose3();
111  }
112 
114  Pose3 inverse() const;
115 
117  Pose3 operator*(const Pose3& T) const {
118  return Pose3(R_ * T.R_, t_ + R_ * T.t_);
119  }
120 
135  Pose3 interpolateRt(const Pose3& T, double t) const;
136 
140 
142  static Pose3 Expmap(const Vector6& xi, OptionalJacobian<6, 6> Hxi = {});
143 
145  static Vector6 Logmap(const Pose3& pose, OptionalJacobian<6, 6> Hpose = {});
146 
151  Matrix6 AdjointMap() const;
152 
159  Vector6 Adjoint(const Vector6& xi_b,
160  OptionalJacobian<6, 6> H_this = {},
161  OptionalJacobian<6, 6> H_xib = {}) const;
162 
164  Vector6 AdjointTranspose(const Vector6& x,
165  OptionalJacobian<6, 6> H_this = {},
166  OptionalJacobian<6, 6> H_x = {}) const;
167 
183  static Matrix6 adjointMap(const Vector6& xi);
184 
188  static Vector6 adjoint(const Vector6& xi, const Vector6& y,
189  OptionalJacobian<6, 6> Hxi = {},
190  OptionalJacobian<6, 6> H_y = {});
191 
192  // temporary fix for wrappers until case issue is resolved
193  static Matrix6 adjointMap_(const Vector6 &xi) { return adjointMap(xi);}
194  static Vector6 adjoint_(const Vector6 &xi, const Vector6 &y) { return adjoint(xi, y);}
195 
199  static Vector6 adjointTranspose(const Vector6& xi, const Vector6& y,
200  OptionalJacobian<6, 6> Hxi = {},
201  OptionalJacobian<6, 6> H_y = {});
202 
204  static Matrix6 ExpmapDerivative(const Vector6& xi);
205 
207  static Matrix6 LogmapDerivative(const Pose3& xi);
208 
209  // Chart at origin, depends on compile-time flag GTSAM_POSE3_EXPMAP
210  struct GTSAM_EXPORT ChartAtOrigin {
211  static Pose3 Retract(const Vector6& xi, ChartJacobian Hxi = {});
212  static Vector6 Local(const Pose3& pose, ChartJacobian Hpose = {});
213  };
214 
224  static Matrix3 ComputeQforExpmapDerivative(
225  const Vector6& xi, double nearZeroThreshold = 1e-5);
226 
227  using LieGroup<Pose3, 6>::inverse; // version with derivative
228 
236  static Matrix wedge(double wx, double wy, double wz, double vx, double vy,
237  double vz) {
238  return (Matrix(4, 4) << 0., -wz, wy, vx, wz, 0., -wx, vy, -wy, wx, 0., vz, 0., 0., 0., 0.).finished();
239  }
240 
244 
253  {}, OptionalJacobian<3, 3> Hpoint = {}) const;
254 
260  Matrix transformFrom(const Matrix& points) const;
261 
263  inline Point3 operator*(const Point3& point) const {
264  return transformFrom(point);
265  }
266 
275  {}, OptionalJacobian<3, 3> Hpoint = {}) const;
276 
282  Matrix transformTo(const Matrix& points) const;
283 
287 
289  const Rot3& rotation(OptionalJacobian<3, 6> Hself = {}) const;
290 
292  const Point3& translation(OptionalJacobian<3, 6> Hself = {}) const;
293 
295  double x() const {
296  return t_.x();
297  }
298 
300  double y() const {
301  return t_.y();
302  }
303 
305  double z() const {
306  return t_.z();
307  }
308 
310  Matrix4 matrix() const;
311 
317  Pose3 transformPoseFrom(const Pose3& aTb, OptionalJacobian<6, 6> Hself = {},
318  OptionalJacobian<6, 6> HaTb = {}) const;
319 
324  Pose3 transformPoseTo(const Pose3& wTb, OptionalJacobian<6, 6> Hself = {},
325  OptionalJacobian<6, 6> HwTb = {}) const;
326 
332  double range(const Point3& point, OptionalJacobian<1, 6> Hself = {},
333  OptionalJacobian<1, 3> Hpoint = {}) const;
334 
340  double range(const Pose3& pose, OptionalJacobian<1, 6> Hself = {},
341  OptionalJacobian<1, 6> Hpose = {}) const;
342 
348  Unit3 bearing(const Point3& point, OptionalJacobian<2, 6> Hself = {},
349  OptionalJacobian<2, 3> Hpoint = {}) const;
350 
357  Unit3 bearing(const Pose3& pose, OptionalJacobian<2, 6> Hself = {},
358  OptionalJacobian<2, 6> Hpose = {}) const;
359 
363 
369  inline static std::pair<size_t, size_t> translationInterval() {
370  return {3, 5};
371  }
372 
378  static std::pair<size_t, size_t> rotationInterval() {
379  return {0, 2};
380  }
381 
387  Pose3 slerp(double t, const Pose3& other, OptionalJacobian<6, 6> Hx = {},
388  OptionalJacobian<6, 6> Hy = {}) const;
389 
391  GTSAM_EXPORT
392  friend std::ostream &operator<<(std::ostream &os, const Pose3& p);
393 
394  private:
395 #if GTSAM_ENABLE_BOOST_SERIALIZATION
396 
397  friend class boost::serialization::access;
398  template<class Archive>
399  void serialize(Archive & ar, const unsigned int /*version*/) {
400  ar & BOOST_SERIALIZATION_NVP(R_);
401  ar & BOOST_SERIALIZATION_NVP(t_);
402  }
403 #endif
404 
406 #ifdef GTSAM_USE_QUATERNIONS
407  // Align if we are using Quaternions
408  public:
410 #endif
411 };
412 // Pose3 class
413 
421 template<>
422 inline Matrix wedge<Pose3>(const Vector& xi) {
423  return Pose3::wedge(xi(0), xi(1), xi(2), xi(3), xi(4), xi(5));
424 }
425 
426 // Convenience typedef
427 using Pose3Pair = std::pair<Pose3, Pose3>;
428 using Pose3Pairs = std::vector<std::pair<Pose3, Pose3> >;
429 
430 // For MATLAB wrapper
431 typedef std::vector<Pose3> Pose3Vector;
432 
433 template <>
434 struct traits<Pose3> : public internal::LieGroup<Pose3> {};
435 
436 template <>
437 struct traits<const Pose3> : public internal::LieGroup<Pose3> {};
438 
439 // bearing and range traits, used in RangeFactor
440 template <>
441 struct Bearing<Pose3, Point3> : HasBearing<Pose3, Point3, Unit3> {};
442 
443 template<>
444 struct Bearing<Pose3, Pose3> : HasBearing<Pose3, Pose3, Unit3> {};
445 
446 template <typename T>
447 struct Range<Pose3, T> : HasRange<Pose3, T, double> {};
448 
449 } // namespace gtsam
gtsam::Pose3Pair
std::pair< Pose3, Pose3 > Pose3Pair
Definition: Pose3.h:427
H
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 y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate set rrange[*:*] noreverse nowriteback set trange[*:*] noreverse nowriteback set urange[*:*] noreverse nowriteback set vrange[*:*] noreverse nowriteback set xlabel matrix size set x2label set timefmt d m y n H
Definition: gnuplot_common_settings.hh:74
gtsam::Pose3Vector
std::vector< Pose3 > Pose3Vector
Definition: Pose3.h:431
gtsam::Pose3::R_
Rot3 R_
Rotation gRp, between global and pose frame.
Definition: Pose3.h:46
gtsam::Point3Pairs
std::vector< Point3Pair > Point3Pairs
Definition: Point3.h:45
gtsam::translation
Point3_ translation(const Pose3_ &pose)
Definition: slam/expressions.h:93
pose
static const Pose3 pose(Rot3(Vector3(1, -1, -1).asDiagonal()), Point3(0, 0, 0.5))
inverse
const EIGEN_DEVICE_FUNC InverseReturnType inverse() const
Definition: ArrayCwiseUnaryOps.h:411
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
gtsam::operator<<
std::ostream & operator<<(std::ostream &os, const Dih6 &m)
Definition: testGroup.cpp:109
screwPose2::xi
Vector xi
Definition: testPose2.cpp:148
gtsam::Pose3::rotationInterval
static std::pair< size_t, size_t > rotationInterval()
Definition: Pose3.h:378
x
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
Definition: gnuplot_common_settings.hh:12
gtsam::Pose3::Pose3
Pose3(const Matrix &T)
Definition: Pose3.h:71
gtsam::Pose3::Pose3
Pose3(const Rot3 &R, const Point3 &t)
Definition: Pose3.h:63
gtsam::Pose3::operator*
Point3 operator*(const Point3 &point) const
Definition: Pose3.h:263
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
simple::pose2
static Pose3 pose2
Definition: testInitializePose3.cpp:58
Point3.h
3D Point
os
ofstream os("timeSchurFactors.csv")
gtsam::Pose3::t_
Point3 t_
Translation gPp, from global origin to pose frame origin.
Definition: Pose3.h:47
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:39
gtsam::Pose3::Pose3
Pose3()
Definition: Pose3.h:55
gtsam::Pose3::Identity
static Pose3 Identity()
identity for group operation
Definition: Pose3.h:109
gtsam::Pose3::operator*
Pose3 operator*(const Pose3 &T) const
compose syntactic sugar
Definition: Pose3.h:117
Rot3.h
3D rotation represented as a rotation matrix or quaternion
gtsam::Pose3::adjoint_
static Vector6 adjoint_(const Vector6 &xi, const Vector6 &y)
Definition: Pose3.h:194
gtsam::range
Double_ range(const Point2_ &p, const Point2_ &q)
Definition: slam/expressions.h:30
gtsam_unstable.tests.test_ProjectionFactorRollingShutter.point
point
Definition: test_ProjectionFactorRollingShutter.py:25
Expmap
Pose2_ Expmap(const Vector3_ &xi)
Definition: InverseKinematicsExampleExpressions.cpp:47
gtsam::HasBearing
Definition: BearingRange.h:181
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:145
gtsam::transformFrom
Point3_ transformFrom(const Pose3_ &x, const Point3_ &p)
Definition: slam/expressions.h:47
gtsam::Pose3::wedge
static Matrix wedge(double wx, double wy, double wz, double vx, double vy, double vz)
Definition: Pose3.h:236
vy
StridedVectorType vy(make_vector(y, *n, std::abs(*incy)))
gtsam::Pose3::Translation
Point3 Translation
Definition: Pose3.h:42
gtsam::transformTo
Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose, OptionalJacobian< 4, 4 > Dline)
Definition: Line3.cpp:94
gtsam::internal::LieGroup
Both LieGroupTraits and Testable.
Definition: Lie.h:229
gtsam::Rot3
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition: Rot3.h:58
gtsam::Pose3
Definition: Pose3.h:37
gtsam::Pose3::y
double y() const
get y
Definition: Pose3.h:300
example2::aTb
Point3 aTb
Definition: testEssentialMatrixFactor.cpp:585
gtsam::Pose3Pairs
std::vector< std::pair< Pose3, Pose3 > > Pose3Pairs
Definition: Pose3.h:428
Eigen::Triplet< double >
gtsam::Range
Definition: BearingRange.h:41
y
Scalar * y
Definition: level1_cplx_impl.h:124
matrix
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: gtsam/3rdparty/Eigen/blas/common.h:110
gtsam::b
const G & b
Definition: Group.h:79
gtsam::Pose3::ChartAtOrigin
Definition: Pose3.h:210
a
ArrayXXi a
Definition: Array_initializer_list_23_cxx11.cpp:1
Lie.h
Base class and basic functions for Lie types.
gtsam
traits
Definition: SFMdata.h:40
gtsam::rotation
Rot3_ rotation(const Pose3_ &pose)
Definition: slam/expressions.h:89
gtsam::traits
Definition: Group.h:36
gtsam::OptionalJacobian
Definition: OptionalJacobian.h:38
gtsam::HasRange
Definition: BearingRange.h:195
gtsam::Pose3::translationInterval
static std::pair< size_t, size_t > translationInterval()
Definition: Pose3.h:369
p
float * p
Definition: Tutorial_Map_using.cpp:9
gtsam::Pose3::x
double x() const
get x
Definition: Pose3.h:295
gtsam::LieGroup
Definition: Lie.h:37
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam::Point3
Vector3 Point3
Definition: Point3.h:38
gtsam::Pose3::Rotation
Rot3 Rotation
Definition: Pose3.h:41
Eigen::Matrix< double, 6, 6 >
BearingRange.h
Bearing-Range product.
gtsam::internal::Align
static Similarity2 Align(const Point2Pairs &d_abPointPairs, const Rot2 &aRb, const Point2Pair &centroids)
This method estimates the similarity transform from differences point pairs, given a known or estimat...
Definition: Similarity2.cpp:74
gtsam::Bearing
Definition: BearingRange.h:35
gtsam::transformPoseTo
Pose3_ transformPoseTo(const Pose3_ &p, const Pose3_ &q)
Definition: slam/expressions.h:57
align_3::t
Point2 t(10, 10)
Pose3
Definition: testDependencies.h:3
GTSAM_MAKE_ALIGNED_OPERATOR_NEW
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
Definition: types.h:279
adjoint
void adjoint(const MatrixType &m)
Definition: adjoint.cpp:67
pybind_wrapper_test_script.other
other
Definition: pybind_wrapper_test_script.py:42
R
Rot2 R(Rot2::fromAngle(0.1))
gtsam::wedge< Pose3 >
Matrix wedge< Pose3 >(const Vector &xi)
Definition: Pose3.h:422
gtsam::Pose3::adjointMap_
static Matrix6 adjointMap_(const Vector6 &xi)
Definition: Pose3.h:193
gtsam::Pose3::z
double z() const
get z
Definition: Pose3.h:305
vx
StridedVectorType vx(make_vector(x, *n, std::abs(*incx)))
gtsam::Pose2
Definition: Pose2.h:39
HR
#define HR
Definition: mincover.c:26


gtsam
Author(s):
autogenerated on Wed Jan 22 2025 04:02:45