commit
a1b36dc065
15
gtsam.h
15
gtsam.h
|
@ -2316,6 +2316,21 @@ virtual class BearingFactor : gtsam::NoiseModelFactor {
|
||||||
typedef gtsam::BearingFactor<gtsam::Pose2, gtsam::Point2, gtsam::Rot2> BearingFactor2D;
|
typedef gtsam::BearingFactor<gtsam::Pose2, gtsam::Point2, gtsam::Rot2> BearingFactor2D;
|
||||||
typedef gtsam::BearingFactor<gtsam::Pose2, gtsam::Pose2, gtsam::Rot2> BearingFactorPose2;
|
typedef gtsam::BearingFactor<gtsam::Pose2, gtsam::Pose2, gtsam::Rot2> BearingFactorPose2;
|
||||||
|
|
||||||
|
#include <gtsam/geometry/BearingRange.h>
|
||||||
|
template <POSE, POINT, BEARING, RANGE>
|
||||||
|
class BearingRange {
|
||||||
|
BearingRange(const BEARING& b, const RANGE& r);
|
||||||
|
BEARING bearing() const;
|
||||||
|
RANGE range() const;
|
||||||
|
// TODO(frank): can't class instance itself?
|
||||||
|
// static gtsam::BearingRange Measure(const POSE& pose, const POINT& point);
|
||||||
|
static BEARING MeasureBearing(const POSE& pose, const POINT& point);
|
||||||
|
static RANGE MeasureRange(const POSE& pose, const POINT& point);
|
||||||
|
void print(string s) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef gtsam::BearingRange<gtsam::Pose2, gtsam::Point2, gtsam::Rot2, double> BearingRange2D;
|
||||||
|
|
||||||
#include <gtsam/sam/BearingRangeFactor.h>
|
#include <gtsam/sam/BearingRangeFactor.h>
|
||||||
template<POSE, POINT, BEARING, RANGE>
|
template<POSE, POINT, BEARING, RANGE>
|
||||||
virtual class BearingRangeFactor : gtsam::NoiseModelFactor {
|
virtual class BearingRangeFactor : gtsam::NoiseModelFactor {
|
||||||
|
|
|
@ -44,11 +44,11 @@ struct Range;
|
||||||
* For example BearingRange<Pose2,Point2>(pose,point) will return pair<Rot2,double>
|
* For example BearingRange<Pose2,Point2>(pose,point) will return pair<Rot2,double>
|
||||||
* and BearingRange<Pose3,Point3>(pose,point) will return pair<Unit3,double>
|
* and BearingRange<Pose3,Point3>(pose,point) will return pair<Unit3,double>
|
||||||
*/
|
*/
|
||||||
template <typename A1, typename A2>
|
template <typename A1, typename A2,
|
||||||
|
typename B = typename Bearing<A1, A2>::result_type,
|
||||||
|
typename R = typename Range<A1, A2>::result_type>
|
||||||
struct BearingRange {
|
struct BearingRange {
|
||||||
private:
|
private:
|
||||||
typedef typename Bearing<A1, A2>::result_type B;
|
|
||||||
typedef typename Range<A1, A2>::result_type R;
|
|
||||||
B bearing_;
|
B bearing_;
|
||||||
R range_;
|
R range_;
|
||||||
|
|
||||||
|
@ -91,6 +91,16 @@ public:
|
||||||
return BearingRange(b, r);
|
return BearingRange(b, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Predict bearing
|
||||||
|
static B MeasureBearing(const A1& a1, const A2& a2) {
|
||||||
|
return Bearing<A1, A2>()(a1, a2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Predict range
|
||||||
|
static R MeasureRange(const A1& a1, const A2& a2) {
|
||||||
|
return Range<A1, A2>()(a1, a2);
|
||||||
|
}
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
/// @name Testable
|
/// @name Testable
|
||||||
/// @{
|
/// @{
|
||||||
|
@ -170,8 +180,8 @@ struct HasBearing {
|
||||||
typedef RT result_type;
|
typedef RT result_type;
|
||||||
RT operator()(
|
RT operator()(
|
||||||
const A1& a1, const A2& a2,
|
const A1& a1, const A2& a2,
|
||||||
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1,
|
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1=boost::none,
|
||||||
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2) {
|
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2=boost::none) {
|
||||||
return a1.bearing(a2, H1, H2);
|
return a1.bearing(a2, H1, H2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -184,8 +194,8 @@ struct HasRange {
|
||||||
typedef RT result_type;
|
typedef RT result_type;
|
||||||
RT operator()(
|
RT operator()(
|
||||||
const A1& a1, const A2& a2,
|
const A1& a1, const A2& a2,
|
||||||
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1,
|
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1=boost::none,
|
||||||
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2) {
|
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2=boost::none) {
|
||||||
return a1.range(a2, H1, H2);
|
return a1.range(a2, H1, H2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue