66 typedef std::shared_ptr<CarrierPhaseFactor> shared_ptr;
87 Key receiverPositionKey,
Key receiverClockBiasKey,
Key ambiguityKey,
88 double measuredCarrierPhaseMeters,
const Point3& satellitePosition,
89 double satelliteClockBias = 0.0,
93 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
94 return std::static_pointer_cast<gtsam::NonlinearFactor>(
95 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
104 double tol = 1e-9)
const override;
107 Vector1 evaluateError(
const Point3& receiverPosition,
108 const double& receiverClockBias,
109 const double& ambiguity,
115#if GTSAM_ENABLE_BOOST_SERIALIZATION
116 friend class boost::serialization::access;
117 template <
class ARCHIVE>
118 void serialize(ARCHIVE& ar,
const unsigned int ) {
119 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
120 ar& BOOST_SERIALIZATION_NVP(measurement_);
121 ar& BOOST_SERIALIZATION_NVP(satPos_);
122 ar& BOOST_SERIALIZATION_NVP(satClkBias_);
158class GTSAM_EXPORT UndifferencedCarrierPhaseFactor
163 double tropoMap_ = 0.0;
164 double ionoCoeff_ = 1.0;
165 double lambda_ = 1.0;
169 typedef std::shared_ptr<UndifferencedCarrierPhaseFactor> shared_ptr;
170 typedef UndifferencedCarrierPhaseFactor This;
173 virtual ~UndifferencedCarrierPhaseFactor() =
default;
189 UndifferencedCarrierPhaseFactor(
190 Key receiverPositionKey,
Key receiverClockBiasKey,
Key tropoZenithWetKey,
191 Key slantIonoKey,
Key ambiguityKey,
double measuredCarrierPhaseMeters,
192 const Point3& satellitePosition,
double tropoWetMapping,
193 double ionoCoefficient,
double lambda_,
double satelliteClockBias = 0.0,
196 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
197 return std::static_pointer_cast<gtsam::NonlinearFactor>(
198 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
204 double tol = 1e-9)
const override;
206 Vector evaluateError(
const Point3& receiverPosition,
207 const double& receiverClockBias,
208 const double& tropoZenithWet,
const double& slantIono,
215 inline double tropoMapping()
const {
return tropoMap_; }
216 inline double ionoCoefficient()
const {
return ionoCoeff_; }
217 inline double wavelength()
const {
return lambda_; }
220#if GTSAM_ENABLE_BOOST_SERIALIZATION
221 friend class boost::serialization::access;
222 template <
class ARCHIVE>
223 void serialize(ARCHIVE& ar,
const unsigned int ) {
224 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
225 ar& BOOST_SERIALIZATION_NVP(measurement_);
226 ar& BOOST_SERIALIZATION_NVP(satPos_);
227 ar& BOOST_SERIALIZATION_NVP(satClkBias_);
228 ar& BOOST_SERIALIZATION_NVP(tropoMap_);
229 ar& BOOST_SERIALIZATION_NVP(ionoCoeff_);
230 ar& BOOST_SERIALIZATION_NVP(lambda_);
238 :
public Testable<UndifferencedCarrierPhaseFactor> {};
249class GTSAM_EXPORT UndifferencedCarrierPhaseFactorArm
255 double tropoMap_ = 0.0;
256 double ionoCoeff_ = 1.0;
257 double lambda_ = 1.0;
261 typedef std::shared_ptr<UndifferencedCarrierPhaseFactorArm> shared_ptr;
262 typedef UndifferencedCarrierPhaseFactorArm This;
264 UndifferencedCarrierPhaseFactorArm()
266 virtual ~UndifferencedCarrierPhaseFactorArm() =
default;
269 UndifferencedCarrierPhaseFactorArm(
270 Key poseKey,
Key receiverClockBiasKey,
Key tropoZenithWetKey,
271 Key slantIonoKey,
Key ambiguityKey,
double measuredCarrierPhaseMeters,
272 const Point3& satellitePosition,
const Point3& leverArm,
273 double tropoWetMapping,
double ionoCoefficient,
double lambda_,
274 double satelliteClockBias = 0.0,
278 UndifferencedCarrierPhaseFactorArm(
279 Key poseKey,
Key receiverClockBiasKey,
Key tropoZenithWetKey,
280 Key slantIonoKey,
Key ambiguityKey,
double measuredCarrierPhaseMeters,
281 const Point3& satellitePosition,
const Point3& leverArm,
282 const Pose3& ecef_T_nav,
double tropoWetMapping,
double ionoCoefficient,
283 double lambda_,
double satelliteClockBias = 0.0,
286 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
287 return std::static_pointer_cast<gtsam::NonlinearFactor>(
288 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
294 double tol = 1e-9)
const override;
296 Vector evaluateError(
const Pose3& pose,
const double& receiverClockBias,
297 const double& tropoZenithWet,
const double& slantIono,
304 inline const Point3& leverArm()
const {
return arm_.
b; }
305 inline const std::optional<Pose3>& ecefTnav()
const {
return arm_.
ecef_T_nav; }
306 inline double tropoMapping()
const {
return tropoMap_; }
307 inline double ionoCoefficient()
const {
return ionoCoeff_; }
308 inline double wavelength()
const {
return lambda_; }
311#if GTSAM_ENABLE_BOOST_SERIALIZATION
312 friend class boost::serialization::access;
313 template <
class ARCHIVE>
314 void serialize(ARCHIVE& ar,
const unsigned int ) {
315 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
316 ar& BOOST_SERIALIZATION_NVP(measurement_);
317 ar& BOOST_SERIALIZATION_NVP(satPos_);
318 ar& BOOST_SERIALIZATION_NVP(satClkBias_);
319 ar& boost::serialization::make_nvp(
"bL_", arm_.
b);
320 ar& boost::serialization::make_nvp(
"ecef_T_nav_", arm_.
ecef_T_nav);
321 ar& BOOST_SERIALIZATION_NVP(tropoMap_);
322 ar& BOOST_SERIALIZATION_NVP(ionoCoeff_);
323 ar& BOOST_SERIALIZATION_NVP(lambda_);
331 :
public Testable<UndifferencedCarrierPhaseFactorArm> {};
362 typedef std::shared_ptr<CarrierPhaseFactorArm> shared_ptr;
374 Key poseKey,
Key receiverClockBiasKey,
Key ambiguityKey,
375 double measuredCarrierPhaseMeters,
const Point3& satellitePosition,
376 const Point3& leverArm,
double satelliteClockBias = 0.0,
383 Key poseKey,
Key receiverClockBiasKey,
Key ambiguityKey,
384 double measuredCarrierPhaseMeters,
const Point3& satellitePosition,
386 double satelliteClockBias = 0.0,
390 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
391 return std::static_pointer_cast<gtsam::NonlinearFactor>(
392 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
401 double tol = 1e-9)
const override;
404 Vector1 evaluateError(
const Pose3& pose,
405 const double& receiverClockBias,
406 const double& ambiguity,
415 inline const std::optional<Pose3>&
ecefTnav()
const {
return arm_.ecef_T_nav; }
418#if GTSAM_ENABLE_BOOST_SERIALIZATION
419 friend class boost::serialization::access;
420 template <
class ARCHIVE>
421 void serialize(ARCHIVE& ar,
const unsigned int ) {
422 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
423 ar& BOOST_SERIALIZATION_NVP(measurement_);
424 ar& BOOST_SERIALIZATION_NVP(satPos_);
425 ar& BOOST_SERIALIZATION_NVP(satClkBias_);
426 ar& boost::serialization::make_nvp(
"bL_", arm_.
b);
427 ar& boost::serialization::make_nvp(
"ecef_T_nav_", arm_.
ecef_T_nav);
435 :
public Testable<CarrierPhaseFactorArm> {};
468class GTSAM_EXPORT DoubleDifferenceCarrierPhaseFactor
480 typedef std::shared_ptr<DoubleDifferenceCarrierPhaseFactor> shared_ptr;
481 typedef DoubleDifferenceCarrierPhaseFactor This;
483 DoubleDifferenceCarrierPhaseFactor() =
default;
485 virtual ~DoubleDifferenceCarrierPhaseFactor() =
default;
487 DoubleDifferenceCarrierPhaseFactor(
488 Key positionKey,
Key ambRefKey,
Key ambTargetKey,
489 double cpRovRefMeters,
double cpBaseRefMeters,
490 double cpRovTargetMeters,
double cpBaseTargetMeters,
493 const Point3& basePos,
double lam,
496 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
497 return std::static_pointer_cast<gtsam::NonlinearFactor>(
498 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
505 double tol = 1e-9)
const override;
507 Vector1 evaluateError(
const Point3& pos,
const double& ambRef,
513#if GTSAM_ENABLE_BOOST_SERIALIZATION
514 friend class boost::serialization::access;
515 template <
class ARCHIVE>
516 void serialize(ARCHIVE& ar,
const unsigned int ) {
517 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
518 ar& boost::serialization::make_nvp(
"cpRovRef_", dd_.
rovRef);
519 ar& boost::serialization::make_nvp(
"cpBaseRef_", dd_.
baseRef);
520 ar& boost::serialization::make_nvp(
"cpRovTarget_", dd_.
rovTarget);
521 ar& boost::serialization::make_nvp(
"cpBaseTarget_", dd_.
baseTarget);
522 ar& boost::serialization::make_nvp(
"satRefRov_", dd_.
satRefRov);
523 ar& boost::serialization::make_nvp(
"satTargetRov_", dd_.
satTargetRov);
524 ar& boost::serialization::make_nvp(
"satRefBase_", dd_.
satRefBase);
525 ar& boost::serialization::make_nvp(
"satTargetBase_", dd_.
satTargetBase);
526 ar& boost::serialization::make_nvp(
"basePos_", dd_.
basePos);
527 ar& BOOST_SERIALIZATION_NVP(lam_);
534 :
public Testable<DoubleDifferenceCarrierPhaseFactor> {};
544class GTSAM_EXPORT DoubleDifferenceCarrierPhaseFactorArm
557 typedef std::shared_ptr<DoubleDifferenceCarrierPhaseFactorArm> shared_ptr;
558 typedef DoubleDifferenceCarrierPhaseFactorArm This;
560 DoubleDifferenceCarrierPhaseFactorArm() =
default;
562 virtual ~DoubleDifferenceCarrierPhaseFactorArm() =
default;
564 DoubleDifferenceCarrierPhaseFactorArm(
565 Key poseKey,
Key ambRefKey,
Key ambTargetKey,
566 double cpRovRefMeters,
double cpBaseRefMeters,
567 double cpRovTargetMeters,
double cpBaseTargetMeters,
570 const Point3& basePos,
double lam,
574 DoubleDifferenceCarrierPhaseFactorArm(
575 Key poseKey,
Key ambRefKey,
Key ambTargetKey,
576 double cpRovRefMeters,
double cpBaseRefMeters,
577 double cpRovTargetMeters,
double cpBaseTargetMeters,
580 const Point3& basePos,
double lam,
584 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
585 return std::static_pointer_cast<gtsam::NonlinearFactor>(
586 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
593 double tol = 1e-9)
const override;
595 Vector1 evaluateError(
const Pose3& pose,
const double& ambRef,
600 inline const Point3& leverArm()
const {
return arm_.
b; }
601 inline const std::optional<Pose3>& ecefTnav()
const {
return arm_.
ecef_T_nav; }
604#if GTSAM_ENABLE_BOOST_SERIALIZATION
605 friend class boost::serialization::access;
606 template <
class ARCHIVE>
607 void serialize(ARCHIVE& ar,
const unsigned int ) {
608 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
609 ar& boost::serialization::make_nvp(
"cpRovRef_", dd_.
rovRef);
610 ar& boost::serialization::make_nvp(
"cpBaseRef_", dd_.
baseRef);
611 ar& boost::serialization::make_nvp(
"cpRovTarget_", dd_.
rovTarget);
612 ar& boost::serialization::make_nvp(
"cpBaseTarget_", dd_.
baseTarget);
613 ar& boost::serialization::make_nvp(
"satRefRov_", dd_.
satRefRov);
614 ar& boost::serialization::make_nvp(
"satTargetRov_", dd_.
satTargetRov);
615 ar& boost::serialization::make_nvp(
"satRefBase_", dd_.
satRefBase);
616 ar& boost::serialization::make_nvp(
"satTargetBase_", dd_.
satTargetBase);
617 ar& boost::serialization::make_nvp(
"basePos_", dd_.
basePos);
618 ar& BOOST_SERIALIZATION_NVP(lam_);
619 ar& boost::serialization::make_nvp(
"bL_", arm_.
b);
620 ar& boost::serialization::make_nvp(
"ecef_T_nav_", arm_.
ecef_T_nav);
627 :
public Testable<DoubleDifferenceCarrierPhaseFactorArm> {};
3D Pose manifold SO(3) x R^3 and group SE(3)
Shared constants and utilities for GNSS factors.
Base class for noise model factors with N variables.
Non-linear factor base classes.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
GnssMeasurementBase CarrierPhaseBase
Base class storing common members for carrier phase factors.
Definition CarrierPhaseFactor.h:40
Matrix * OptionalMatrixType
This typedef will be used everywhere boost::optional<Matrix&> reference was used previously.
Definition NonlinearFactor.h:57
NoiseModelFactorT< Vector, ValueTypes... > NoiseModelFactorN
Noise model factor with N value types and dynamic-sized error vector.
Definition NoiseModelFactorN.h:561
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
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:846
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
Template to create a binary predicate.
Definition Testable.h:112
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
A 3D pose (R,t) : (Rot3,Point3).
Definition Pose3.h:42
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:673
Undifferenced GNSS carrier phase factor for point positioning.
Definition CarrierPhaseFactor.h:59
CarrierPhaseFactor()
default constructor - only use for serialization
Definition CarrierPhaseFactor.h:70
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition CarrierPhaseFactor.h:93
Undifferenced (raw) PPP carrier phase factor.
Definition CarrierPhaseFactor.h:160
gtsam::NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition CarrierPhaseFactor.h:196
Undifferenced (raw) PPP carrier phase factor with lever-arm correction.
Definition CarrierPhaseFactor.h:251
gtsam::NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition CarrierPhaseFactor.h:286
Carrier phase factor with lever arm correction.
Definition CarrierPhaseFactor.h:353
const std::optional< Pose3 > & ecefTnav() const
return the optional ecef_T_nav transform
Definition CarrierPhaseFactor.h:415
const Point3 & leverArm() const
return the lever arm
Definition CarrierPhaseFactor.h:412
CarrierPhaseFactorArm()
default constructor - only use for serialization
Definition CarrierPhaseFactor.h:366
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition CarrierPhaseFactor.h:390
Double-difference carrier phase factor.
Definition CarrierPhaseFactor.h:469
gtsam::NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition CarrierPhaseFactor.h:496
Double-difference carrier phase factor with lever arm correction.
Definition CarrierPhaseFactor.h:545
gtsam::NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition CarrierPhaseFactor.h:584
Base class storing common members for GNSS measurement factors.
Definition GnssCommon.h:25
Shared geometry data for double-difference factors.
Definition GnssCommon.h:74
Point3 satRefRov
Ref satellite ECEF at rover time [m].
Definition GnssCommon.h:79
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
std::optional< Pose3 > ecef_T_nav
Optional ECEF-from-nav transform.
Definition GnssCommon.h:121
NoiseModelFactorT()
Definition NoiseModelFactorN.h:257
virtual Vector1 evaluateError(const ValueTypes &... x, OptionalMatrixTypeT< ValueTypes >... H) const=0
Nonlinear factor base class.
Definition NonlinearFactor.h:70