BearingRange type
parent
30435da070
commit
b6a785e2d9
|
|
@ -0,0 +1,97 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
|
||||
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
||||
* Atlanta, Georgia 30332-0415
|
||||
* All Rights Reserved
|
||||
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
||||
|
||||
* See LICENSE for the license information
|
||||
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* @file BearingRange.h
|
||||
* @date July, 2015
|
||||
* @author Frank Dellaert
|
||||
* @brief Bearing-Range product
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gtsam/base/Manifold.h>
|
||||
#include <gtsam/base/Testable.h>
|
||||
#include <boost/concept/assert.hpp>
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
// forward declaration of Bearing functor, assumed partially specified
|
||||
template <typename A1, typename A2>
|
||||
struct Bearing;
|
||||
|
||||
// forward declaration of Range functor, assumed partially specified
|
||||
template <typename A1, typename A2>
|
||||
struct Range;
|
||||
|
||||
/**
|
||||
* Bearing-Range product for a particular A1,A2 combination
|
||||
*/
|
||||
template <typename A1, typename A2>
|
||||
struct BearingRange
|
||||
: public ProductManifold<typename Bearing<A1, A2>::result_type,
|
||||
typename Range<A1, A2>::result_type> {
|
||||
typedef typename Bearing<A1, A2>::result_type B;
|
||||
typedef typename Range<A1, A2>::result_type R;
|
||||
|
||||
BearingRange() {}
|
||||
BearingRange(const ProductManifold<B, R>& br) : ProductManifold<B, R>(br) {}
|
||||
BearingRange(const B& b, const R& r) : ProductManifold<B, R>(b, r) {}
|
||||
|
||||
/// Prediction function that stacks measurements
|
||||
// BearingRange operator()(
|
||||
// const A1& a1, const A2& a2,
|
||||
// typename MakeOptionalJacobian<BearingRange, A1>::type H1,
|
||||
// typename MakeOptionalJacobian<BearingRange, A2>::type H2) {
|
||||
// typename MakeJacobian<B, A1>::type HB1;
|
||||
// typename MakeJacobian<B, A2>::type HB2;
|
||||
// typename MakeJacobian<R, A1>::type HR1;
|
||||
// typename MakeJacobian<R, A2>::type HR2;
|
||||
//
|
||||
// B b = Bearing<A1, A2>()(a1, a2, H1 ? &HB1 : 0, H2 ? &HB2 : 0);
|
||||
// R r = Range<A1, A2>()(a1, a2, H1 ? &HR1 : 0, H2 ? &HR2 : 0);
|
||||
//
|
||||
// if (H1) *H1 << HB1, HR1;
|
||||
// if (H2) *H2 << HB2, HR2;
|
||||
// return BearingRange(b, r);
|
||||
// }
|
||||
//
|
||||
private:
|
||||
/// Serialization function
|
||||
template <class ARCHIVE>
|
||||
void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
|
||||
ar& boost::serialization::make_nvp("bearing", this->first);
|
||||
ar& boost::serialization::make_nvp("range", this->second);
|
||||
}
|
||||
|
||||
friend class boost::serialization::access;
|
||||
};
|
||||
|
||||
template <typename A1, typename A2>
|
||||
struct traits<BearingRange<A1, A2> >
|
||||
// : internal::ManifoldTraits<BearingRange<A1, A2> >
|
||||
{
|
||||
typedef typename Bearing<A1, A2>::result_type B;
|
||||
typedef typename Range<A1, A2>::result_type R;
|
||||
|
||||
static void Print(const BearingRange<A1, A2>& m,
|
||||
const std::string& str = "") {
|
||||
traits<B>::Print(m.first, str);
|
||||
traits<R>::Print(m.second, str);
|
||||
}
|
||||
static bool Equals(const BearingRange<A1, A2>& m1,
|
||||
const BearingRange<A1, A2>& m2, double tol = 1e-8) {
|
||||
return traits<B>::Equals(m1.first, m2.first, tol) &&
|
||||
traits<R>::Equals(m1.second, m2.second, tol);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace gtsam
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
|
||||
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
||||
* Atlanta, Georgia 30332-0415
|
||||
* All Rights Reserved
|
||||
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
||||
|
||||
* See LICENSE for the license information
|
||||
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* @file testBearingRange.cpp
|
||||
* @brief Unit tests for BearingRange Class
|
||||
* @author Frank Dellaert
|
||||
* @date July 2015
|
||||
*/
|
||||
|
||||
#include <gtsam/geometry/BearingRange.h>
|
||||
#include <gtsam/geometry/Pose2.h>
|
||||
#include <gtsam/geometry/Pose3.h>
|
||||
#include <gtsam/base/serializationTestHelpers.h>
|
||||
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam;
|
||||
using namespace serializationTestHelpers;
|
||||
|
||||
typedef BearingRange<Pose2, Point2> BearingRange2D;
|
||||
BearingRange2D br2D(1, 2);
|
||||
|
||||
typedef BearingRange<Pose3, Point3> BearingRange3D;
|
||||
BearingRange3D br3D(Pose3().bearing(Point3(1, 0, 0)), 1);
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(BearingRange, Serialization2D) {
|
||||
EXPECT(equalsObj<BearingRange2D>(br2D));
|
||||
EXPECT(equalsXML<BearingRange2D>(br2D));
|
||||
EXPECT(equalsBinary<BearingRange2D>(br2D));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(BearingRange, 2D) {}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(BearingRange, Serialization3D) {
|
||||
EXPECT(equalsObj<BearingRange3D>(br3D));
|
||||
EXPECT(equalsXML<BearingRange3D>(br3D));
|
||||
EXPECT(equalsBinary<BearingRange3D>(br3D));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(BearingRange, 3D) {}
|
||||
|
||||
/* ************************************************************************* */
|
||||
int main() {
|
||||
TestResult tr;
|
||||
return TestRegistry::runAllTests(tr);
|
||||
}
|
||||
/* ************************************************************************* */
|
||||
Loading…
Reference in New Issue