gtsam
Loading...
Searching...
No Matches
GnssCommon.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <gtsam/base/Matrix.h>
10#include <gtsam/dllexport.h>
13
14#include <optional>
15
16namespace gtsam {
17
33
34namespace gnss {
35
37constexpr double C_LIGHT = 299792458.0;
38
40constexpr double OMGE = 7.2921151467e-5;
41
58GTSAM_EXPORT double geodist(const Point3& sat, const Point3& rcv, Point3& e,
59 OptionalJacobian<1, 3> H_rcv = {});
60
74struct GTSAM_EXPORT DoubleDifferenceData {
75 double rovRef = 0;
76 double baseRef = 0;
77 double rovTarget = 0;
78 double baseTarget = 0;
79 Point3 satRefRov{0, 0, 0};
81 Point3 satRefBase{0, 0, 0};
83 Point3 basePos{0, 0, 0};
84
86 double observed() const {
87 return (rovRef - baseRef) - (rovTarget - baseTarget);
88 }
89
101 double model(const Point3& rcv, OptionalJacobian<1, 3> H_rcv = {}) const;
102
103 bool equals(const DoubleDifferenceData& other, double tol) const;
104};
105
119struct GTSAM_EXPORT LeverArm {
120 Point3 b{0, 0, 0};
121 std::optional<Pose3> ecef_T_nav;
122
123 LeverArm() = default;
124 explicit LeverArm(const Point3& leverArm) : b(leverArm) {}
125 LeverArm(const Point3& leverArm, const Pose3& nav)
126 : b(leverArm), ecef_T_nav(nav) {}
127
130 struct PoseFrame {
131 Matrix3 ecef_R_body;
132 Matrix66 H_compose;
133 bool has_nav = false;
134 };
135
142 Point3 antennaPosition(const Pose3& pose,
143 PoseFrame* frame = nullptr) const;
144
149 Matrix16 antennaPoseJacobian(const Matrix13& H_antenna,
150 const PoseFrame& frame) const;
151
152 bool equals(const LeverArm& other, double tol) const;
153};
154
155} // namespace gnss
156} // namespace gtsam
typedef and functions to augment Eigen's MatrixXd
Special class for optional Jacobian arguments.
3D Point
3D Pose manifold SO(3) x R^3 and group SE(3)
double geodist(const Point3 &sat, const Point3 &rcv, Point3 &e, OptionalJacobian< 1, 3 > H_rcv)
Geometric distance with Sagnac correction.
Definition GnssCommon.cpp:16
constexpr double OMGE
WGS-84 Earth rotation rate (rad/s).
Definition GnssCommon.h:40
constexpr double C_LIGHT
Speed of light in a vacuum (m/s).
Definition GnssCommon.h:37
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:38
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:40
Template to create a binary predicate.
Definition Testable.h:112
A 3D pose (R,t) : (Rot3,Point3).
Definition Pose3.h:42
Base class storing common members for GNSS measurement factors.
Definition GnssCommon.h:25
double measurement_
Measurement in meters (pseudorange, or carrier phase * wavelength).
Definition GnssCommon.h:27
double satClkBias_
Satellite clock bias in seconds.
Definition GnssCommon.h:31
Point3 satPos_
Satellite position in WGS84 ECEF meters.
Definition GnssCommon.h:29
Shared geometry data for double-difference factors.
Definition GnssCommon.h:74
Point3 satRefRov
Ref satellite ECEF at rover time [m].
Definition GnssCommon.h:79
double observed() const
Observed DD: (rovRef - baseRef) - (rovTarget - baseTarget) [m].
Definition GnssCommon.h:86
Point3 satRefBase
Ref satellite ECEF at base time [m].
Definition GnssCommon.h:81
Point3 satTargetBase
Target satellite ECEF at base time [m].
Definition GnssCommon.h:82
double baseRef
Base observation for ref satellite [m].
Definition GnssCommon.h:76
Point3 basePos
Base station ECEF position [m].
Definition GnssCommon.h:83
Point3 satTargetRov
Target satellite ECEF at rover time [m].
Definition GnssCommon.h:80
double baseTarget
Base observation for target satellite [m].
Definition GnssCommon.h:78
double rovTarget
Rover observation for target satellite [m].
Definition GnssCommon.h:77
double rovRef
Rover observation for ref satellite [m].
Definition GnssCommon.h:75
Lever-arm helper for GNSS factors that key on a body Pose3.
Definition GnssCommon.h:119
Point3 b
Lever arm in body frame [m].
Definition GnssCommon.h:120
Matrix16 antennaPoseJacobian(const Matrix13 &H_antenna, const PoseFrame &frame) const
Convert a 1x3 Jacobian (d/d antenna position) into a 1x6 Jacobian w.r.t.
Definition GnssCommon.cpp:82
Point3 antennaPosition(const Pose3 &pose, PoseFrame *frame=nullptr) const
Compute the antenna ECEF position for pose.
Definition GnssCommon.cpp:68
std::optional< Pose3 > ecef_T_nav
Optional ECEF-from-nav transform.
Definition GnssCommon.h:121
Intermediate quantities cached by antennaPosition() so antennaPoseJacobian can compute the pose Jacob...
Definition GnssCommon.h:130
Matrix3 ecef_R_body
Rotation of the body in ECEF.
Definition GnssCommon.h:131
Matrix66 H_compose
d(ecef_T_body)/d(pose) (only used if has_nav).
Definition GnssCommon.h:132