<!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>CObservation.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">CObservation.h</div> </div> </div> <div class="contents"> <a href="_c_observation_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 COBSERVATION_H</span> <a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define COBSERVATION_H</span> <a name="l00030"></a>00030 <span class="preprocessor"></span> <a name="l00031"></a>00031 <a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="obs_2include_2mrpt_2obs_2link__pragmas_8h.html">mrpt/obs/link_pragmas.h</a>></span> <a name="l00033"></a>00033 <a name="l00034"></a>00034 <span class="preprocessor">#include <<a class="code" href="_c_serializable_8h.html">mrpt/utils/CSerializable.h</a>></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="_c_stream_8h.html">mrpt/utils/CStream.h</a>></span> <a name="l00036"></a>00036 <span class="preprocessor">#include <<a class="code" href="os_8h.html">mrpt/system/os.h</a>></span> <a name="l00037"></a>00037 <span class="preprocessor">#include <<a class="code" href="datetime_8h.html">mrpt/system/datetime.h</a>></span> <a name="l00038"></a>00038 <span class="comment"></span> <a name="l00039"></a>00039 <span class="comment">/** The main namespace for all the Mobile Robot Programming Toolkit (MRPT) C++ libraries. */</span> <a name="l00040"></a>00040 <span class="keyword">namespace </span>mrpt <a name="l00041"></a>00041 { <a name="l00042"></a>00042 <span class="keyword">namespace </span>poses <a name="l00043"></a>00043 { <a name="l00044"></a>00044 <span class="keyword">class </span>CPosePDF; <a name="l00045"></a>00045 <span class="keyword">class </span>CPose2D; <a name="l00046"></a>00046 <span class="keyword">class </span>CPose3D; <a name="l00047"></a>00047 } <a name="l00048"></a>00048 <a name="l00049"></a>00049 <span class="keyword">namespace </span>math { <span class="keyword">struct </span>TPose3D; } <a name="l00050"></a>00050 <span class="comment"></span> <a name="l00051"></a>00051 <span class="comment"> /** This namespace contains algorithms for SLAM, localization, map building, representation of robot's actions and observations, and representation of many kinds of metric maps.</span> <a name="l00052"></a>00052 <span class="comment"> */</span> <a name="l00053"></a>00053 <span class="keyword">namespace </span>slam <a name="l00054"></a>00054 { <a name="l00055"></a>00055 <span class="keyword">using namespace </span>poses; <a name="l00056"></a>00056 <span class="comment"></span> <a name="l00057"></a>00057 <span class="comment"> /** Used for CObservationBearingRange::TMeasurement::beaconID</span> <a name="l00058"></a>00058 <span class="comment"> * \ingroup mrpt_obs_grp</span> <a name="l00059"></a>00059 <span class="comment"> */</span> <a name="l00060"></a><a class="code" href="group__mrpt__obs__grp.html#ga02a4785ad1c01bd6afc458aab2809b50">00060</a> <span class="preprocessor"> #define INVALID_LANDMARK_ID (-1)</span> <a name="l00061"></a>00061 <span class="preprocessor"></span><span class="comment"></span> <a name="l00062"></a>00062 <span class="comment"> /** Used for CObservationBeaconRange</span> <a name="l00063"></a>00063 <span class="comment"> * \ingroup mrpt_obs_grp</span> <a name="l00064"></a>00064 <span class="comment"> */</span> <a name="l00065"></a><a class="code" href="group__mrpt__obs__grp.html#ga664c88c8d05358e6403cda109f338efc">00065</a> <span class="preprocessor"> #define INVALID_BEACON_ID (-1)</span> <a name="l00066"></a>00066 <span class="preprocessor"></span> <a name="l00067"></a><a class="code" href="structmrpt_1_1slam_1_1_c_observation_ptr.html#a5b68bc26c3ee62995735bd99d0e23447">00067</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_observation.html" title="Declares a class that represents any robot's observation.">CObservation</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="obs_2include_2mrpt_2obs_2link__pragmas_8h.html#ae8bb1b2647c58d6ae2eb30ca31fcf5a1">OBS_IMPEXP</a> ) <a name="l00068"></a>00068 <a name="l00069"></a>00069 <span class="comment">/** Declares a class that represents any robot's observation.</span> <a name="l00070"></a>00070 <span class="comment"> This is a base class for many types of sensors</span> <a name="l00071"></a>00071 <span class="comment"> observations. Users can add a new observation type</span> <a name="l00072"></a>00072 <span class="comment"> creating a new class deriving from this one.<br></span> <a name="l00073"></a>00073 <span class="comment"> <b>IMPORTANT</b>: Observations doesn't include any information about the</span> <a name="l00074"></a>00074 <span class="comment"> robot pose beliefs, just the raw observation and, where</span> <a name="l00075"></a>00075 <span class="comment"> aplicable, information about sensor position or</span> <a name="l00076"></a>00076 <span class="comment"> orientation respect to robotic coordinates origin.</span> <a name="l00077"></a>00077 <span class="comment"> *</span> <a name="l00078"></a>00078 <span class="comment"> * \sa CSensoryFrame, CMetricMap</span> <a name="l00079"></a>00079 <span class="comment"> * \ingroup mrpt_obs_grp</span> <a name="l00080"></a>00080 <span class="comment"> */</span> <a name="l00081"></a>00081 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_observation.html" title="Declares a class that represents any robot's observation.">CObservation</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="l00082"></a>00082 { <a name="l00083"></a>00083 <span class="comment">// This must be added to any CSerializable derived class:</span> <a name="l00084"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#a6fec28a53e20dfc1c4d046c26f9f7b48">00084</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_1slam_1_1_c_observation.html" title="Declares a class that represents any robot's observation.">CObservation</a>) <a name="l00085"></a>00085 <a name="l00086"></a>00086 protected: <a name="l00087"></a>00087 <span class="keywordtype">void</span> swap(<a class="code" href="classmrpt_1_1slam_1_1_c_observation.html" title="Declares a class that represents any robot's observation.">CObservation</a> &o); <span class="comment">//!< Swap with another observation, ONLY the data defined here in the base class CObservation. It's protected since it'll be only called from child classes that should know what else to swap appart from these common data.</span> <a name="l00088"></a>00088 <span class="comment"></span> <a name="l00089"></a>00089 public: <a name="l00090"></a>00090 <span class="comment"></span> <a name="l00091"></a>00091 <span class="comment"> /** @name Data common to any observation</span> <a name="l00092"></a>00092 <span class="comment"> @{ */</span> <a name="l00093"></a>00093 <span class="comment"></span> <a name="l00094"></a>00094 <span class="comment"> /** The associated time-stamp.</span> <a name="l00095"></a>00095 <span class="comment"> */</span> <a name="l00096"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#ade9177f41827da9121847104e5b0ecd2">00096</a> mrpt::system::<a class="code" href="group__time__date.html#ga42674286d8d56afea013b6329bb7327a" title="A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...">TTimeStamp</a> timestamp; <a name="l00097"></a>00097 <span class="comment"></span> <a name="l00098"></a>00098 <span class="comment"> /** An arbitrary label that can be used to identify the sensor.</span> <a name="l00099"></a>00099 <span class="comment"> */</span> <a name="l00100"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#a7d451b2c59c2722f512227318df62579">00100</a> std::<span class="keywordtype">string</span> sensorLabel; <a name="l00101"></a>00101 <span class="comment"></span> <a name="l00102"></a>00102 <span class="comment"> /** @} */</span> <a name="l00103"></a>00103 <span class="comment"></span> <a name="l00104"></a>00104 <span class="comment"> /** Constructor: It sets the initial timestamp to current time</span> <a name="l00105"></a>00105 <span class="comment"> */</span> <a name="l00106"></a>00106 <a class="code" href="classmrpt_1_1slam_1_1_c_observation.html" title="Declares a class that represents any robot's observation.">CObservation</a>(); <a name="l00107"></a>00107 <a name="l00108"></a>00108 <span class="comment"></span> <a name="l00109"></a>00109 <span class="comment"> /** This method is equivalent to:</span> <a name="l00110"></a>00110 <span class="comment"> * \code</span> <a name="l00111"></a>00111 <span class="comment"> * map->insertObservation(this, robotPose)</span> <a name="l00112"></a>00112 <span class="comment"> * \endcode</span> <a name="l00113"></a>00113 <span class="comment"> * \param theMap The map where this observation is to be inserted: the map will be updated.</span> <a name="l00114"></a>00114 <span class="comment"> * \param robotPose The pose of the robot base for this observation, relative to the target metric map. Set to NULL (default) to use (0,0,0deg)</span> <a name="l00115"></a>00115 <span class="comment"> *</span> <a name="l00116"></a>00116 <span class="comment"> * \return Returns true if the map has been updated, or false if this observations</span> <a name="l00117"></a>00117 <span class="comment"> * has nothing to do with a metric map (for example, a sound observation).</span> <a name="l00118"></a>00118 <span class="comment"> *</span> <a name="l00119"></a>00119 <span class="comment"> * \sa CMetricMap, CMetricMap::insertObservation</span> <a name="l00120"></a>00120 <span class="comment"> */</span> <a name="l00121"></a>00121 template <class METRICMAP> <a name="l00122"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#a4dadc9d2618ea3701084e8cce4671564">00122</a> inline <span class="keywordtype">bool</span> insertObservationInto( METRICMAP *theMap, const <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> *robotPose = NULL )<span class="keyword"> const</span> <a name="l00123"></a>00123 <span class="keyword"> </span>{ <a name="l00124"></a>00124 <span class="keywordflow">return</span> theMap->insertObservation(<span class="keyword">this</span>,robotPose); <a name="l00125"></a>00125 } <a name="l00126"></a>00126 <span class="comment"></span> <a name="l00127"></a>00127 <span class="comment"> /** A general method to retrieve the sensor pose on the robot.</span> <a name="l00128"></a>00128 <span class="comment"> * Note that most sensors will return a full (6D) CPose3D, but see the derived classes for more details or special cases.</span> <a name="l00129"></a>00129 <span class="comment"> * \sa setSensorPose</span> <a name="l00130"></a>00130 <span class="comment"> */</span> <a name="l00131"></a>00131 <span class="keyword">virtual</span> <span class="keywordtype">void</span> getSensorPose( <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> &out_sensorPose ) <span class="keyword">const</span> = 0; <a name="l00132"></a>00132 <span class="comment"></span> <a name="l00133"></a>00133 <span class="comment"> /** A general method to retrieve the sensor pose on the robot.</span> <a name="l00134"></a>00134 <span class="comment"> * Note that most sensors will return a full (6D) CPose3D, but see the derived classes for more details or special cases.</span> <a name="l00135"></a>00135 <span class="comment"> * \sa setSensorPose</span> <a name="l00136"></a>00136 <span class="comment"> */</span> <a name="l00137"></a>00137 <span class="keywordtype">void</span> getSensorPose( <a class="code" href="structmrpt_1_1math_1_1_t_pose3_d.html" title="Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).">mrpt::math::TPose3D</a> &out_sensorPose ) <span class="keyword">const</span>; <a name="l00138"></a>00138 <span class="comment"></span> <a name="l00139"></a>00139 <span class="comment"> /** A general method to change the sensor pose on the robot.</span> <a name="l00140"></a>00140 <span class="comment"> * Note that most sensors will use the full (6D) CPose3D, but see the derived classes for more details or special cases.</span> <a name="l00141"></a>00141 <span class="comment"> * \sa getSensorPose</span> <a name="l00142"></a>00142 <span class="comment"> */</span> <a name="l00143"></a>00143 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setSensorPose( <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> &newSensorPose ) = 0; <a name="l00144"></a>00144 <span class="comment"></span> <a name="l00145"></a>00145 <span class="comment"> /** A general method to change the sensor pose on the robot.</span> <a name="l00146"></a>00146 <span class="comment"> * Note that most sensors will use the full (6D) CPose3D, but see the derived classes for more details or special cases.</span> <a name="l00147"></a>00147 <span class="comment"> * \sa getSensorPose</span> <a name="l00148"></a>00148 <span class="comment"> */</span> <a name="l00149"></a>00149 <span class="keywordtype">void</span> setSensorPose( <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).">mrpt::math::TPose3D</a> &newSensorPose ); <a name="l00150"></a>00150 <span class="comment"></span> <a name="l00151"></a>00151 <span class="comment"> /** @name Delayed-load manual control methods.</span> <a name="l00152"></a>00152 <span class="comment"> @{ */</span> <a name="l00153"></a>00153 <span class="comment"></span> <a name="l00154"></a>00154 <span class="comment"> /** Makes sure all images and other fields which may be externally stored are loaded in memory.</span> <a name="l00155"></a>00155 <span class="comment"> * Note that for all CImages, calling load() is not required since the images will be automatically loaded upon first access, so load() shouldn't be needed to be called in normal cases by the user.</span> <a name="l00156"></a>00156 <span class="comment"> * If all the data were alredy loaded or this object has no externally stored data fields, calling this method has no effects.</span> <a name="l00157"></a>00157 <span class="comment"> * \sa unload</span> <a name="l00158"></a>00158 <span class="comment"> */</span> <a name="l00159"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#ae8925420b61a2aa460886e09d123a495">00159</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#ae8925420b61a2aa460886e09d123a495" title="Makes sure all images and other fields which may be externally stored are loaded in memory...">load</a>()<span class="keyword"> const </span>{ <span class="comment">/* Default implementation: do nothing */</span> } <span class="comment"></span> <a name="l00160"></a>00160 <span class="comment"> /** Unload all images, for the case they being delayed-load images stored in external files (othewise, has no effect).</span> <a name="l00161"></a>00161 <span class="comment"> * \sa load</span> <a name="l00162"></a>00162 <span class="comment"> */</span> <a name="l00163"></a><a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#ab0bf2ed10a730838b5357c5da0126711">00163</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1slam_1_1_c_observation.html#ab0bf2ed10a730838b5357c5da0126711" title="Unload all images, for the case they being delayed-load images stored in external files (othewise...">unload</a>() { <span class="comment">/* Default implementation: do nothing */</span> } <a name="l00164"></a>00164 <span class="comment"></span> <a name="l00165"></a>00165 <span class="comment"> /** @} */</span> <a name="l00166"></a>00166 <a name="l00167"></a>00167 }; <span class="comment">// End of class def.</span> <a name="l00168"></a>00168 <a name="l00169"></a>00169 <a name="l00170"></a>00170 } <span class="comment">// End of namespace</span> <a name="l00171"></a>00171 } <span class="comment">// End of namespace</span> <a name="l00172"></a>00172 <a name="l00173"></a>00173 <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>