<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>CActionRobotMovement2D.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> > <b>C++ reference</b> </div> <div align="right"> <a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a> </div> <!-- Generated by Doxygen 1.7.5 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <div class="left"> <form id="FSearchBox" action="search.php" method="get"> <img id="MSearchSelect" src="search/mag.png" alt=""/> <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"/> </form> </div><div class="right"></div> </div> </li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div class="header"> <div class="headertitle"> <div class="title">CActionRobotMovement2D.h</div> </div> </div> <div class="contents"> <a href="_c_action_robot_movement2_d_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span> <a name="l00002"></a>00002 <span class="comment"> | The Mobile Robot Programming Toolkit (MRPT) C++ library |</span> <a name="l00003"></a>00003 <span class="comment"> | |</span> <a name="l00004"></a>00004 <span class="comment"> | http://www.mrpt.org/ |</span> <a name="l00005"></a>00005 <span class="comment"> | |</span> <a name="l00006"></a>00006 <span class="comment"> | Copyright (C) 2005-2011 University of Malaga |</span> <a name="l00007"></a>00007 <span class="comment"> | |</span> <a name="l00008"></a>00008 <span class="comment"> | This software was written by the Machine Perception and Intelligent |</span> <a name="l00009"></a>00009 <span class="comment"> | Robotics Lab, University of Malaga (Spain). |</span> <a name="l00010"></a>00010 <span class="comment"> | Contact: Jose-Luis Blanco <jlblanco@ctima.uma.es> |</span> <a name="l00011"></a>00011 <span class="comment"> | |</span> <a name="l00012"></a>00012 <span class="comment"> | This file is part of the MRPT project. |</span> <a name="l00013"></a>00013 <span class="comment"> | |</span> <a name="l00014"></a>00014 <span class="comment"> | MRPT is free software: you can redistribute it and/or modify |</span> <a name="l00015"></a>00015 <span class="comment"> | it under the terms of the GNU General Public License as published by |</span> <a name="l00016"></a>00016 <span class="comment"> | the Free Software Foundation, either version 3 of the License, or |</span> <a name="l00017"></a>00017 <span class="comment"> | (at your option) any later version. |</span> <a name="l00018"></a>00018 <span class="comment"> | |</span> <a name="l00019"></a>00019 <span class="comment"> | MRPT is distributed in the hope that it will be useful, |</span> <a name="l00020"></a>00020 <span class="comment"> | but WITHOUT ANY WARRANTY; without even the implied warranty of |</span> <a name="l00021"></a>00021 <span class="comment"> | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |</span> <a name="l00022"></a>00022 <span class="comment"> | GNU General Public License for more details. |</span> <a name="l00023"></a>00023 <span class="comment"> | |</span> <a name="l00024"></a>00024 <span class="comment"> | You should have received a copy of the GNU General Public License |</span> <a name="l00025"></a>00025 <span class="comment"> | along with MRPT. If not, see <http://www.gnu.org/licenses/>. |</span> <a name="l00026"></a>00026 <span class="comment"> | |</span> <a name="l00027"></a>00027 <span class="comment"> +---------------------------------------------------------------------------+ */</span> <a name="l00028"></a>00028 <span class="preprocessor">#ifndef CActionRobotMovement2D_H</span> <a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define CActionRobotMovement2D_H</span> <a name="l00030"></a>00030 <span class="preprocessor"></span> <a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="_c_action_8h.html">mrpt/slam/CAction.h</a>></span> <a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="_c_pose2_d_8h.html">mrpt/poses/CPose2D.h</a>></span> <a name="l00033"></a>00033 <span class="comment">//#include <mrpt/poses/CPosePDFGaussian.h></span> <a name="l00034"></a>00034 <span class="comment">//#include <mrpt/poses/CPosePDFParticles.h></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="_c_pose_p_d_f_8h.html">mrpt/poses/CPosePDF.h</a>></span> <a name="l00036"></a>00036 <a name="l00037"></a>00037 <span class="keyword">namespace </span>mrpt <a name="l00038"></a>00038 { <a name="l00039"></a>00039 <span class="keyword">namespace </span>slam <a name="l00040"></a>00040 { <a name="l00041"></a>00041 <span class="keyword">using namespace </span>mrpt::math; <a name="l00042"></a>00042 <span class="keyword">using namespace </span>mrpt::poses; <a name="l00043"></a>00043 <a name="l00044"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_ptr.html#a3a29a90698c34e552ba7939e34e99496">00044</a> <a class="code" href="_c_serializable_8h.html#a9ef523d787f6cb837a0585b790882588" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE</a>( <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a>, <a class="code" href="classmrpt_1_1slam_1_1_c_action.html" title="Declares a class for storing a robot action.">CAction</a>, <a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> ) <a name="l00045"></a>00045 <a name="l00046"></a>00046 <span class="comment">/** Represents a probabilistic 2D movement of the robot mobile base</span> <a name="l00047"></a>00047 <span class="comment"> *</span> <a name="l00048"></a>00048 <span class="comment"> * See the tutorial on <a href="http://www.mrpt.org/Probabilistic_Motion_Models" >probabilistic motion models</a>.</span> <a name="l00049"></a>00049 <span class="comment"> *</span> <a name="l00050"></a>00050 <span class="comment"> * \sa CAction</span> <a name="l00051"></a>00051 <span class="comment"> * \ingroup mrpt_obs_grp</span> <a name="l00052"></a>00052 <span class="comment"> */</span> <a name="l00053"></a>00053 class <a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a> : public <a class="code" href="classmrpt_1_1slam_1_1_c_action.html" title="Declares a class for storing a robot action.">CAction</a> <a name="l00054"></a>00054 { <a name="l00055"></a>00055 <span class="comment">// This must be added to any CSerializable derived class:</span> <a name="l00056"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a70723c38fee7598751494a3b1135216c">00056</a> <a class="code" href="_c_serializable_8h.html#a72ab55bf7ae009c89b75715cfa21e84d" title="This declaration must be inserted in all CSerializable classes definition, within the class declarati...">DEFINE_SERIALIZABLE</a>( <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a> ) <a name="l00057"></a>00057 <a name="l00058"></a>00058 public:<span class="comment"></span> <a name="l00059"></a>00059 <span class="comment"> /** A list of posible ways for estimating the content of a CActionRobotMovement2D object.</span> <a name="l00060"></a>00060 <span class="comment"> */</span> <a name="l00061"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2ea0c517210c0b4dd54269463af5debd">00061</a> enum <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2ea0c517210c0b4dd54269463af5debd" title="A list of posible ways for estimating the content of a CActionRobotMovement2D object.">TEstimationMethod</a> <a name="l00062"></a>00062 { <a name="l00063"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2ea0c517210c0b4dd54269463af5debda922e4ea1f9b65d3a56400d31247248f3">00063</a> emOdometry = 0, <a name="l00064"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2ea0c517210c0b4dd54269463af5debda0549c4bcb992f7709a4c6da28f042084">00064</a> emScan2DMatching <a name="l00065"></a>00065 }; <a name="l00066"></a>00066 <span class="comment"></span> <a name="l00067"></a>00067 <span class="comment"> /** Constructor</span> <a name="l00068"></a>00068 <span class="comment"> */</span> <a name="l00069"></a>00069 <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a>(); <a name="l00070"></a>00070 <span class="comment"></span> <a name="l00071"></a>00071 <span class="comment"> /** Copy constructor</span> <a name="l00072"></a>00072 <span class="comment"> */</span> <a name="l00073"></a>00073 <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a>(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a> &o); <a name="l00074"></a>00074 <span class="comment"></span> <a name="l00075"></a>00075 <span class="comment"> /** Copy operator</span> <a name="l00076"></a>00076 <span class="comment"> */</span> <a name="l00077"></a>00077 <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a> & operator =(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a> &o); <a name="l00078"></a>00078 <span class="comment"></span> <a name="l00079"></a>00079 <span class="comment"> /** Destructor</span> <a name="l00080"></a>00080 <span class="comment"> */</span> <a name="l00081"></a>00081 ~<a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">CActionRobotMovement2D</a>(); <a name="l00082"></a>00082 <span class="comment"></span> <a name="l00083"></a>00083 <span class="comment"> /** The 2D pose change probabilistic estimation.</span> <a name="l00084"></a>00084 <span class="comment"> */</span> <a name="l00085"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a657f5eb086d62c2cd601e5ea2ab11514">00085</a> <a class="code" href="structmrpt_1_1poses_1_1_c_pose_p_d_f_ptr.html">CPosePDFPtr</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a657f5eb086d62c2cd601e5ea2ab11514" title="The 2D pose change probabilistic estimation.">poseChange</a>; <a name="l00086"></a>00086 <span class="comment"></span> <a name="l00087"></a>00087 <span class="comment"> /** This is the raw odometry reading, and only is used when "estimationMethod" is "TEstimationMethod::emOdometry"</span> <a name="l00088"></a>00088 <span class="comment"> */</span> <a name="l00089"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ab4f05a72db0653e3c720de473da1e8e9">00089</a> <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ab4f05a72db0653e3c720de473da1e8e9" title="This is the raw odometry reading, and only is used when "estimationMethod" is "TEstimationMethod::emO...">rawOdometryIncrementReading</a>; <a name="l00090"></a>00090 <span class="comment"></span> <a name="l00091"></a>00091 <span class="comment"> /** This fields indicates the way this estimation was obtained.</span> <a name="l00092"></a>00092 <span class="comment"> */</span> <a name="l00093"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a866e3568f5318af626be763fa20bf10e">00093</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2ea0c517210c0b4dd54269463af5debd" title="A list of posible ways for estimating the content of a CActionRobotMovement2D object.">TEstimationMethod</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a866e3568f5318af626be763fa20bf10e" title="This fields indicates the way this estimation was obtained.">estimationMethod</a>; <a name="l00094"></a>00094 <span class="comment"></span> <a name="l00095"></a>00095 <span class="comment"> /** If "true" means that "encoderLeftTicks" and "encoderRightTicks" contain valid values.</span> <a name="l00096"></a>00096 <span class="comment"> */</span> <a name="l00097"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a36126efa474d8a610162a5a2c9708acc">00097</a> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a36126efa474d8a610162a5a2c9708acc" title="If "true" means that "encoderLeftTicks" and "encoderRightTicks" contain valid values.">hasEncodersInfo</a>; <a name="l00098"></a>00098 <span class="comment"></span> <a name="l00099"></a>00099 <span class="comment"> /** For odometry only: the ticks count for each wheel FROM the last reading (positive means FORWARD, for both wheels);</span> <a name="l00100"></a>00100 <span class="comment"> * \sa hasEncodersInfo</span> <a name="l00101"></a>00101 <span class="comment"> */</span> <a name="l00102"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2615b2e729d7f5f4f2e6e66fd4de26db">00102</a> int32_t encoderLeftTicks,<a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a2615b2e729d7f5f4f2e6e66fd4de26db">encoderRightTicks</a>; <a name="l00103"></a>00103 <span class="comment"></span> <a name="l00104"></a>00104 <span class="comment"> /** If "true" means that "velocityLin" and "velocityAng" contain valid values.</span> <a name="l00105"></a>00105 <span class="comment"> */</span> <a name="l00106"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a51b72a53b3a6723026705281505c45ae">00106</a> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a51b72a53b3a6723026705281505c45ae" title="If "true" means that "velocityLin" and "velocityAng" contain valid values.">hasVelocities</a>; <a name="l00107"></a>00107 <span class="comment"></span> <a name="l00108"></a>00108 <span class="comment"> /** The velocity of the robot, linear in meters/sec and angular in rad/sec.</span> <a name="l00109"></a>00109 <span class="comment"> */</span> <a name="l00110"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a937d53f74c8e9c43ce7695d0a5c7968e">00110</a> <span class="keywordtype">float</span> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a937d53f74c8e9c43ce7695d0a5c7968e" title="The velocity of the robot, linear in meters/sec and angular in rad/sec.">velocityLin</a>, velocityAng; <a name="l00111"></a>00111 <a name="l00112"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ac4dd42d8fd31dc832ab208a363697dbc">00112</a> <span class="keyword">enum</span> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ac4dd42d8fd31dc832ab208a363697dbc">TDrawSampleMotionModel</a> <a name="l00113"></a>00113 { <a name="l00114"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ac4dd42d8fd31dc832ab208a363697dbca5d2877076d3cfbe54d3d170f51e8775d">00114</a> mmGaussian = 0, <a name="l00115"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ac4dd42d8fd31dc832ab208a363697dbcaa9dcf67357c38d2a4ca44c60bf6ff690">00115</a> mmThrun <a name="l00116"></a>00116 };<span class="comment"></span> <a name="l00117"></a>00117 <span class="comment"> /** The parameter to be passed to "computeFromOdometry".</span> <a name="l00118"></a>00118 <span class="comment"> */</span> <a name="l00119"></a>00119 <span class="keyword">struct </span><a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> TMotionModelOptions <a name="l00120"></a>00120 {<span class="comment"></span> <a name="l00121"></a>00121 <span class="comment"> /** Default values loader.</span> <a name="l00122"></a>00122 <span class="comment"> */</span> <a name="l00123"></a>00123 TMotionModelOptions(); <a name="l00124"></a>00124 <span class="comment"></span> <a name="l00125"></a>00125 <span class="comment"> /** The model to be used.</span> <a name="l00126"></a>00126 <span class="comment"> */</span> <a name="l00127"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options.html#a79d4b99d642997f59982853b79521f5a">00127</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#ac4dd42d8fd31dc832ab208a363697dbc">TDrawSampleMotionModel</a> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options.html#a79d4b99d642997f59982853b79521f5a" title="The model to be used.">modelSelection</a>; <a name="l00128"></a>00128 <span class="comment"></span> <a name="l00129"></a>00129 <span class="comment"> /** Options for the gaussian model, which generates a CPosePDFGaussian object in poseChange</span> <a name="l00130"></a>00130 <span class="comment"> */</span> <a name="l00131"></a>00131 <span class="keyword">struct </span><a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___gaussian_model.html" title="Options for the gaussian model, which generates a CPosePDFGaussian object in poseChange.">TOptions_GaussianModel</a> <a name="l00132"></a>00132 { <a name="l00133"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___gaussian_model.html#a659467a1d4d3d9ed3501f71de7c150a4">00133</a> <span class="keywordtype">float</span> a1,a2,a3,a4,<a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___gaussian_model.html#a659467a1d4d3d9ed3501f71de7c150a4">minStdXY</a>,minStdPHI; <a name="l00134"></a>00134 } gausianModel; <a name="l00135"></a>00135 <span class="comment"></span> <a name="l00136"></a>00136 <span class="comment"> /** Options for the Thrun's model, which generates a CPosePDFParticles object in poseChange</span> <a name="l00137"></a>00137 <span class="comment"> */</span> <a name="l00138"></a>00138 <span class="keyword">struct </span><a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html" title="Options for the Thrun's model, which generates a CPosePDFParticles object in poseChange.">TOptions_ThrunModel</a> <a name="l00139"></a>00139 {<span class="comment"></span> <a name="l00140"></a>00140 <span class="comment"> /** The default number of particles to generate in a internal representation (anyway you can draw as many samples as you want through CActionRobotMovement2D::drawSingleSample)</span> <a name="l00141"></a>00141 <span class="comment"> */</span> <a name="l00142"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#ac3c66ef15fa4310cbb7e3c5b69571fbf">00142</a> uint32_t <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#ac3c66ef15fa4310cbb7e3c5b69571fbf" title="The default number of particles to generate in a internal representation (anyway you can draw as many...">nParticlesCount</a>; <a name="l00143"></a>00143 <a name="l00144"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#a45ada7d1dbf8df4dc7e8e8a6a6c96f5e">00144</a> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#a45ada7d1dbf8df4dc7e8e8a6a6c96f5e">alfa1_rot_rot</a>; <a name="l00145"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#a77cfd1c7a1d0a4efae7d178f285422e4">00145</a> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#a77cfd1c7a1d0a4efae7d178f285422e4">alfa2_rot_trans</a>; <a name="l00146"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#afa0406b126652575e7b1003ed23b0061">00146</a> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#afa0406b126652575e7b1003ed23b0061">alfa3_trans_trans</a>; <a name="l00147"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#ad1f8cf031739dd3c1eb0eb47d74e895f">00147</a> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#ad1f8cf031739dd3c1eb0eb47d74e895f">alfa4_trans_rot</a>; <a name="l00148"></a>00148 <span class="comment"></span> <a name="l00149"></a>00149 <span class="comment"> /** An additional noise added to the thrun model (std. dev. in meters and radians).</span> <a name="l00150"></a>00150 <span class="comment"> */</span> <a name="l00151"></a><a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#a8bc7afc99b8f90042cbf01467fdb4abd">00151</a> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options_1_1_t_options___thrun_model.html#a8bc7afc99b8f90042cbf01467fdb4abd" title="An additional noise added to the thrun model (std.">additional_std_XY</a>, additional_std_phi; <a name="l00152"></a>00152 } thrunModel; <a name="l00153"></a>00153 <a name="l00154"></a>00154 } motionModelConfiguration; <a name="l00155"></a>00155 <span class="comment"></span> <a name="l00156"></a>00156 <span class="comment"> /** Computes the PDF of the pose increment from an odometry reading and according to the given motion model (speed and encoder ticks information is not modified).</span> <a name="l00157"></a>00157 <span class="comment"> * According to the parameters in the passed struct, it will be called one the private sampling functions (see "see also" next).</span> <a name="l00158"></a>00158 <span class="comment"> * \sa computeFromOdometry_modelGaussian, computeFromOdometry_modelThrun</span> <a name="l00159"></a>00159 <span class="comment"> */</span> <a name="l00160"></a>00160 <span class="keywordtype">void</span> computeFromOdometry( <a name="l00161"></a>00161 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &odometryIncrement, <a name="l00162"></a>00162 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options.html" title="The parameter to be passed to "computeFromOdometry".">TMotionModelOptions</a> &options); <a name="l00163"></a>00163 <span class="comment"></span> <a name="l00164"></a>00164 <span class="comment"> /** If "hasEncodersInfo"=true, this method updates the pose estimation according to the ticks from both encoders and the passed parameters, which is passed internally to the method "computeFromOdometry" with the last used PDF options (or the defualt ones if not explicitly called by the user).</span> <a name="l00165"></a>00165 <span class="comment"> *</span> <a name="l00166"></a>00166 <span class="comment"> * \param K_left The meters / tick ratio for the left encoder.</span> <a name="l00167"></a>00167 <span class="comment"> * \param K_right The meters / tick ratio for the right encoder.</span> <a name="l00168"></a>00168 <span class="comment"> * \param D The distance between both wheels, in meters.</span> <a name="l00169"></a>00169 <span class="comment"> */</span> <a name="l00170"></a>00170 <span class="keywordtype">void</span> computeFromEncoders( <a name="l00171"></a>00171 <span class="keywordtype">double</span> K_left, <a name="l00172"></a>00172 <span class="keywordtype">double</span> K_right, <a name="l00173"></a>00173 <span class="keywordtype">double</span> D ); <a name="l00174"></a>00174 <span class="comment"></span> <a name="l00175"></a>00175 <span class="comment"> /** Using this method instead of "poseChange->drawSingleSample()" may be more efficient in most situations.</span> <a name="l00176"></a>00176 <span class="comment"> * \sa CPosePDF::drawSingleSample</span> <a name="l00177"></a>00177 <span class="comment"> */</span> <a name="l00178"></a>00178 <span class="keywordtype">void</span> drawSingleSample( <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &outSample ) <span class="keyword">const</span>; <a name="l00179"></a>00179 <span class="comment"></span> <a name="l00180"></a>00180 <span class="comment"> /** Call this before calling a high number of times "fastDrawSingleSample", which is much faster than "drawSingleSample"</span> <a name="l00181"></a>00181 <span class="comment"> */</span> <a name="l00182"></a>00182 <span class="keywordtype">void</span> prepareFastDrawSingleSamples() <span class="keyword">const</span>; <a name="l00183"></a>00183 <span class="comment"></span> <a name="l00184"></a>00184 <span class="comment"> /** Faster version than "drawSingleSample", but requires a previous call to "prepareFastDrawSingleSamples"</span> <a name="l00185"></a>00185 <span class="comment"> */</span> <a name="l00186"></a>00186 <span class="keywordtype">void</span> fastDrawSingleSample( <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &outSample ) <span class="keyword">const</span>; <a name="l00187"></a>00187 <a name="l00188"></a>00188 <span class="keyword">protected</span>:<span class="comment"></span> <a name="l00189"></a>00189 <span class="comment"> /** Computes the PDF of the pose increment from an odometry reading, using a Gaussian approximation as the motion model.</span> <a name="l00190"></a>00190 <span class="comment"> * \sa computeFromOdometry</span> <a name="l00191"></a>00191 <span class="comment"> */</span> <a name="l00192"></a>00192 <span class="keywordtype">void</span> computeFromOdometry_modelGaussian( <a name="l00193"></a>00193 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &odometryIncrement, <a name="l00194"></a>00194 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options.html" title="The parameter to be passed to "computeFromOdometry".">TMotionModelOptions</a> &o <a name="l00195"></a>00195 ); <a name="l00196"></a>00196 <span class="comment"></span> <a name="l00197"></a>00197 <span class="comment"> /** Computes the PDF of the pose increment from an odometry reading, using the motion model from Thrun's book.</span> <a name="l00198"></a>00198 <span class="comment"> * This model is discussed in "Probabilistic Robotics", Thrun, Burgard, and Fox, 2006, pp.136.</span> <a name="l00199"></a>00199 <span class="comment"> * \sa computeFromOdometry</span> <a name="l00200"></a>00200 <span class="comment"> */</span> <a name="l00201"></a>00201 <span class="keywordtype">void</span> computeFromOdometry_modelThrun( <a name="l00202"></a>00202 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &odometryIncrement, <a name="l00203"></a>00203 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1slam_1_1_c_action_robot_movement2_d_1_1_t_motion_model_options.html" title="The parameter to be passed to "computeFromOdometry".">TMotionModelOptions</a> &o <a name="l00204"></a>00204 ); <a name="l00205"></a>00205 <span class="comment"></span> <a name="l00206"></a>00206 <span class="comment"> /** The sample generator for the model "computeFromOdometry_modelGaussian", internally called when the user invokes "drawSingleSample".</span> <a name="l00207"></a>00207 <span class="comment"> */</span> <a name="l00208"></a>00208 <span class="keywordtype">void</span> drawSingleSample_modelGaussian( <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &outSample ) <span class="keyword">const</span>; <a name="l00209"></a>00209 <span class="comment"></span> <a name="l00210"></a>00210 <span class="comment"> /** The sample generator for the model "computeFromOdometry_modelThrun", internally called when the user invokes "drawSingleSample".</span> <a name="l00211"></a>00211 <span class="comment"> */</span> <a name="l00212"></a>00212 <span class="keywordtype">void</span> drawSingleSample_modelThrun( <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &outSample ) <span class="keyword">const</span>; <a name="l00213"></a>00213 <span class="comment"></span> <a name="l00214"></a>00214 <span class="comment"> /** Internal use</span> <a name="l00215"></a>00215 <span class="comment"> */</span> <a name="l00216"></a>00216 <span class="keywordtype">void</span> prepareFastDrawSingleSample_modelGaussian() <span class="keyword">const</span>; <a name="l00217"></a>00217 <span class="comment"></span> <a name="l00218"></a>00218 <span class="comment"> /** Internal use</span> <a name="l00219"></a>00219 <span class="comment"> */</span> <a name="l00220"></a>00220 <span class="keywordtype">void</span> prepareFastDrawSingleSample_modelThrun() <span class="keyword">const</span>; <a name="l00221"></a>00221 <span class="comment"></span> <a name="l00222"></a>00222 <span class="comment"> /** Internal use</span> <a name="l00223"></a>00223 <span class="comment"> */</span> <a name="l00224"></a>00224 <span class="keywordtype">void</span> fastDrawSingleSample_modelGaussian( <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &outSample ) <span class="keyword">const</span>; <a name="l00225"></a>00225 <span class="comment"></span> <a name="l00226"></a>00226 <span class="comment"> /** Internal use</span> <a name="l00227"></a>00227 <span class="comment"> */</span> <a name="l00228"></a>00228 <span class="keywordtype">void</span> fastDrawSingleSample_modelThrun( <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> &outSample ) <span class="keyword">const</span>; <a name="l00229"></a>00229 <span class="comment"></span> <a name="l00230"></a>00230 <span class="comment"> /** Auxiliary matrix</span> <a name="l00231"></a>00231 <span class="comment"> */</span> <a name="l00232"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a987805d7f75ae92c570b6b740baa435b">00232</a> <span class="keyword">mutable</span> <a class="code" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html">CMatrixDouble33</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#a987805d7f75ae92c570b6b740baa435b" title="Auxiliary matrix.">m_fastDrawGauss_Z</a>; <a name="l00233"></a><a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#aa802538fa49a6e64a10df9e5283cdeb0">00233</a> <span class="keyword">mutable</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a> <a class="code" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html#aa802538fa49a6e64a10df9e5283cdeb0">m_fastDrawGauss_M</a>; <a name="l00234"></a>00234 <a name="l00235"></a>00235 <a name="l00236"></a>00236 }; <span class="comment">// End of class def.</span> <a name="l00237"></a>00237 <a name="l00238"></a>00238 <a name="l00239"></a>00239 } <span class="comment">// End of namespace</span> <a name="l00240"></a>00240 } <span class="comment">// End of namespace</span> <a name="l00241"></a>00241 <a name="l00242"></a>00242 <span class="preprocessor">#endif</span> </pre></div></div> </div> <br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150"> </td></tr> </table> </body></html>