11 #include <gtsam/geometry/BearingRange.h>
12 #include <gtsam/geometry/Point2.h>
13 #include <gtsam/geometry/Point3.h>
14 #include <gtsam/geometry/Pose2.h>
15 #include <gtsam/geometry/Pose3.h>
16 #include <gtsam/nonlinear/NonlinearFactor.h>
17 #include <gtsam/nonlinear/Symbol.h>
18 #include <gtsam/sam/BearingRangeFactor.h>
23 #include <type_traits>
34 template <
typename PoseType,
typename PointType,
35 typename BearingType =
36 typename gtsam::Bearing<PoseType, PointType>::result_type,
38 typename gtsam::Range<PoseType, PointType>::result_type>
43 gtsam::BearingRangeFactor<PoseType, PointType> factor_;
44 std::vector<double> probs_;
52 const gtsam::Key& pointKey,
53 const gtsam::DiscreteKey& discreteKey,
54 const std::vector<double> measuredProbs,
55 const BearingType& measuredBearing,
56 const RangeType& measuredRange,
57 const gtsam::SharedNoiseModel& model)
58 : probs_(measuredProbs),
59 factor_(poseKey, pointKey, measuredBearing, measuredRange, model) {
60 gtsam::KeyVector keys{poseKey, pointKey};
61 gtsam::DiscreteKeys dks(discreteKey);
64 gtsam::BearingRangeFactor<PoseType, PointType> brfactor;
71 this->factor_ = rhs.factor_;
72 this->probs_ = rhs.probs_;
73 this->keys_ = rhs.keys_;
80 double error(
const gtsam::Values& continuousVals,
83 double discrete_error = log(probs_[assignment]);
86 return factor_.error(continuousVals) - discrete_error;
90 size_t dim()
const override {
return factor_.dim(); }
93 const gtsam::Values& continuousVals,
95 return factor_.linearize(continuousVals);
109 if (!(factor_.equals(f.factor_,
tol)))
return false;
113 return (std::equal(keys_.begin(), keys_.end(), f.keys().begin()) &&
Custom discrete-continuous factor.
Abstract class implementing a discrete-continuous factor.
Definition: DCFactor.h:33
gtsam::DiscreteKeys discreteKeys_
Definition: DCFactor.h:36
DCFactor & operator=(const DCFactor &rhs)
Definition: DCFactor.h:58
gtsam::Factor Base
Definition: DCFactor.h:39
double nonlinearFactorLogNormalizingConstant(const NonlinearFactorType &factor, const gtsam::Values &values) const
Definition: DCFactor.h:193
Factor that represents bearing and range measurements that incorporate a semantic class measurement.
Definition: SemanticBearingRangeFactor.h:39
SemanticBearingRangeFactor()=default
boost::shared_ptr< gtsam::GaussianFactor > linearize(const gtsam::Values &continuousVals, const DiscreteValues &discreteVals) const override
Definition: SemanticBearingRangeFactor.h:92
virtual ~SemanticBearingRangeFactor()=default
size_t dim() const override
Definition: SemanticBearingRangeFactor.h:90
SemanticBearingRangeFactor & operator=(const SemanticBearingRangeFactor &rhs)
Definition: SemanticBearingRangeFactor.h:69
SemanticBearingRangeFactor(const gtsam::Key &poseKey, const gtsam::Key &pointKey, const gtsam::DiscreteKey &discreteKey, const std::vector< double > measuredProbs, const BearingType &measuredBearing, const RangeType &measuredRange, const gtsam::SharedNoiseModel &model)
Definition: SemanticBearingRangeFactor.h:51
double error(const gtsam::Values &continuousVals, const DiscreteValues &discreteVals) const override
Definition: SemanticBearingRangeFactor.h:80
bool equals(const DCFactor &other, double tol=1e-9) const override
Definition: SemanticBearingRangeFactor.h:98
double logNormalizingConstant(const gtsam::Values &values) const override
Definition: SemanticBearingRangeFactor.h:117
Definition: DCContinuousFactor.h:24
gtsam::DiscreteFactor::Values DiscreteValues
Definition: DCSAM_types.h:19
const double tol
Definition: testDCSAM.cpp:40