test files deprecated, might be removed later
parent
6d76b5910c
commit
147d174a66
|
|
@ -0,0 +1,65 @@
|
|||
///* ----------------------------------------------------------------------------
|
||||
//
|
||||
// * 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 testLinearInequalityManifolds.cpp
|
||||
// * @brief Unit tests for testLinearInequalityManifolds
|
||||
// * @author Krunal Chande
|
||||
// * @author Duy-Nguyen Ta
|
||||
// * @author Luca Carlone
|
||||
// * @date Dec 15, 2014
|
||||
// */
|
||||
//
|
||||
//#include <gtsam/inference/Symbol.h>
|
||||
//#include <CppUnitLite/TestHarness.h>
|
||||
//#include <iostream>
|
||||
//
|
||||
//using namespace std;
|
||||
//using namespace gtsam::symbol_shorthand;
|
||||
//using namespace gtsam;
|
||||
//const double tol = 1e-10;
|
||||
//
|
||||
//namespace gtsam {
|
||||
//class PositionConstraint : public LinearInequalityManifold1 {
|
||||
//public:
|
||||
// PositionConstraint()
|
||||
//};
|
||||
//}
|
||||
////******************************************************************************
|
||||
//TEST(testLinearEqualityManifolds, equals ) {
|
||||
// // Instantiate a class LinearEqualityManifolds
|
||||
// LinearEqualityManifolds le1();
|
||||
//
|
||||
// // Instantiate another class LinearEqualityManifolds
|
||||
// LinearEqualityManifolds le2();
|
||||
//
|
||||
// // check equals
|
||||
// CHECK(assert_equal(le1,le1));
|
||||
// CHECK(le2.equals(le2));
|
||||
// CHECK(!le2.equals(le1));
|
||||
// CHECK(!le1.equals(le2));
|
||||
//}
|
||||
//
|
||||
//////******************************************************************************
|
||||
////TEST(testLinearEqualityManifolds, linearize ) {
|
||||
////}
|
||||
////
|
||||
//////******************************************************************************
|
||||
////TEST(testLinearEqualityManifolds, size ) {
|
||||
////}
|
||||
//
|
||||
////******************************************************************************
|
||||
//int main() {
|
||||
// TestResult tr;
|
||||
// return TestRegistry::runAllTests(tr);
|
||||
//}
|
||||
////******************************************************************************
|
||||
//
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
|
||||
* 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 testPositionUpperBoundX.cpp
|
||||
* @brief Unit tests for testPositionUpperBoundX
|
||||
* @author Krunal Chande
|
||||
* @author Duy-Nguyen Ta
|
||||
* @author Luca Carlone
|
||||
* @date Dec 16, 2014
|
||||
*/
|
||||
|
||||
#include <gtsam/base/numericalDerivative.h>
|
||||
#include <gtsam/geometry/Pose3.h>
|
||||
#include <gtsam/inference/Symbol.h>
|
||||
#include <gtsam/nonlinear/NonlinearFactor.h>
|
||||
#include <CppUnitLite/TestHarness.h>
|
||||
#include <iostream>
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
template<class T>
|
||||
class LinearInequalityManifold1: public NoiseModelFactor1<T> {
|
||||
typedef NoiseModelFactor1<T> Base;
|
||||
typedef LinearInequalityManifold1<T> This;
|
||||
protected:
|
||||
bool active_;
|
||||
public:
|
||||
|
||||
/// Constructor
|
||||
LinearInequalityManifold1(Key key) :
|
||||
Base(noiseModel::Constrained::All(1), key), active_(true) {
|
||||
}
|
||||
|
||||
/** implement functions needed for Testable */
|
||||
|
||||
/** print */
|
||||
virtual void print(const std::string& s, const KeyFormatter& keyFormatter =
|
||||
DefaultKeyFormatter) const {
|
||||
std::cout << s << " key = { " << keyFormatter(this->key()) << "}"
|
||||
<< std::endl;
|
||||
if (active_)
|
||||
std::cout << " Active" << std::endl;
|
||||
else
|
||||
std::cout << " Inactive" << std::endl;
|
||||
}
|
||||
|
||||
/** equals */
|
||||
virtual bool equals(const NonlinearFactor& expected,
|
||||
double tol = 1e-9) const {
|
||||
const This* e = dynamic_cast<const This*>(&expected);
|
||||
return e != NULL && Base::equals(*e, tol) && (active_ == e->active_);
|
||||
}
|
||||
|
||||
/** Evaluate error MUST return a *one dimensional* vector,
|
||||
* because we don't support multi-valued inequality factors
|
||||
*/
|
||||
virtual Vector evaluateError(const T& x, boost::optional<Matrix&> H =
|
||||
boost::none) const = 0;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* This class defines an inequality upper bound on x for a Pose3
|
||||
* x <= upperBound
|
||||
*/
|
||||
class PositionUpperBoundX: public LinearInequalityManifold1<Pose3> {
|
||||
double upperBound_;
|
||||
typedef LinearInequalityManifold1<Pose3> Base;
|
||||
typedef PositionUpperBoundX This;
|
||||
public:
|
||||
PositionUpperBoundX(Key key, const double upperBound) :
|
||||
Base(key), upperBound_(upperBound) {
|
||||
}
|
||||
|
||||
/// @return a deep copy of this factor
|
||||
virtual gtsam::NonlinearFactor::shared_ptr clone() const {
|
||||
return boost::static_pointer_cast<NonlinearFactor>(
|
||||
gtsam::NonlinearFactor::shared_ptr(new This(*this)));
|
||||
}
|
||||
|
||||
/** implement functions needed for Testable */
|
||||
|
||||
/** print */
|
||||
virtual void print(const std::string& s, const KeyFormatter& keyFormatter =
|
||||
DefaultKeyFormatter) const {
|
||||
Base::print(s);
|
||||
std::cout << "PositionUpperBoundX" << std::endl;
|
||||
std::cout << "x <= " << upperBound_ << std::endl;
|
||||
}
|
||||
|
||||
/** equals */
|
||||
virtual bool equals(const NonlinearFactor& expected,
|
||||
double tol = 1e-9) const {
|
||||
const This* e = dynamic_cast<const This*>(&expected);
|
||||
return e != NULL && Base::equals(*e, tol) && (upperBound_ == e->upperBound_);
|
||||
}
|
||||
|
||||
/**
|
||||
* error = x - upperBound_
|
||||
*/
|
||||
double computeError(const Pose3& pose) const {
|
||||
return pose.x() - upperBound_;
|
||||
}
|
||||
|
||||
/**
|
||||
* error = x - upperBound_
|
||||
*/
|
||||
Vector evaluateError(const Pose3& pose, boost::optional<Matrix&> H =
|
||||
boost::none) const {
|
||||
if (H)
|
||||
*H = (Matrix(1, 6) << 0, 0, 0, 1, 0, 0).finished();
|
||||
return (Vector(1) << computeError(pose)).finished();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
//******************************************************************************
|
||||
|
||||
using namespace std;
|
||||
using namespace gtsam::symbol_shorthand;
|
||||
using namespace gtsam;
|
||||
|
||||
//******************************************************************************
|
||||
TEST(PositionUpperBoundX, equals ) {
|
||||
// Instantiate a class PositionUpperBoundX
|
||||
PositionUpperBoundX ineq1(X(1), 1);
|
||||
|
||||
// Instantiate another class PositionUpperBoundX
|
||||
PositionUpperBoundX ineq2(X(1), 1);
|
||||
|
||||
// check equals
|
||||
CHECK(ineq1.equals(ineq2, 1e-5));
|
||||
}
|
||||
|
||||
//******************************************************************************
|
||||
TEST(PositionUpperBoundX, evaluateError ) {
|
||||
// Instantiate a class PositionUpperBoundX
|
||||
PositionUpperBoundX ineq(X(1), 45.6);
|
||||
|
||||
Pose3 pose(Rot3::ypr(0.1, 0.3, 0.2), Point3(43.0, 27.8, 91.1));
|
||||
Matrix H;
|
||||
Vector error = ineq.evaluateError(pose, H);
|
||||
|
||||
Matrix expectedH = numericalDerivative11<Vector, Pose3>(
|
||||
boost::bind(&PositionUpperBoundX::evaluateError, ineq, _1, boost::none),
|
||||
pose, 1e-5);
|
||||
|
||||
cout << "expectedH: " << expectedH << endl;
|
||||
cout << "H: " << H << endl;
|
||||
|
||||
Vector expectedError = (Vector(1) << 0.0).finished();
|
||||
// CHECK(assert_equal(expectedError, error, 1e-100));
|
||||
// CHECK(assert_equal(expectedH, H, 1e-100));
|
||||
|
||||
Matrix hessian = numericalHessian<Pose3>(
|
||||
boost::bind(&PositionUpperBoundX::computeError, ineq, _1),
|
||||
pose, 1e-5);
|
||||
cout << "Hessian: \n" << hessian << endl;
|
||||
}
|
||||
|
||||
//******************************************************************************
|
||||
int main() {
|
||||
TestResult tr;
|
||||
return TestRegistry::runAllTests(tr);
|
||||
}
|
||||
//******************************************************************************
|
||||
|
||||
Loading…
Reference in New Issue