finished wrapping visualSLAM namespace
parent
877e9d4045
commit
ae78b89c6f
|
@ -78,7 +78,7 @@ void readAllDataISAM() {
|
||||||
/**
|
/**
|
||||||
* Setup newFactors and initialValues for each new pose and set of measurements at each frame.
|
* Setup newFactors and initialValues for each new pose and set of measurements at each frame.
|
||||||
*/
|
*/
|
||||||
void createNewFactors(shared_ptr<visualSLAM::Graph>& newFactors, boost::shared_ptr<Values>& initialValues,
|
void createNewFactors(shared_ptr<visualSLAM::Graph>& newFactors, boost::shared_ptr<visualSLAM::Values>& initialValues,
|
||||||
int pose_id, const Pose3& pose, const std::vector<Feature2D>& measurements, SharedNoiseModel measurementSigma, shared_ptrK calib) {
|
int pose_id, const Pose3& pose, const std::vector<Feature2D>& measurements, SharedNoiseModel measurementSigma, shared_ptrK calib) {
|
||||||
|
|
||||||
// Create a graph of newFactors with new measurements
|
// Create a graph of newFactors with new measurements
|
||||||
|
@ -99,7 +99,7 @@ void createNewFactors(shared_ptr<visualSLAM::Graph>& newFactors, boost::shared_p
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create initial values for all nodes in the newFactors
|
// Create initial values for all nodes in the newFactors
|
||||||
initialValues = shared_ptr<Values> (new Values());
|
initialValues = shared_ptr<visualSLAM::Values> (new visualSLAM::Values());
|
||||||
initialValues->insert(X(pose_id), pose);
|
initialValues->insert(X(pose_id), pose);
|
||||||
for (size_t i = 0; i < measurements.size(); i++) {
|
for (size_t i = 0; i < measurements.size(); i++) {
|
||||||
initialValues->insert(L(measurements[i].m_idLandmark), g_landmarks[measurements[i].m_idLandmark]);
|
initialValues->insert(L(measurements[i].m_idLandmark), g_landmarks[measurements[i].m_idLandmark]);
|
||||||
|
|
74
gtsam.h
74
gtsam.h
|
@ -81,6 +81,18 @@ class Point2 {
|
||||||
gtsam::Point2 retract(Vector v);
|
gtsam::Point2 retract(Vector v);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class StereoPoint2 {
|
||||||
|
StereoPoint2();
|
||||||
|
StereoPoint2(double uL, double uR, double v);
|
||||||
|
static gtsam::StereoPoint2 Expmap(Vector v);
|
||||||
|
static Vector Logmap(const gtsam::StereoPoint2& p);
|
||||||
|
void print(string s) const;
|
||||||
|
Vector localCoordinates(const gtsam::StereoPoint2& p);
|
||||||
|
gtsam::StereoPoint2 compose(const gtsam::StereoPoint2& p2);
|
||||||
|
gtsam::StereoPoint2 between(const gtsam::StereoPoint2& p2);
|
||||||
|
gtsam::StereoPoint2 retract(Vector v);
|
||||||
|
};
|
||||||
|
|
||||||
class Point3 {
|
class Point3 {
|
||||||
Point3();
|
Point3();
|
||||||
Point3(double x, double y, double z);
|
Point3(double x, double y, double z);
|
||||||
|
@ -207,6 +219,20 @@ class Pose3 {
|
||||||
gtsam::Rot3 rotation() const;
|
gtsam::Rot3 rotation() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Cal3_S2 {
|
||||||
|
Cal3_S2();
|
||||||
|
Cal3_S2(double fx, double fy, double s, double u0, double v0);
|
||||||
|
|
||||||
|
void print(string s) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Cal3_S2Stereo {
|
||||||
|
Cal3_S2Stereo();
|
||||||
|
Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b);
|
||||||
|
|
||||||
|
void print(string s) const;
|
||||||
|
};
|
||||||
|
|
||||||
class CalibratedCamera {
|
class CalibratedCamera {
|
||||||
|
|
||||||
CalibratedCamera();
|
CalibratedCamera();
|
||||||
|
@ -635,3 +661,51 @@ class Graph {
|
||||||
// TODO: add factors, etc.
|
// TODO: add factors, etc.
|
||||||
|
|
||||||
}///\namespace simulated2DOriented
|
}///\namespace simulated2DOriented
|
||||||
|
|
||||||
|
//*************************************************************************
|
||||||
|
// VisualSLAM
|
||||||
|
//*************************************************************************
|
||||||
|
|
||||||
|
#include <gtsam/slam/visualSLAM.h>
|
||||||
|
namespace visualSLAM {
|
||||||
|
|
||||||
|
class Values {
|
||||||
|
Values();
|
||||||
|
void insertPose(size_t key, const gtsam::Pose3& pose);
|
||||||
|
void insertPoint(size_t key, const gtsam::Point3& pose);
|
||||||
|
size_t size() const;
|
||||||
|
void print(string s) const;
|
||||||
|
gtsam::Pose3 pose(size_t i);
|
||||||
|
gtsam::Point3 point(size_t j);
|
||||||
|
};
|
||||||
|
|
||||||
|
class Graph {
|
||||||
|
Graph();
|
||||||
|
|
||||||
|
void print(string s) const;
|
||||||
|
|
||||||
|
double error(const pose2SLAM::Values& values) const;
|
||||||
|
gtsam::Ordering* orderingCOLAMD(const pose2SLAM::Values& values) const;
|
||||||
|
gtsam::GaussianFactorGraph* linearize(const pose2SLAM::Values& values,
|
||||||
|
const gtsam::Ordering& ordering) const;
|
||||||
|
|
||||||
|
// Measurements
|
||||||
|
void addMeasurement(const gtsam::Point2& measured, const gtsam::SharedNoiseModel& model,
|
||||||
|
size_t poseKey, size_t pointKey, const gtsam::Cal3_S2* K);
|
||||||
|
void addStereoMeasurement(const gtsam::StereoPoint2& measured, const gtsam::SharedNoiseModel& model,
|
||||||
|
size_t poseKey, size_t pointKey, const gtsam::Cal3_S2Stereo* K);
|
||||||
|
|
||||||
|
// Constraints
|
||||||
|
void addPoseConstraint(size_t poseKey, const gtsam::Pose3& p);
|
||||||
|
void addPointConstraint(size_t pointKey, const gtsam::Point3& p);
|
||||||
|
|
||||||
|
// Priors
|
||||||
|
void addPosePrior(size_t poseKey, const gtsam::Pose3& p, const gtsam::SharedNoiseModel& model);
|
||||||
|
void addPointPrior(size_t pointKey, const gtsam::Point3& p, const gtsam::SharedNoiseModel& model);
|
||||||
|
void addRangeFactor(size_t poseKey, size_t pointKey, double range, const gtsam::SharedNoiseModel& model);
|
||||||
|
|
||||||
|
visualSLAM::Values optimize(const visualSLAM::Values& initialEstimate) const;
|
||||||
|
gtsam::Marginals marginals(const visualSLAM::Values& solution) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
}///\namespace visualSLAM
|
||||||
|
|
|
@ -22,14 +22,14 @@ namespace visualSLAM {
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
void Graph::addMeasurement(const Point2& measured, const SharedNoiseModel& model,
|
void Graph::addMeasurement(const Point2& measured, const SharedNoiseModel& model,
|
||||||
Key poseKey, Key pointKey, const shared_ptrK& K) {
|
Key poseKey, Key pointKey, const shared_ptrK K) {
|
||||||
boost::shared_ptr<ProjectionFactor> factor(new ProjectionFactor(measured, model, poseKey, pointKey, K));
|
boost::shared_ptr<ProjectionFactor> factor(new ProjectionFactor(measured, model, poseKey, pointKey, K));
|
||||||
push_back(factor);
|
push_back(factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
void Graph::addStereoMeasurement(const StereoPoint2& measured, const SharedNoiseModel& model,
|
void Graph::addStereoMeasurement(const StereoPoint2& measured, const SharedNoiseModel& model,
|
||||||
Key poseKey, Key pointKey, const shared_ptrKStereo& K) {
|
Key poseKey, Key pointKey, const shared_ptrKStereo K) {
|
||||||
boost::shared_ptr<StereoFactor> factor(new StereoFactor(measured, model, poseKey, pointKey, K));
|
boost::shared_ptr<StereoFactor> factor(new StereoFactor(measured, model, poseKey, pointKey, K));
|
||||||
push_back(factor);
|
push_back(factor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <gtsam/nonlinear/NonlinearFactorGraph.h>
|
#include <gtsam/nonlinear/NonlinearFactorGraph.h>
|
||||||
#include <gtsam/nonlinear/NonlinearEquality.h>
|
#include <gtsam/nonlinear/NonlinearEquality.h>
|
||||||
#include <gtsam/nonlinear/LevenbergMarquardtOptimizer.h>
|
#include <gtsam/nonlinear/LevenbergMarquardtOptimizer.h>
|
||||||
|
#include <gtsam/nonlinear/Marginals.h>
|
||||||
#include <gtsam/geometry/SimpleCamera.h>
|
#include <gtsam/geometry/SimpleCamera.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,9 +63,15 @@ namespace visualSLAM {
|
||||||
/// insert a pose
|
/// insert a pose
|
||||||
void insertPose(Key i, const Pose3& pose) { insert(i, pose); }
|
void insertPose(Key i, const Pose3& pose) { insert(i, pose); }
|
||||||
|
|
||||||
|
/// insert a point
|
||||||
|
void insertPoint(Key j, const Point3& point) { insert(j, point); }
|
||||||
|
|
||||||
/// get a pose
|
/// get a pose
|
||||||
Pose3 pose(Key i) const { return at<Pose3>(i); }
|
Pose3 pose(Key i) const { return at<Pose3>(i); }
|
||||||
|
|
||||||
|
/// get a point
|
||||||
|
Point3 point(Key j) const { return at<Point3>(j); }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -99,7 +106,7 @@ namespace visualSLAM {
|
||||||
* @param K shared pointer to calibration object
|
* @param K shared pointer to calibration object
|
||||||
*/
|
*/
|
||||||
void addMeasurement(const Point2& measured, const SharedNoiseModel& model,
|
void addMeasurement(const Point2& measured, const SharedNoiseModel& model,
|
||||||
Key poseKey, Key pointKey, const shared_ptrK& K);
|
Key poseKey, Key pointKey, const shared_ptrK K);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a stereo factor measurement
|
* Add a stereo factor measurement
|
||||||
|
@ -110,7 +117,7 @@ namespace visualSLAM {
|
||||||
* @param K shared pointer to stereo calibration object
|
* @param K shared pointer to stereo calibration object
|
||||||
*/
|
*/
|
||||||
void addStereoMeasurement(const StereoPoint2& measured, const SharedNoiseModel& model,
|
void addStereoMeasurement(const StereoPoint2& measured, const SharedNoiseModel& model,
|
||||||
Key poseKey, Key pointKey, const shared_ptrKStereo& K);
|
Key poseKey, Key pointKey, const shared_ptrKStereo K);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a constraint on a pose (for now, *must* be satisfied in any Values)
|
* Add a constraint on a pose (for now, *must* be satisfied in any Values)
|
||||||
|
@ -162,6 +169,11 @@ namespace visualSLAM {
|
||||||
return LevenbergMarquardtOptimizer(*this, initialEstimate).optimize();
|
return LevenbergMarquardtOptimizer(*this, initialEstimate).optimize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return a Marginals object
|
||||||
|
Marginals marginals(const Values& solution) const {
|
||||||
|
return Marginals(*this,solution);
|
||||||
|
}
|
||||||
|
|
||||||
}; // Graph
|
}; // Graph
|
||||||
|
|
||||||
} // namespaces
|
} // namespaces
|
||||||
|
|
Loading…
Reference in New Issue