Sophie

Sophie

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

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>CMultiMetricMapPDF.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">CMultiMetricMapPDF.h</div>  </div>
</div>
<div class="contents">
<a href="_c_multi_metric_map_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 CMultiMetricMapPDF_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define CMultiMetricMapPDF_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_multi_metric_map_8h.html">mrpt/slam/CMultiMetricMap.h</a>&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="_c_simple_map_8h.html">mrpt/slam/CSimpleMap.h</a>&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="_c_pose_p_d_f_particles_8h.html">mrpt/poses/CPosePDFParticles.h</a>&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;<a class="code" href="_c_pose3_d_p_d_f_particles_8h.html">mrpt/poses/CPose3DPDFParticles.h</a>&gt;</span>
<a name="l00035"></a>00035 
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;<a class="code" href="_c_pose_random_sampler_8h.html">mrpt/poses/CPoseRandomSampler.h</a>&gt;</span>
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;<a class="code" href="_c_particle_filter_capable_8h.html">mrpt/bayes/CParticleFilterCapable.h</a>&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;<a class="code" href="_c_loadable_options_8h.html">mrpt/utils/CLoadableOptions.h</a>&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;<a class="code" href="_c_i_c_p_8h.html">mrpt/slam/CICP.h</a>&gt;</span>
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;<a class="code" href="_p_f__implementations__data_8h.html">mrpt/slam/PF_implementations_data.h</a>&gt;</span>
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;<a class="code" href="slam_2include_2mrpt_2slam_2link__pragmas_8h.html">mrpt/slam/link_pragmas.h</a>&gt;</span>
<a name="l00045"></a>00045 
<a name="l00046"></a>00046 <span class="keyword">namespace </span>mrpt
<a name="l00047"></a>00047 {
<a name="l00048"></a>00048 <span class="keyword">namespace </span>slam
<a name="l00049"></a>00049 {
<a name="l00050"></a><a class="code" href="structmrpt_1_1slam_1_1_c_r_b_p_f_particle_data_ptr.html#a94181aa1cf5e866c4f8665fe79e5b84d">00050</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_r_b_p_f_particle_data.html" title="Auxiliary class used in mrpt::slam::CMultiMetricMapPDF.">CRBPFParticleData</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 class="code" href="slam_2include_2mrpt_2slam_2link__pragmas_8h.html#a26118d9c67fb641718c989b57c9acf64">SLAM_IMPEXP</a> )
<a name="l00051"></a>00051 
<a name="l00052"></a>00052         <span class="comment">/** Auxiliary class used in mrpt::slam::CMultiMetricMapPDF</span>
<a name="l00053"></a>00053 <span class="comment">         * \ingroup mrpt_slam_grp</span>
<a name="l00054"></a>00054 <span class="comment">          */</span>
<a name="l00055"></a>00055         class <a class="code" href="slam_2include_2mrpt_2slam_2link__pragmas_8h.html#a26118d9c67fb641718c989b57c9acf64">SLAM_IMPEXP</a> <a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html" title="Auxiliary class used in mrpt::slam::CMultiMetricMapPDF.">CRBPFParticleData</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>
<a name="l00056"></a>00056         {
<a name="l00057"></a>00057                 <span class="comment">// This must be added to any CSerializable derived class:</span>
<a name="l00058"></a><a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html#a59e40d926fc23a84d7652db0fab7d2a7">00058</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_r_b_p_f_particle_data.html" title="Auxiliary class used in mrpt::slam::CMultiMetricMapPDF.">CRBPFParticleData</a> )
<a name="l00059"></a>00059         public:
<a name="l00060"></a><a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html#a6c9c3578ac75cb8d5b075c5f9617dc9d">00060</a>                 <a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html" title="Auxiliary class used in mrpt::slam::CMultiMetricMapPDF.">CRBPFParticleData</a>( const <a class="code" href="classmrpt_1_1slam_1_1_t_set_of_metric_map_initializers.html" title="A set of TMetricMapInitializer structures, passed to the constructor CMultiMetricMap::CMultiMetricMap...">TSetOfMetricMapInitializers</a> *mapsInitializers = NULL ) :
<a name="l00061"></a>00061                   mapTillNow( mapsInitializers ),
<a name="l00062"></a>00062                   robotPath()
<a name="l00063"></a>00063                 {
<a name="l00064"></a>00064                 }
<a name="l00065"></a>00065 
<a name="l00066"></a><a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html#a2980c39d040437d4a1cce136f59efd9b">00066</a>                 <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">CMultiMetricMap</a>                 <a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html#a2980c39d040437d4a1cce136f59efd9b">mapTillNow</a>;
<a name="l00067"></a><a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html#af61bbcd58ff4ac61f1516bcf638ee9ae">00067</a>                 std<a class="code" href="classstd_1_1deque.html">::deque&lt;TPose3D&gt;</a>             <a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html#af61bbcd58ff4ac61f1516bcf638ee9ae">robotPath</a>;
<a name="l00068"></a>00068         };
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 
<a name="l00071"></a><a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_ptr.html#a395d2f69b72ea36f357d1b536cbc2716">00071</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_multi_metric_map_p_d_f.html" title="Declares a class that represents a Rao-Blackwellized set of particles for solving the SLAM problem (T...">CMultiMetricMapPDF</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 class="code" href="slam_2include_2mrpt_2slam_2link__pragmas_8h.html#a26118d9c67fb641718c989b57c9acf64">SLAM_IMPEXP</a> )
<a name="l00072"></a>00072 
<a name="l00073"></a>00073         <span class="comment">/** Declares a class that represents a Rao-Blackwellized set of particles for solving the SLAM problem (This class is the base of RBPF-SLAM applications).</span>
<a name="l00074"></a>00074 <span class="comment">         *   This class is used internally by the map building algorithm in &quot;mrpt::slam::CMetricMapBuilderRBPF&quot;</span>
<a name="l00075"></a>00075 <span class="comment">         *</span>
<a name="l00076"></a>00076 <span class="comment">         * \sa mrpt::slam::CMetricMapBuilderRBPF</span>
<a name="l00077"></a>00077 <span class="comment">         * \ingroup metric_slam_grp</span>
<a name="l00078"></a>00078 <span class="comment">         */</span>
<a name="l00079"></a>00079         class <a class="code" href="slam_2include_2mrpt_2slam_2link__pragmas_8h.html#a26118d9c67fb641718c989b57c9acf64">SLAM_IMPEXP</a> <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html" title="Declares a class that represents a Rao-Blackwellized set of particles for solving the SLAM problem (T...">CMultiMetricMapPDF</a> :
<a name="l00080"></a>00080                 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>,
<a name="l00081"></a>00081                 public mrpt::bayes::<a class="code" href="classmrpt_1_1bayes_1_1_c_particle_filter_data.html" title="This template class declares the array of particles and its internal data, managing some memory-relat...">CParticleFilterData</a>&lt;<a class="code" href="classmrpt_1_1slam_1_1_c_r_b_p_f_particle_data.html" title="Auxiliary class used in mrpt::slam::CMultiMetricMapPDF.">CRBPFParticleData</a>&gt;,
<a name="l00082"></a>00082                 public mrpt::bayes::<a class="code" href="classmrpt_1_1bayes_1_1_c_particle_filter_capable.html" title="This virtual class defines the interface that any particles based PDF class must implement in order t...">CParticleFilterCapable</a>,
<a name="l00083"></a>00083                 public mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_p_f__implementation.html" title="A set of common data shared by PF implementations for both SLAM and localization.">PF_implementation</a>&lt;CRBPFParticleData,<a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html" title="Declares a class that represents a Rao-Blackwellized set of particles for solving the SLAM problem (T...">CMultiMetricMapPDF</a>&gt;
<a name="l00084"></a>00084         {
<a name="l00085"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#a925d2ed4f5a33eba1a1e213b26ef3868">00085</a>                 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classmrpt_1_1slam_1_1_c_metric_map_builder_r_b_p_f.html" title="This class implements a Rao-Blackwelized Particle Filter (RBPF) approach to map building (SLAM)...">CMetricMapBuilderRBPF</a>;
<a name="l00086"></a>00086                 <span class="comment">//template &lt;class PARTICLE_TYPE, class MYSELF&gt; friend class PF_implementation;</span>
<a name="l00087"></a>00087 
<a name="l00088"></a>00088                 <span class="comment">// This must be added to any CSerializable derived class:</span>
<a name="l00089"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#a633b4e76d501bfdca14fe68766d6c2c8">00089</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>( CMultiMetricMapPDF )
<a name="l00090"></a>00090 
<a name="l00091"></a>00091                 <span class="comment">// This uses CParticleFilterData to implement some methods required for CParticleFilterCapable:</span>
<a name="l00092"></a>00092                 <a class="code" href="_c_particle_filter_data_8h.html#a1dab657a0f7d1fe1f4821dbbc2b4ea60" title="This must be placed within the declaration of classes inheriting from both CParticleFilterData and CP...">IMPLEMENT_PARTICLE_FILTER_CAPABLE</a>(CRBPFParticleData);
<a name="l00093"></a>00093 
<a name="l00094"></a>00094         protected:<span class="comment"></span>
<a name="l00095"></a>00095 <span class="comment">                /** The PF algorithm implementation.</span>
<a name="l00096"></a>00096 <span class="comment">                  */</span>
<a name="l00097"></a>00097                 <span class="keywordtype">void</span>  prediction_and_update_pfStandardProposal(
<a name="l00098"></a>00098                         const mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_action_collection.html" title="Declares a class for storing a collection of robot actions.">CActionCollection</a>     * action,
<a name="l00099"></a>00099                         const mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_sensory_frame.html" title="Declares a class for storing a &quot;sensory frame&quot;, a set of &quot;observations&quot; taken by the robot approximat...">CSensoryFrame</a>         * observation,
<a name="l00100"></a>00100                         const bayes::<a class="code" href="classmrpt_1_1bayes_1_1_c_particle_filter.html" title="This class acts as a common interface to the different interfaces (see CParticleFilter::TParticleFilt...">CParticleFilter</a>::TParticleFilterOptions &amp;PF_options );
<a name="l00101"></a>00101 <span class="comment"></span>
<a name="l00102"></a>00102 <span class="comment">                /** The PF algorithm implementation.</span>
<a name="l00103"></a>00103 <span class="comment">                  */</span>
<a name="l00104"></a>00104                 <span class="keywordtype">void</span>  prediction_and_update_pfOptimalProposal(
<a name="l00105"></a>00105                         const mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_action_collection.html" title="Declares a class for storing a collection of robot actions.">CActionCollection</a>     * action,
<a name="l00106"></a>00106                         const mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_sensory_frame.html" title="Declares a class for storing a &quot;sensory frame&quot;, a set of &quot;observations&quot; taken by the robot approximat...">CSensoryFrame</a>         * observation,
<a name="l00107"></a>00107                         const bayes::<a class="code" href="classmrpt_1_1bayes_1_1_c_particle_filter.html" title="This class acts as a common interface to the different interfaces (see CParticleFilter::TParticleFilt...">CParticleFilter</a>::TParticleFilterOptions &amp;PF_options );
<a name="l00108"></a>00108 <span class="comment"></span>
<a name="l00109"></a>00109 <span class="comment">                /** The PF algorithm implementation.</span>
<a name="l00110"></a>00110 <span class="comment">                  */</span>
<a name="l00111"></a>00111                 <span class="keywordtype">void</span>  prediction_and_update_pfAuxiliaryPFOptimal(
<a name="l00112"></a>00112                         const mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_action_collection.html" title="Declares a class for storing a collection of robot actions.">CActionCollection</a>     * action,
<a name="l00113"></a>00113                         const mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_sensory_frame.html" title="Declares a class for storing a &quot;sensory frame&quot;, a set of &quot;observations&quot; taken by the robot approximat...">CSensoryFrame</a>         * observation,
<a name="l00114"></a>00114                         const bayes::<a class="code" href="classmrpt_1_1bayes_1_1_c_particle_filter.html" title="This class acts as a common interface to the different interfaces (see CParticleFilter::TParticleFilt...">CParticleFilter</a>::TParticleFilterOptions &amp;PF_options );
<a name="l00115"></a>00115 
<a name="l00116"></a>00116 
<a name="l00117"></a>00117         private:<span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">                /** Internal buffer for the averaged map.</span>
<a name="l00119"></a>00119 <span class="comment">                  */</span>
<a name="l00120"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#a33a43bfedda3da247bff8843d9def1b8">00120</a>                 <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">CMultiMetricMap</a>                 averageMap;
<a name="l00121"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#a964e7eaf8f49bca27283daab7cb3b507">00121</a>                 <span class="keywordtype">bool</span>                                    averageMapIsUpdated;
<a name="l00122"></a>00122 <span class="comment"></span>
<a name="l00123"></a>00123 <span class="comment">                /** The SFs and their corresponding pose estimations:</span>
<a name="l00124"></a>00124 <span class="comment">                 */</span>
<a name="l00125"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#a465c224b60cc171b78fe707b0cd65151">00125</a>                 <a class="code" href="classmrpt_1_1slam_1_1_c_simple_map.html" title="This class stores a sequence of &lt;Probabilistic Pose,SensoryFrame&gt; pairs, thus a &quot;metric map&quot; can be t...">CSimpleMap</a>      SFs;
<a name="l00126"></a>00126 <span class="comment"></span>
<a name="l00127"></a>00127 <span class="comment">                /** A mapping between indexes in the SFs to indexes in the robot paths from particles.</span>
<a name="l00128"></a>00128 <span class="comment">                  */</span>
<a name="l00129"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#a02868eb23ad1d05fe65e4ae771e7ce26">00129</a>                 std::<a class="code" href="classstd_1_1vector.html" title="STL class.">vector</a>&lt;uint32_t&gt;   SF2robotPath;
<a name="l00130"></a>00130 
<a name="l00131"></a>00131 <span class="comment"></span>
<a name="l00132"></a>00132 <span class="comment">                /** Entropy aux. function</span>
<a name="l00133"></a>00133 <span class="comment">                  */</span>
<a name="l00134"></a>00134                 <span class="keywordtype">float</span>  H(<span class="keywordtype">float</span> p);
<a name="l00135"></a>00135 
<a name="l00136"></a>00136         public:
<a name="l00137"></a>00137 <span class="comment"></span>
<a name="l00138"></a>00138 <span class="comment">                /** The struct for passing extra simulation parameters to the prediction/update stage</span>
<a name="l00139"></a>00139 <span class="comment">                 *    when running a particle filter.</span>
<a name="l00140"></a>00140 <span class="comment">                 * \sa prediction_and_update</span>
<a name="l00141"></a>00141 <span class="comment">                 */</span>
<a name="l00142"></a>00142                 struct <a class="code" href="slam_2include_2mrpt_2slam_2link__pragmas_8h.html#a26118d9c67fb641718c989b57c9acf64">SLAM_IMPEXP</a> <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html" title="The struct for passing extra simulation parameters to the prediction/update stage when running a part...">TPredictionParams</a> : public utils::<a class="code" href="classmrpt_1_1utils_1_1_c_loadable_options.html" title="This is a virtual base class for sets of options than can be loaded from and/or saved to configuratio...">CLoadableOptions</a>
<a name="l00143"></a>00143                 {<span class="comment"></span>
<a name="l00144"></a>00144 <span class="comment">                        /** Default settings method.</span>
<a name="l00145"></a>00145 <span class="comment">                          */</span>
<a name="l00146"></a>00146                         <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html" title="The struct for passing extra simulation parameters to the prediction/update stage when running a part...">TPredictionParams</a>();
<a name="l00147"></a>00147 <span class="comment"></span>
<a name="l00148"></a>00148 <span class="comment">                        /** See utils::CLoadableOptions</span>
<a name="l00149"></a>00149 <span class="comment">                          */</span>
<a name="l00150"></a>00150                         <span class="keywordtype">void</span>  loadFromConfigFile(
<a name="l00151"></a>00151                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_config_file_base.html" title="This class allows loading and storing values and vectors of different types from a configuration text...">mrpt::utils::CConfigFileBase</a>  &amp;source,
<a name="l00152"></a>00152                                 <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;section);
<a name="l00153"></a>00153 <span class="comment"></span>
<a name="l00154"></a>00154 <span class="comment">                        /** See utils::CLoadableOptions</span>
<a name="l00155"></a>00155 <span class="comment">                          */</span>
<a name="l00156"></a>00156                         <span class="keywordtype">void</span>  dumpToTextStream(<a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>  &amp;out) <span class="keyword">const</span>;
<a name="l00157"></a>00157 <span class="comment"></span>
<a name="l00158"></a>00158 <span class="comment">                        /** [pf optimal proposal only]  Only for PF algorithm=2 (Exact &quot;pfOptimalProposal&quot;)</span>
<a name="l00159"></a>00159 <span class="comment">                         *   Select the map on which to calculate the optimal</span>
<a name="l00160"></a>00160 <span class="comment">                         *    proposal distribution. Values:</span>
<a name="l00161"></a>00161 <span class="comment">                         *   0: Gridmap   -&gt; Uses Scan matching-based approximation (based on Stachniss&#39; work)</span>
<a name="l00162"></a>00162 <span class="comment">                         *   1: Landmarks -&gt; Uses matching to approximate optimal</span>
<a name="l00163"></a>00163 <span class="comment">                         *   2: Beacons   -&gt; Used for exact optimal proposal in RO-SLAM</span>
<a name="l00164"></a>00164 <span class="comment">                         *   3: Pointsmap -&gt; Uses Scan matching-based approximation with a map of points (based on Stachniss&#39; work)</span>
<a name="l00165"></a>00165 <span class="comment">                         *  Default = 0</span>
<a name="l00166"></a>00166 <span class="comment">                         */</span>
<a name="l00167"></a><a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#a13284bda04d15caab4e40fc52121c216">00167</a>                         <span class="keywordtype">int</span>             <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#a13284bda04d15caab4e40fc52121c216" title="[pf optimal proposal only] Only for PF algorithm=2 (Exact &quot;pfOptimalProposal&quot;) Select the map on whic...">pfOptimalProposal_mapSelection</a>;
<a name="l00168"></a>00168 
<a name="l00169"></a>00169 <span class="comment"></span>
<a name="l00170"></a>00170 <span class="comment">                        /** [prediction stage][pf optimal proposal only] If useICPGlobalAlign_withGrid=true, this is the minimum quality ratio [0,1] of the alignment such as it will be accepted. Otherwise, raw odometry is used for those bad cases (default=0.7).</span>
<a name="l00171"></a>00171 <span class="comment">                          */</span>
<a name="l00172"></a><a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#aef437a4d66bf83acba12c1d2d0aa477c">00172</a>                         <span class="keywordtype">float</span>           <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#aef437a4d66bf83acba12c1d2d0aa477c" title="[prediction stage][pf optimal proposal only] If useICPGlobalAlign_withGrid=true, this is the minimum ...">ICPGlobalAlign_MinQuality</a>;
<a name="l00173"></a>00173 <span class="comment"></span>
<a name="l00174"></a>00174 <span class="comment">                        /** [update stage] If the likelihood is computed through the occupancy grid map, then this structure is passed to the map when updating the particles weights in the update stage.</span>
<a name="l00175"></a>00175 <span class="comment">                          */</span>
<a name="l00176"></a><a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#a0c3cbf8b7029f4ab53ae10ddb873acce">00176</a>                         <a class="code" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">COccupancyGridMap2D</a>::TLikelihoodOptions         <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#a0c3cbf8b7029f4ab53ae10ddb873acce" title="[update stage] If the likelihood is computed through the occupancy grid map, then this structure is p...">update_gridMapLikelihoodOptions</a>;
<a name="l00177"></a>00177 
<a name="l00178"></a><a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#ab3e3a662e5ba7ccdf0553dbb5abd1bb3">00178</a>                         <a class="code" href="classmrpt_1_1slam_1_1_t_k_l_d_params.html" title="Option set for KLD algorithm.">TKLDParams</a>              <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#ab3e3a662e5ba7ccdf0553dbb5abd1bb3">KLD_params</a>;
<a name="l00179"></a>00179 
<a name="l00180"></a><a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#aefbff11417cf3ec52be038276c892dfb">00180</a>                         <a class="code" href="classmrpt_1_1slam_1_1_c_i_c_p.html" title="Several implementations of ICP (Iterative closest point) algorithms for aligning two point maps or a ...">CICP</a>::TConfigParams             <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html#aefbff11417cf3ec52be038276c892dfb" title="ICP parameters, used only when &quot;PF_algorithm=2&quot; in the particle filter.">icp_params</a>; <span class="comment">//!&lt; ICP parameters, used only when &quot;PF_algorithm=2&quot; in the particle filter.</span>
<a name="l00181"></a>00181 <span class="comment"></span>
<a name="l00182"></a>00182                 } options;
<a name="l00183"></a>00183 <span class="comment"></span>
<a name="l00184"></a>00184 <span class="comment">                /** Constructor</span>
<a name="l00185"></a>00185 <span class="comment">                  */</span>
<a name="l00186"></a>00186                 CMultiMetricMapPDF(
<a name="l00187"></a>00187                         <span class="keyword">const</span> <a class="code" href="structmrpt_1_1bayes_1_1_c_particle_filter_1_1_t_particle_filter_options.html" title="The configuration of a particle filter.">bayes::CParticleFilter::TParticleFilterOptions</a>    &amp;opts = <a class="code" href="structmrpt_1_1bayes_1_1_c_particle_filter_1_1_t_particle_filter_options.html" title="The configuration of a particle filter.">bayes::CParticleFilter::TParticleFilterOptions</a>(),
<a name="l00188"></a>00188                         <span class="keyword">const</span> <a class="code" href="classmrpt_1_1slam_1_1_t_set_of_metric_map_initializers.html" title="A set of TMetricMapInitializer structures, passed to the constructor CMultiMetricMap::CMultiMetricMap...">mrpt::slam::TSetOfMetricMapInitializers</a>               *mapsInitializers = NULL,
<a name="l00189"></a>00189                         <span class="keyword">const</span> <a class="code" href="structmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f_1_1_t_prediction_params.html" title="The struct for passing extra simulation parameters to the prediction/update stage when running a part...">TPredictionParams</a>                                             *predictionOptions = NULL );
<a name="l00190"></a>00190 <span class="comment"></span>
<a name="l00191"></a>00191 <span class="comment">                /** Destructor</span>
<a name="l00192"></a>00192 <span class="comment">                 */</span>
<a name="l00193"></a>00193                 <span class="keyword">virtual</span> ~CMultiMetricMapPDF();
<a name="l00194"></a>00194 <span class="comment"></span>
<a name="l00195"></a>00195 <span class="comment">                /** Clear all elements of the maps, and restore all paths to a single starting pose */</span>
<a name="l00196"></a>00196                 <span class="keywordtype">void</span>  clear( <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> &amp;initialPose );
<a name="l00197"></a>00197 <span class="comment"></span>
<a name="l00198"></a>00198 <span class="comment">                /** Clear all elements of the maps, and restore all paths to a single starting pose */</span>
<a name="l00199"></a>00199                 <span class="keywordtype">void</span>  clear( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d.html" title="A class used to store a 3D pose (a 3D translation + a rotation in 3D).">CPose3D</a> &amp;initialPose );
<a name="l00200"></a>00200 <span class="comment"></span>
<a name="l00201"></a>00201 <span class="comment">                 /** Returns the estimate of the robot pose as a particles PDF for the instant of time &quot;timeStep&quot;, from 0 to N-1.</span>
<a name="l00202"></a>00202 <span class="comment">                  * \sa getEstimatedPosePDF</span>
<a name="l00203"></a>00203 <span class="comment">                  */</span>
<a name="l00204"></a>00204                 <span class="keywordtype">void</span>  getEstimatedPosePDFAtTime(
<a name="l00205"></a>00205                         <span class="keywordtype">size_t</span>                          timeStep,
<a name="l00206"></a>00206                         <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_particles.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose.">CPose3DPDFParticles</a> &amp;out_estimation ) <span class="keyword">const</span>;
<a name="l00207"></a>00207 <span class="comment"></span>
<a name="l00208"></a>00208 <span class="comment">                 /** Returns the current estimate of the robot pose, as a particles PDF.</span>
<a name="l00209"></a>00209 <span class="comment">                  * \sa getEstimatedPosePDFAtTime</span>
<a name="l00210"></a>00210 <span class="comment">                  */</span>
<a name="l00211"></a>00211                 <span class="keywordtype">void</span>  getEstimatedPosePDF( <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_particles.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose.">CPose3DPDFParticles</a>  &amp;out_estimation ) <span class="keyword">const</span>;
<a name="l00212"></a>00212 <span class="comment"></span>
<a name="l00213"></a>00213 <span class="comment">                /** Returns the weighted averaged map based on the current best estimation. If you need a persistent copy of this object, please use &quot;CSerializable::duplicate&quot; and use the copy.</span>
<a name="l00214"></a>00214 <span class="comment">                  */</span>
<a name="l00215"></a>00215                 <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">CMultiMetricMap</a> * getCurrentMetricMapEstimation( );
<a name="l00216"></a>00216 <span class="comment"></span>
<a name="l00217"></a>00217 <span class="comment">                /** Returns a pointer to the current most likely map (associated to the most likely particle).</span>
<a name="l00218"></a>00218 <span class="comment">                  */</span>
<a name="l00219"></a>00219                 <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">CMultiMetricMap</a>  * getCurrentMostLikelyMetricMap( );
<a name="l00220"></a>00220 <span class="comment"></span>
<a name="l00221"></a>00221 <span class="comment">                /** Get the number of CSensoryFrame inserted into the internal member SFs */</span>
<a name="l00222"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#ad6ffa07e3e1a3ac0c8fc9f5d39f9c731">00222</a>                 <span class="keywordtype">size_t</span>  <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#ad6ffa07e3e1a3ac0c8fc9f5d39f9c731" title="Get the number of CSensoryFrame inserted into the internal member SFs.">getNumberOfObservationsInSimplemap</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> SFs.size(); }
<a name="l00223"></a>00223 <span class="comment"></span>
<a name="l00224"></a>00224 <span class="comment">                /** Insert an observation to the map, at each particle&#39;s pose and to each particle&#39;s metric map.</span>
<a name="l00225"></a>00225 <span class="comment">                  * \param sf The SF to be inserted</span>
<a name="l00226"></a>00226 <span class="comment">                  */</span>
<a name="l00227"></a>00227                 <span class="keywordtype">void</span>  insertObservation(<a class="code" href="classmrpt_1_1slam_1_1_c_sensory_frame.html" title="Declares a class for storing a &quot;sensory frame&quot;, a set of &quot;observations&quot; taken by the robot approximat...">CSensoryFrame</a>   &amp;sf);
<a name="l00228"></a>00228 <span class="comment"></span>
<a name="l00229"></a>00229 <span class="comment">                /** Return the path (in absolute coordinate poses) for the i&#39;th particle.</span>
<a name="l00230"></a>00230 <span class="comment">                  * \exception On index out of bounds</span>
<a name="l00231"></a>00231 <span class="comment">                  */</span>
<a name="l00232"></a>00232                 <span class="keywordtype">void</span>  getPath(<span class="keywordtype">size_t</span> i, <a class="code" href="classstd_1_1deque.html" title="STL class.">std::deque&lt;math::TPose3D&gt;</a> &amp;out_path) <span class="keyword">const</span>;
<a name="l00233"></a>00233 <span class="comment"></span>
<a name="l00234"></a>00234 <span class="comment">                /** Returns the current entropy of paths, computed as the average entropy of poses along the path, where entropy of each pose estimation is computed as the entropy of the gaussian approximation covariance.</span>
<a name="l00235"></a>00235 <span class="comment">                  */</span>
<a name="l00236"></a>00236                 <span class="keywordtype">double</span>  getCurrentEntropyOfPaths();
<a name="l00237"></a>00237 <span class="comment"></span>
<a name="l00238"></a>00238 <span class="comment">                /** Returns the joint entropy estimation over paths and maps, acording to &quot;Information Gain-based Exploration Using&quot; by C. Stachniss, G. Grissetti and W.Burgard.</span>
<a name="l00239"></a>00239 <span class="comment">                  */</span>
<a name="l00240"></a>00240                 <span class="keywordtype">double</span>  getCurrentJointEntropy();
<a name="l00241"></a>00241 <span class="comment"></span>
<a name="l00242"></a>00242 <span class="comment">                /** Update the poses estimation of the member &quot;SFs&quot; according to the current path belief.</span>
<a name="l00243"></a>00243 <span class="comment">                  */</span>
<a name="l00244"></a>00244                 <span class="keywordtype">void</span>  updateSensoryFrameSequence();
<a name="l00245"></a>00245 <span class="comment"></span>
<a name="l00246"></a>00246 <span class="comment">                /** A logging utility: saves the current path estimation for each particle in a text file (a row per particle, each 3-column-entry is a set [x,y,phi], respectively).</span>
<a name="l00247"></a>00247 <span class="comment">                  */</span>
<a name="l00248"></a>00248                 <span class="keywordtype">void</span>  saveCurrentPathEstimationToTextFile( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a>  &amp;fil );
<a name="l00249"></a>00249 <span class="comment"></span>
<a name="l00250"></a>00250 <span class="comment">                /** An index [0,1] measuring how much information an observation aports to the map (Typ. threshold=0.07)</span>
<a name="l00251"></a>00251 <span class="comment">                  */</span>
<a name="l00252"></a><a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#abc7b59753c8bfcaac56d4b2f1b0642fa">00252</a>                 <span class="keywordtype">float</span>                                           <a class="code" href="classmrpt_1_1slam_1_1_c_multi_metric_map_p_d_f.html#abc7b59753c8bfcaac56d4b2f1b0642fa" title="An index [0,1] measuring how much information an observation aports to the map (Typ.">newInfoIndex</a>;
<a name="l00253"></a>00253 
<a name="l00254"></a>00254          <span class="keyword">private</span>:<span class="comment"></span>
<a name="l00255"></a>00255 <span class="comment">                /** Rebuild the &quot;expected&quot; grid map. Used internally, do not call</span>
<a name="l00256"></a>00256 <span class="comment">                  */</span>
<a name="l00257"></a>00257                 <span class="keywordtype">void</span>  rebuildAverageMap();
<a name="l00258"></a>00258 
<a name="l00259"></a>00259 
<a name="l00260"></a>00260 
<a name="l00261"></a>00261         <span class="comment">//protected:</span>
<a name="l00262"></a>00262         <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00263"></a>00263 <span class="comment">                        /** \name Virtual methods that the PF_implementations assume exist.</span>
<a name="l00264"></a>00264 <span class="comment">                            @{ */</span>
<a name="l00265"></a>00265 <span class="comment"></span>
<a name="l00266"></a>00266 <span class="comment">                        /** Return a pointer to the last robot pose in the i&#39;th particle (or NULL if it&#39;s a path and it&#39;s empty). */</span>
<a name="l00267"></a>00267                         <span class="keyword">const</span> <a class="code" href="structmrpt_1_1math_1_1_t_pose3_d.html" title="Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).">TPose3D</a> * getLastPose(<span class="keyword">const</span> <span class="keywordtype">size_t</span> i) <span class="keyword">const</span>;
<a name="l00268"></a>00268 
<a name="l00269"></a>00269                         <span class="keywordtype">void</span> PF_SLAM_implementation_custom_update_particle_with_new_pose(
<a name="l00270"></a>00270                                 <a class="code" href="classmrpt_1_1bayes_1_1_c_particle_filter_data.html#a95d1ef05087b7dc214aa7d8550a69e2b" title="This is the type inside the corresponding CParticleData class.">CParticleDataContent</a> *particleData,
<a name="l00271"></a>00271                                 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1math_1_1_t_pose3_d.html" title="Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).">TPose3D</a> &amp;newPose) <span class="keyword">const</span>;
<a name="l00272"></a>00272 
<a name="l00273"></a>00273                         <span class="comment">// The base implementation is fine for this class.</span>
<a name="l00274"></a>00274                         <span class="comment">// void PF_SLAM_implementation_replaceByNewParticleSet( ...</span>
<a name="l00275"></a>00275 
<a name="l00276"></a>00276                         <span class="keywordtype">bool</span> PF_SLAM_implementation_doWeHaveValidObservations(
<a name="l00277"></a>00277                                 <span class="keyword">const</span> <a class="code" href="classstd_1_1deque.html">CParticleList</a>     &amp;particles,
<a name="l00278"></a>00278                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1slam_1_1_c_sensory_frame.html" title="Declares a class for storing a &quot;sensory frame&quot;, a set of &quot;observations&quot; taken by the robot approximat...">CSensoryFrame</a> *sf) <span class="keyword">const</span>;
<a name="l00279"></a>00279 
<a name="l00280"></a>00280                         <span class="keywordtype">bool</span> PF_SLAM_implementation_skipRobotMovement() <span class="keyword">const</span>;
<a name="l00281"></a>00281 <span class="comment"></span>
<a name="l00282"></a>00282 <span class="comment">                        /** Evaluate the observation likelihood for one particle at a given location */</span>
<a name="l00283"></a>00283                         <span class="keywordtype">double</span> PF_SLAM_computeObservationLikelihoodForParticle(
<a name="l00284"></a>00284                                 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1bayes_1_1_c_particle_filter_1_1_t_particle_filter_options.html" title="The configuration of a particle filter.">CParticleFilter::TParticleFilterOptions</a>   &amp;PF_options,
<a name="l00285"></a>00285                                 <span class="keyword">const</span> <span class="keywordtype">size_t</span>                    particleIndexForMap,
<a name="l00286"></a>00286                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1slam_1_1_c_sensory_frame.html" title="Declares a class for storing a &quot;sensory frame&quot;, a set of &quot;observations&quot; taken by the robot approximat...">CSensoryFrame</a>             &amp;observation,
<a name="l00287"></a>00287                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d.html" title="A class used to store a 3D pose (a 3D translation + a rotation in 3D).">CPose3D</a>                   &amp;x ) <span class="keyword">const</span>;<span class="comment"></span>
<a name="l00288"></a>00288 <span class="comment">                        /** @} */</span>
<a name="l00289"></a>00289 
<a name="l00290"></a>00290 
<a name="l00291"></a>00291         }; <span class="comment">// End of class def.</span>
<a name="l00292"></a>00292 
<a name="l00293"></a>00293         } <span class="comment">// End of namespace</span>
<a name="l00294"></a>00294 } <span class="comment">// End of namespace</span>
<a name="l00295"></a>00295 
<a name="l00296"></a>00296 <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>