GTSAM  4.0.2
C++ library for smoothing and mapping (SAM)
Event.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 
20 #pragma once
21 
22 #include <gtsam/geometry/Point3.h>
23 #include <gtsam_unstable/dllexport.h>
24 
25 #include <cmath>
26 #include <iosfwd>
27 #include <string>
28 
29 namespace gtsam {
30 
37 class Event {
38  double time_;
39  Point3 location_;
40 
41  public:
42  enum { dimension = 4 };
43 
45  Event() : time_(0), location_(0, 0, 0) {}
46 
48  Event(double t, const Point3& p) : time_(t), location_(p) {}
49 
51  Event(double t, double x, double y, double z)
52  : time_(t), location_(x, y, z) {}
53 
54  double time() const { return time_; }
55  Point3 location() const { return location_; }
56 
57  // TODO(frank) we really have to think of a better way to do linear arguments
58  double height(OptionalJacobian<1, 4> H = {}) const {
59  static const Matrix14 JacobianZ = (Matrix14() << 0, 0, 0, 1).finished();
60  if (H) *H = JacobianZ;
61  return location_.z();
62  }
63 
65  GTSAM_UNSTABLE_EXPORT void print(const std::string& s = "") const;
66 
68  GTSAM_UNSTABLE_EXPORT bool equals(const Event& other,
69  double tol = 1e-9) const;
70 
72  inline Event retract(const Vector4& v) const {
73  return Event(time_ + v[0], location_ + Point3(v.tail<3>()));
74  }
75 
77  inline Vector4 localCoordinates(const Event& q) const {
78  return Vector4::Zero(); // TODO(frank) implement!
79  }
80 };
81 
82 // Define GTSAM traits
83 template <>
84 struct traits<Event> : internal::Manifold<Event> {};
85 
88  const double speed_;
89 
90  public:
91  typedef double result_type;
92 
94  explicit TimeOfArrival(double speed = 330) : speed_(speed) {}
95 
97  double measure(const Event& event, const Point3& sensor) const {
98  double distance = gtsam::distance3(event.location(), sensor);
99  return event.time() + distance / speed_;
100  }
101 
103  double operator()(const Event& event, const Point3& sensor, //
104  OptionalJacobian<1, 4> H1 = {}, //
105  OptionalJacobian<1, 3> H2 = {}) const {
106  Matrix13 D1, D2;
107  double distance = gtsam::distance3(event.location(), sensor, D1, D2);
108  if (H1)
109  // derivative of toa with respect to event
110  *H1 << 1.0, D1 / speed_;
111  if (H2)
112  // derivative of toa with respect to sensor location
113  *H2 << D2 / speed_;
114  return event.time() + distance / speed_;
115  }
116 };
117 
118 } // namespace gtsam
Both ManifoldTraits and Testable.
Definition: Manifold.h:117
GTSAM_UNSTABLE_EXPORT void print(const std::string &s="") const
Event(double t, const Point3 &p)
Constructor from time and location.
Definition: Event.h:48
Definition: Group.h:43
Event(double t, double x, double y, double z)
Constructor with doubles.
Definition: Event.h:51
Event retract(const Vector4 &v) const
Updates a with tangent space delta.
Definition: Event.h:72
Definition: Event.h:37
double operator()(const Event &event, const Point3 &sensor, OptionalJacobian< 1, 4 > H1={}, OptionalJacobian< 1, 3 > H2={}) const
Calculate time of arrival, with derivatives.
Definition: Event.h:103
Vector4 localCoordinates(const Event &q) const
Returns inverse retraction.
Definition: Event.h:77
TimeOfArrival(double speed=330)
Constructor with optional speed of signal, in m/sec.
Definition: Event.h:94
Event()
Default Constructor.
Definition: Event.h:45
Definition: chartTesting.h:28
Time of arrival to given sensor.
Definition: Event.h:87
Definition: OptionalJacobian.h:38
GTSAM_UNSTABLE_EXPORT bool equals(const Event &other, double tol=1e-9) const
GTSAM_EXPORT double distance3(const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1={}, OptionalJacobian< 1, 3 > H2={})
distance between two points
3D Point
Vector3 Point3
Definition: Point3.h:38
double measure(const Event &event, const Point3 &sensor) const
Calculate time of arrival.
Definition: Event.h:97