Files
rtabmap/preview/pr-1791/api/latest/classrtabmap_1_1ImuMotionPredictor.html
T

412 lines
26 KiB
HTML

<!-- 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::ImuMotionPredictor 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>
<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>
<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" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="custom.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>
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">DoxygenAwesomeDarkModeToggle.init();</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">&#160;0.24.1</span>
</div>
<div id="projectbrief">Real-Time Appearance-Based Mapping</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</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&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classrtabmap_1_1ImuMotionPredictor.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- 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="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classrtabmap_1_1ImuMotionPredictor-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">rtabmap::ImuMotionPredictor Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Predicts the pose of the base frame from the last odometry pose and the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a>.
<a href="classrtabmap_1_1ImuMotionPredictor.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="ImuMotionPredictor_8h_source.html">ImuMotionPredictor.h</a>&gt;</code></p>
<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:a765b9d6ae74d6fdcfbcc55e9d28b3feb" id="r_a765b9d6ae74d6fdcfbcc55e9d28b3feb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a765b9d6ae74d6fdcfbcc55e9d28b3feb">ImuMotionPredictor</a> (double maxPoseInterval=1.0, double velocityWindow=0.5, double gravity=9.80665)</td></tr>
<tr class="separator:a765b9d6ae74d6fdcfbcc55e9d28b3feb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7fd44e11cecf9e3b4fb16dff1bca0166" id="r_a7fd44e11cecf9e3b4fb16dff1bca0166"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a7fd44e11cecf9e3b4fb16dff1bca0166">maxPoseInterval</a> () const</td></tr>
<tr class="separator:a7fd44e11cecf9e3b4fb16dff1bca0166"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49a29f75350d008a54668837561a98bf" id="r_a49a29f75350d008a54668837561a98bf"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a49a29f75350d008a54668837561a98bf">velocityWindow</a> () const</td></tr>
<tr class="separator:a49a29f75350d008a54668837561a98bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53a73e2ebf60ff671828732594adc7c4" id="r_a53a73e2ebf60ff671828732594adc7c4"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a53a73e2ebf60ff671828732594adc7c4">gravity</a> () const</td></tr>
<tr class="separator:a53a73e2ebf60ff671828732594adc7c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3359e2caff4d42fbcd4137b39aa2ae04" id="r_a3359e2caff4d42fbcd4137b39aa2ae04"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a3359e2caff4d42fbcd4137b39aa2ae04">addImu</a> (double stamp, const <a class="el" href="classrtabmap_1_1IMU.html">IMU</a> &amp;imu)</td></tr>
<tr class="memdesc:a3359e2caff4d42fbcd4137b39aa2ae04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds an <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> measurement. <br /></td></tr>
<tr class="separator:a3359e2caff4d42fbcd4137b39aa2ae04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb4349e5902040e5440f425e0bc39c47" id="r_abb4349e5902040e5440f425e0bc39c47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#abb4349e5902040e5440f425e0bc39c47">addPose</a> (double stamp, const <a class="el" href="classrtabmap_1_1Transform.html">rtabmap::Transform</a> &amp;pose)</td></tr>
<tr class="memdesc:abb4349e5902040e5440f425e0bc39c47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds an odometry pose, from which the next poses are predicted. <br /></td></tr>
<tr class="separator:abb4349e5902040e5440f425e0bc39c47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b8b4cd814ae31ef46899f41992bb1a4" id="r_a2b8b4cd814ae31ef46899f41992bb1a4"><td class="memItemLeft" align="right" valign="top"><a id="a2b8b4cd814ae31ef46899f41992bb1a4" name="a2b8b4cd814ae31ef46899f41992bb1a4"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
<tr class="memdesc:a2b8b4cd814ae31ef46899f41992bb1a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forgets the poses and the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> samples. <br /></td></tr>
<tr class="separator:a2b8b4cd814ae31ef46899f41992bb1a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9bd37d201be18aaecfbfdbdbaec6ff0" id="r_ac9bd37d201be18aaecfbfdbdbaec6ff0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classrtabmap_1_1Transform.html">rtabmap::Transform</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#ac9bd37d201be18aaecfbfdbdbaec6ff0">predict</a> (double stamp) const</td></tr>
<tr class="memdesc:ac9bd37d201be18aaecfbfdbdbaec6ff0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Predicts the pose of the base frame in the odometry frame. <br /></td></tr>
<tr class="separator:ac9bd37d201be18aaecfbfdbdbaec6ff0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c30a766cc8f251b78ed490cb2a275eb" id="r_a2c30a766cc8f251b78ed490cb2a275eb"><td class="memItemLeft" align="right" valign="top"><a id="a2c30a766cc8f251b78ed490cb2a275eb" name="a2c30a766cc8f251b78ed490cb2a275eb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>hasPose</b> () const</td></tr>
<tr class="memdesc:a2c30a766cc8f251b78ed490cb2a275eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether there is a pose to predict from (none yet, or the last one was null). <br /></td></tr>
<tr class="separator:a2c30a766cc8f251b78ed490cb2a275eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ddd3b124501b8446869a38b1ab1ff95" id="r_a4ddd3b124501b8446869a38b1ab1ff95"><td class="memItemLeft" align="right" valign="top"><a id="a4ddd3b124501b8446869a38b1ab1ff95" name="a4ddd3b124501b8446869a38b1ab1ff95"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><b>lastPoseStamp</b> () const</td></tr>
<tr class="memdesc:a4ddd3b124501b8446869a38b1ab1ff95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stamp of the last pose added, 0 if there is none. <br /></td></tr>
<tr class="separator:a4ddd3b124501b8446869a38b1ab1ff95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18e326faaa67a3602eaf3b4df7a906ff" id="r_a18e326faaa67a3602eaf3b4df7a906ff"><td class="memItemLeft" align="right" valign="top"><a id="a18e326faaa67a3602eaf3b4df7a906ff" name="a18e326faaa67a3602eaf3b4df7a906ff"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>velocity</b> () const</td></tr>
<tr class="memdesc:a18e326faaa67a3602eaf3b4df7a906ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Velocity (m/s) of the base in the odometry frame at the last pose. <br /></td></tr>
<tr class="separator:a18e326faaa67a3602eaf3b4df7a906ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a39dc460db30550b24646b312b3329245" id="r_a39dc460db30550b24646b312b3329245"><td class="memItemLeft" align="right" valign="top"><a id="a39dc460db30550b24646b312b3329245" name="a39dc460db30550b24646b312b3329245"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>samples</b> () const</td></tr>
<tr class="memdesc:a39dc460db30550b24646b312b3329245"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> samples kept. <br /></td></tr>
<tr class="separator:a39dc460db30550b24646b312b3329245"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Predicts the pose of the base frame from the last odometry pose and the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a>. </p>
<p>Between two odometry updates, the pose is propagated with the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a>: the orientation is the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a>'s own, re-expressed in the odometry frame, and the position is integrated from the velocity at the last odometry update and the gravity-compensated acceleration. That velocity is re-estimated at every odometry update, from the displacement since an odometry pose a short window back (see velocityWindow) corrected by the acceleration measured in between, so the position never drifts for long: only the motion since the last update is predicted.</p>
<p>This is what lidar deskewing needs: the pose at every point's time, during a sweep that started after the last pose odometry estimated.</p>
<p>The <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> samples are given as they are measured (see <a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a3359e2caff4d42fbcd4137b39aa2ae04" title="Adds an IMU measurement.">addImu()</a>): the orientation of the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> in its world frame and its specific force, from which gravity is removed here. That world frame must be gravity aligned with +z up, as in ROS (REP-103, e.g. ENU); its yaw doesn't matter. An orientation given in a frame with z down (NED) must be converted first, otherwise gravity is added instead of removed. The lever arm between the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> and the base origin is ignored: its centripetal and tangential accelerations are small over the fraction of a second this predicts.</p>
<p>Not thread-safe: a caller sharing it between threads must lock around every call. </p>
<p class="definition">Definition at line <a class="el" href="ImuMotionPredictor_8h_source.html#l00065">65</a> of file <a class="el" href="ImuMotionPredictor_8h_source.html">ImuMotionPredictor.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a765b9d6ae74d6fdcfbcc55e9d28b3feb" name="a765b9d6ae74d6fdcfbcc55e9d28b3feb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a765b9d6ae74d6fdcfbcc55e9d28b3feb">&#9670;&#160;</a></span>ImuMotionPredictor()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">rtabmap::ImuMotionPredictor::ImuMotionPredictor </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>maxPoseInterval</em> = <code>1.0</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>velocityWindow</em> = <code>0.5</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>gravity</em> = <code>9.80665</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>The <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> acceleration is used only with a velocity window (&gt; 0): over a single frame, the velocity is too noisy to be carried forward with it. Without it (window of 0, or no acceleration in the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> samples), the position follows the last velocity (constant velocity model).</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">maxPoseInterval</td><td>odometry poses older (s) than this are not used to estimate the velocity, which is null without one </td></tr>
<tr><td class="paramname">velocityWindow</td><td>the velocity is estimated from the displacement since the newest pose at least this old (s), corrected by the acceleration measured since, so that it is the velocity at the last pose, not an average. Over a single frame interval, the noise of the odometry poses would be of the order of the velocity itself. 0: the displacement since the previous pose, without acceleration. </td></tr>
<tr><td class="paramname">gravity</td><td>magnitude (m/s^2) of the gravity removed from the specific force given to <a class="el" href="classrtabmap_1_1ImuMotionPredictor.html#a3359e2caff4d42fbcd4137b39aa2ae04" title="Adds an IMU measurement.">addImu()</a>, standard gravity by default</td></tr>
</table>
</dd>
</dl>
<p>These are fixed for the life of the predictor (there is no setter): changing them while it estimates would mix poses and samples taken under different settings. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a7fd44e11cecf9e3b4fb16dff1bca0166" name="a7fd44e11cecf9e3b4fb16dff1bca0166"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7fd44e11cecf9e3b4fb16dff1bca0166">&#9670;&#160;</a></span>maxPoseInterval()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">double rtabmap::ImuMotionPredictor::maxPoseInterval </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 class="definition">Definition at line <a class="el" href="ImuMotionPredictor_8h_source.html#l00094">94</a> of file <a class="el" href="ImuMotionPredictor_8h_source.html">ImuMotionPredictor.h</a>.</p>
</div>
</div>
<a id="a49a29f75350d008a54668837561a98bf" name="a49a29f75350d008a54668837561a98bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a49a29f75350d008a54668837561a98bf">&#9670;&#160;</a></span>velocityWindow()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">double rtabmap::ImuMotionPredictor::velocityWindow </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 class="definition">Definition at line <a class="el" href="ImuMotionPredictor_8h_source.html#l00095">95</a> of file <a class="el" href="ImuMotionPredictor_8h_source.html">ImuMotionPredictor.h</a>.</p>
</div>
</div>
<a id="a53a73e2ebf60ff671828732594adc7c4" name="a53a73e2ebf60ff671828732594adc7c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a53a73e2ebf60ff671828732594adc7c4">&#9670;&#160;</a></span>gravity()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">double rtabmap::ImuMotionPredictor::gravity </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 class="definition">Definition at line <a class="el" href="ImuMotionPredictor_8h_source.html#l00096">96</a> of file <a class="el" href="ImuMotionPredictor_8h_source.html">ImuMotionPredictor.h</a>.</p>
</div>
</div>
<a id="a3359e2caff4d42fbcd4137b39aa2ae04" name="a3359e2caff4d42fbcd4137b39aa2ae04"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3359e2caff4d42fbcd4137b39aa2ae04">&#9670;&#160;</a></span>addImu()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::ImuMotionPredictor::addImu </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>stamp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1IMU.html">IMU</a> &amp;&#160;</td>
<td class="paramname"><em>imu</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds an <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> measurement. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">stamp</td><td>time of the measurement (s) </td></tr>
<tr><td class="paramname">imu</td><td>orientation of the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> in its world frame (gravity aligned, +z up), linear acceleration as measured (the specific force, which includes the reaction to gravity) and the transform from the base frame to the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a>. Without orientation, the measurement is ignored; without linear acceleration (all zeros, or a covariance of -1), only its orientation is used. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="abb4349e5902040e5440f425e0bc39c47" name="abb4349e5902040e5440f425e0bc39c47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb4349e5902040e5440f425e0bc39c47">&#9670;&#160;</a></span>addPose()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void rtabmap::ImuMotionPredictor::addPose </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>stamp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classrtabmap_1_1Transform.html">rtabmap::Transform</a> &amp;&#160;</td>
<td class="paramname"><em>pose</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Adds an odometry pose, from which the next poses are predicted. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">stamp</td><td>time of the pose (s) </td></tr>
<tr><td class="paramname">pose</td><td>pose of the base frame in the odometry frame; a null pose (odometry lost) resets the prediction until the next valid pose </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ac9bd37d201be18aaecfbfdbdbaec6ff0" name="ac9bd37d201be18aaecfbfdbdbaec6ff0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9bd37d201be18aaecfbfdbdbaec6ff0">&#9670;&#160;</a></span>predict()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classrtabmap_1_1Transform.html">rtabmap::Transform</a> rtabmap::ImuMotionPredictor::predict </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>stamp</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Predicts the pose of the base frame in the odometry frame. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">stamp</td><td>time (s) of the prediction, normally after the last pose </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the predicted pose, null if there is no <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a> sample yet. Without a pose (none yet, or the last one was null), the orientation alone is predicted, in the <a class="el" href="classrtabmap_1_1IMU.html" title="Inertial measurement sample (ROS sensor_msgs/Imu-like fields).">IMU</a>'s world frame and at the origin: still the relative rotation between two stamps, which is what deskewing needs most. </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="ImuMotionPredictor_8h_source.html">ImuMotionPredictor.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<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_1ImuMotionPredictor.html">ImuMotionPredictor</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>
</body>
</html>