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::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>
|
||||
template<POSE, POINT, BEARING, RANGE>
|
||||
virtual class BearingRangeFactor : gtsam::NoiseModelFactor {
|
||||
|
|
|
@ -44,11 +44,11 @@ struct Range;
|
|||
* For example BearingRange<Pose2,Point2>(pose,point) will return pair<Rot2,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 {
|
||||
private:
|
||||
typedef typename Bearing<A1, A2>::result_type B;
|
||||
typedef typename Range<A1, A2>::result_type R;
|
||||
B bearing_;
|
||||
R range_;
|
||||
|
||||
|
@ -91,6 +91,16 @@ public:
|
|||
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
|
||||
/// @{
|
||||
|
@ -170,8 +180,8 @@ struct HasBearing {
|
|||
typedef RT result_type;
|
||||
RT operator()(
|
||||
const A1& a1, const A2& a2,
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1,
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2) {
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1=boost::none,
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2=boost::none) {
|
||||
return a1.bearing(a2, H1, H2);
|
||||
}
|
||||
};
|
||||
|
@ -184,8 +194,8 @@ struct HasRange {
|
|||
typedef RT result_type;
|
||||
RT operator()(
|
||||
const A1& a1, const A2& a2,
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1,
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2) {
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A1>::dimension> H1=boost::none,
|
||||
OptionalJacobian<traits<RT>::dimension, traits<A2>::dimension> H2=boost::none) {
|
||||
return a1.range(a2, H1, H2);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue