31#include "rtabmap/core/rtabmap_core_export.h"
35#include <rtabmap/core/Link.h>
36#include <rtabmap/core/Parameters.h>
37#include <rtabmap/core/Signature.h>
53 FeatureBA(
const cv::KeyPoint & kptIn,
const float & depthIn = 0.0f,
const cv::Mat & descriptorIn = cv::Mat(),
int cameraIndexIn = 0):
129 const std::map<int, Transform> & posesIn,
130 const std::multimap<int, Link> & linksIn,
131 std::map<int, Transform> & posesOut,
132 std::multimap<int, Link> & linksOut)
const;
154 void setIterations(
int iterations) {iterations_ = iterations;}
155 void setSlam2d(
bool enabled) {slam2d_ = enabled;}
156 void setCovarianceIgnored(
bool enabled) {covarianceIgnored_ = enabled;}
157 void setEpsilon(
double epsilon) {epsilon_ = epsilon;}
158 void setRobust(
bool enabled) {robust_ = enabled;}
159 void setPriorsIgnored(
bool enabled) {priorsIgnored_ = enabled;}
160 void setLandmarksIgnored(
bool enabled) {landmarksIgnored_ = enabled;}
161 void setGravitySigma(
float value) {gravitySigma_ = value;}
191 const std::map<int, Transform> & poses,
192 const std::multimap<int, Link> & constraints,
193 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
194 double * finalError = 0,
195 int * iterationsDone = 0);
205 const std::map<int, Transform> & poses,
206 const std::multimap<int, Link> & constraints,
207 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
208 double * finalError = 0,
209 int * iterationsDone = 0);
229 const std::map<int, Transform> & poses,
230 const std::multimap<int, Link> & constraints,
231 cv::Mat & outputCovariance,
232 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
233 double * finalError = 0,
234 int * iterationsDone = 0);
255 const std::map<int, Transform> & poses,
256 const std::multimap<int, Link> & links,
257 const std::map<
int, std::vector<CameraModel> > & models,
258 std::map<int, cv::Point3f> & points3DMap,
259 const std::map<
int, std::map<int, FeatureBA> > & wordReferences,
260 std::set<int> * outliers = 0);
276 const std::map<int, Transform> & poses,
277 const std::multimap<int, Link> & links,
278 const std::map<int, Signature> & signatures,
279 std::map<int, cv::Point3f> & points3DMap,
280 std::map<
int, std::map<int, FeatureBA> > & wordReferences,
281 bool rematchFeatures =
false,
288 const std::map<int, Transform> & poses,
289 const std::multimap<int, Link> & links,
290 const std::map<int, Signature> & signatures,
291 bool rematchFeatures =
false,
304 std::map<int, cv::Point3f> & points3DMap,
305 const std::map<
int, std::map<int, FeatureBA> > & wordReferences,
306 std::set<int> * outliers = 0);
324 const std::map<int, Transform> & poses,
325 const std::multimap<int, Link> & links,
326 const std::map<int, Signature> & signatures,
327 std::map<int, cv::Point3f> & points3DMap,
328 std::map<
int, std::map<int, FeatureBA > > & wordReferences,
329 bool rematchFeatures =
false,
330 bool useLinkTransformAsGuess =
false,
335 int iterations = Parameters::defaultOptimizerIterations(),
336 bool slam2d = Parameters::defaultRegForce3DoF(),
337 bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
338 double epsilon = Parameters::defaultOptimizerEpsilon(),
339 bool robust = Parameters::defaultOptimizerRobust(),
340 bool priorsIgnored = Parameters::defaultOptimizerPriorsIgnored(),
341 bool landmarksIgnored = Parameters::defaultOptimizerLandmarksIgnored(),
342 float gravitySigma = Parameters::defaultOptimizerGravitySigma());
348 bool covarianceIgnored_;
352 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 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, std::set< int > *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
virtual void parseParameters(const ParametersMap ¶meters)
Reads shared knobs from parameters and applies them to this instance.
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, std::set< int > *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).