31#include "rtabmap/core/rtabmap_core_export.h"
36#include <rtabmap/core/Link.h>
37#include <rtabmap/core/Parameters.h>
38#include <rtabmap/core/Signature.h>
54 FeatureBA(
const cv::KeyPoint & kptIn,
const float & depthIn = 0.0f,
const cv::Mat & descriptorIn = cv::Mat(),
int cameraIndexIn = 0):
68typedef std::map<int, std::set<int> > BAOutliers;
132 const std::map<int, Transform> & posesIn,
133 const std::multimap<int, Link> & linksIn,
134 std::map<int, Transform> & posesOut,
135 std::multimap<int, Link> & linksOut)
const;
157 void setIterations(
int iterations) {iterations_ = iterations;}
158 void setSlam2d(
bool enabled) {slam2d_ = enabled;}
159 void setCovarianceIgnored(
bool enabled) {covarianceIgnored_ = enabled;}
160 void setEpsilon(
double epsilon) {epsilon_ = epsilon;}
161 void setRobust(
bool enabled) {robust_ = enabled;}
162 void setPriorsIgnored(
bool enabled) {priorsIgnored_ = enabled;}
163 void setLandmarksIgnored(
bool enabled) {landmarksIgnored_ = enabled;}
164 void setGravitySigma(
float value) {gravitySigma_ = value;}
194 const std::map<int, Transform> & poses,
195 const std::multimap<int, Link> & constraints,
196 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
197 double * finalError = 0,
198 int * iterationsDone = 0);
208 const std::map<int, Transform> & poses,
209 const std::multimap<int, Link> & constraints,
210 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
211 double * finalError = 0,
212 int * iterationsDone = 0);
232 const std::map<int, Transform> & poses,
233 const std::multimap<int, Link> & constraints,
234 cv::Mat & outputCovariance,
235 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
236 double * finalError = 0,
237 int * iterationsDone = 0);
258 const std::map<int, Transform> & poses,
259 const std::multimap<int, Link> & links,
260 const std::map<
int, std::vector<CameraModel> > & models,
261 std::map<int, cv::Point3f> & points3DMap,
262 const std::map<
int, std::map<int, FeatureBA> > & wordReferences,
263 BAOutliers * outliers = 0);
279 const std::map<int, Transform> & poses,
280 const std::multimap<int, Link> & links,
281 const std::map<int, Signature> & signatures,
282 std::map<int, cv::Point3f> & points3DMap,
283 std::map<
int, std::map<int, FeatureBA> > & wordReferences,
284 bool rematchFeatures =
false,
291 const std::map<int, Transform> & poses,
292 const std::multimap<int, Link> & links,
293 const std::map<int, Signature> & signatures,
294 bool rematchFeatures =
false,
307 std::map<int, cv::Point3f> & points3DMap,
308 const std::map<
int, std::map<int, FeatureBA> > & wordReferences,
309 BAOutliers * outliers = 0);
327 const std::map<int, Transform> & poses,
328 const std::multimap<int, Link> & links,
329 const std::map<int, Signature> & signatures,
330 std::map<int, cv::Point3f> & points3DMap,
331 std::map<
int, std::map<int, FeatureBA > > & wordReferences,
332 bool rematchFeatures =
false,
333 bool useLinkTransformAsGuess =
false,
338 int iterations = Parameters::defaultOptimizerIterations(),
339 bool slam2d = Parameters::defaultRegForce3DoF(),
340 bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
341 double epsilon = Parameters::defaultOptimizerEpsilon(),
342 bool robust = Parameters::defaultOptimizerRobust(),
343 bool priorsIgnored = Parameters::defaultOptimizerPriorsIgnored(),
344 bool landmarksIgnored = Parameters::defaultOptimizerLandmarksIgnored(),
345 float gravitySigma = Parameters::defaultOptimizerGravitySigma());
351 bool covarianceIgnored_;
355 bool landmarksIgnored_;
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
A single bundle adjustment feature observation: one keypoint seen in one frame.
cv::KeyPoint kpt
2D image keypoint.
cv::Mat descriptor
Optional descriptor for the keypoint (used when re-matching is enabled).
int cameraIndex
Index into the frame's camera model list for multi-camera rigs.
float depth
Depth at kpt in meters, or 0 if unknown (monocular).
Directed constraint between two nodes in RTAB-Map's pose graph.
Abstract base for pose-graph and bundle-adjustment optimizers.
virtual void parseParameters(const ParametersMap ¶meters)
Reads shared knobs from parameters and applies them to this instance.
virtual std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, BAOutliers *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
int iterations() const
Max solver iterations.
Type
Graph-optimizer back-end identifier.
std::map< int, Transform > optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization that grows the graph one node at a time.
bool isRobust() const
If true, use a robust kernel / switchable factors against bad loop closures.
std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap ®istrationParameters=ParametersMap())
BA wrapper that derives camera models and correspondences from signatures.
bool landmarksIgnored() const
If true, landmark/marker observations are dropped.
double epsilon() const
Convergence threshold on cost decrease.
void getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
Extracts the connected component reachable from fromId.
bool isSlam2d() const
True if optimizing in SE(2) instead of SE(3).
static Optimizer * create(const ParametersMap ¶meters)
Factory: build an optimizer from a ParametersMap.
std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization (single shot).
bool isCovarianceIgnored() const
If true, all edges share an identity information matrix.
void computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
Build BA correspondences (3D points + per-frame observations) from signatures.
virtual Type type() const =0
Returns the concrete back-end identifier (one of Type).
std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap ®istrationParameters=ParametersMap())
BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map...
float gravitySigma() const
Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
Transform optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, BAOutliers *outliers=0)
Refine a single two-frame link via BA.
bool priorsIgnored() const
If true, unary priors on poses are dropped.
static Optimizer * create(Optimizer::Type type, const ParametersMap ¶meters=ParametersMap())
Factory: build an optimizer of a specific type. Caller owns the result.
virtual std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization with marginal covariance of rootId.
static bool isAvailable(Optimizer::Type type)
Returns whether type was compiled in (its third-party dependency was found).
std::map< std::string, std::string > ParametersMap
Parameter keys mapped to their values, as used by every configurable class (see Parameters).