2026-08-02 01:36:11 +00:00
<!-- HTML header for doxygen 1.9.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en-US" >
< head >
< meta http-equiv = "Content-Type" content = "text/xhtml;charset=UTF-8" />
< meta http-equiv = "X-UA-Compatible" content = "IE=11" />
< meta name = "generator" content = "Doxygen 1.9.8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1" />
< title > RTAB-Map: rtabmap::Optimizer Class Reference</ title >
< link href = "tabs.css" rel = "stylesheet" type = "text/css" />
< script type = "text/javascript" src = "jquery.js" ></ script >
< script type = "text/javascript" src = "dynsections.js" ></ script >
2026-08-02 07:56:38 +00:00
< link href = "navtree.css" rel = "stylesheet" type = "text/css" />
< script type = "text/javascript" src = "resize.js" ></ script >
< script type = "text/javascript" src = "navtreedata.js" ></ script >
< script type = "text/javascript" src = "navtree.js" ></ script >
2026-08-02 01:36:11 +00:00
< link href = "search/search.css" rel = "stylesheet" type = "text/css" />
< script type = "text/javascript" src = "search/searchdata.js" ></ script >
< script type = "text/javascript" src = "search/search.js" ></ script >
< link href = "doxygen.css" rel = "stylesheet" type = "text/css" />
< script type = "text/javascript" > window . RTABMAP_DOC_ROOT = "" ;</ script >
< script type = "text/javascript" src = "../versions.js" ></ script >
< script type = "text/javascript" src = "version-switcher.js" ></ script >
</ head >
< body >
< div id = "top" > <!-- do not remove this div, it is closed by doxygen! -->
< div id = "titlearea" >
< table cellspacing = "0" cellpadding = "0" >
< tbody >
< tr id = "projectrow" >
< td id = "projectalign" >
< div id = "projectname" > RTAB-Map< span id = "projectnumber" >   0.23.10</ span >
</ div >
2026-08-02 07:56:38 +00:00
< div id = "projectbrief" > Real-Time Appearance-Based Mapping</ div >
2026-08-02 01:36:11 +00:00
</ td >
</ tr >
</ tbody >
</ table >
</ div >
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox ( "searchBox" , "search/" , '.html' );
/* @license-end */
</ script >
< script type = "text/javascript" src = "menudata.js" ></ script >
< script type = "text/javascript" src = "menu.js" ></ script >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$ ( function () {
initMenu ( '' , true , false , 'search.php' , 'Search' );
$ ( document ). ready ( function () { init_search (); });
});
/* @license-end */
</ script >
< div id = "main-nav" ></ div >
2026-08-02 07:56:38 +00:00
</ div > <!-- top -->
< div id = "side-nav" class = "ui-resizable side-nav-resizable" >
< div id = "nav-tree" >
< div id = "nav-tree-contents" >
< div id = "nav-sync" class = "sync" ></ div >
</ div >
</ div >
< div id = "splitbar" style = "-moz-user-select:none;"
class = "ui-resizable-handle" >
</ div >
</ div >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$ ( document ). ready ( function (){ initNavTree ( 'classrtabmap_1_1Optimizer.html' , '' ); initResizable (); });
/* @license-end */
</ script >
< div id = "doc-content" >
2026-08-02 01:36:11 +00:00
<!-- window showing the filter options -->
< div id = "MSearchSelectWindow"
onmouseover = "return searchBox.OnSearchSelectShow()"
onmouseout = "return searchBox.OnSearchSelectHide()"
onkeydown = "return searchBox.OnSearchSelectKey(event)" >
</ div >
<!-- iframe showing the search results (closed by default) -->
< div id = "MSearchResultsWindow" >
< div id = "MSearchResults" >
< div class = "SRPage" >
< div id = "SRIndex" >
< div id = "SRResults" ></ div >
< div class = "SRStatus" id = "Loading" > Loading...</ div >
< div class = "SRStatus" id = "Searching" > Searching...</ div >
< div class = "SRStatus" id = "NoMatches" > No Matches</ div >
</ div >
</ div >
</ div >
</ div >
< div class = "header" >
< div class = "summary" >
< a href = "#pub-types" > Public Types</ a > |
< a href = "#pub-methods" > Public Member Functions</ a > |
< a href = "#pub-static-methods" > Static Public Member Functions</ a > |
< a href = "#pro-methods" > Protected Member Functions</ a > |
< a href = "classrtabmap_1_1Optimizer-members.html" > List of all members</ a > </ div >
< div class = "headertitle" >< div class = "title" > rtabmap::Optimizer Class Reference< span class = "mlabels" >< span class = "mlabel" > abstract</ span ></ span ></ div ></ div >
</ div > <!--header-->
< div class = "contents" >
< p > Abstract base for pose-graph and bundle-adjustment optimizers.
< a href = "classrtabmap_1_1Optimizer.html#details" > More...</ a ></ p >
< p >< code > #include < < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > > </ code ></ p >
< div class = "dynheader" >
Inheritance diagram for rtabmap::Optimizer:</ div >
< div class = "dyncontent" >
< div class = "center" >< img src = "classrtabmap_1_1Optimizer__inherit__graph.png" border = "0" usemap = "#artabmap_1_1Optimizer_inherit__map" alt = "Inheritance graph" /></ div >
< map name = "artabmap_1_1Optimizer_inherit__map" id = "artabmap_1_1Optimizer_inherit__map" >
< area shape = "rect" title = "Abstract base for pose-graph and bundle-adjustment optimizers." alt = "" coords = "5,104,155,129" />
< area shape = "rect" href = "classrtabmap_1_1OptimizerCVSBA.html" title = " " alt = "" coords = "205,5,398,31" />
< area shape = "poly" title = " " alt = "" coords = "108,94,151,66,202,40,235,28,237,33,204,44,154,70,111,98" />
< area shape = "rect" href = "classrtabmap_1_1OptimizerCeres.html" title = " " alt = "" coords = "208,55,395,80" />
< area shape = "poly" title = " " alt = "" coords = "150,98,243,77,244,83,152,104" />
< area shape = "rect" href = "classrtabmap_1_1OptimizerG2O.html" title = " " alt = "" coords = "213,104,390,129" />
< area shape = "poly" title = " " alt = "" coords = "168,114,212,114,212,119,168,119" />
< area shape = "rect" href = "classrtabmap_1_1OptimizerGTSAM.html" title = " " alt = "" coords = "203,153,400,179" />
< area shape = "poly" title = " " alt = "" coords = "152,130,244,151,243,156,150,135" />
< area shape = "rect" href = "classrtabmap_1_1OptimizerTORO.html" title = " " alt = "" coords = "208,203,395,228" />
< area shape = "poly" title = " " alt = "" coords = "112,135,154,162,204,188,241,200,239,205,202,192,152,167,109,140" />
</ map >
2026-08-02 07:56:38 +00:00
< center >< span class = "legend" > [< a target = "top" href = "graph_legend.html" > legend</ a > ]</ span ></ center ></ div >
2026-08-02 01:36:11 +00:00
< table class = "memberdecls" >
< tr class = "heading" >< td colspan = "2" >< h2 class = "groupheader" >< a id = "pub-types" name = "pub-types" ></ a >
Public Types</ h2 ></ td ></ tr >
< tr class = "memitem:a18ae8ac76346d1adc68ab176a5b02d16" id = "r_a18ae8ac76346d1adc68ab176a5b02d16" >< td class = "memItemLeft" align = "right" valign = "top" > enum   </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Type</ a > { < br />
   < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16abae75975865bff7e12e82d2f5295e0db" > kTypeUndef</ a > = -1
, < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a6065bdb6e49c0f5ffc98d5f2f6b0d5ab" > kTypeTORO</ a > = 0
, < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16aa4d070fe00ba5e81adbc958bad18d853" > kTypeG2O</ a > = 1
, < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16ab71c83617497f5da0607a47ab162630f" > kTypeGTSAM</ a > = 2
, < br />
   < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a891b6c7cbbe5e149e583ac1fc14fc91d" > kTypeCeres</ a > = 3
, < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a53545e83af9618cb4d39cf0420b3cd54" > kTypeCVSBA</ a > = 4
< br />
}</ td ></ tr >
< tr class = "memdesc:a18ae8ac76346d1adc68ab176a5b02d16" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Graph-optimizer back-end identifier. < a href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > More...</ a >< br /></ td ></ tr >
< tr class = "separator:a18ae8ac76346d1adc68ab176a5b02d16" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
</ table >< table class = "memberdecls" >
< tr class = "heading" >< td colspan = "2" >< h2 class = "groupheader" >< a id = "pub-methods" name = "pub-methods" ></ a >
Public Member Functions</ h2 ></ td ></ tr >
< tr class = "memitem:a4477c9a5b6651729944726465b5eba7f" id = "r_a4477c9a5b6651729944726465b5eba7f" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a4477c9a5b6651729944726465b5eba7f" > getConnectedGraph</ a > (int fromId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & posesIn, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & linksIn, std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & posesOut, std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & linksOut) const</ td ></ tr >
< tr class = "memdesc:a4477c9a5b6651729944726465b5eba7f" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Extracts the connected component reachable from < code > fromId</ code > . < br /></ td ></ tr >
< tr class = "separator:a4477c9a5b6651729944726465b5eba7f" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:aa2be82e1f986b1beae103148be7cd520" id = "r_aa2be82e1f986b1beae103148be7cd520" >< td class = "memItemLeft" align = "right" valign = "top" > virtual < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Type</ a >   </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#aa2be82e1f986b1beae103148be7cd520" > type</ a > () const =0</ td ></ tr >
< tr class = "memdesc:aa2be82e1f986b1beae103148be7cd520" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Returns the concrete back-end identifier (one of < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Type</ a > ). < br /></ td ></ tr >
< tr class = "separator:aa2be82e1f986b1beae103148be7cd520" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
2026-08-02 07:56:38 +00:00
< tr class = "memitem:a0a942bd7902c8d2f9444b8eba6a648a3" id = "r_a0a942bd7902c8d2f9444b8eba6a648a3" >< td class = "memItemLeft" align = "right" valign = "top" > virtual void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a0a942bd7902c8d2f9444b8eba6a648a3" > parseParameters</ a > (const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > & parameters)</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "memdesc:a0a942bd7902c8d2f9444b8eba6a648a3" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Reads shared knobs from < code > parameters</ code > and applies them to this instance. < br /></ td ></ tr >
< tr class = "separator:a0a942bd7902c8d2f9444b8eba6a648a3" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a278f42e0d250085ac6fe9ed425627acf" id = "r_a278f42e0d250085ac6fe9ed425627acf" >< td class = "memItemLeft" align = "right" valign = "top" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > >  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a278f42e0d250085ac6fe9ed425627acf" > optimizeIncremental</ a > (int rootId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & constraints, std::list< std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)</ td ></ tr >
< tr class = "memdesc:a278f42e0d250085ac6fe9ed425627acf" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Pose-graph optimization that grows the graph one node at a time. < br /></ td ></ tr >
< tr class = "separator:a278f42e0d250085ac6fe9ed425627acf" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a7e3aff943e77603493a358ff522fa2dc" id = "r_a7e3aff943e77603493a358ff522fa2dc" >< td class = "memItemLeft" align = "right" valign = "top" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > >  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize</ a > (int rootId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & constraints, std::list< std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)</ td ></ tr >
< tr class = "memdesc:a7e3aff943e77603493a358ff522fa2dc" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Pose-graph optimization (single shot). < br /></ td ></ tr >
< tr class = "separator:a7e3aff943e77603493a358ff522fa2dc" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:af59c8340394268f9a1eb76fd5709f2c3" id = "r_af59c8340394268f9a1eb76fd5709f2c3" >< td class = "memItemLeft" align = "right" valign = "top" > virtual std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > >  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#af59c8340394268f9a1eb76fd5709f2c3" > optimize</ a > (int rootId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & constraints, cv::Mat & outputCovariance, std::list< std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)</ td ></ tr >
< tr class = "memdesc:af59c8340394268f9a1eb76fd5709f2c3" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Pose-graph optimization with marginal covariance of < code > rootId</ code > . < br /></ td ></ tr >
< tr class = "separator:af59c8340394268f9a1eb76fd5709f2c3" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a038e8df970ab744f6f4ba7027f62b263" id = "r_a038e8df970ab744f6f4ba7027f62b263" >< td class = "memItemLeft" align = "right" valign = "top" > virtual std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > >  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a038e8df970ab744f6f4ba7027f62b263" > optimizeBA</ a > (int rootId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & links, const std::map< int, std::vector< < a class = "el" href = "classrtabmap_1_1CameraModel.html" > CameraModel</ a > > > & models, std::map< int, cv::Point3f > & points3DMap, const std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > & wordReferences, std::set< int > *outliers=0)</ td ></ tr >
< tr class = "memdesc:a038e8df970ab744f6f4ba7027f62b263" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point). < br /></ td ></ tr >
< tr class = "separator:a038e8df970ab744f6f4ba7027f62b263" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
2026-08-02 07:56:38 +00:00
< tr class = "memitem:a2f7cbdebed9787ffa6b0b30536dfa1a0" id = "r_a2f7cbdebed9787ffa6b0b30536dfa1a0" >< td class = "memItemLeft" align = "right" valign = "top" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > >  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a2f7cbdebed9787ffa6b0b30536dfa1a0" > optimizeBA</ a > (int rootId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & links, const std::map< int, < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > > & signatures, std::map< int, cv::Point3f > & points3DMap, std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > & wordReferences, bool rematchFeatures=false, const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > & registrationParameters=< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > ())</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "memdesc:a2f7cbdebed9787ffa6b0b30536dfa1a0" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > BA wrapper that derives camera models and correspondences from signatures. < br /></ td ></ tr >
< tr class = "separator:a2f7cbdebed9787ffa6b0b30536dfa1a0" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:aab99f045516162944ad68fdabacb53dc" id = "r_aab99f045516162944ad68fdabacb53dc" >< td class = "memItemLeft" align = "right" valign = "top" >< a id = "aab99f045516162944ad68fdabacb53dc" name = "aab99f045516162944ad68fdabacb53dc" ></ a >
2026-08-02 07:56:38 +00:00
std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > >  </ td >< td class = "memItemRight" valign = "bottom" >< b > optimizeBA</ b > (int rootId, const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & links, const std::map< int, < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > > & signatures, bool rematchFeatures=false, const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > & registrationParameters=< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > ())</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "memdesc:aab99f045516162944ad68fdabacb53dc" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map. < br /></ td ></ tr >
< tr class = "separator:aab99f045516162944ad68fdabacb53dc" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:ad6b32a9697837f03941773f6a5bbf91c" id = "r_ad6b32a9697837f03941773f6a5bbf91c" >< td class = "memItemLeft" align = "right" valign = "top" >< a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a >   </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#ad6b32a9697837f03941773f6a5bbf91c" > optimizeBA</ a > (const < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > & link, const < a class = "el" href = "classrtabmap_1_1CameraModel.html" > CameraModel</ a > & model, std::map< int, cv::Point3f > & points3DMap, const std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > & wordReferences, std::set< int > *outliers=0)</ td ></ tr >
< tr class = "memdesc:ad6b32a9697837f03941773f6a5bbf91c" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Refine a single two-frame link via BA. < br /></ td ></ tr >
< tr class = "separator:ad6b32a9697837f03941773f6a5bbf91c" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
2026-08-02 07:56:38 +00:00
< tr class = "memitem:a93fb09dac068e64de000f692bcb8216f" id = "r_a93fb09dac068e64de000f692bcb8216f" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a93fb09dac068e64de000f692bcb8216f" > computeBACorrespondences</ a > (const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > & poses, const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > & links, const std::map< int, < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > > & signatures, std::map< int, cv::Point3f > & points3DMap, std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > & wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > registrationParameters=< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > ())</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "memdesc:a93fb09dac068e64de000f692bcb8216f" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Build BA correspondences (3D points + per-frame observations) from signatures. < br /></ td ></ tr >
< tr class = "separator:a93fb09dac068e64de000f692bcb8216f" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr >< td colspan = "2" >< div class = "groupHeader" > Getters for tunables shared across back-ends.</ div ></ td ></ tr >
< tr class = "memitem:a178bb719b0e22863e29add12c85e14a5" id = "r_a178bb719b0e22863e29add12c85e14a5" >< td class = "memItemLeft" align = "right" valign = "top" > int  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a178bb719b0e22863e29add12c85e14a5" > iterations</ a > () const</ td ></ tr >
< tr class = "memdesc:a178bb719b0e22863e29add12c85e14a5" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Max solver iterations. < br /></ td ></ tr >
< tr class = "separator:a178bb719b0e22863e29add12c85e14a5" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a51485674608bbf910922ecee43cc13aa" id = "r_a51485674608bbf910922ecee43cc13aa" >< td class = "memItemLeft" align = "right" valign = "top" > bool  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a51485674608bbf910922ecee43cc13aa" > isSlam2d</ a > () const</ td ></ tr >
< tr class = "memdesc:a51485674608bbf910922ecee43cc13aa" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > True if optimizing in SE(2) instead of SE(3). < br /></ td ></ tr >
< tr class = "separator:a51485674608bbf910922ecee43cc13aa" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a8bb6372ce4c67fd9b8d54f692ac34238" id = "r_a8bb6372ce4c67fd9b8d54f692ac34238" >< td class = "memItemLeft" align = "right" valign = "top" > bool  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a8bb6372ce4c67fd9b8d54f692ac34238" > isCovarianceIgnored</ a > () const</ td ></ tr >
< tr class = "memdesc:a8bb6372ce4c67fd9b8d54f692ac34238" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > If true, all edges share an identity information matrix. < br /></ td ></ tr >
< tr class = "separator:a8bb6372ce4c67fd9b8d54f692ac34238" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a3bca4e3df1048f8bbad9b3b9473924a2" id = "r_a3bca4e3df1048f8bbad9b3b9473924a2" >< td class = "memItemLeft" align = "right" valign = "top" > double  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a3bca4e3df1048f8bbad9b3b9473924a2" > epsilon</ a > () const</ td ></ tr >
< tr class = "memdesc:a3bca4e3df1048f8bbad9b3b9473924a2" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Convergence threshold on cost decrease. < br /></ td ></ tr >
< tr class = "separator:a3bca4e3df1048f8bbad9b3b9473924a2" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a29ba07e1e829ae616d82756977161c9f" id = "r_a29ba07e1e829ae616d82756977161c9f" >< td class = "memItemLeft" align = "right" valign = "top" > bool  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a29ba07e1e829ae616d82756977161c9f" > isRobust</ a > () const</ td ></ tr >
< tr class = "memdesc:a29ba07e1e829ae616d82756977161c9f" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > If true, use a robust kernel / switchable factors against bad loop closures. < br /></ td ></ tr >
< tr class = "separator:a29ba07e1e829ae616d82756977161c9f" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:aeebd0d5575ab7e9f492b095c05ddb237" id = "r_aeebd0d5575ab7e9f492b095c05ddb237" >< td class = "memItemLeft" align = "right" valign = "top" > bool  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#aeebd0d5575ab7e9f492b095c05ddb237" > priorsIgnored</ a > () const</ td ></ tr >
< tr class = "memdesc:aeebd0d5575ab7e9f492b095c05ddb237" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > If true, unary priors on poses are dropped. < br /></ td ></ tr >
< tr class = "separator:aeebd0d5575ab7e9f492b095c05ddb237" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a32f53d408ef0372c5c196ee89ff5ad79" id = "r_a32f53d408ef0372c5c196ee89ff5ad79" >< td class = "memItemLeft" align = "right" valign = "top" > bool  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a32f53d408ef0372c5c196ee89ff5ad79" > landmarksIgnored</ a > () const</ td ></ tr >
< tr class = "memdesc:a32f53d408ef0372c5c196ee89ff5ad79" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > If true, landmark/marker observations are dropped. < br /></ td ></ tr >
< tr class = "separator:a32f53d408ef0372c5c196ee89ff5ad79" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:aceb68e0f692b81c4a978e46f804515d7" id = "r_aceb68e0f692b81c4a978e46f804515d7" >< td class = "memItemLeft" align = "right" valign = "top" > float  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#aceb68e0f692b81c4a978e46f804515d7" > gravitySigma</ a > () const</ td ></ tr >
< tr class = "memdesc:aceb68e0f692b81c4a978e46f804515d7" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it. < br /></ td ></ tr >
< tr class = "separator:aceb68e0f692b81c4a978e46f804515d7" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr >< td colspan = "2" >< div class = "groupHeader" > Setters mirroring the corresponding getters.</ div ></ td ></ tr >
< tr class = "memitem:abe01fb650ef1d6fbd21af93a6ffe5c8b" id = "r_abe01fb650ef1d6fbd21af93a6ffe5c8b" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#abe01fb650ef1d6fbd21af93a6ffe5c8b" > setIterations</ a > (int < a class = "el" href = "classrtabmap_1_1Optimizer.html#a178bb719b0e22863e29add12c85e14a5" > iterations</ a > )</ td ></ tr >
< tr class = "separator:abe01fb650ef1d6fbd21af93a6ffe5c8b" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:ae15ad77a795f8391648508f9071753dd" id = "r_ae15ad77a795f8391648508f9071753dd" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#ae15ad77a795f8391648508f9071753dd" > setSlam2d</ a > (bool enabled)</ td ></ tr >
< tr class = "separator:ae15ad77a795f8391648508f9071753dd" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a5055007e4cc5af9028956e1da3047c4f" id = "r_a5055007e4cc5af9028956e1da3047c4f" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a5055007e4cc5af9028956e1da3047c4f" > setCovarianceIgnored</ a > (bool enabled)</ td ></ tr >
< tr class = "separator:a5055007e4cc5af9028956e1da3047c4f" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a3914e9e0310c37340998b92030dc9d68" id = "r_a3914e9e0310c37340998b92030dc9d68" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a3914e9e0310c37340998b92030dc9d68" > setEpsilon</ a > (double < a class = "el" href = "classrtabmap_1_1Optimizer.html#a3bca4e3df1048f8bbad9b3b9473924a2" > epsilon</ a > )</ td ></ tr >
< tr class = "separator:a3914e9e0310c37340998b92030dc9d68" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a1008348a699d769f52921ebbfbce171e" id = "r_a1008348a699d769f52921ebbfbce171e" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a1008348a699d769f52921ebbfbce171e" > setRobust</ a > (bool enabled)</ td ></ tr >
< tr class = "separator:a1008348a699d769f52921ebbfbce171e" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a568f1db66bef63e490d48b1db1720517" id = "r_a568f1db66bef63e490d48b1db1720517" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a568f1db66bef63e490d48b1db1720517" > setPriorsIgnored</ a > (bool enabled)</ td ></ tr >
< tr class = "separator:a568f1db66bef63e490d48b1db1720517" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:a31403359b9ef2f72d9639d4d0c8bb1ed" id = "r_a31403359b9ef2f72d9639d4d0c8bb1ed" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a31403359b9ef2f72d9639d4d0c8bb1ed" > setLandmarksIgnored</ a > (bool enabled)</ td ></ tr >
< tr class = "separator:a31403359b9ef2f72d9639d4d0c8bb1ed" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:ad61ce1ac9ca73cd04b833cf65c098b8c" id = "r_ad61ce1ac9ca73cd04b833cf65c098b8c" >< td class = "memItemLeft" align = "right" valign = "top" > void  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#ad61ce1ac9ca73cd04b833cf65c098b8c" > setGravitySigma</ a > (float value)</ td ></ tr >
< tr class = "separator:ad61ce1ac9ca73cd04b833cf65c098b8c" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
</ table >< table class = "memberdecls" >
< tr class = "heading" >< td colspan = "2" >< h2 class = "groupheader" >< a id = "pub-static-methods" name = "pub-static-methods" ></ a >
Static Public Member Functions</ h2 ></ td ></ tr >
< tr class = "memitem:afe0381a3b42926b7634027e522766eb1" id = "r_afe0381a3b42926b7634027e522766eb1" >< td class = "memItemLeft" align = "right" valign = "top" > static bool  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#afe0381a3b42926b7634027e522766eb1" > isAvailable</ a > (< a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Optimizer::Type</ a > < a class = "el" href = "classrtabmap_1_1Optimizer.html#aa2be82e1f986b1beae103148be7cd520" > type</ a > )</ td ></ tr >
< tr class = "memdesc:afe0381a3b42926b7634027e522766eb1" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Returns whether < code > type</ code > was compiled in (its third-party dependency was found). < br /></ td ></ tr >
< tr class = "separator:afe0381a3b42926b7634027e522766eb1" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
2026-08-02 07:56:38 +00:00
< tr class = "memitem:a78b457bec2cdb7bdd320e2bfcca759df" id = "r_a78b457bec2cdb7bdd320e2bfcca759df" >< td class = "memItemLeft" align = "right" valign = "top" > static < a class = "el" href = "classrtabmap_1_1Optimizer.html" > Optimizer</ a > *  </ td >< td class = "memItemRight" valign = "bottom" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a78b457bec2cdb7bdd320e2bfcca759df" > create</ a > (const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > & parameters)</ td ></ tr >
< tr class = "memdesc:a78b457bec2cdb7bdd320e2bfcca759df" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Factory: build an optimizer from a < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > . < br /></ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "separator:a78b457bec2cdb7bdd320e2bfcca759df" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:aeff86117cf69fdae3c25e5bc327a142d" id = "r_aeff86117cf69fdae3c25e5bc327a142d" >< td class = "memItemLeft" align = "right" valign = "top" >< a id = "aeff86117cf69fdae3c25e5bc327a142d" name = "aeff86117cf69fdae3c25e5bc327a142d" ></ a >
2026-08-02 07:56:38 +00:00
static < a class = "el" href = "classrtabmap_1_1Optimizer.html" > Optimizer</ a > *  </ td >< td class = "memItemRight" valign = "bottom" >< b > create</ b > (< a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Optimizer::Type</ a > < a class = "el" href = "classrtabmap_1_1Optimizer.html#aa2be82e1f986b1beae103148be7cd520" > type</ a > , const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > & parameters=< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > ())</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "memdesc:aeff86117cf69fdae3c25e5bc327a142d" >< td class = "mdescLeft" >   </ td >< td class = "mdescRight" > Factory: build an optimizer of a specific < code > type</ code > . Caller owns the result. < br /></ td ></ tr >
< tr class = "separator:aeff86117cf69fdae3c25e5bc327a142d" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
</ table >< table class = "memberdecls" >
< tr class = "heading" >< td colspan = "2" >< h2 class = "groupheader" >< a id = "pro-methods" name = "pro-methods" ></ a >
Protected Member Functions</ h2 ></ td ></ tr >
< tr class = "memitem:a8c9e731f0c81d267a4aae62941b5af18" id = "r_a8c9e731f0c81d267a4aae62941b5af18" >< td class = "memItemLeft" align = "right" valign = "top" >< a id = "a8c9e731f0c81d267a4aae62941b5af18" name = "a8c9e731f0c81d267a4aae62941b5af18" ></ a >
2026-08-02 07:56:38 +00:00
  </ td >< td class = "memItemRight" valign = "bottom" >< b > Optimizer</ b > (int < a class = "el" href = "classrtabmap_1_1Optimizer.html#a178bb719b0e22863e29add12c85e14a5" > iterations</ a > =< a class = "el" href = "classrtabmap_1_1Parameters.html#a88a7018a56b4e6c7c0ceb8e11286f319" > Parameters::defaultOptimizerIterations</ a > (), bool slam2d=< a class = "el" href = "classrtabmap_1_1Parameters.html#aee1046f9615d2ed988c952cc47c9331e" > Parameters::defaultRegForce3DoF</ a > (), bool covarianceIgnored=< a class = "el" href = "classrtabmap_1_1Parameters.html#ad329ace1333ac8c94cd4043b58173f1b" > Parameters::defaultOptimizerVarianceIgnored</ a > (), double < a class = "el" href = "classrtabmap_1_1Optimizer.html#a3bca4e3df1048f8bbad9b3b9473924a2" > epsilon</ a > =< a class = "el" href = "classrtabmap_1_1Parameters.html#a8fb0df24ed2d24a013abc03828f43acc" > Parameters::defaultOptimizerEpsilon</ a > (), bool robust=< a class = "el" href = "classrtabmap_1_1Parameters.html#a2a83a1c7b7cc3dfe1b03bd9c10a437fd" > Parameters::defaultOptimizerRobust</ a > (), bool < a class = "el" href = "classrtabmap_1_1Optimizer.html#aeebd0d5575ab7e9f492b095c05ddb237" > priorsIgnored</ a > =< a class = "el" href = "classrtabmap_1_1Parameters.html#a6394c7cc99dca72faf68799adc89ffd7" > Parameters::defaultOptimizerPriorsIgnored</ a > (), bool < a class = "el" href = "classrtabmap_1_1Optimizer.html#a32f53d408ef0372c5c196ee89ff5ad79" > landmarksIgnored</ a > =< a class = "el" href = "classrtabmap_1_1Parameters.html#a45cdc34f61574e7de40f2d4a822b1ca6" > Parameters::defaultOptimizerLandmarksIgnored</ a > (), float < a class = "el" href = "classrtabmap_1_1Optimizer.html#aceb68e0f692b81c4a978e46f804515d7" > gravitySigma</ a > =< a class = "el" href = "classrtabmap_1_1Parameters.html#a88fab03b485f103123fad036a536c71a" > Parameters::defaultOptimizerGravitySigma</ a > ())</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "separator:a8c9e731f0c81d267a4aae62941b5af18" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
< tr class = "memitem:af6e45bcd0da53aeeabb6a2bf8bfd641a" id = "r_af6e45bcd0da53aeeabb6a2bf8bfd641a" >< td class = "memItemLeft" align = "right" valign = "top" >< a id = "af6e45bcd0da53aeeabb6a2bf8bfd641a" name = "af6e45bcd0da53aeeabb6a2bf8bfd641a" ></ a >
2026-08-02 07:56:38 +00:00
  </ td >< td class = "memItemRight" valign = "bottom" >< b > Optimizer</ b > (const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > & parameters)</ td ></ tr >
2026-08-02 01:36:11 +00:00
< tr class = "separator:af6e45bcd0da53aeeabb6a2bf8bfd641a" >< td class = "memSeparator" colspan = "2" >   </ td ></ tr >
</ table >
< a name = "details" id = "details" ></ a >< h2 class = "groupheader" > Detailed Description</ h2 >
< div class = "textblock" >< p > Abstract base for pose-graph and bundle-adjustment optimizers. </ p >
< p >< a class = "el" href = "classrtabmap_1_1Optimizer.html" title = "Abstract base for pose-graph and bundle-adjustment optimizers." > Optimizer</ a > is a factory + interface in front of several third-party back-ends (< a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a6065bdb6e49c0f5ffc98d5f2f6b0d5ab" > TORO</ a > , < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16aa4d070fe00ba5e81adbc958bad18d853" > g2o</ a > , < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16ab71c83617497f5da0607a47ab162630f" > GTSAM</ a > , < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a891b6c7cbbe5e149e583ac1fc14fc91d" > Ceres</ a > , < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a53545e83af9618cb4d39cf0420b3cd54" > cvsba</ a > ). Use < a class = "el" href = "classrtabmap_1_1Optimizer.html#a78b457bec2cdb7bdd320e2bfcca759df" > create()</ a > to instantiate one based on the < code > Optimizer/Strategy</ code > parameter; use < a class = "el" href = "classrtabmap_1_1Optimizer.html#afe0381a3b42926b7634027e522766eb1" > isAvailable()</ a > to check whether a given back-end was compiled in.</ p >
< p > Two families of methods are exposed:</ p >< ul >
< li >< b > Pose-graph optimization</ b > (< a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize</ a > / < a class = "el" href = "classrtabmap_1_1Optimizer.html#a278f42e0d250085ac6fe9ed425627acf" > optimizeIncremental</ a > ) — refines poses given relative-pose constraints. Subclasses override < a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize()</ a > with covariance output.</ li >
< li >< b > Bundle adjustment</ b > (< a class = "el" href = "classrtabmap_1_1Optimizer.html#a038e8df970ab744f6f4ba7027f62b263" > optimizeBA</ a > ) — jointly refines poses and 3D points using reprojection error. Subclasses override the lowest-level overload; the others are convenience wrappers that fill in models/correspondences from < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > data.</ li >
</ ul >
< p > Common knobs (iterations, robust kernels, 2D-vs-3D, etc.) are configured through < a class = "el" href = "classrtabmap_1_1Optimizer.html#a0a942bd7902c8d2f9444b8eba6a648a3" > parseParameters()</ a > or per-attribute setters and apply to whichever back-end is selected. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00087" > 87</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >< h2 class = "groupheader" > Member Enumeration Documentation</ h2 >
< a id = "a18ae8ac76346d1adc68ab176a5b02d16" name = "a18ae8ac76346d1adc68ab176a5b02d16" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a18ae8ac76346d1adc68ab176a5b02d16" > ◆  </ a ></ span > Type</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > enum < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > rtabmap::Optimizer::Type</ a ></ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Graph-optimizer back-end identifier. </ p >
< table class = "fieldtable" >
< tr >< th colspan = "2" > Enumerator</ th ></ tr >< tr >< td class = "fieldname" >< a id = "a18ae8ac76346d1adc68ab176a5b02d16abae75975865bff7e12e82d2f5295e0db" name = "a18ae8ac76346d1adc68ab176a5b02d16abae75975865bff7e12e82d2f5295e0db" ></ a > kTypeUndef  </ td >< td class = "fielddoc" >< p > Unspecified / invalid. </ p >
</ td ></ tr >
< tr >< td class = "fieldname" >< a id = "a18ae8ac76346d1adc68ab176a5b02d16a6065bdb6e49c0f5ffc98d5f2f6b0d5ab" name = "a18ae8ac76346d1adc68ab176a5b02d16a6065bdb6e49c0f5ffc98d5f2f6b0d5ab" ></ a > kTypeTORO  </ td >< td class = "fielddoc" >< p > TORO (tree-based relaxation). </ p >
</ td ></ tr >
< tr >< td class = "fieldname" >< a id = "a18ae8ac76346d1adc68ab176a5b02d16aa4d070fe00ba5e81adbc958bad18d853" name = "a18ae8ac76346d1adc68ab176a5b02d16aa4d070fe00ba5e81adbc958bad18d853" ></ a > kTypeG2O  </ td >< td class = "fielddoc" >< p > g2o (general graph optimization, supports BA). </ p >
</ td ></ tr >
< tr >< td class = "fieldname" >< a id = "a18ae8ac76346d1adc68ab176a5b02d16ab71c83617497f5da0607a47ab162630f" name = "a18ae8ac76346d1adc68ab176a5b02d16ab71c83617497f5da0607a47ab162630f" ></ a > kTypeGTSAM  </ td >< td class = "fielddoc" >< p > GTSAM (factor graphs, iSAM2-style incremental). </ p >
</ td ></ tr >
< tr >< td class = "fieldname" >< a id = "a18ae8ac76346d1adc68ab176a5b02d16a891b6c7cbbe5e149e583ac1fc14fc91d" name = "a18ae8ac76346d1adc68ab176a5b02d16a891b6c7cbbe5e149e583ac1fc14fc91d" ></ a > kTypeCeres  </ td >< td class = "fielddoc" >< p > Ceres Solver (nonlinear least squares, supports BA). </ p >
</ td ></ tr >
< tr >< td class = "fieldname" >< a id = "a18ae8ac76346d1adc68ab176a5b02d16a53545e83af9618cb4d39cf0420b3cd54" name = "a18ae8ac76346d1adc68ab176a5b02d16a53545e83af9618cb4d39cf0420b3cd54" ></ a > kTypeCVSBA  </ td >< td class = "fielddoc" >< p > cvsba (sparse bundle adjustment only). </ p >
</ td ></ tr >
</ table >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00091" > 91</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< h2 class = "groupheader" > Constructor & Destructor Documentation</ h2 >
< a id = "acfd13c43c7853fb8777ae42049761a2e" name = "acfd13c43c7853fb8777ae42049761a2e" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#acfd13c43c7853fb8777ae42049761a2e" > ◆  </ a ></ span > ~Optimizer()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > virtual rtabmap::Optimizer::~Optimizer </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span >< span class = "mlabel" > virtual</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00135" > 135</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< h2 class = "groupheader" > Member Function Documentation</ h2 >
< a id = "afe0381a3b42926b7634027e522766eb1" name = "afe0381a3b42926b7634027e522766eb1" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#afe0381a3b42926b7634027e522766eb1" > ◆  </ a ></ span > isAvailable()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > static bool rtabmap::Optimizer::isAvailable </ td >
< td > (</ td >
< td class = "paramtype" >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Optimizer::Type</ a >   </ td >
< td class = "paramname" >< em > type</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > static</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Returns whether < code > type</ code > was compiled in (its third-party dependency was found). </ p >
< p >< a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16abae75975865bff7e12e82d2f5295e0db" > kTypeUndef</ a > is treated as unavailable. < a class = "el" href = "classrtabmap_1_1Optimizer.html#a78b457bec2cdb7bdd320e2bfcca759df" > create()</ a > falls back through this check to pick the first available back-end when the requested one is missing. </ p >
</ div >
</ div >
< a id = "a78b457bec2cdb7bdd320e2bfcca759df" name = "a78b457bec2cdb7bdd320e2bfcca759df" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a78b457bec2cdb7bdd320e2bfcca759df" > ◆  </ a ></ span > create()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > static < a class = "el" href = "classrtabmap_1_1Optimizer.html" > Optimizer</ a > * rtabmap::Optimizer::create </ td >
< td > (</ td >
2026-08-02 07:56:38 +00:00
< td class = "paramtype" > const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > &  </ td >
2026-08-02 01:36:11 +00:00
< td class = "paramname" >< em > parameters</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > static</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
2026-08-02 07:56:38 +00:00
< p > Factory: build an optimizer from a < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > . </ p >
2026-08-02 01:36:11 +00:00
< p > Reads < code > Optimizer/Strategy</ code > from < code > parameters</ code > ; falls back to the default strategy if the chosen back-end isn't compiled in. Caller owns the returned pointer. </ p >
</ div >
</ div >
< a id = "a4477c9a5b6651729944726465b5eba7f" name = "a4477c9a5b6651729944726465b5eba7f" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a4477c9a5b6651729944726465b5eba7f" > ◆  </ a ></ span > getConnectedGraph()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::getConnectedGraph </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > fromId</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > posesIn</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > linksIn</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > posesOut</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > linksOut</ em >   </ td >
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td > const</ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Extracts the connected component reachable from < code > fromId</ code > . </ p >
< p > Walks < code > linksIn</ code > breadth-first starting at < code > fromId</ code > and copies every visited pose (from < code > posesIn</ code > ) and every traversed link into < code > posesOut</ code > / < code > linksOut</ code > . Use this to isolate the subgraph that actually affects < code > fromId</ code > before calling < a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize()</ a > , since the back-ends require a single connected component. </ p >
</ div >
</ div >
< a id = "aa2be82e1f986b1beae103148be7cd520" name = "aa2be82e1f986b1beae103148be7cd520" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#aa2be82e1f986b1beae103148be7cd520" > ◆  </ a ></ span > type()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > virtual < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Type</ a > rtabmap::Optimizer::type </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > pure virtual</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Returns the concrete back-end identifier (one of < a class = "el" href = "classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16" > Type</ a > ). </ p >
< p > Implemented in < a class = "el" href = "classrtabmap_1_1OptimizerCeres.html#ad6d6c0a0cdbea0ee5082d3aaa94d8e7a" > rtabmap::OptimizerCeres</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerCVSBA.html#afbf58e60900671630e0974a13e49b2b0" > rtabmap::OptimizerCVSBA</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerG2O.html#af69edaad65a7f7f936fa99f8c617e10b" > rtabmap::OptimizerG2O</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerGTSAM.html#a422fe2960e4b71832e2108d5ab2aee46" > rtabmap::OptimizerGTSAM</ a > , and < a class = "el" href = "classrtabmap_1_1OptimizerTORO.html#a965efb877ac5edd3b6cda43983096a64" > rtabmap::OptimizerTORO</ a > .</ p >
</ div >
</ div >
< a id = "a178bb719b0e22863e29add12c85e14a5" name = "a178bb719b0e22863e29add12c85e14a5" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a178bb719b0e22863e29add12c85e14a5" > ◆  </ a ></ span > iterations()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > int rtabmap::Optimizer::iterations </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Max solver iterations. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00142" > 142</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a51485674608bbf910922ecee43cc13aa" name = "a51485674608bbf910922ecee43cc13aa" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a51485674608bbf910922ecee43cc13aa" > ◆  </ a ></ span > isSlam2d()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > bool rtabmap::Optimizer::isSlam2d </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > True if optimizing in SE(2) instead of SE(3). </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00143" > 143</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a8bb6372ce4c67fd9b8d54f692ac34238" name = "a8bb6372ce4c67fd9b8d54f692ac34238" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a8bb6372ce4c67fd9b8d54f692ac34238" > ◆  </ a ></ span > isCovarianceIgnored()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > bool rtabmap::Optimizer::isCovarianceIgnored </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > If true, all edges share an identity information matrix. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00144" > 144</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a3bca4e3df1048f8bbad9b3b9473924a2" name = "a3bca4e3df1048f8bbad9b3b9473924a2" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a3bca4e3df1048f8bbad9b3b9473924a2" > ◆  </ a ></ span > epsilon()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > double rtabmap::Optimizer::epsilon </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Convergence threshold on cost decrease. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00145" > 145</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a29ba07e1e829ae616d82756977161c9f" name = "a29ba07e1e829ae616d82756977161c9f" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a29ba07e1e829ae616d82756977161c9f" > ◆  </ a ></ span > isRobust()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > bool rtabmap::Optimizer::isRobust </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > If true, use a robust kernel / switchable factors against bad loop closures. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00146" > 146</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "aeebd0d5575ab7e9f492b095c05ddb237" name = "aeebd0d5575ab7e9f492b095c05ddb237" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#aeebd0d5575ab7e9f492b095c05ddb237" > ◆  </ a ></ span > priorsIgnored()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > bool rtabmap::Optimizer::priorsIgnored </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > If true, unary priors on poses are dropped. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00147" > 147</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a32f53d408ef0372c5c196ee89ff5ad79" name = "a32f53d408ef0372c5c196ee89ff5ad79" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a32f53d408ef0372c5c196ee89ff5ad79" > ◆  </ a ></ span > landmarksIgnored()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > bool rtabmap::Optimizer::landmarksIgnored </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > If true, landmark/marker observations are dropped. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00148" > 148</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "aceb68e0f692b81c4a978e46f804515d7" name = "aceb68e0f692b81c4a978e46f804515d7" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#aceb68e0f692b81c4a978e46f804515d7" > ◆  </ a ></ span > gravitySigma()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > float rtabmap::Optimizer::gravitySigma </ td >
< td > (</ td >
< td class = "paramname" ></ td >< td > )</ td >
< td > const</ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it. </ p >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00149" > 149</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "abe01fb650ef1d6fbd21af93a6ffe5c8b" name = "abe01fb650ef1d6fbd21af93a6ffe5c8b" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#abe01fb650ef1d6fbd21af93a6ffe5c8b" > ◆  </ a ></ span > setIterations()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setIterations </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > iterations</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00154" > 154</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "ae15ad77a795f8391648508f9071753dd" name = "ae15ad77a795f8391648508f9071753dd" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#ae15ad77a795f8391648508f9071753dd" > ◆  </ a ></ span > setSlam2d()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setSlam2d </ td >
< td > (</ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > enabled</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00155" > 155</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a5055007e4cc5af9028956e1da3047c4f" name = "a5055007e4cc5af9028956e1da3047c4f" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a5055007e4cc5af9028956e1da3047c4f" > ◆  </ a ></ span > setCovarianceIgnored()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setCovarianceIgnored </ td >
< td > (</ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > enabled</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00156" > 156</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a3914e9e0310c37340998b92030dc9d68" name = "a3914e9e0310c37340998b92030dc9d68" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a3914e9e0310c37340998b92030dc9d68" > ◆  </ a ></ span > setEpsilon()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setEpsilon </ td >
< td > (</ td >
< td class = "paramtype" > double  </ td >
< td class = "paramname" >< em > epsilon</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00157" > 157</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a1008348a699d769f52921ebbfbce171e" name = "a1008348a699d769f52921ebbfbce171e" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a1008348a699d769f52921ebbfbce171e" > ◆  </ a ></ span > setRobust()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setRobust </ td >
< td > (</ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > enabled</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00158" > 158</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a568f1db66bef63e490d48b1db1720517" name = "a568f1db66bef63e490d48b1db1720517" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a568f1db66bef63e490d48b1db1720517" > ◆  </ a ></ span > setPriorsIgnored()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setPriorsIgnored </ td >
< td > (</ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > enabled</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00159" > 159</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a31403359b9ef2f72d9639d4d0c8bb1ed" name = "a31403359b9ef2f72d9639d4d0c8bb1ed" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a31403359b9ef2f72d9639d4d0c8bb1ed" > ◆  </ a ></ span > setLandmarksIgnored()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setLandmarksIgnored </ td >
< td > (</ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > enabled</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00160" > 160</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "ad61ce1ac9ca73cd04b833cf65c098b8c" name = "ad61ce1ac9ca73cd04b833cf65c098b8c" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#ad61ce1ac9ca73cd04b833cf65c098b8c" > ◆  </ a ></ span > setGravitySigma()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::setGravitySigma </ td >
< td > (</ td >
< td class = "paramtype" > float  </ td >
< td class = "paramname" >< em > value</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > inline</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p class = "definition" > Definition at line < a class = "el" href = "Optimizer_8h_source.html#l00161" > 161</ a > of file < a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a > .</ p >
</ div >
</ div >
< a id = "a0a942bd7902c8d2f9444b8eba6a648a3" name = "a0a942bd7902c8d2f9444b8eba6a648a3" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a0a942bd7902c8d2f9444b8eba6a648a3" > ◆  </ a ></ span > parseParameters()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > virtual void rtabmap::Optimizer::parseParameters </ td >
< td > (</ td >
2026-08-02 07:56:38 +00:00
< td class = "paramtype" > const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > &  </ td >
2026-08-02 01:36:11 +00:00
< td class = "paramname" >< em > parameters</ em ></ td >< td > )</ td >
< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > virtual</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Reads shared knobs from < code > parameters</ code > and applies them to this instance. </ p >
< p > Subclasses override to additionally read back-end-specific keys (e.g. < code > g2o/Solver</ code > , < code > GTSAM/Optimizer</ code > ); they should call this base implementation first. </ p >
< p > Reimplemented in < a class = "el" href = "classrtabmap_1_1OptimizerCeres.html#aaa1128eeb38451086c7abd58ae6142ac" > rtabmap::OptimizerCeres</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerG2O.html#a07b598444b99584b6f2bed6baca5e8bb" > rtabmap::OptimizerG2O</ a > , and < a class = "el" href = "classrtabmap_1_1OptimizerGTSAM.html#a9ac24a2315e15b16270151c3aae9d8f0" > rtabmap::OptimizerGTSAM</ a > .</ p >
</ div >
</ div >
< a id = "a278f42e0d250085ac6fe9ed425627acf" name = "a278f42e0d250085ac6fe9ed425627acf" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a278f42e0d250085ac6fe9ed425627acf" > ◆  </ a ></ span > optimizeIncremental()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > rtabmap::Optimizer::optimizeIncremental </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > rootId</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > poses</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > constraints</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::list< std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > > *  </ td >
< td class = "paramname" >< em > intermediateGraphes</ em > = < code > 0</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > double *  </ td >
< td class = "paramname" >< em > finalError</ em > = < code > 0</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > int *  </ td >
< td class = "paramname" >< em > iterationsDone</ em > = < code > 0</ code >   </ td >
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Pose-graph optimization that grows the graph one node at a time. </ p >
< p > Inserts poses in < code > poses</ code > iteration order, propagating odometry edges (< code > Neighbor</ code > / < code > NeighborMerged</ code > ) directly and triggering a call to < a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize()</ a > whenever a loop closure is added. A final full < a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize()</ a > pass anchors at < code > rootId</ code > . Useful for warm-starting heavily-deformed initial guesses where a single-shot < a class = "el" href = "classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc" > optimize()</ a > can diverge.</ p >
< dl class = "params" >< dt > Parameters</ dt >< dd >
< table class = "params" >
< tr >< td class = "paramname" > rootId</ td >< td > Pose whose absolute transform is held fixed. </ td ></ tr >
< tr >< td class = "paramname" > poses</ td >< td > Initial poses keyed by id. </ td ></ tr >
< tr >< td class = "paramname" > constraints</ td >< td > Relative-pose constraints (see < a class = "el" href = "classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91e" > Link::Type</ a > ). </ td ></ tr >
< tr >< td class = "paramname" > intermediateGraphes</ td >< td > Optional: appended per outer iteration for debug/visualization. </ td ></ tr >
< tr >< td class = "paramname" > finalError</ td >< td > Optional: written with the solver's final cost. </ td ></ tr >
< tr >< td class = "paramname" > iterationsDone</ td >< td > Optional: written with the solver's actual iteration count. </ td ></ tr >
</ table >
</ dd >
</ dl >
< dl class = "section return" >< dt > Returns</ dt >< dd > Refined poses (same key set as < code > poses</ code > ), or empty on failure. </ dd ></ dl >
</ div >
</ div >
< a id = "a7e3aff943e77603493a358ff522fa2dc" name = "a7e3aff943e77603493a358ff522fa2dc" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a7e3aff943e77603493a358ff522fa2dc" > ◆  </ a ></ span > optimize() < span class = "overload" > [1/2]</ span ></ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > rtabmap::Optimizer::optimize </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > rootId</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > poses</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > constraints</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::list< std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > > *  </ td >
< td class = "paramname" >< em > intermediateGraphes</ em > = < code > 0</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > double *  </ td >
< td class = "paramname" >< em > finalError</ em > = < code > 0</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > int *  </ td >
< td class = "paramname" >< em > iterationsDone</ em > = < code > 0</ code >   </ td >
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Pose-graph optimization (single shot). </ p >
< p > Convenience overload that discards the output covariance. See the covariance-returning overload below for parameter docs. </ p >
</ div >
</ div >
< a id = "af59c8340394268f9a1eb76fd5709f2c3" name = "af59c8340394268f9a1eb76fd5709f2c3" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#af59c8340394268f9a1eb76fd5709f2c3" > ◆  </ a ></ span > optimize() < span class = "overload" > [2/2]</ span ></ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > virtual std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > rtabmap::Optimizer::optimize </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > rootId</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > poses</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > constraints</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > cv::Mat &  </ td >
< td class = "paramname" >< em > outputCovariance</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::list< std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > > *  </ td >
< td class = "paramname" >< em > intermediateGraphes</ em > = < code > 0</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > double *  </ td >
< td class = "paramname" >< em > finalError</ em > = < code > 0</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > int *  </ td >
< td class = "paramname" >< em > iterationsDone</ em > = < code > 0</ code >   </ td >
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > virtual</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Pose-graph optimization with marginal covariance of < code > rootId</ code > . </ p >
< p > This is the primary back-end entry point — concrete subclasses override it. The base implementation just emits an error.</ p >
< dl class = "params" >< dt > Parameters</ dt >< dd >
< table class = "params" >
< tr >< td class = "paramname" > rootId</ td >< td > Pose to hold fixed during optimization. </ td ></ tr >
< tr >< td class = "paramname" > poses</ td >< td > Initial pose estimates. </ td ></ tr >
< tr >< td class = "paramname" > constraints</ td >< td > Relative-pose constraints between pose ids (and optionally to landmarks). </ td ></ tr >
< tr >< td class = "paramname" > outputCovariance</ td >< td > Output: 6x6 covariance of the last optimized pose w.r.t. < code > rootId</ code > (3x3 for 2D mode). Filled only if the back-end supports it. </ td ></ tr >
< tr >< td class = "paramname" > intermediateGraphes</ td >< td > Optional: appended at each iteration for debug/visualization. </ td ></ tr >
< tr >< td class = "paramname" > finalError</ td >< td > Optional: written with the solver's final cost. </ td ></ tr >
< tr >< td class = "paramname" > iterationsDone</ td >< td > Optional: written with the solver's actual iteration count. </ td ></ tr >
</ table >
</ dd >
</ dl >
< dl class = "section return" >< dt > Returns</ dt >< dd > Refined poses, or empty on failure. </ dd ></ dl >
< p > Reimplemented in < a class = "el" href = "classrtabmap_1_1OptimizerCeres.html#ab988decf55da4a8821931855ddaa1c1a" > rtabmap::OptimizerCeres</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerG2O.html#a9400bdf57331af310cf6b02e661d0a03" > rtabmap::OptimizerG2O</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerGTSAM.html#a4905d84cfc59516eef21ea89064c31ba" > rtabmap::OptimizerGTSAM</ a > , and < a class = "el" href = "classrtabmap_1_1OptimizerTORO.html#a025b40902f0ea048bdbfee9ed4ebc0f3" > rtabmap::OptimizerTORO</ a > .</ p >
</ div >
</ div >
< a id = "a038e8df970ab744f6f4ba7027f62b263" name = "a038e8df970ab744f6f4ba7027f62b263" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a038e8df970ab744f6f4ba7027f62b263" > ◆  </ a ></ span > optimizeBA() < span class = "overload" > [1/3]</ span ></ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > virtual std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > rtabmap::Optimizer::optimizeBA </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > rootId</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > poses</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > links</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, std::vector< < a class = "el" href = "classrtabmap_1_1CameraModel.html" > CameraModel</ a > > > &  </ td >
< td class = "paramname" >< em > models</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, cv::Point3f > &  </ td >
< td class = "paramname" >< em > points3DMap</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > &  </ td >
< td class = "paramname" >< em > wordReferences</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::set< int > *  </ td >
< td class = "paramname" >< em > outliers</ em > = < code > 0</ code >   </ td >
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ td >
< td class = "mlabels-right" >
< span class = "mlabels" >< span class = "mlabel" > virtual</ span ></ span > </ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point). </ p >
< p > Concrete subclasses (g2o, Ceres, cvsba) override this; the base implementation errors out. The other < a class = "el" href = "classrtabmap_1_1Optimizer.html#a038e8df970ab744f6f4ba7027f62b263" > optimizeBA()</ a > overloads ultimately funnel here.</ p >
< dl class = "params" >< dt > Parameters</ dt >< dd >
< table class = "params" >
< tr >< td class = "paramname" > rootId</ td >< td > Pose to hold fixed. If negative, ALL poses other than the (positive) lowest id are held fixed. </ td ></ tr >
< tr >< td class = "paramname" > poses</ td >< td > Initial pose estimates keyed by frame id. </ td ></ tr >
< tr >< td class = "paramname" > links</ td >< td > Edges used to define the BA problem topology. </ td ></ tr >
< tr >< td class = "paramname" > models</ td >< td >< a class = "el" href = "classrtabmap_1_1Camera.html" > Camera</ a > model(s) per frame; for stereo, < code > Tx</ code > must be set on the model (= -baseline*fx). Multi-camera rigs have multiple entries per frame. </ td ></ tr >
< tr >< td class = "paramname" > points3DMap</ td >< td > In/out: world 3D points keyed by word id; refined on return. </ td ></ tr >
< tr >< td class = "paramname" > wordReferences</ td >< td > Observations: < code > < wordId, < frameId, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" title = "A single bundle adjustment feature observation: one keypoint seen in one frame." > FeatureBA</ a > >> </ code > . See < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > . </ td ></ tr >
< tr >< td class = "paramname" > outliers</ td >< td > Optional output: word ids dropped by the back-end's outlier rejection. </ td ></ tr >
</ table >
</ dd >
</ dl >
< dl class = "section return" >< dt > Returns</ dt >< dd > Refined poses, or empty on failure. </ dd ></ dl >
< p > Reimplemented in < a class = "el" href = "classrtabmap_1_1OptimizerCeres.html#a5057dd09f74610f3092bb597f6af0413" > rtabmap::OptimizerCeres</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerCVSBA.html#ad6ff3fec8e75ab76290da5763022a903" > rtabmap::OptimizerCVSBA</ a > , < a class = "el" href = "classrtabmap_1_1OptimizerG2O.html#a17edfbaeee93d32153782f61212a88f0" > rtabmap::OptimizerG2O</ a > , and < a class = "el" href = "classrtabmap_1_1OptimizerGTSAM.html#a7a2033a466505f8c2191b8329b5b342c" > rtabmap::OptimizerGTSAM</ a > .</ p >
</ div >
</ div >
< a id = "a2f7cbdebed9787ffa6b0b30536dfa1a0" name = "a2f7cbdebed9787ffa6b0b30536dfa1a0" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a2f7cbdebed9787ffa6b0b30536dfa1a0" > ◆  </ a ></ span > optimizeBA() < span class = "overload" > [2/3]</ span ></ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > rtabmap::Optimizer::optimizeBA </ td >
< td > (</ td >
< td class = "paramtype" > int  </ td >
< td class = "paramname" >< em > rootId</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > poses</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > links</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > > &  </ td >
< td class = "paramname" >< em > signatures</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, cv::Point3f > &  </ td >
< td class = "paramname" >< em > points3DMap</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > &  </ td >
< td class = "paramname" >< em > wordReferences</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > rematchFeatures</ em > = < code > false</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
2026-08-02 07:56:38 +00:00
< td class = "paramtype" > const < a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > &  </ td >
< td class = "paramname" >< em > registrationParameters</ em > = < code >< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > ()</ code >   </ td >
2026-08-02 01:36:11 +00:00
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > BA wrapper that derives camera models and correspondences from signatures. </ p >
< p > Builds < code > models</ code > per frame from each < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > 's < a class = "el" href = "classrtabmap_1_1SensorData.html" > SensorData</ a > (mono or stereo, with stereo-baseline encoded in Tx), calls < a class = "el" href = "classrtabmap_1_1Optimizer.html#a93fb09dac068e64de000f692bcb8216f" > computeBACorrespondences()</ a > to populate < code > points3DMap</ code > / < code > wordReferences</ code > from the signatures' words, then delegates to the back-end overload above.</ p >
< dl class = "params" >< dt > Parameters</ dt >< dd >
< table class = "params" >
< tr >< td class = "paramname" > rematchFeatures</ td >< td > If true, re-match descriptors across linked frames before building correspondences (more accurate, more expensive). </ td ></ tr >
< tr >< td class = "paramname" > registrationParameters</ td >< td > Forwarded to < a class = "el" href = "classrtabmap_1_1RegistrationVis.html" > RegistrationVis</ a > when re-matching. </ td ></ tr >
</ table >
</ dd >
</ dl >
</ div >
</ div >
< a id = "ad6b32a9697837f03941773f6a5bbf91c" name = "ad6b32a9697837f03941773f6a5bbf91c" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#ad6b32a9697837f03941773f6a5bbf91c" > ◆  </ a ></ span > optimizeBA() < span class = "overload" > [3/3]</ span ></ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" >< a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > rtabmap::Optimizer::optimizeBA </ td >
< td > (</ td >
< td class = "paramtype" > const < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > &  </ td >
< td class = "paramname" >< em > link</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const < a class = "el" href = "classrtabmap_1_1CameraModel.html" > CameraModel</ a > &  </ td >
< td class = "paramname" >< em > model</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, cv::Point3f > &  </ td >
< td class = "paramname" >< em > points3DMap</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > &  </ td >
< td class = "paramname" >< em > wordReferences</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::set< int > *  </ td >
< td class = "paramname" >< em > outliers</ em > = < code > 0</ code >   </ td >
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Refine a single two-frame link via BA. </ p >
< p > Sets the < code > from</ code > frame at identity and the < code > to</ code > frame at < code > link.transform()</ code > , then runs BA over the supplied 3D points and observations. Returns the refined relative transform, or < code > link.transform()</ code > unchanged on failure. </ p >
</ div >
</ div >
< a id = "a93fb09dac068e64de000f692bcb8216f" name = "a93fb09dac068e64de000f692bcb8216f" ></ a >
< h2 class = "memtitle" >< span class = "permalink" >< a href = "#a93fb09dac068e64de000f692bcb8216f" > ◆  </ a ></ span > computeBACorrespondences()</ h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void rtabmap::Optimizer::computeBACorrespondences </ td >
< td > (</ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Transform.html" > Transform</ a > > &  </ td >
< td class = "paramname" >< em > poses</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::multimap< int, < a class = "el" href = "classrtabmap_1_1Link.html" > Link</ a > > &  </ td >
< td class = "paramname" >< em > links</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > const std::map< int, < a class = "el" href = "classrtabmap_1_1Signature.html" > Signature</ a > > &  </ td >
< td class = "paramname" >< em > signatures</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, cv::Point3f > &  </ td >
< td class = "paramname" >< em > points3DMap</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > std::map< int, std::map< int, < a class = "el" href = "classrtabmap_1_1FeatureBA.html" > FeatureBA</ a > > > &  </ td >
< td class = "paramname" >< em > wordReferences</ em > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > rematchFeatures</ em > = < code > false</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
< td class = "paramtype" > bool  </ td >
< td class = "paramname" >< em > useLinkTransformAsGuess</ em > = < code > false</ code > , </ td >
</ tr >
< tr >
< td class = "paramkey" ></ td >
< td ></ td >
2026-08-02 07:56:38 +00:00
< td class = "paramtype" >< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a >   </ td >
< td class = "paramname" >< em > registrationParameters</ em > = < code >< a class = "el" href = "namespacertabmap.html#ad08b6f1796a27dd7316c99c385e2cc55" > ParametersMap</ a > ()</ code >   </ td >
2026-08-02 01:36:11 +00:00
</ tr >
< tr >
< td ></ td >
< td > )</ td >
< td ></ td >< td ></ td >
</ tr >
</ table >
</ div >< div class = "memdoc" >
< p > Build BA correspondences (3D points + per-frame observations) from signatures. </ p >
< p > For each link, matches words between the two signatures with < a class = "el" href = "classrtabmap_1_1RegistrationVis.html" > RegistrationVis</ a > , triangulates / lifts depth into world coordinates using the frames' initial poses, and populates < code > points3DMap</ code > (one entry per word id) and < code > wordReferences</ code > (one entry per (word, frame) observation).</ p >
< dl class = "params" >< dt > Parameters</ dt >< dd >
< table class = "params" >
< tr >< td class = "paramname" > rematchFeatures</ td >< td > If true, descriptors are re-matched between frames instead of relying on pre-existing word ids — more robust to feature drift. </ td ></ tr >
< tr >< td class = "paramname" > useLinkTransformAsGuess</ td >< td > If true, the link's transform seeds the PnP guess instead of estimating it from scratch. </ td ></ tr >
< tr >< td class = "paramname" > registrationParameters</ td >< td > Forwarded to < a class = "el" href = "classrtabmap_1_1RegistrationVis.html" > RegistrationVis</ a > (estimation type, inlier counts, NNDR, etc.). </ td ></ tr >
</ table >
</ dd >
</ dl >
</ div >
</ div >
< hr /> The documentation for this class was generated from the following file:< ul >
< li > corelib/include/rtabmap/core/< a class = "el" href = "Optimizer_8h_source.html" > Optimizer.h</ a ></ li >
</ ul >
</ div > <!-- contents -->
2026-08-02 07:56:38 +00:00
</ div > <!-- doc-content -->
2026-08-02 01:36:11 +00:00
<!-- start footer part -->
2026-08-02 07:56:38 +00:00
< div id = "nav-path" class = "navpath" > <!-- id is needed for treeview function! -->
< ul >
< li class = "navelem" >< a class = "el" href = "namespacertabmap.html" > rtabmap</ a ></ li >< li class = "navelem" >< a class = "el" href = "classrtabmap_1_1Optimizer.html" > Optimizer</ a ></ li >
< li class = "footer" > Generated by < a href = "https://www.doxygen.org/index.html" >< img class = "footer" src = "doxygen.svg" width = "104" height = "31" alt = "doxygen" /></ a > 1.9.8 </ li >
</ ul >
</ div >
2026-08-02 01:36:11 +00:00
</ body >
</ html >