added more serialization
parent
2e942f08ac
commit
040493474f
|
@ -152,6 +152,15 @@ namespace gtsam {
|
|||
|
||||
/** assert invariants */
|
||||
void assertInvariants() const;
|
||||
|
||||
private:
|
||||
/** Serialization function */
|
||||
friend class boost::serialization::access;
|
||||
template<class ARCHIVE>
|
||||
void serialize(ARCHIVE & ar, const unsigned int version) {
|
||||
ar & BOOST_SERIALIZATION_NVP(info_);
|
||||
ar & BOOST_SERIALIZATION_NVP(matrix_);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -255,6 +255,17 @@ namespace gtsam {
|
|||
/** Assert invariants after elimination */
|
||||
void assertInvariants() const;
|
||||
|
||||
private:
|
||||
/** Serialization function */
|
||||
friend class boost::serialization::access;
|
||||
template<class ARCHIVE>
|
||||
void serialize(ARCHIVE & ar, const unsigned int version) {
|
||||
ar & BOOST_SERIALIZATION_NVP(firstNonzeroBlocks_);
|
||||
ar & BOOST_SERIALIZATION_NVP(Ab_);
|
||||
ar & BOOST_SERIALIZATION_NVP(model_);
|
||||
ar & BOOST_SERIALIZATION_NVP(matrix_);
|
||||
}
|
||||
|
||||
}; // JacobianFactor
|
||||
|
||||
/** return A*x */
|
||||
|
|
|
@ -140,16 +140,12 @@ public:
|
|||
VectorValues result;
|
||||
result.varStarts_ = varStarts_;
|
||||
result.values_ = values_.head(varStarts_.back()) + c.values_.head(varStarts_.back());
|
||||
// result.values_ = boost::numeric::ublas::project(values_, boost::numeric::ublas::range(0, varStarts_.back())) +
|
||||
// boost::numeric::ublas::project(c.values_, boost::numeric::ublas::range(0, c.varStarts_.back()));
|
||||
return result;
|
||||
}
|
||||
|
||||
void operator+=(const VectorValues& c) {
|
||||
assert(varStarts_ == c.varStarts_);
|
||||
this->values_ += c.values_.head(varStarts_.back());
|
||||
// this->values_ = boost::numeric::ublas::project(this->values_, boost::numeric::ublas::range(0, varStarts_.back())) +
|
||||
// boost::numeric::ublas::project(c.values_, boost::numeric::ublas::range(0, c.varStarts_.back()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -215,8 +211,6 @@ public:
|
|||
bool flag = false ;
|
||||
size_t i=0;
|
||||
for (const double *v = x.values_.data(); i< (size_t) x.values_.size(); ++v) {
|
||||
// BOOST_FOREACH(const double &v, x.values_) {
|
||||
// double v = x(i);
|
||||
if ( *v < tol && *v > -tol) {
|
||||
flag = true ;
|
||||
break;
|
||||
|
@ -225,7 +219,16 @@ public:
|
|||
}
|
||||
return flag;
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
/** Serialization function */
|
||||
friend class boost::serialization::access;
|
||||
template<class ARCHIVE>
|
||||
void serialize(ARCHIVE & ar, const unsigned int version) {
|
||||
ar & BOOST_SERIALIZATION_NVP(values_);
|
||||
ar & BOOST_SERIALIZATION_NVP(varStarts_);
|
||||
}
|
||||
}; // \class VectorValues definition
|
||||
|
||||
/// Implementations of functions
|
||||
|
||||
|
@ -281,16 +284,12 @@ inline VectorValues::mapped_type VectorValues::operator[](Index variable) {
|
|||
checkVariable(variable);
|
||||
const size_t start = varStarts_[variable], n = varStarts_[variable+1] - start;
|
||||
return values_.segment(start, n);
|
||||
// return boost::numeric::ublas::project(values_,
|
||||
// boost::numeric::ublas::range(varStarts_[variable], varStarts_[variable+1]));
|
||||
}
|
||||
|
||||
inline VectorValues::const_mapped_type VectorValues::operator[](Index variable) const {
|
||||
checkVariable(variable);
|
||||
const size_t start = varStarts_[variable], n = varStarts_[variable+1] - start;
|
||||
return values_.segment(start, n);
|
||||
// return boost::numeric::ublas::project(values_,
|
||||
// boost::numeric::ublas::range(varStarts_[variable], varStarts_[variable+1]));
|
||||
}
|
||||
|
||||
struct DimSpec: public std::vector<size_t> {
|
||||
|
|
|
@ -145,10 +145,6 @@ bool equalsDereferencedXML(const T& input = T()) {
|
|||
#include <gtsam/geometry/Rot3.h>
|
||||
#include <gtsam/geometry/Cal3_S2.h>
|
||||
|
||||
//#include <gtsam/linear/VectorValues.h>
|
||||
//#include <gtsam/linear/GaussianConditional.h>
|
||||
//#include <gtsam/inference/SymbolicConditional.h>
|
||||
|
||||
#include <gtsam/slam/planarSLAM.h>
|
||||
#include <gtsam/slam/BearingFactor.h>
|
||||
|
||||
|
@ -193,20 +189,6 @@ TEST (Serialization, xml_geometry) {
|
|||
EXPECT(equalsXML<gtsam::Pose3>(Pose3(rt3, pt3)));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST (Serialization, text_linear) {
|
||||
// NOT WORKING:
|
||||
// EXPECT(equalsObj<VectorValues>());
|
||||
// EXPECT(equalsObj<GaussianConditional>());
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST (Serialization, xml_linear) {
|
||||
// NOT WORKING:
|
||||
// EXPECT(equalsXML<VectorValues>());
|
||||
// EXPECT(equalsXML<GaussianConditional>());
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
// Export Noisemodels
|
||||
BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Constrained, "gtsam_noiseModel_Constrained");
|
||||
|
@ -282,6 +264,56 @@ TEST (Serialization, SharedDiagonal_noiseModels) {
|
|||
EXPECT(equalsDereferencedXML<SharedDiagonal>(constrained3));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
// Linear components
|
||||
/* ************************************************************************* */
|
||||
|
||||
#include <gtsam/linear/VectorValues.h>
|
||||
#include <gtsam/linear/JacobianFactor.h>
|
||||
#include <gtsam/linear/HessianFactor.h>
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST (Serialization, text_linear) {
|
||||
vector<size_t> dims;
|
||||
dims.push_back(1);
|
||||
dims.push_back(2);
|
||||
dims.push_back(2);
|
||||
double v[] = {1., 2., 3., 4., 5.};
|
||||
VectorValues values(dims, v);
|
||||
EXPECT(equalsObj<VectorValues>(values));
|
||||
|
||||
Index i1 = 4, i2 = 7;
|
||||
Matrix A1 = eye(3), A2 = -1.0 * eye(3);
|
||||
Vector b = ones(3);
|
||||
SharedDiagonal model = noiseModel::Diagonal::Sigmas(Vector_(3, 1.0, 2.0, 3.0));
|
||||
JacobianFactor jacobianfactor(i1, A1, i2, A2, b, model);
|
||||
EXPECT(equalsObj<VectorValues>(jacobianfactor));
|
||||
|
||||
HessianFactor hessianfactor(jacobianfactor);
|
||||
EXPECT(equalsObj<VectorValues>(hessianfactor));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST (Serialization, xml_linear) {
|
||||
vector<size_t> dims;
|
||||
dims.push_back(1);
|
||||
dims.push_back(2);
|
||||
dims.push_back(2);
|
||||
double v[] = {1., 2., 3., 4., 5.};
|
||||
VectorValues values(dims, v);
|
||||
EXPECT(equalsXML<VectorValues>(values));
|
||||
|
||||
Index i1 = 4, i2 = 7;
|
||||
Matrix A1 = eye(3), A2 = -1.0 * eye(3);
|
||||
Vector b = ones(3);
|
||||
SharedDiagonal model = noiseModel::Diagonal::Sigmas(Vector_(3, 1.0, 2.0, 3.0));
|
||||
JacobianFactor jacobianfactor(i1, A1, i2, A2, b, model);
|
||||
EXPECT(equalsObj<VectorValues>(jacobianfactor));
|
||||
|
||||
HessianFactor hessianfactor(jacobianfactor);
|
||||
EXPECT(equalsObj<VectorValues>(hessianfactor));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
/* Create GUIDs for factors */
|
||||
BOOST_CLASS_EXPORT_GUID(gtsam::planarSLAM::Prior, "gtsam::planarSLAM::Prior");
|
||||
|
|
Loading…
Reference in New Issue