Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 1738

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!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>CPosePDF.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> &gt; <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&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;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&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">CPosePDF.h</div>  </div>
</div>
<div class="contents">
<a href="_c_pose_p_d_f_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  &lt;jlblanco@ctima.uma.es&gt;                     |</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 &lt;http://www.gnu.org/licenses/&gt;.         |</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 CPOSEPDF_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define CPOSEPDF_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;<a class="code" href="_c_serializable_8h.html">mrpt/utils/CSerializable.h</a>&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="_c_pose2_d_8h.html">mrpt/poses/CPose2D.h</a>&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="_c_matrix_template_numeric_8h.html">mrpt/math/CMatrixTemplateNumeric.h</a>&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;<a class="code" href="_c_probability_density_function_8h.html">mrpt/utils/CProbabilityDensityFunction.h</a>&gt;</span>
<a name="l00035"></a>00035 
<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>poses
<a name="l00040"></a>00040 {
<a name="l00041"></a>00041         <span class="keyword">using namespace </span>mrpt::math;
<a name="l00042"></a>00042 
<a name="l00043"></a>00043         <span class="comment">// This must be added to any CSerializable derived class:</span>
<a name="l00044"></a><a class="code" href="structmrpt_1_1poses_1_1_c_pose_p_d_f_ptr.html#a907909d2cb67fac05ed7a274f3a76b12">00044</a>         <a class="code" href="_c_serializable_8h.html#ab89b7a3de0a1baf5a5af4454add7d0f8" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE</a>( <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a>, <a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a> )
<a name="l00045"></a>00045 
<a name="l00046"></a>00046         <span class="comment">/** Declares a class that represents a probability density function (pdf) of a 2D pose (x,y,phi).</span>
<a name="l00047"></a>00047 <span class="comment">         *   This class is just the base class for unifying many diferent ways this pdf can be implemented.</span>
<a name="l00048"></a>00048 <span class="comment">         *</span>
<a name="l00049"></a>00049 <span class="comment">         *  For convenience, a pose composition is also defined for any pdf derived class,</span>
<a name="l00050"></a>00050 <span class="comment">         *   changeCoordinatesReference, in the form of a method rather than an operator.</span>
<a name="l00051"></a>00051 <span class="comment">         *</span>
<a name="l00052"></a>00052 <span class="comment">         *</span>
<a name="l00053"></a>00053 <span class="comment">         *  See also the tutorial on &lt;a href=&quot;http://www.mrpt.org/Probability_Density_Distributions_Over_Spatial_Representations&quot; &gt;probabilistic spatial representations in the MRPT&lt;/a&gt;.</span>
<a name="l00054"></a>00054 <span class="comment">         *</span>
<a name="l00055"></a>00055 <span class="comment">         * \sa CPose2D, CPose3DPDF, CPoseRandomSampler</span>
<a name="l00056"></a>00056 <span class="comment">         * \ingroup poses_pdf_grp</span>
<a name="l00057"></a>00057 <span class="comment">         */</span>
<a name="l00058"></a>00058         class <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a> : public mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a>, public mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_probability_density_function.html" title="A generic template for probability density distributions (PDFs).">CProbabilityDensityFunction</a>&lt;<a class="code" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">CPose2D</a>,3&gt;
<a name="l00059"></a>00059         {
<a name="l00060"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a6fec28a53e20dfc1c4d046c26f9f7b48">00060</a>                 <a class="code" href="_c_serializable_8h.html#a5876f72cf51bfb66a82bf81cc493febc" title="This declaration must be inserted in virtual CSerializable classes definition:">DEFINE_VIRTUAL_SERIALIZABLE</a>( <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a> )
<a name="l00061"></a>00061 
<a name="l00062"></a>00062         public:<span class="comment"></span>
<a name="l00063"></a>00063 <span class="comment">                /** Copy operator, translating if necesary (for example, between particles and gaussian representations)</span>
<a name="l00064"></a>00064 <span class="comment">                  */</span>
<a name="l00065"></a>00065                 virtual <span class="keywordtype">void</span>  copyFrom(const <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a> &amp;o) = 0;
<a name="l00066"></a>00066 
<a name="l00067"></a>00067 <span class="comment"></span>
<a name="l00068"></a>00068 <span class="comment">                /** Bayesian fusion of two pose distributions (product of two distributions-&gt;new distribution), then save the result in this object (WARNING: See implementing classes to see classes that can and cannot be mixtured!)</span>
<a name="l00069"></a>00069 <span class="comment">                  * \param p1 The first distribution to fuse</span>
<a name="l00070"></a>00070 <span class="comment">                  * \param p2 The second distribution to fuse</span>
<a name="l00071"></a>00071 <span class="comment">                  * \param minMahalanobisDistToDrop If set to different of 0, the result of very separate Gaussian modes (that will result in negligible components) in SOGs will be dropped to reduce the number of modes in the output.</span>
<a name="l00072"></a>00072 <span class="comment">                  */</span>
<a name="l00073"></a>00073                 virtual <span class="keywordtype">void</span>  bayesianFusion(const  <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a> &amp;p1,const  <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a> &amp;p2, const <span class="keywordtype">double</span>&amp;minMahalanobisDistToDrop = 0)  = 0 ;
<a name="l00074"></a>00074 <span class="comment"></span>
<a name="l00075"></a>00075 <span class="comment">                /** Returns a new PDF such as: NEW_PDF = (0,0,0) - THIS_PDF</span>
<a name="l00076"></a>00076 <span class="comment">                  */</span>
<a name="l00077"></a>00077                 virtual <span class="keywordtype">void</span>  inverse(<a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html" title="Declares a class that represents a probability density function (pdf) of a 2D pose (x...">CPosePDF</a> &amp;o) const = 0;
<a name="l00078"></a>00078 
<a name="l00079"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a78099595e3a530684ad3a13fc4fd7b4dab32bd9924253df5766c457da8e44181e">00079</a>                 enum { is_3D_val = 0 };
<a name="l00080"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a1c7943d0ab77c8ea3f46b86309069aad">00080</a>                 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a1c7943d0ab77c8ea3f46b86309069aad">is_3D</a>() { <span class="keywordflow">return</span> is_3D_val!=0; }
<a name="l00081"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a7cbf144d5c341d584ec473fd1da8c6bcae730029e8ea27257d5355d025c6b111a">00081</a>                 <span class="keyword">enum</span> { is_PDF_val = 1 };
<a name="l00082"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#aab2857a4e58866b442e187041d08a556">00082</a>                 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#aab2857a4e58866b442e187041d08a556">is_PDF</a>() { <span class="keywordflow">return</span> is_PDF_val!=0; }
<a name="l00083"></a>00083 <span class="comment"></span>
<a name="l00084"></a>00084 <span class="comment">                /** Returns a 3D representation of this PDF.</span>
<a name="l00085"></a>00085 <span class="comment">                  * \note Needs the mrpt-opengl library, and using mrpt::opengl::CSetOfObjectsPtr as template argument.</span>
<a name="l00086"></a>00086 <span class="comment">                  */</span>
<a name="l00087"></a>00087                 <span class="keyword">template</span> &lt;<span class="keyword">class</span> OPENGL_SETOFOBJECTSPTR&gt;
<a name="l00088"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a4ee11d8684292cf3d291d576b4fbce83">00088</a>                 <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a4ee11d8684292cf3d291d576b4fbce83" title="Returns a 3D representation of this PDF.">getAs3DObject</a>(OPENGL_SETOFOBJECTSPTR &amp;out_obj)<span class="keyword"> const </span>{
<a name="l00089"></a>00089                         <span class="keyword">typedef</span> <span class="keyword">typename</span> OPENGL_SETOFOBJECTSPTR<a class="code" href="eigen__plugins_8h.html#afd07186978da46f9908364e389f8a403" title="Type of the elements.">::value_type</a> SETOFOBJECTS;
<a name="l00090"></a>00090                         *out_obj = *<a class="code" href="namespacemrpt_1_1opengl.html#ada69d2b8f7e376cc386d8b7a0be29b34" title="Returns a representation of a the PDF - this is just an auxiliary function, it&#39;s more natural to call...">SETOFOBJECTS::posePDF2opengl</a>(*<span class="keyword">this</span>);
<a name="l00091"></a>00091                 }
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">                /** Returns a 3D representation of this PDF.</span>
<a name="l00094"></a>00094 <span class="comment">                  * \note Needs the mrpt-opengl library, and using mrpt::opengl::CSetOfObjectsPtr as template argument.</span>
<a name="l00095"></a>00095 <span class="comment">                  */</span>
<a name="l00096"></a>00096                 <span class="keyword">template</span> &lt;<span class="keyword">class</span> OPENGL_SETOFOBJECTSPTR&gt;
<a name="l00097"></a><a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a90795d49f8ebed4351523caea57e9030">00097</a>                 <span class="keyword">inline</span> OPENGL_SETOFOBJECTSPTR <a class="code" href="classmrpt_1_1poses_1_1_c_pose_p_d_f.html#a90795d49f8ebed4351523caea57e9030" title="Returns a 3D representation of this PDF.">getAs3DObject</a>()<span class="keyword"> const </span>{
<a name="l00098"></a>00098                         <span class="keyword">typedef</span> <span class="keyword">typename</span> OPENGL_SETOFOBJECTSPTR<a class="code" href="eigen__plugins_8h.html#afd07186978da46f9908364e389f8a403" title="Type of the elements.">::value_type</a> SETOFOBJECTS;
<a name="l00099"></a>00099                         <span class="keywordflow">return</span> <a class="code" href="namespacemrpt_1_1opengl.html#ada69d2b8f7e376cc386d8b7a0be29b34" title="Returns a representation of a the PDF - this is just an auxiliary function, it&#39;s more natural to call...">SETOFOBJECTS::posePDF2opengl</a>(*<span class="keyword">this</span>);
<a name="l00100"></a>00100                 }
<a name="l00101"></a>00101 
<a name="l00102"></a>00102 
<a name="l00103"></a>00103         }; <span class="comment">// End of class def.</span>
<a name="l00104"></a>00104 
<a name="l00105"></a>00105 
<a name="l00106"></a>00106         } <span class="comment">// End of namespace</span>
<a name="l00107"></a>00107 } <span class="comment">// End of namespace</span>
<a name="l00108"></a>00108 
<a name="l00109"></a>00109 <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>