diff --git a/gtsam/geometry/SOn.h b/gtsam/geometry/SOn.h index a08f87783..74b7b8521 100644 --- a/gtsam/geometry/SOn.h +++ b/gtsam/geometry/SOn.h @@ -30,6 +30,9 @@ #include #include + // For save/load +#include + namespace gtsam { namespace internal { @@ -292,6 +295,10 @@ class SO : public LieGroup, internal::DimensionSO(N)> { boost::none) const; /// @} + template + friend void save(Archive&, SO&, const unsigned int); + template + friend void load(Archive&, SO&, const unsigned int); template friend void serialize(Archive&, SO&, const unsigned int); friend class boost::serialization::access; @@ -329,6 +336,16 @@ template <> SOn LieGroup::between(const SOn& g, DynamicJacobian H1, DynamicJacobian H2) const; +/** Serialization function */ +template +void serialize( + Archive& ar, SOn& Q, + const unsigned int file_version +) { + Matrix& M = Q.matrix_; + ar& M; +} + /* * Define the traits. internal::LieGroup provides both Lie group and Testable */ diff --git a/gtsam/slam/FrobeniusFactor.h b/gtsam/slam/FrobeniusFactor.h index 60fa82ab4..a73445ae0 100644 --- a/gtsam/slam/FrobeniusFactor.h +++ b/gtsam/slam/FrobeniusFactor.h @@ -33,7 +33,7 @@ namespace gtsam { * isotropic. If it is, we extend to 'Dim' dimensions, otherwise we throw an * error. If defaultToUnit == false throws an exception on unexepcted input. */ -boost::shared_ptr ConvertPose3NoiseModel( + GTSAM_EXPORT boost::shared_ptr ConvertPose3NoiseModel( const SharedNoiseModel& model, size_t d, bool defaultToUnit = true); /** @@ -125,7 +125,7 @@ class FrobeniusBetweenFactor : public NoiseModelFactor2 { * the SO(p) matrices down to a Stiefel manifold of p*d matrices. * TODO(frank): template on D=2 or 3 */ -class FrobeniusWormholeFactor : public NoiseModelFactor2 { +class GTSAM_EXPORT FrobeniusWormholeFactor : public NoiseModelFactor2 { Matrix M_; ///< measured rotation between R1 and R2 size_t p_, pp_, dimension_; ///< dimensionality constants Matrix G_; ///< matrix of vectorized generators