Sophie

Sophie

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

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>Change Log</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 class="current"><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><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>
<div class="header">
  <div class="headertitle">
<div class="title">Change Log </div>  </div>
</div>
<div class="contents">
<div class="textblock"><p><b>Note:</b> <em>If you are displaying a local version of this page and you have not built the whole HTML documentation, the links above will be broken. Either build the documentation invoking <code>make documentation_html</code> or browse it on-line <a href="http://www.mrpt.org/" target="_blank">here</a>.</em></p>
<p><a class="anchor" id="0.9.5"></a> </p>
<h2>Version 0.9.5 - (Under development) </h2>
<ul>
<li><b>Most important changes:</b><ul>
<li>Tons of <a href="perf-html/index.html">performance</a> optimizations, mostly in: point clouds, feature detection, opengl rendering and icp-slam (which is now with default params ~4 times faster).</li>
<li>Doxygen documentation is now organized around <a href="modules.html">modules</a>, such as the page for each class or namespace indicates to which <code>mrpt-*</code> library it belongs to.</li>
<li>New libraries: <a href="group__mrpt__graphs__grp.html">mrpt-graphs</a> and <a href="group__mrpt__graphslam__grp.html">mrpt-graphslam</a>, including two associated namespaces <a class="el" href="namespacemrpt_1_1graphs.html" title="Abstract graph and tree data structures, plus generic graph algorithms.">mrpt::graphs</a> and <a class="el" href="namespacemrpt_1_1graphslam.html" title="SLAM methods related to graphs of pose constraints.">mrpt::graphslam</a>. Read more below on this change and its reasons.</li>
</ul>
</li>
<li><b>Detailed list of changes:</b><ul>
<li>Changes in applications:<ul>
<li>navlog-viewer: Now allows exporting the global navigation map as a MATLAB script for generating vector plots.</li>
<li><a href="http://www.mrpt.org/Application:rawlog-edit">rawlog-edit</a>: New operations:<ul>
<li>"--generate-3d-pointclouds" - <a href="http://code.google.com/p/mrpt/source/detail?r=2579">r2579</a></li>
<li>"--generate-pcd": Creates one PointCloud Library (PCL) PCD file for each laser or 3D camera (Kinect) observation in a rawlog - <a href="http://code.google.com/p/mrpt/source/detail?r=2641">r2641</a></li>
</ul>
</li>
<li><a href="http://www.mrpt.org/Application:2d-slam-demo">2d-slam-demo</a>: New menus:<ul>
<li>"Tools"-&gt;"Save last data association state" for saving observation predictions and the innovation covariance S_k for debugging or didactic purposes.</li>
<li>"Tools"-&gt;"Enable save rawlog..." for grabbing simulated range-bearing SLAM data sets - <a href="http://code.google.com/p/mrpt/source/detail?r=2646">r2646</a></li>
<li>Now shows missing running total of true positives/negatives in data association (Thanks Kasra Khosoussi!) - <a href="http://code.google.com/p/mrpt/source/detail?r=2669">r2669</a></li>
<li>Added a new graph with number of JCBB iterations.</li>
</ul>
</li>
<li><a href="http://www.mrpt.org/Application:track-video-features">track-video-features</a>: New optional argument --save-video.</li>
<li><a href="http://www.mrpt.org/Application:RawLogViewer">RawLogViewer</a>:<ul>
<li>Now generates 3D point clouds on-the-fly for 3D camera data sets if the points weren't saved (obviously, only if range information is present).</li>
<li>The "scan animation" window has become a 3D viewer which is now capable of visualizing 2D laser scans and 3D point clouds from Kinect and other 3D cameras.</li>
</ul>
</li>
</ul>
</li>
<li>Refactoring of code around the two new libraries/modules <a href="group__mrpt__graphs__grp.html">mrpt-graphs</a> and <a href="group__mrpt__graphslam__grp.html">mrpt-graphslam</a>: <a href="http://code.google.com/p/mrpt/source/detail?r=2632">r2632</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2633">r2633</a><ul>
<li>Now all graphs abstract datatypes and algorithms are in <a class="el" href="namespacemrpt_1_1graphs.html" title="Abstract graph and tree data structures, plus generic graph algorithms.">mrpt::graphs</a> (they were previously part of mrpt-base).</li>
<li>And graphslam algorithms are into <a class="el" href="namespacemrpt_1_1graphslam.html" title="SLAM methods related to graphs of pose constraints.">mrpt::graphslam</a>, in its own library mrpt-graphslam (it was previously part of mrpt-slam).</li>
<li>This change responds to a convenience of having these two libraries as being (almost entirely) header-only libs, to allow a maximum of freedom in the definition of graph data types by users.</li>
<li>The most important new feature available after these changes is the possibility of working with nodes and edges with arbitrarily-complex "annotations", defined as structs via template arguments, and which augment the "poses" of global poses (in nodes) and constraints (edges). See: <a class="el" href="classmrpt_1_1graphs_1_1_c_directed_graph.html" title="A directed graph with the argument of the template specifying the type of the annotations in the edge...">mrpt::graphs::CDirectedGraph</a> and <a class="el" href="classmrpt_1_1graphs_1_1_c_network_of_poses.html" title="A directed graph of pose constraints, with edges being the relative pose between pairs of nodes inden...">mrpt::graphs::CNetworkOfPoses</a></li>
<li>For the sake of maintainability of future classes, the following changes will be required in user code (only when explicitly including/using these classes):<ul>
<li>mrpt::math::CDijkstra&lt;CPOSE,MAPS_IMPL&gt; --&gt; mrpt::graphs::CDijkstra&lt;GRAPH_T&gt; , that is, CDijstra&lt;&gt; now accepts as template argument the entire description of a graph (this is much more versatile).</li>
<li>#include &lt;mrpt/math/CAStarAlgorithm.h&gt; --&gt; #include &lt;<a class="el" href="_c_a_star_algorithm_8h.html">mrpt/graphs/CAStarAlgorithm.h</a>&gt;</li>
<li>#include &lt;mrpt/poses/CNetworkOfPoses.h&gt; --&gt; #include &lt;<a class="el" href="_c_network_of_poses_8h.html">mrpt/graphs/CNetworkOfPoses.h</a>&gt;</li>
<li>#include &lt;mrpt/math/dijkstra.h&gt; --&gt; #include &lt;<a class="el" href="dijkstra_8h.html">mrpt/graphs/dijkstra.h</a>&gt;</li>
<li>#include &lt;mrpt/math/graphs.h&gt; --&gt; #include &lt;<a class="el" href="_c_directed_tree_8h.html">mrpt/graphs/CDirectedTree.h</a>&gt; &amp; #include &lt;<a class="el" href="_c_directed_graph_8h.html">mrpt/graphs/CDirectedGraph.h</a>&gt;</li>
<li>#include &lt;mrpt/slam/graph_slam.h&gt; --&gt; #include &lt;<a class="el" href="graphslam_8h.html">mrpt/graphslam.h</a>&gt;</li>
</ul>
</li>
</ul>
</li>
<li>New classes:<ul>
<li>A batch of changes to introduce WiFi signal strength receivers and building maps out of such observations (by Emil Khatib) - <a href="http://code.google.com/p/mrpt/source/detail?r=2572">r2572</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2573">r2573</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2574">r2574</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2577">r2577</a>:<ul>
<li>[mrpt-obs] <a class="el" href="classmrpt_1_1slam_1_1_c_observation_wireless_power.html" title="This represents a measurement of the wireless strength perceived by the robot.">mrpt::slam::CObservationWirelessPower</a></li>
<li>[mrpt-maps] <a class="el" href="classmrpt_1_1slam_1_1_c_wireless_power_grid_map2_d.html" title="CWirelessPowerGridMap2D represents a PDF of wifi concentrations over a 2D area.">mrpt::slam::CWirelessPowerGridMap2D</a></li>
<li>[mrpt-hwdrivers] <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_wireless_power.html" title="This class implements a wireless power probe.">mrpt::hwdrivers::CWirelessPower</a></li>
</ul>
</li>
<li>[mrpt-maps] New class <a class="el" href="classmrpt_1_1slam_1_1_c_random_field_grid_map2_d.html" title="CRandomFieldGridMap2D represents a 2D grid map where each cell is associated one real-valued property...">mrpt::slam::CRandomFieldGridMap2D</a> to generalize previous WiFi and GasConcentration grid mapping - <a href="http://code.google.com/p/mrpt/source/detail?r=2577">r2577</a></li>
<li>[mrpt-maps] New map type <a class="el" href="classmrpt_1_1slam_1_1_c_weighted_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CWeightedPointsMap</a> which is equivalent to the old <a class="el" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CSimplePointsMap</a> (which now does not have weights). Read more on the code refactoring in point-cloud maps below.</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_text3_d.html" title="A 3D text (rendered with OpenGL primitives), with selectable font face and drawing style...">mrpt::opengl::CText3D</a>, a new way to display texts using OpenGL primitives instead of bitmaps.</li>
<li>[mrpt-vision] <a class="el" href="classmrpt_1_1vision_1_1_c_image_pyramid.html" title="Holds and builds a pyramid of images: starting with an image at full resolution (octave=1), it builds a number of half-resolution images: octave=2 at 1/2 , octave=3 at 1/2^2, octave=N at 1/2^(N-1).">mrpt::vision::CImagePyramid</a>, a tool for managing pyramids of images in different octaves (each being half the size of the previous one) - <a href="http://code.google.com/p/mrpt/source/detail?r=2602">r2602</a></li>
<li>[mrpt-vision] New "lightweight" image feature classes: <a class="el" href="group__mrptvision__features.html#ga72f50e326eac6ef6efa51b6c26d8c2e6" title="A simple structure for representing one image feature (without descriptor nor patch).">mrpt::vision::TSimpleFeature</a>, <a class="el" href="group__mrptvision__features.html#ga1a3cacefe1829fabd578ba8cc6fe6638" title="A list of image features using the structure TSimpleFeature for each feature - capable of KD-tree com...">mrpt::vision::TSimpleFeatureList</a></li>
</ul>
</li>
<li>New functions:<ul>
<li>[mrpt-base] <a class="el" href="namespacemrpt_1_1utils.html#a07f484c37d7eda90db10b6f08152a705" title="Like calling a std::vector&lt;&gt;&#39;s clear() method, but really forcing deallocating the memory...">mrpt::utils::vector_strong_clear()</a></li>
</ul>
</li>
<li>Changes in classes:<ul>
<li>[mrpt-maps] <a class="el" href="classmrpt_1_1slam_1_1_c_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans or other sensors...">mrpt::slam::CPointsMap</a> (and all derived point-cloud maps) have undergone a big code refactoring and optimizations:<ul>
<li>New method <a class="el" href="classmrpt_1_1slam_1_1_c_points_map.html#a859be10bcfa10896eea281ba0b2cb7bd" title="Adds all the points from anotherMap to this map, without fusing.">mrpt::slam::CPointsMap::addFrom()</a> and an "operator +=" to add the points from another point map - <a href="http://code.google.com/p/mrpt/source/detail?r=2553">r2553</a></li>
<li>Now <a class="el" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CSimplePointsMap</a> no longer has weights associated to each point. If users want weights (mainly for ::fuseWith()) please use the newly created class <a class="el" href="classmrpt_1_1slam_1_1_c_weighted_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CWeightedPointsMap</a> - <a href="http://code.google.com/p/mrpt/source/detail?r=2582">r2582</a></li>
<li>Filter by height is now available in all point maps, not only in mrpt::slam::CColourPointMap.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html" title="A map of 2D/3D points with individual colours (RGB).">mrpt::slam::CColouredPointsMap</a> no longer has a the "m_min_dist" field.</li>
<li>Many optimizations for SSE2 - <a href="http://code.google.com/p/mrpt/source/detail?r=2583">r2583</a></li>
</ul>
</li>
<li>[mrpt-maps] Basic support for PCL library (version 1.0.0+): ( <a href="http://code.google.com/p/mrpt/source/detail?r=2560">r2560</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2562">r2562</a> )<ul>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_points_map.html#a3a2d3dcc6eb283187b01cc12fb585842" title="Save the point cloud as a PCL PCD file, in either ASCII or binary format (requires MRPT built against...">mrpt::slam::CPointsMap::savePCDFile()</a></li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_points_map.html#ac7ef4277ce42b02e575cbbbcee9817dd" title="Use to convert this MRPT point cloud object into a PCL point cloud object.">mrpt::slam::CPointsMap::getPCLPointCloud()</a></li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html#a0d517540a73de45c6394f0d586f45175" title="Save the point cloud as a PCL PCD file, in either ASCII or binary format.">mrpt::slam::CColouredPointsMap::savePCDFile()</a></li>
</ul>
</li>
<li>[mrpt-maps] <a class="el" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html" title="This object renders a 2D laser scan by means of three elements: the points, the line along end-points...">mrpt::opengl::CPlanarLaserScan</a> no longer has its fields m_enable_points, m_enable_line, m_enable_surface exposed as public, since that breaks the OpenGL display-lists update mechanism. Instead, use the methods enablePoints(), enableLine(), enableSurface(). - <a href="http://code.google.com/p/mrpt/source/detail?r=2667">r2667</a></li>
<li>[mrpt-slam] New configuration parameters in ICP:<ul>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_i_c_p_1_1_t_config_params.html#a3ec774b005bbb5ca3b91cc772025f6a1" title="Decimation of the point cloud being registered against the reference one (default=5) - set to 1 to ha...">mrpt::slam::CICP::TConfigParams::corresponding_points_decimation</a> to speed-up ICP with dense point clouds that can be safely decimated.</li>
<li>Configurable "smallest step" termination critera (which was fixed in previous MRPT versions): <a class="el" href="classmrpt_1_1slam_1_1_c_i_c_p_1_1_t_config_params.html#a983a54786ac4b7eedde59917508c546c" title="If the correction in all translation coordinates (X,Y,Z) is below this threshold (in meters)...">mrpt::slam::CICP::TConfigParams::minAbsStep_trans</a>, <a class="el" href="classmrpt_1_1slam_1_1_c_i_c_p_1_1_t_config_params.html#aea30b240c62c27d85fa01f8beae60106" title="If the correction in all rotation coordinates (yaw,pitch,roll) is below this threshold (in radians)...">mrpt::slam::CICP::TConfigParams::minAbsStep_rot</a> - <a href="http://code.google.com/p/mrpt/source/detail?r=2653">r2653</a></li>
</ul>
</li>
<li>[mrpt-slam] Data association: JCBB implementation in <a class="el" href="group__data__assoc__grp.html#gae98a41b16cbc015a8099b79ad1a5750e" title="Computes the data-association between the prediction of a set of landmarks and their observations...">mrpt::slam::data_association_full_covariance()</a> is now more efficient by skipping some unnecesary B&amp;B iterations (Thanks Kasra Khosoussi!) - <a href="http://code.google.com/p/mrpt/source/detail?r=2669">r2669</a></li>
<li>[mrpt-obs] In <a class="el" href="classmrpt_1_1slam_1_1_c_observation3_d_range_scan.html" title="Declares a class derived from &quot;CObservation&quot; that encapsules a 3D range scan measurement (e...">mrpt::slam::CObservation3DRangeScan</a> - <a href="http://code.google.com/p/mrpt/source/detail?r=r2578">r2578</a>:<ul>
<li>New data field: <a class="el" href="classmrpt_1_1slam_1_1_c_observation3_d_range_scan.html#a77518e0cd9ce4cc8db949da58ef18ad7" title="true: Kinect-like ranges: entries of rangeImage are distances along the +X axis; false: Ranges in ran...">mrpt::slam::CObservation3DRangeScan::range_is_depth</a></li>
<li>Method <a class="el" href="classmrpt_1_1slam_1_1_c_observation3_d_range_scan.html#a0b06693a67ecd4044917ed914aad7195" title="Compute the 3D points coordinates from the depth image (rangeImage) and the depth camera camera param...">mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImage()</a> can now also recover 3D point clouds from 3D range scans not in the "Kinect" depth format.</li>
<li>New method CObservation3DRangeScan::doDepthAndIntensityCamerasCoincide()</li>
</ul>
</li>
<li>[mrpt-base] All classes derived from <a class="el" href="classmrpt_1_1utils_1_1_c_object_ptr.html" title="A smart pointer to a CObject object.">mrpt::utils::CObjectPtr</a> now have a proper "value_type" typedef with the most specific data type of the class being pointed by the smart pointer, overriding the inherited, too generic, <a class="el" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a>. - <a href="http://code.google.com/p/mrpt/source/detail?r=2568">r2568</a></li>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>:<ul>
<li>New method <a class="el" href="classmrpt_1_1utils_1_1_c_image.html#acafd9a0bea6c6775a0d17083b20ab745" title="Returns the row stride of the image: this is the number of *bytes* between two consecutive rows...">mrpt::utils::CImage::getRowStride()</a></li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_image.html#afd0dbc513f07e36a3764e674fdff6c1e" title="Compute the KLT response at a given pixel (x,y) - Only for grayscale images (for efficiency it avoids...">mrpt::utils::CImage::KLT_response()</a> has been optimized for time.</li>
</ul>
</li>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1utils_1_1_c_canvas.html" title="This virtual class defines the interface of any object accepting drawing primitives on it...">mrpt::utils::CCanvas</a> (which includes <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>):<ul>
<li>New bitmapped font: "5x7". See <a class="el" href="classmrpt_1_1utils_1_1_c_canvas.html#a2928fa64fc68c1f74cbe9c2e4aed8285" title="Select the current font used when drawing text.">mrpt::utils::CCanvas::selectTextFont()</a> - <a href="http://code.google.com/p/mrpt/source/detail?r=2598">r2598</a></li>
</ul>
</li>
<li>[mrpt-base] MRPT moves from ANN to FLANN for kd-tree library, such as: ( <a href="http://code.google.com/p/mrpt/source/detail?r=2623">r2623</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2639">r2639</a> )<ul>
<li>New namespace nanoflann, holding a modified version of FLANN.</li>
<li>A modified FLANN class has been created, <a class="el" href="classnanoflann_1_1_k_d_tree_single_index_adaptor.html" title="kd-tree index">nanoflann::KDTreeSingleIndexAdaptor</a>, to allow building a kd-tree index and performing search without duplicating all the dataset within the KD-tree index.</li>
<li>FLANN has been also changed to avoid virtual functions in inner loops (mostly around nanoflann::ResultSet&lt;&gt;).</li>
<li><a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html" title="A generic adaptor class for providing Approximate Nearest Neighbors (ANN) (via the nanoflann library)...">mrpt::math::KDTreeCapable</a> maintains its API, so the change is backward compatible</li>
<li>The nanoflann project has been released separately: <a href="http://code.google.com/p/nanoflann/">http://code.google.com/p/nanoflann/</a></li>
</ul>
</li>
<li>[mrpt-base] templates mrpt::poses::getPoseMean() have been replaced by methods within each pose class, e.g: <a class="el" href="classmrpt_1_1poses_1_1_c_pose2_d.html#a857c386c0eb2548fb1984ea2c19f3392">mrpt::poses::CPose2D::getPoseMean()</a>, <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_gaussian_inf.html#ab1c015f8f254302f908d6eff0892433b">mrpt::poses::CPose3DPDFGaussianInf::getPoseMean()</a>, ...</li>
<li>[mrpt-reactivenav] <a class="el" href="classmrpt_1_1reactivenav_1_1_c_log_file_record.html" title="A class for storing, saving and loading a reactive navigation log record for the CReactiveNavigationS...">mrpt::reactivenav::CLogFileRecord</a> has a new field "timestamp".</li>
<li>[mrpt-opengl &amp; mrpt-gui] All text labels in 3D rendering windows are now drawn as OpenGL primitives instead of bitmaps, which are ~10x faster to draw. See <a class="el" href="classmrpt_1_1opengl_1_1_c_text_message_capable.html" title="Keeps a list of text messages which can be rendered to OpenGL contexts by graphic classes...">mrpt::opengl::CTextMessageCapable</a></li>
<li>[mrpt-opengl &amp; mrpt-gui] <a class="el" href="classmrpt_1_1opengl_1_1_c_text_message_capable.html" title="Keeps a list of text messages which can be rendered to OpenGL contexts by graphic classes...">mrpt::opengl::CTextMessageCapable</a> and <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> now have an overloaded ::addTextMessage() method with many more font size/style options.</li>
<li>[mrpt-opengl] A new namespace with utility functions for rendering opengl stuff. See <a class="el" href="namespacemrpt_1_1opengl_1_1gl__utils.html" title="A set of auxiliary functions that can be called to render OpenGL primitives from MRPT or user code...">mrpt::opengl::gl_utils</a><ul>
<li><a class="el" href="namespacemrpt_1_1opengl_1_1gl__utils.html#ac879b1d810641376723af2928c9a5a19" title="Draws a message box with a centered (possibly multi-lined) text.">mrpt::opengl::gl_utils::renderMessageBox()</a>: Draws message boxes in OpenGL viewports</li>
</ul>
</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_renderizable.html" title="The base class of 3D objects that can be directly rendered through OpenGL.">mrpt::opengl::CRenderizable</a> (and all derived classes) now store colors as 4 u8 numbers instead of 4 doubles. All double-based APIs are maintained for backward compatibility.</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">mrpt::opengl::COpenGLViewport</a>:<ul>
<li>The "image display mode" is now based on glDrawPixels(), which is ~40 times faster than the old method.</li>
<li>It now emits pre/post rendering events (via the <a class="el" href="classmrpt_1_1utils_1_1_c_observable.html" title="Inherit from this class for those objects capable of being observed by a CObserver class...">mrpt::utils::CObservable</a> pattern), for the user to customize the rendering process. See example display3d_custom_render</li>
</ul>
</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">mrpt::opengl::CTexturedObject</a> now loads textures faster (not building mipmaps) - <a href="http://code.google.com/p/mrpt/source/detail?r=2631">r2631</a></li>
<li>[mrpt-opengl] Removal of function mrpt::opengl::stock_objects::SICKLaser(), since it was seldom used, its rendering was too slow; so it does not make sense to deserve ~3Mb of source code to it - <a href="http://code.google.com/p/mrpt/source/detail?r=2649">r2649</a></li>
<li>[mrpt-vision] New feature detectors: SSE2 optimized FASTER (-9,-10,-12), from libcvd by Edward Rosten <a href="http://code.google.com/p/mrpt/source/detail?r=2599">r2599</a><ul>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_feature_extraction.html" title="The central class from which images can be analyzed in search of different kinds of interest points a...">mrpt::vision::CFeatureExtraction</a></li>
<li><a class="el" href="group__mrpt__vision__grp.html#ga3a5b54ab814bafc8bb108e37bbee4e19" title="Types of features - This means that the point has been detected with this algorithm, which is independent of additional descriptors a feature may also have.">mrpt::vision::TFeatureType</a></li>
</ul>
</li>
<li>[mrpt-vision] The feature tracker system in <a class="el" href="structmrpt_1_1vision_1_1_c_generic_feature_tracker.html" title="A virtual interface for all feature trackers, implementing the part of feature tracking that is commo...">mrpt::vision::CGenericFeatureTracker</a> has new parameters and functionality: automatic deletion of OOB features, more tunable params,...</li>
<li>[mrpt-vision] Field "IDSourceImage" renamed <a class="el" href="classmrpt_1_1vision_1_1_c_feature.html#aabe958650b22716faaae030b0a0e85fa" title="A field for any other flags needed by the user (this has not a predefined meaning)">mrpt::vision::CFeature::user_flags</a> to better reflect its intention.</li>
</ul>
</li>
<li>Build system/external libs:<ul>
<li>All the <b>CMakeLists.txt</b> of examples are now included into SVN and in source packages. These are now scripts ready for the user to copy them and start a new independent program, out of the MRPT source tree.</li>
<li>Update of Eigen3 to a more recent version (11-Jul-2011), which avoids warnings in MSVC x64 - <a href="http://code.google.com/p/mrpt/source/detail?r=2556">r2556</a>, <a href="http://code.google.com/p/mrpt/source/detail?r=2558">r2558</a></li>
<li>Automatic check for existence of system "libgtest-dev" not to build embedded version of Google unit testing library and link to system lib instead - <a href="http://code.google.com/p/mrpt/source/detail?r=r2576">r2576</a></li>
<li>Support for Intel threading blocks library (TBB). Enable it from the CMake option "MRPT_HAS_TBB" - <a href="http://code.google.com/p/mrpt/source/detail?r=2606">r2606</a></li>
</ul>
</li>
<li>Removal of old deprecated APIs:<ul>
<li>Header &lt;mrpt/core.h&gt; has been removed (it was emitting a warning about deprecation since 0.9.0 - Jun 2010)</li>
<li><a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> ::trackFeatures() methods -&gt; replace with <a class="el" href="structmrpt_1_1vision_1_1_c_generic_feature_tracker.html" title="A virtual interface for all feature trackers, implementing the part of feature tracking that is commo...">mrpt::vision::CGenericFeatureTracker</a></li>
<li><a class="el" href="namespacemrpt_1_1topography.html" title="This namespace provides topography helper functions, coordinate transformations.">mrpt::topography</a> ::coordinatesTransformation_WGS84(), mrpt::topography::coordinatesTransformation_WGS84_geocentric() -&gt; replace with <a class="el" href="group__mrpt__topography__grp.html#ga658ce589d36752f4a08060a8aca54460" title="Coordinates transformation from longitude/latitude/height to ENU (East-North-Up) X/Y/Z coordinates Th...">mrpt::topography::geodeticToENU_WGS84()</a></li>
<li>mrpt::poses::CProbabilityDensityFunction ::getEstimatedCovariance() -&gt; replace with <a class="el" href="classmrpt_1_1utils_1_1_c_probability_density_function.html#a76a1c94c45614ec2ab8f4b209d126745" title="Returns the estimate of the covariance matrix (STATE_LEN x STATE_LEN covariance matrix)">mrpt::poses::CProbabilityDensityFunction::getCovariance()</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f.html" title="Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually)...">mrpt::poses::CPose3DPDF</a> ::getEstimatedPose() -&gt; <a class="el" href="classmrpt_1_1utils_1_1_c_probability_density_function.html#afc168fcbcba4191a0e64fc2a3b7c4c78" title="Returns the mean, or mathematical expectation of the probability density distribution (PDF)...">mrpt::poses::CPose3DPDF::getMean()</a></li>
<li><a class="el" 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...">mrpt::poses::CPosePDF</a> ::getEstimatedPose() -&gt; <a class="el" href="classmrpt_1_1utils_1_1_c_probability_density_function.html#afc168fcbcba4191a0e64fc2a3b7c4c78" title="Returns the mean, or mathematical expectation of the probability density distribution (PDF)...">mrpt::poses::CPosePDF::getMean()</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_point_p_d_f.html" title="Declares a class that represents a Probability Distribution function (PDF) of a 3D point (x...">mrpt::poses::CPointPDF</a> ::getEstimatedPoint() -&gt; <a class="el" href="classmrpt_1_1utils_1_1_c_probability_density_function.html#afc168fcbcba4191a0e64fc2a3b7c4c78" title="Returns the mean, or mathematical expectation of the probability density distribution (PDF)...">mrpt::poses::CPointPDF::getMean()</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f.html" title="Declares a class that represents a Probability Distribution function (PDF) of a 2D point (x...">mrpt::poses::CPoint2DPDF</a> ::getEstimatedPoint() -&gt; <a class="el" href="classmrpt_1_1utils_1_1_c_probability_density_function.html#afc168fcbcba4191a0e64fc2a3b7c4c78" title="Returns the mean, or mathematical expectation of the probability density distribution (PDF)...">mrpt::poses::CPoint2DPDF::getMean()</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_gaussian.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose ...">mrpt::poses::CPose3DPDFGaussian</a> constructor from CMatrixD -&gt; Use constructor from fixed-size matrix.</li>
<li><a class="el" href="namespacemrpt_1_1random.html" title="A namespace of pseudo-random numbers genrators of diferent distributions.">mrpt::random</a> global functions -&gt; replace with method of object <a class="el" href="namespacemrpt_1_1random.html#a4743bfa8fcb282b6f5d66395ccabaa73" title="A static instance of a CRandomGenerator class, for use in single-thread applications.">mrpt::random::randomGenerator</a> or instantiate your own <a class="el" href="classmrpt_1_1random_1_1_c_random_generator.html" title="A thred-safe pseudo random number generator, based on an internal MT19937 randomness generator...">mrpt::random::CRandomGenerator</a></li>
</ul>
</li>
<li>New examples:<ul>
<li>offscreen-render - A demo program to load a 3D scene and render it off-screen (in memory) at any arbitrary size, even larger than the screen - <a href="http://code.google.com/p/mrpt/source/detail?r=r2575">r2575</a>.</li>
<li>display3d_custom_render</li>
<li>captureVideoAndBuildPyr - A GUI live demo to test the effects of the options while building an image pyramid.</li>
<li>rgbd_dataset2rawlog - A tool for convering RGB+D TUM datasets to rawlogs.</li>
</ul>
</li>
<li>New datasets:<ul>
<li>malaga-cs-fac-building.simplemap.gz - A new prebuilt simplemap of the ground floor of one Computer Science building (Malaga University) - <a href="http://code.google.com/p/mrpt/source/detail?r=r2575">r2575</a>.</li>
<li>test_rtk_path.rawlog - A short sequence of 3 RTK GPS readings, for usage within unit tests of mrpt-topography</li>
</ul>
</li>
<li>Build error FIXES:<ul>
<li>Build error in platforms that don't support SSE2 (Thanks rovoreed!) - <a href="http://code.google.com/p/mrpt/source/detail?r=2550">r2550</a></li>
<li>Build error when OpenCV exists but is not used. - <a href="http://code.google.com/p/mrpt/source/detail?r=2555">r2555</a></li>
<li>Build error in mrpt-hwdrivers with latest OpenCV 2.3 - <a href="http://code.google.com/p/mrpt/source/detail?r=r2566">r2566</a></li>
<li>Linking error with MinGW around the <a class="el" 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...">mrpt::opengl::posePDF2opengl()</a> templates - <a href="http://code.google.com/p/mrpt/source/detail?r=r2567">r2567</a> (Thanks Miyamoto Musashi for <a href="http://www.mrpt.org/node/1031">reporting</a>!).</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>[mrpt-obs] Wrong usage of focal distances "fx"&lt;-&gt;"fy" when generating the 3D point clouds from Kinect observations with the method <a class="el" href="classmrpt_1_1slam_1_1_c_observation3_d_range_scan.html#a0b06693a67ecd4044917ed914aad7195" title="Compute the 3D points coordinates from the depth image (rangeImage) and the depth camera camera param...">mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImage()</a> - <a href="http://code.google.com/p/mrpt/source/detail?r=r2578">r2578</a>.</li>
<li>[mrpt-hwdrivers], [mrpt-obs] Gyroscopic rotation rates in yaw and roll were stored in the wrong order in <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_i_m_u_x_sens.html" title="A class for interfacing Inertial Measuring Units (IMUs) of the type &quot;XSens MTi&quot; It uses a serial port...">mrpt::hwdrivers::CIMUXSens</a> and <a class="el" href="classmrpt_1_1slam_1_1_c_observation_i_m_u.html" title="This class stores measurements from an Inertial Measurement Unit (IMU), and/or its attitude estimatio...">mrpt::slam::CObservationIMU</a>. It has been fixed so new grabbed data is saved correctly but also such as old datasets are automatically fixed when loading them. Thanks Lianfen for noticing! - <a href="http://code.google.com/p/mrpt/source/detail?r=r2622">r2622</a>.</li>
<li>[mrpt-topography] Fixed an old bug in <a class="el" href="group__mrpt__topography__grp.html#ga9c017d0f875ed7f8cd455ec0c5d7fe56" title="Reconstruct the path of a vehicle equipped with 3 RTK GPSs.">mrpt::topography::path_from_rtk_gps()</a> (and added new unit tests to avoid the same happening in the future) - <a href="http://code.google.com/p/mrpt/source/detail?r=r2637">r2637</a></li>
<li>Example: samples/bayesianTracking: Fixed an incorrect reset of all particles weight at each iteration (Thanks "parnurzeal" for noticing!)</li>
<li>Fixed memory leak when using SURF descriptors. Thanks "hochdorfer" for detecting and reporting the solution. - <a href="http://code.google.com/p/mrpt/source/detail?r=r2647">r2647</a></li>
<li>RawLogViewer: Wrong depth to grayscale conversion while displaying 3D range observations.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><br/>
 <hr/>
<p><a class="anchor" id="0.9.4"></a> </p>
<h2>Version 0.9.4 - (Version 1.0.0-Release_Candidate_2): Released 4-JUN-2011 (SVN 2546) </h2>
<ul>
<li>Changes in applications:<ul>
<li><a href="http://www.mrpt.org/Application:kf-slam">kf-slam</a>: Now supports two implementations 2D and 3D EKF-SLAM (it was always 3D SLAM previously).</li>
<li><a href="http://www.mrpt.org/Application:rawlog-grabber">rawlog-grabber</a>: Added "hokuyo_UXM.ini" to support HOKUYO UXM laser series.</li>
<li>mrpt-performance has been refactored into several smaller .cpp files. Having all in one big file lead to memory depletion when building in small machines (e.g. Debian MIPS &amp; S390 autobuilders).</li>
<li>New application: <a href="http://www.mrpt.org/Application:kinect-3d-view">kinect-3d-view </a>. It was formerly an example, now it's an application so it's much easier for everyone to try it without compile manually.</li>
<li>SceneViewer3D: Support for Stanford's PLY file format. See <a href="http://www.mrpt.org/Support_for_the_Stanford_3D_models_file_format_PLY">http://www.mrpt.org/Support_for_the_Stanford_3D_models_file_format_PLY</a></li>
<li><a href="http://www.mrpt.org/Application:2d-slam-demo">2d-slam-demo</a> can now simulate spurious readings.</li>
<li><a href="http://www.mrpt.org/Application:ReactiveNavigationDemo">ReactiveNavigationDemo</a>: New checkbox to enable generating navigation logs, viewable with navlog-viewer.</li>
<li><a href="http://www.mrpt.org/Application:rawlog-edit">rawlog-edit</a>: New operation "--list-images".</li>
</ul>
</li>
<li>MRPT libraries or "modules":<ul>
<li>mrpt-detectors is no longer marked as "experimental".</li>
<li>mrpt-monoslam is no longer shown in the graph of libraries since it's unmaintained.</li>
</ul>
</li>
<li>Build system:<ul>
<li>Embedded <a class="el" href="namespace_eigen.html" title="Namespace containing all symbols from the Eigen library.">Eigen</a> version updated to release <a class="el" href="namespace_eigen.html" title="Namespace containing all symbols from the Eigen library.">Eigen</a> 3.0.1 (May 30th 2011).</li>
<li>Linux/Mac: Don't enable BUILD_KINECT by default if libusb1-dev is not present.</li>
<li>Win64: Fixed building warnings and errors with MSVC9</li>
<li>MinGW: Fixed building.</li>
<li>Fixed compiling with MSVC 2005 (Patch by Z.P.Gaal)</li>
<li>Fixed compiling under MIPS/SPARC/S930/... due to a bug in Eigen3-beta (patch sent upstream and fixed in local copy).</li>
<li>Fixed new warnings detected by GCC 4.6.</li>
<li>Fixed build errors against latest changes in eigen3-beta4 (before their release version).</li>
<li>MSVC 2010: MRPT now uses standard "stdint.h" if provided by the compiler, instead of <a class="el" href="pstdint_8h.html">pstdint.h</a></li>
<li>OSX: Fixed all build errors (Thanks to Jérôme Monceaux, <a href="http://www.mrpt.org/node/618">http://www.mrpt.org/node/618</a> )</li>
<li>Automatic detection of SSE2 and SSE3 support in the CMake script.</li>
<li>Faster build with GCC thanks to changes in precompiled headers (build time cut by 25%-50%)</li>
</ul>
</li>
<li>New classes:<ul>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1math_1_1_model_search.html" title="Model search implementations: RANSAC and genetic algorithm.">mrpt::math::ModelSearch</a>: A RANSAC + Genetic model fitter (by Zoltan Gaal)</li>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1utils_1_1_p_l_y___importer.html" title="A virtual base class that implements the capability of importing 3D point clouds and faces from a fil...">mrpt::utils::PLY_Importer</a> &amp; <a class="el" href="classmrpt_1_1utils_1_1_p_l_y___exporter.html" title="A virtual base class that implements the capability of exporting 3D point clouds and faces to a file ...">mrpt::utils::PLY_Exporter</a>: Support for Stanford's PLY file format in different 3D point cloud classes. See also: <a href="http://www.mrpt.org/Support_for_the_Stanford_3D_models_file_format_PLY">http://www.mrpt.org/Support_for_the_Stanford_3D_models_file_format_PLY</a></li>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1system_1_1_c_generic_memory_pool.html" title="A generic system for versatile memory pooling.">mrpt::system::CGenericMemoryPool</a>: A system for efficient memory pooling.</li>
<li>[mrpt-obs] <a class="el" href="classmrpt_1_1slam_1_1_c_sin_cos_look_up_table_for2_d_scans.html" title="A smart look-up-table (LUT) of sin/cos values for 2D laser scans.">mrpt::slam::CSinCosLookUpTableFor2DScans</a>: A cache of sin/cos values. It's used in points maps and now inserting laser scans in a point cloud is ~3 times faster.</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_text_message_capable.html" title="Keeps a list of text messages which can be rendered to OpenGL contexts by graphic classes...">mrpt::opengl::CTextMessageCapable</a>: A refactoring of the capability to display text messages on opengl views.</li>
<li>[mrpt-hwdrivers] <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_ibeo_lux_e_t_h.html" title="This &quot;software driver&quot; implements the communication protocol for interfacing a Ibeo Lux laser scanner...">mrpt::hwdrivers::CIbeoLuxETH</a> a driver for Ibeo Lux laser scanners through Ethernet. Contributed by Jan Girlich, University of Hamburg.</li>
<li>Support for "reflectivity" maps and observations:<ul>
<li>[mrpt-obs] <a class="el" href="classmrpt_1_1slam_1_1_c_observation_reflectivity.html" title="Declares a class derived from &quot;CObservation&quot; that encapsules a single short-range reflectivity measur...">mrpt::slam::CObservationReflectivity</a></li>
<li>[mrpt-maps] <a class="el" href="classmrpt_1_1slam_1_1_c_reflectivity_grid_map2_d.html" title="A 2D grid map representing the reflectivity of the environment (for example, measured with an IR prox...">mrpt::slam::CReflectivityGridMap2D</a></li>
</ul>
</li>
<li>[mrpt-maps] <a class="el" href="structmrpt_1_1slam_1_1_c_log_odds_grid_map2_d.html" title="A generic provider of log-odds grid-map maintainance functions.">mrpt::slam::CLogOddsGridMap2D</a>, a new class due to a refactoring of <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a>.</li>
</ul>
</li>
<li>Changes in classes:<ul>
<li>[mrpt-bases] <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a> changes:<ul>
<li>Some methods have been optimized for use of SSE2/SSE3 functions, falling back to the (slower) OpenCV functions when it's not possible.</li>
<li>Implementation separated into different CImage_*.cpp files.</li>
<li>More tolerant dealing with builds without OpenCV: don't launch an exception until something really important can't be done.</li>
</ul>
</li>
<li>[mrpt-base] <a class="el" 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).">mrpt::poses::CPose3D</a> was too strict in checking that the rotation matrix is orthogonal: admisible threshold is now 1 (plus/minus)3e-3.</li>
<li>[mrpt-base] New method: <a class="el" href="classmrpt_1_1utils_1_1_c_thread_safe_queue.html#adb12ba857223a06ad976663b37aa6b98" title="Skip all old messages in the queue and directly return the last one (the most recent, at the bottom of the queue), or NULL if there is no message.">mrpt::utils::CThreadSafeQueue::get_lastest_purge_old()</a></li>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1synch_1_1_c_semaphore.html" title="A semaphore for inter-thread synchronization.">mrpt::synch::CSemaphore</a> now supports named semaphores in Linux too.</li>
<li>[mrpt-base] Graph-SLAM maps (mrpt::poses::CNetworkOfPoses) have a new field "edges_store_inverse_poses", taken into account in mrpt::poses::CNetworkOfPoses::dijkstra_nodes_estimate()</li>
<li>[mrpt-base] <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_quat.html" title="A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz).">mrpt::poses::CPose3DQuat</a> constructor from a <a class="el" 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).">mrpt::poses::CPose3D</a> is not explicit to avoid unintentional conversions.</li>
<li>[mrpt-hwdrivers] <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_kinect.html" title="A class for grabing &quot;range images&quot;, intensity images (either RGB or IR) and other information from an...">mrpt::hwdrivers::CKinect</a> changes:<ul>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_kinect.html#a6f9ef0ed138921c22961bf0b433e74e8" title="Changes the video channel to open (RGB or IR) - you can call this method before start grabbing or in ...">mrpt::hwdrivers::CKinect::setVideoChannel()</a>: New method (and .ini parameter) for switching between the RGB and IR channels for the intensity images.</li>
<li>The posibility of grabbing the IR channel is also now available in <a class="el" href="namespacemrpt_1_1hwdrivers.html#a9d0c0e836d0abcd45f253b11bc930641" title="Show to the user a list of possible camera drivers and creates and open the selected camera...">mrpt::hwdrivers::prepareVideoSourceFromUserSelection()</a> , the camera-calib application, etc...</li>
<li>libfreenect is now also supported in Windows.</li>
<li>An embedded version of libfreenect is used for both Linux/Windows, so it's not required anymore to download and build that project separately. Read <a href="http://www.mrpt.org/Kinect_and_MRPT">http://www.mrpt.org/Kinect_and_MRPT</a></li>
<li>Improved robustness and efficiency in grabbing.</li>
</ul>
</li>
<li>[mrpt-hwdrivers] Improvement in Kinect Linux driver (libfreenect), avoiding intensive usage of critical sections (Thanks, "Gonzales" - see: <a href="http://www.mrpt.org/node/491">http://www.mrpt.org/node/491</a> )</li>
<li>[mrpt-hwdrivers] Kinect: Embedded libfreenect library updated to latest GIT revision (31/MAY/2011).</li>
<li>[mrpt-hwdrivers] <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_hokuyo_u_r_g.html" title="This software driver implements the protocol SCIP-2.0 for interfacing HOKUYO URG, UTM and UXM laser s...">mrpt::hwdrivers::CHokuyoURG</a> now support ethernet connection (tested in HOKUYO UXM series)[JRRS].</li>
<li>[mrpt-gui] <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> now emits a new event. See <a class="el" href="classmrpt_1_1gui_1_1mrpt_event3_d_window_grab_image_file.html" title="An event sent by a CDisplayWindow3D window when an image is saved after enabling this feature with CD...">mrpt::gui::mrptEvent3DWindowGrabImageFile</a></li>
<li>[mrpt-gui] Creation and destruction of windows have a timeout, which is not configurable via an optional environment variable "MRPT_WXSUBSYS_TIMEOUT_MS" (milliseconds). This is useful to increase that timeout if debugging with valgrind.</li>
<li>[mrpt-maps] mrpt::slam::CPointsMaps: Inserting 2D laser scans is now ~3 times faster (thanks to <a class="el" href="classmrpt_1_1slam_1_1_c_sin_cos_look_up_table_for2_d_scans.html" title="A smart look-up-table (LUT) of sin/cos values for 2D laser scans.">mrpt::slam::CSinCosLookUpTableFor2DScans</a>).</li>
<li>[mrpt-obs] <a class="el" href="classmrpt_1_1slam_1_1_c_observation3_d_range_scan.html#a0b06693a67ecd4044917ed914aad7195" title="Compute the 3D points coordinates from the depth image (rangeImage) and the depth camera camera param...">mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImage</a>:<ul>
<li>Now uses by default a LUT to speed up (~10%) the conversion of range images to 3D point clouds in Kinect.</li>
<li>Addition of SSE-optimized code for point cloud proyection when using the LUT.</li>
</ul>
</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">mrpt::opengl::COpenGLViewport</a> now has a special "image mode" which makes very easy to render images to opengl windows efficiently. See the example "opengl_video_viewport_demo".</li>
<li>[mrpt-opengl] <a class="el" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">mrpt::opengl::CTexturedObject</a> (+derived classes) now are more efficient creating OpenGL's texture mipmaps.</li>
<li>[mrpt-slam] <a class="el" 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 ...">mrpt::slam::CICP</a> has a new option: skip_cov_calculation that can save some time in some cases.</li>
<li>[mrpt-vision] <a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html#a46f159bb017345af43d1f8c1e41d7270" title="Simulates a noisy bearing-range observation of all the beacons (landamrks with type glBeacon) in the ...">mrpt::slam::CLandmarksMap::simulateRangeBearingReadings()</a> now also simulates spurious readings.</li>
<li>[mrpt-vision] <a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html" title="A class for storing a map of 3D probabilistic landmarks.">mrpt::slam::CLandmarksMap</a> now has new fields in the insertionOptions and likelihoodOptions to allow users control the exact parameters of SIFT detectors/descriptors.</li>
<li>[mrpt-vision] Added missing rbegin() and rend() methods to <a class="el" href="classmrpt_1_1vision_1_1_c_feature_list.html" title="A list of visual features, to be used as output by detectors, as input/output by trackers, etc.">mrpt::vision::CFeatureList</a></li>
<li>[mrpt-vision] Backward incompatible change in the ABI/API of <a class="el" href="classmrpt_1_1vision_1_1_c_feature_extraction.html#aaa28b272b6a781352e0a50e09ca9c740" title="Extract features from the image based on the method defined in TOptions.">mrpt::vision::CFeatureExtraction::detectFeatures()</a>: The optional <em>mask</em> is now passed as a pointer instead of a const ref to avoid linking errors in MSVC.</li>
<li>[mrpt-reactivenav] Clean up of code and smarter detection of mismatches in precomputed collision grid files.</li>
<li>[mrpt-bayes] Kalman filter: If the prediction heuristics in <a class="el" href="classmrpt_1_1bayes_1_1_c_kalman_filter_capable.html#a505fa1e6eb8a300e0e1171a26b4f5b15" title="This will be called before OnGetObservationsAndDataAssociation to allow the application to reduce the...">mrpt::bayes::CKalmanFilterCapable::OnPreComputingPredictions()</a> fails it doesn't raise an exception anymore but recompute all the required matrices, sending a performance warning to console.</li>
</ul>
</li>
<li>Changes in examples:<ul>
<li>hokuyo_laser_test. Now it's possible to choose between USB and Ethernet connection.</li>
</ul>
</li>
<li>New examples:<ul>
<li>opengl_video_demo: A demo of opengl textures from a video stream.</li>
<li>opengl_video_viewport_demo: A demonstration of the new viewport "image mode".</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>[mrpt-opengl] Fixed wrong normalization of proyected coordinates in mrpt::opengl::CRenderizable::TRenderInfo::projectPoint()</li>
<li>[mrpt-reactivenav] Fixed an ancient bug in <a class="el" href="classmrpt_1_1reactivenav_1_1_c_parameterized_trajectory_generator.html#a0b5412b363f6c18387426ba4099d4891" title="The &quot;lambda&quot; function, see paper for info.">mrpt::reactivenav::CParameterizedTrajectoryGenerator::lambdaFunction()</a> that degraded the use of some PTGs.</li>
<li>[mrpt-gui] Fixed an old bug that lead to SEGFAULTs in the wxWidgets thread if an exception suddenly closed the program without that thread having time to clean exit.</li>
<li>Fixed behavior of <a class="el" href="group__mrpt__system__os.html#ga49ca087d2e21e81adb051d856f1827c4" title="An OS-independent version of kbhit, which returns true if a key has been pushed.">mrpt::system::os::kbhit()</a> in Linux.</li>
<li>Fixed a kind of memory-leak in OpenGL due to the particular way of reserving texture names (seem to only affect some OpenGL implementations, but it's fixed now).</li>
<li>Fixed another OpenGL memory-leak happening when destructors of display lists were called from a different thread than the rendering thread (where they were created).</li>
<li>Octree-based rendering of point cloud didn't discard all invisible nodes, not doing an optimal rendering.</li>
<li>Fixed situations were RTTI registrations were not updated before usage, leading to "uregistered class?" exceptions.</li>
<li>[mrpt-bayes] Kalman filter: Fixed wrong use of use_analytic_transition_jacobian instead of use_analytic_observation_jacobian (thanks "bgrigorian"!)</li>
<li>[mrpt-base] Fixed out of buffer access in <a class="el" href="classmrpt_1_1math_1_1_c_sparse_matrix.html#ad71ad9ee625a046b7fd90e40aebd9aa1" title="Static method to convert a &quot;cs&quot; structure into a dense representation of the sparse matrix...">mrpt::math::CSparseMatrix::cs2dense()</a> when the sparse matrix still is in the triplet format.</li>
<li>pf-localization: Fixed wrong execution of batchs of experiments when "experimentRepetitions" &gt; 1. Thanks to yyfeng88625 for noticing! (<a href="http://www.mrpt.org/node/694">http://www.mrpt.org/node/694</a> )</li>
</ul>
</li>
</ul>
<p><br/>
 <hr/>
 <a class="anchor" id="0.9.3"></a> </p>
<h2>Version 0.9.3 - (Version 1.0.0-Release_Candidate_1): Released 18-DEC-2010 (SVN 2338) </h2>
<ul>
<li><b>Most important changes:</b><ul>
<li>MRPT now relies entirely on <a class="el" href="namespace_eigen.html" title="Namespace containing all symbols from the Eigen library.">Eigen</a> (version 3) for matrix and vector classes.</li>
<li>Support for Microsoft Xbox Kinect. See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_kinect.html" title="A class for grabing &quot;range images&quot;, intensity images (either RGB or IR) and other information from an...">mrpt::hwdrivers::CKinect</a> and this page: <a href="http://www.mrpt.org/Kinect_and_MRPT">http://www.mrpt.org/Kinect_and_MRPT</a></li>
<li>Many new functions in <a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> (by F.A. Moreno).</li>
<li>More efficient rendering of all <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes thru automatic caching of OpenGL display lists.</li>
</ul>
</li>
<li><b>Detailed list of changes:</b><ul>
<li>Changes related to mathematics, matrices and containers and the port to <a class="el" href="namespace_eigen.html" title="Namespace containing all symbols from the Eigen library.">Eigen</a>:<ul>
<li>All is now based on the <a class="el" href="namespace_eigen.html" title="Namespace containing all symbols from the Eigen library.">Eigen</a> library, v3. See <a href="http://www.mrpt.org/Matrices_vectors_arrays_and_Linear_Algebra_MRPT_and_Eigen_classes">this page</a> for a more complete description of all the changes and the reasons of this big change.</li>
<li>Matrices constructors from poses (TPose2D,...) now are explicit. Example: Previous code "CMatrixDouble31 m = myPose2D;" won't build now, should be: "CMatrixDouble31 m = CMatrixDouble31(myPose2D);"</li>
<li>CVectorFloat and CVectorDouble are not synonymous with <a class="el" href="namespacemrpt.html#aa271572e3985202e030758bfd54a02e1">mrpt::vector_float</a> and <a class="el" href="namespacemrpt.html#a4a6aab2c98368ca6b554c04f8fe84cfb">mrpt::vector_double</a>.</li>
<li>mrpt::math::meanAndCov() overloads have been separated into: <a class="el" href="namespacemrpt_1_1math.html#a229b0d2e976b1fb823f13355434ac4fa" title="Computes the mean vector and covariance from a list of values given as a vector of vectors...">meanAndCovVec()</a> and <a class="el" href="namespacemrpt_1_1math.html#ae8d48c1203173296453a12b174ed932c" title="Computes the mean vector and covariance from a list of samples in an NxM matrix, where each row is a ...">meanAndCovMat()</a></li>
<li>method <a class="el" href="eigen__plugins_8h.html#a7a11472b9fe01428f7a3a641deede260" title="Make the matrix an identity matrix (the diagonal values can be 1.0 or any other value)">unit()</a> in matrices was inconsistent between fixed and dynamic sized matrices. It's now unified (see Eigen::Matrix::unit)</li>
<li>Types <a class="el" href="namespacemrpt.html#aa271572e3985202e030758bfd54a02e1">mrpt::vector_float</a> and std::vector&lt;float&gt; (or the "double" versions) are not interchangeable any more. Read more on this in the link above.</li>
<li>These examples have been removed: benchmark-matrix, math_iterators_test, matrix_views</li>
</ul>
</li>
<li>New application:<ul>
<li><a href="http://www.mrpt.org/Application:kinect-3d-slam">kinect-3d-slam</a>.</li>
</ul>
</li>
<li>Changes in applications:<ul>
<li>SceneViewer3D: Now has new options to visualize and tune the octree structures of point clouds.</li>
<li><a href="http://www.mrpt.org/Application:GridmapNavSimul">GridmapNavSimul</a>: Now can load a custom grid map and save rawlogs in the two existing formats.</li>
<li><a href="http://www.mrpt.org/Application:pf-localization">pf-localization</a>: Now can also handle observations-only rawlogs.</li>
</ul>
</li>
<li>Deleted classes:<ul>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_consistent_observation_alignment.html" title="An algorithm for globally, consistent alignment of a sequence of observations.">mrpt::slam::CConsistentObservationAlignment</a>: It implemented the Lu &amp; Milios algorithm, now superseded by graph-slam methods. See the <a class="el" href="namespacemrpt_1_1graphslam.html" title="SLAM methods related to graphs of pose constraints.">mrpt::graphslam</a> namespace.</li>
<li>mrpt::utils::CImageFloat: For real images with float pixels, it's better to directly use OpenCV. For matrices, there're many other matrix classes better suited for that. There is now also a new explicit constructor in <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a> able of converting matrices into images, covering the possibly unique utility of the deleted class.</li>
</ul>
</li>
<li>Changes in classes:<ul>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window.html#a78f4651d33115bf1421ddb0a94e2b338" title="Show a given color or grayscale image on the window and print a set of points on it.">mrpt::gui::CDisplayWindow::showImageAndPoints()</a> now also displays the index of the feature (if required).</li>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_feature.html" title="A generic 2D feature from an image, extracted with CFeatureExtraction Each feature may have one or mo...">mrpt::vision::CFeature</a> now has new members:<ul>
<li>nTimesSeen, nTimesNotSeen, nTimesLastSeen. Counters for performing tracking of the feature visibility.</li>
<li>initialDepth. The computed 3D distance from the camera to the 3D real feature the first time it was seen.</li>
<li>detph. The computed 3D distance from the camera to the 3D real feature.</li>
<li>p3D. The 3D coordinates of this feature when projected into 3D space.</li>
<li>multiScales. A vector containing the set of different scales at which the SIFT-like descriptor must be computed.</li>
<li>multiOrientations. For each scale in multiScales there is a vector containing the main orientations of the feature.</li>
<li>descriptors.multiSIFTDescriptors. For each scale and orientation there is a SIFT-like descriptor.</li>
<li>multiHashCoeffs. For each descriptor, a 3-d vector containing its Hash coefficients computed through the Haar wavelets.</li>
<li>hasDescriptorMultiSIFT(). Indicates if the multi-resolution SIFT-like descriptor has been computed for this feature.</li>
</ul>
</li>
<li>New method <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html#afd69c044e6364fc3341dfa3abd3930b5" title="Get the average Frames Per Second (FPS) value from the last 250 rendering events.">mrpt::gui::CDisplayWindow3D::getRenderingFPS()</a></li>
<li>Both <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html" title="A cloud of points, all with the same color or each depending on its value along a particular coordina...">mrpt::opengl::CPointCloud</a> and <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud_coloured.html" title="A cloud of points, each one with an individual colour (R,G,B).">mrpt::opengl::CPointCloudColoured</a> are now much more optimized to render huge point clouds:<ul>
<li>Smart rendering based on Octrees to determine which volumes are within the frustum.</li>
<li>For each octree volume, smart decimation of the points from the points-to-eye distance: why rendering 1e6 points that will all be seen in a 10x10 pixel area?</li>
</ul>
</li>
<li>New method <a class="el" href="classmrpt_1_1utils_1_1_c_client_t_c_p_socket.html#a85ef0039ac640279470fe94a02701616" title="Return the number of bytes already in the receive queue (they can be read without waiting)...">mrpt::utils::CClientTCPSocket::getReadPendingBytes()</a></li>
<li>New method <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_scene.html#ac0bf8147e3339b923b058ad5c5b2ffc2" title="Recursive depth-first visit all objects in all viewports of the scene, calling the user-supplied func...">mrpt::opengl::COpenGLScene::visitAllObjects()</a></li>
<li>Many <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes now are derived from a display-list-cached base class (<a class="el" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html" title="A renderizable object suitable for rendering with OpenGL&#39;s display lists.">mrpt::opengl::CRenderizableDisplayList</a>)</li>
<li><a class="el" 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...">mrpt::utils::CStream</a> now has two new methods (<a class="el" href="classmrpt_1_1utils_1_1_c_stream.html#ab3f8382b9a971abc79414464fffc7937" title="Reads a sequence of elemental datatypes, taking care of reordering their bytes from the MRPT stream s...">mrpt::utils::CStream::ReadBufferFixEndianness</a> &amp; <a class="el" href="classmrpt_1_1utils_1_1_c_stream.html#ae229ab566ba2b9e6d2c39e32c2a9ecab" title="Writes a sequence of elemental datatypes, taking care of reordering their bytes from the running arch...">mrpt::utils::CStream::WriteBufferFixEndianness</a>) to correctly handle arrays of elemental data types so they are saved in MRPT endianness standard (see <a href="http://www.mrpt.org/Serialization">http://www.mrpt.org/Serialization</a>).</li>
</ul>
</li>
<li>Changes in functions:<ul>
<li><a class="el" href="group__mrpt__vision__grp.html#gad073bd2b1235df6a75e73a72df701204" title="Find the matches between two lists of features which must be of the same type.">mrpt::vision::matchFeatures()</a>. Implemented a new method for managing ambiguous matches, now taking into account which of the conflicting matches is the most probable.</li>
</ul>
</li>
<li>New structures/classes:<ul>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_kinect.html" title="A class for grabing &quot;range images&quot;, intensity images (either RGB or IR) and other information from an...">mrpt::hwdrivers::CKinect</a>: Support for grabbing XBox Kinect. Read the class documentation for more details.</li>
<li>TMultiResDescMatchOptions. Struct containing the options when matching multi-resolution SIFT-like descriptors.</li>
<li>TMultiResDescOptions. Struct containing the options when computing the multi-resolution SIFT-like descriptors.</li>
<li><a class="el" href="structmrpt_1_1aligned__containers.html" title="Helper types for STL containers with Eigen memory allocators.">mrpt::aligned_containers</a>: A helper template to ease the declaration of STL containers with the correct <a class="el" href="namespace_eigen.html" title="Namespace containing all symbols from the Eigen library.">Eigen</a> aligned allocators.</li>
<li>mrpt::opengl::CRenderizable::TRenderInfo: Helper struct to help OpenGL objects to render more efficiently by predicting their rendering conditions</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html" title="A renderizable object suitable for rendering with OpenGL&#39;s display lists.">mrpt::opengl::CRenderizableDisplayList</a>, a class to automate the caching of OpenGL objects via Display Lists.</li>
</ul>
</li>
<li>New functions:<ul>
<li><a class="el" href="group__multidesc__desc.html#ga95a6e927520f9a71ede6e866de72ec97" title="Computes the gradient of certain pixel within the image.">mrpt::vision::computeGradient()</a>. Computes the gradient of certain pixel within the image.</li>
<li><a class="el" href="group__multidesc__desc.html#ga5138d7cd167f43089bc8cf87c37a6704" title="Computes the main orientations (within 80% of the peak value of orientation histogram) of a certain p...">mrpt::vision::computeMainOrientations()</a>. Computes the main orientations (within 80% of the peak value of orientation histogram) of a certain point within an image (for using in SIFT-based algorithms)</li>
<li><a class="el" href="group__multidesc__desc.html#ga189b8b1dd1a693d55d1f9618440ac0b0" title="Computes the SIFT-like descriptor of a certain point within an image at the base scale, i.e.">mrpt::vision::computeHistogramOfOrientations()</a>. Computes the SIFT-like descriptor of a certain point within an image at the base scale, i.e. its rotated orientation histogram.</li>
<li><a class="el" href="group__multidesc__desc.html#gad6ff934e65fba3238dd95d9a6b7d849c" title="Inserts the orientation value of a certain pixel within the keypoint neighbourhood into the histogram...">mrpt::vision::interpolateHistEntry()</a>. Inserts the orientation value of a certain pixel within the keypoint neighbourhood into the histogram of orientations.</li>
<li><a class="el" href="group__multidesc__desc.html#ga51bfd8c21f7419e09d4dfd48f809eef5" title="Computes the multi-resolution SIFT-like descriptor of a set of matched features.">mrpt::vision::computeMultiResolutionDescriptors()</a>. Computes the multi-resolution SIFT-like descriptor of a set of matched features</li>
<li><a class="el" href="group__multidesc__desc.html#ga4c87a8b7a04a618213e904d41c901d78" title="Matches two CFeatureList containing mulit-resolution descriptors.">mrpt::vision::matchMultiResolutionFeatures()</a>. Matches two CFeatureList containing mulit-resolution descriptors.</li>
<li><a class="el" href="group__multidesc__desc.html#gaae2d9ac74878f370cd26a17cf4a14725" title="Computes the initial and final scales where to look when finding a match between multi-resolution fea...">mrpt::vision::setProperScales()</a>. Computes the initial and final scales where to look when finding a match between multi-resolution features.</li>
<li><a class="el" href="group__mrpt__vision__grp.html#ga91460061069d5c5223ca96e997f0023a" title="Calculates the Sum of Absolutes Differences (range [0,1]) between two patches.">mrpt::vision::computeSAD()</a>. Calculates the Sum of Absolutes Differences (range [0,1]) between two patches.</li>
<li><a class="el" href="group__multidesc__desc.html#gaaea42c5f805a29536003a5211fa82683" title="Computes more multi-resolution SIFT-like descriptors for a feature using its position in a new image...">mrpt::vision::computeMoreDescriptors()</a>. Computes and adds more multi-resolution descriptor to certain feature at lower or upper scales.</li>
<li><a class="el" href="group__multidesc__desc.html#gaae2d9ac74878f370cd26a17cf4a14725" title="Computes the initial and final scales where to look when finding a match between multi-resolution fea...">mrpt::vision::setProperScales()</a>. Determines the range of scales where to look according to the depth of the involved features.</li>
<li><a class="el" href="group__mrpt__thread.html#ga336f5607e34b84bc7ac208068aa8e51e" title="Creates a new thread from a function (or static method) with one generic parameter.">mrpt::system::createThread</a> now also has overloaded versions for the thread functions having arguments passed by reference.</li>
</ul>
</li>
<li>New examples:<ul>
<li>keypoint_matching. It contains three different methods:<ul>
<li>Feature extraction and stereo matching process from a pair of images. It show stadistics about the number of detected and matched features for each method.</li>
<li>Feature extraction, stereo matching and re-projection to 3D from a pair of images.</li>
<li>Feature extraction and computation of the matching score for each feature in list1 and for each in list2 with four different methods: FAST, NCC, SIFT and SURF. Graphical results are shown.</li>
</ul>
</li>
<li>octree_render_huge_pointcloud</li>
</ul>
</li>
<li><b>BUG FIXES:</b><ul>
<li>Serialization dumps of many objects (observations, maps,...) should be now compatible between big and little endian architectures.</li>
<li>Doing a clear() on <a class="el" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html" title="A map of 2D/3D points with individual colours (RGB).">mrpt::slam::CColouredPointsMap</a> didn't actually clear the internal vectors for RGB+Distance values.</li>
<li><a class="el" href="group__network__grp.html#ga7fcf57ef73acb52f5423ccc4384bd7e4" title="Resolve a server address by its name, returning its IP address as a string - This method has a timeou...">mrpt::utils::net::DNS_resolve_async</a> didn't work properly.</li>
<li>RawlogViewer, module "Raw-map": It didn't display or save the robot path for observations-only rawlogs.</li>
<li>Fixed exception when rendering a <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html" title="A cloud of points, all with the same color or each depending on its value along a particular coordina...">mrpt::opengl::CPointCloud</a> with no points in it.</li>
<li>Fixed bad computation of SAD in <a class="el" href="group__mrpt__vision__grp.html#gad073bd2b1235df6a75e73a72df701204" title="Find the matches between two lists of features which must be of the same type.">mrpt::vision::matchFeatures()</a> because bad usage of IplImage fields <em>width</em> and <em>widthstep</em>.</li>
<li>Fixed vision::CImage::update_patch(). Row and column checkings of the patch position were wrongly related to image width and height, respectively.</li>
<li>Fixed CVE-2010-0280: Array index error in Jan Eric Kyprianidis lib3ds 1.x, as used in Google SketchUp 7.x before 7.1 M2, allows remote attackers to cause a denial of service (memory corruption) or possibly execute arbitrary code via crafted structures in a 3DS file, probably related to mesh.c. (Thanks to Silvio Cesare for reporting here: <a href="https://bugzilla.redhat.com/show_bug.cgi?id=650786">https://bugzilla.redhat.com/show_bug.cgi?id=650786</a> ).</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><br/>
 <hr/>
 <br/>
</p>
<p><a class="anchor" id="0.9.2"></a> </p>
<h2>Version 0.9.2: 27-OCT-2010 </h2>
<ul>
<li><b>Most important changes:</b><ul>
<li>Basic support for Graph-SLAM. Among others, see mrpt::poses::CNetworkOfPoses, the new namespace <a class="el" href="namespacemrpt_1_1graphslam.html" title="SLAM methods related to graphs of pose constraints.">mrpt::graphslam</a> and the program <a href="http://www.mrpt.org/Application:graph-slam">graph-slam</a></li>
<li>First working version of Sparse Bundle-Adjustment (see <a class="el" href="group__bundle__adj.html#gabb5e8247d164906bce57a3c05b001953" title="Sparse Levenberg-Marquart solution to bundle adjustment - optimizes all the camera frames &amp; the landm...">mrpt::vision::bundle_adj_full</a>).</li>
<li>New hardware supported: Phidget kits &amp; Fiber Optic Gyro KVH DSP3000 (both contributed by Adrien Barral, Robopec).</li>
<li>Tons of performance optimizations, mostly in geometry classes.</li>
<li><b>Backward incompatible changes:</b><ul>
<li>In &lt;=0.9.1, <a class="el" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">mrpt::poses::CPose2D</a> for (x,y,phi) also contained a "z" field, which has been removed now. It didn't make sense at all but was there for implementation convenience. In the new implementation of poses there's no need anymore for that dummy "z" coordinate.</li>
</ul>
</li>
</ul>
</li>
<li><b>Detailed list of changes:</b><ul>
<li>New applications:<ul>
<li><a href="http://www.mrpt.org/Application:carmen2rawlog">carmen2rawlog</a>: A converter from CARMEN robotics logs to binary Rawlog dataset files.</li>
<li><a href="http://www.mrpt.org/Application:carmen2simplemap">carmen2simplemap</a>: A converter from CARMEN robotics logs to binary "simplemap" files.</li>
<li><a href="http://www.mrpt.org/Application:graph-slam">graph-slam</a>: A central application for all Graph-SLAM methods and tools.</li>
</ul>
</li>
<li>Changes in applications:<ul>
<li><a href="http://www.mrpt.org/Application:rawlog-edit">rawlog-edit</a>: More operations supported.</li>
<li><a href="http://www.mrpt.org/Application:mrpt-performance">mrpt-performance</a>: Added command-line arguments to filter what tests to run, and more tests added.</li>
<li>RawLogViewer: Can now build "raw maps" from datasets in the "observations-only" format.</li>
<li><a href="http://www.mrpt.org/Application:icp-slam">icp-slam</a> and <a href="http://www.mrpt.org/Application:rbpf-slam">rbpf-slam</a> now accept a second command-line argument for the dataset (rawlog) to load.</li>
<li><a href="http://www.mrpt.org/Application:map-partition">map-partition</a>: Fixed generation of a valid MATLAB script to easily visualize the results (Thanks Ricardo Vazquez Martin for reporting!).</li>
</ul>
</li>
<li>Changes in build system / compiling:<ul>
<li>By default, MRPT_ALWAYS_CHECKS_DEBUG_MATRICES is OFF. This allow programs to run faster in non Debug builds.</li>
<li>Doxygen documentation: More macros expanded while generating docs: now docs are also generated for smart pointers and for RTTI &amp; serialization stuff.</li>
<li>Previous header &lt;<a class="el" href="math__mrpt_8h.html">mrpt/math_mrpt.h</a>&gt; renamed &lt;<a class="el" href="math_8h.html">mrpt/math.h</a>&gt;. The old one still remains (probably until MRPT 1.0.0), but raises a warning on usage.</li>
</ul>
</li>
<li>New classes:<ul>
<li>New sensor driver for Phidget kit (see <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_phidget_interface_kit_proximity_sensors.html" title=": An interface for the phidget Interface kit board (1018).">mrpt::hwdrivers::CPhidgetInterfaceKitProximitySensors</a>), contributed by Adrien Barral (Robopec).</li>
<li>New sensor driver for Fiber Optic Gyro KVH DSP3000 (see <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_gyro_k_v_h_d_s_p3000.html" title="A class for interfacing KVH DSP 3000 gyroscope with an assynchronous serial communication (product SN...">mrpt::hwdrivers::CGyroKVHDSP3000</a>), contributed by Adrien Barral (Robopec).</li>
<li>mrpt::math::CDirectedTree template for directed tree-like graphs. Includes generic depth-first &amp; breath-first visitors.</li>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_undistort_map.html" title="Use this class to undistort images if the same distortion map is used over and over again...">mrpt::vision::CUndistortMap</a>, a class for efficiently undistorting sequences of images with the same camera parameters.</li>
<li>New PDF classes for "information" (inverse covariance) forms:<ul>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose_p_d_f_gaussian_inf.html" title="A Probability Density function (PDF) of a 2D pose  as a Gaussian with a mean and the inverse of the c...">mrpt::poses::CPosePDFGaussianInf</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_gaussian_inf.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose  as a Gaussian des...">mrpt::poses::CPose3DPDFGaussianInf</a></li>
</ul>
</li>
<li>Data types for graph SLAM (only two of them existed before, and now they are all classes and support serialization):<ul>
<li>mrpt::poses::CNetworkOfPoses2D</li>
<li>mrpt::poses::CNetworkOfPoses3D</li>
<li>mrpt::poses::CNetworkOfPoses2DInf</li>
<li>mrpt::poses::CNetworkOfPoses3DInf</li>
<li>mrpt::poses::CNetworkOfPoses2DCov</li>
<li>mrpt::poses::CNetworkOfPoses3DCov</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1utils_1_1map__as__vector.html" title="A STL-like container which looks and behaves (almost exactly) like a std::map&lt;&gt; but is implemented as...">mrpt::utils::map_as_vector</a> a vector-based implementation of a <a class="el" href="classstd_1_1map.html" title="STL class.">std::map</a>-like container. It can be used as a map implementation optionally in the template mrpt::poses::CNetworkOfPoses&lt;&gt;</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_text_file_lines_parser.html" title="A class for parsing text files, returning each non-empty and non-comment line, along its line number...">mrpt::utils::CTextFileLinesParser</a></li>
<li>New event for GUI windows: <a class="el" href="classmrpt_1_1gui_1_1mrpt_event_mouse_down.html" title="An event sent by a window upon a mouse click, giving the (x,y) pixel coordinates.">mrpt::gui::mrptEventMouseDown</a></li>
<li>New metaprogramming class: <a class="el" href="structmrpt_1_1utils_1_1_t_enum_type.html" title="A helper class that can convert an enum value into its textual representation, and viceversa...">mrpt::utils::TEnumType</a>, allows converting between numerical and symbolic text values for enum types.</li>
<li>New SE(2) and SE(3) geometry helper classes. See <a class="el" href="group__poses__grp.html#ga899554619c1db3f2618f8341356ed79f" title="A helper class for SE(2) and SE(3) geometry-related transformations, on-manifold optimization Jacobia...">mrpt::poses::SE_traits</a></li>
<li>Helper templates to handle poses and pose PDFs at build time. See &lt;mrpt/poses/helper_templates.h&gt;</li>
</ul>
</li>
<li>Changes in classes:<ul>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_hokuyo_u_r_g.html" title="This software driver implements the protocol SCIP-2.0 for interfacing HOKUYO URG, UTM and UXM laser s...">mrpt::hwdrivers::CHokuyoURG</a> has new configuration variable "HOKUYO_HS_mode" to enable the high sensitivity mode.</li>
<li>removeObservationsByTimestamp() removed from mrpt::slam::CheightGridMap2D, which now doesn't have the "sliding window" insertion method. It was too memory intensive for large maps.</li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose_or_point.html" title="The base template class for 2D &amp; 3D points and poses.">mrpt::poses::CPoseOrPoint</a>, <a class="el" href="classmrpt_1_1poses_1_1_c_pose.html" title="A base class for representing a pose in 2D or 3D.">mrpt::poses::CPose</a> and <a class="el" href="classmrpt_1_1poses_1_1_c_point.html" title="A base class for representing a point in 2D or 3D.">mrpt::poses::CPoint</a> are now templates and use the CRTP pattern instead of virtual functions, increasing the performance of all the derived classes.</li>
<li>mrpt::poses::CNetworkOfPoses has many improvements and new methods (see its documentation).</li>
<li>mrpt::math::CDijkstra:<ul>
<li>Algorithm is now much faster (eg: 70x times faster for graphs of 4K nodes &amp; 60K arcs).</li>
<li>Many changes in its interface, including new feedback functors, support for returning the built tree and many handy typedef's.</li>
</ul>
</li>
<li>Added a new type <a class="el" href="namespacemrpt_1_1utils.html#a718b4f99645b7e9f6501c9b7bb2a2fe7" title="The type for node IDs in graphs of different types.">mrpt::utils::TNodeID</a>, used in graph-related classes: mrpt::math::CDirectedGraph, mrpt::math::CDijkstra</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html" title="A cloud of points, all with the same color or each depending on its value along a particular coordina...">mrpt::opengl::CPointCloud</a> &amp; <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud_coloured.html" title="A cloud of points, each one with an individual colour (R,G,B).">mrpt::opengl::CPointCloudColoured</a> now have an option to draw smoothed points (see <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html#a25d0c42df8cc9f9a3e35e4f5e143e552">mrpt::opengl::CPointCloud::enablePointSmooth</a>).</li>
<li><a class="el" href="structmrpt_1_1utils_1_1_t_colorf.html" title="A RGB color - floats in the range [0,1].">mrpt::utils::TColorf</a>: New explicit copy constructor from a <a class="el" href="structmrpt_1_1utils_1_1_t_color.html" title="A RGB color - 8bit.">mrpt::utils::TColor</a></li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_renderizable.html" title="The base class of 3D objects that can be directly rendered through OpenGL.">mrpt::opengl::CRenderizable</a>: Many "set" methods that returned "void" now return a reference to "this" so several calls can be chained (e.g. obj.setColor(...).setScale(1.0) )</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> doesn't report ALT+Enter as a keystroke event anymore.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_base_g_u_i_window.html" title="The base class for GUI window classes.">mrpt::gui::CBaseGUIWindow</a> has new methods (implemented in all derived classes):<ul>
<li>getLastMousePosition()</li>
<li>setCursorCross()</li>
</ul>
</li>
<li>New method <a class="el" href="classmrpt_1_1utils_1_1_c_time_logger.html#afe30403a0c0f48a614c27aa871243bc2" title="Return the mean execution time of the given &quot;section&quot;, or 0 if it hasn&#39;t ever been called &quot;enter&quot; w...">mrpt::utils::CTimeLogger::getMeanTime</a></li>
<li><a class="el" href="structmrpt_1_1vision_1_1_t_sequence_feature_observations.html" title="A complete sequence of observations of features from different camera frames (poses).">mrpt::vision::TSequenceFeatureObservations</a> has load/save methods to text files.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">mrpt::utils::TCamera</a> now has setter methods.</li>
<li>New method: <a class="el" href="classmrpt_1_1math_1_1_c_sparse_matrix_template.html#a968bcd8ff0c21e113c614b7c2655b551" title="Inserts submatrix at a given location.">mrpt::math::CSparseMatrixTemplate::insertMatrix()</a></li>
<li>New method: mrpt::math::CArrayNumeric::slice()</li>
<li>New method: <a class="el" href="classmrpt_1_1utils_1_1_c_image.html#af19a598956af3139b56906347f0ce3b0" title="Copies from another image, and, if that one is externally stored, the image file will be actually loa...">mrpt::utils::CImage::copyFromForceLoad()</a></li>
<li><a class="el" 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).">mrpt::poses::CPose3D</a>:<ul>
<li>Much faster operations, as long as yaw(), pitch() &amp; roll() are not explicitly called. These 3 angles are now not computed until really requested by the user, then cached.</li>
<li>New SE3 Lie algebra methods: <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d.html#a5a428183c43efbd6d11fdf1125900eb9" title="Exponentiate a Vector in the SE(3) Lie Algebra to generate a new CPose3D (static method).">mrpt::poses::CPose3D::exp()</a>, <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d.html#aaa3c171a7d2314b99fef5fa04027a974" title="Take the logarithm of the 3x4 matrix defined by this pose, generating the corresponding vector in the...">mrpt::poses::CPose3D::ln()</a>, ...</li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d.html#aaabe44aa147e5391009051b49a6d524e" title="An alternative, slightly more efficient way of doing  with G and L being 3D points and P this 6D pose...">mrpt::poses::CPose3D::composePoint()</a> now has an optional flag to compute faster, approximate Jacobians (for small rotations only!).</li>
<li>Methods composePoint() and inverseComposePoint() now can also compute the Jacobian with respect to se3 (the tangent space of SE(3) at a given pose).</li>
<li>New methods: setFrom12Vector(), getAs12Vector()</li>
</ul>
</li>
<li>New method: <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_serial_port.html#ad104282d392e65166aec2cd082d7126d" title="Reads one text line from the serial port in POSIX &quot;canonical mode&quot;.">mrpt::hwdrivers::CSerialPort::ReadString</a></li>
<li>All matrices: New methods:<ul>
<li><a class="el" href="eigen__plugins_8h.html#a7b88b312dc3827120dbfc60da344625d" title="Transpose.">t()</a> (for transpose, apart of the old ~ operator)</li>
<li><a class="el" href="eigen__plugins_8h.html#a5b52acfbd9696a318035334cbbad49c1">multiply_A_skew3()</a>.</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_gas_concentration_grid_map2_d.html" title="CGasConcentrationGridMap2D represents a PDF of gas concentrations over a 2D area.">mrpt::slam::CGasConcentrationGridMap2D</a> now implements correctly the Kernel DM &amp; DM+V methods as explained in the IROS 2009 paper (see class for refs).</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_dynamic_grid.html" title="A 2D grid of dynamic size which stores any kind of data at each cell.">mrpt::utils::CDynamicGrid</a> has new template method getAsMatrix().</li>
</ul>
</li>
<li>New functions:<ul>
<li><a class="el" href="group__mrpt__graphslam__grp.html#ga022f4a70be5ec7c432f46374e4bb9d66" title="Optimize a graph of pose constraints using the Sparse Pose Adjustment (SPA) sparse representation and...">mrpt::graphslam::optimize_graph_spa_levmarq</a> , a graph-slam implementation in the new namespace <a class="el" href="namespacemrpt_1_1graphslam.html" title="SLAM methods related to graphs of pose constraints.">mrpt::graphslam</a></li>
<li><a class="el" href="group__geometry__grp.html#ga3e9a5920971ffc3caa6649159bc5a156" title="SLERP interpolation between two quaternions.">mrpt::math::slerp</a></li>
<li><a class="el" href="group__geometry__grp.html#ga1d062ce80412bd12f853b032f7822edb" title="Computes the 3x3 skew symmetric matrix from a 3-vector or 3-array: .">mrpt::math::skew_symmetric3</a> &amp; <a class="el" href="group__geometry__grp.html#gaa6594f63ac8850608581cbda8c2425c9" title="Computes the negative version of a 3x3 skew symmetric matrix from a 3-vector or 3-array: ...">mrpt::math::skew_symmetric3_neg</a></li>
<li><a class="el" href="group__geometry__grp.html#gac093231a869a1c120f56f8f661b11cc4" title="Compute a rotation exponential using the Rodrigues Formula.">mrpt::math::rodrigues_so3_exp</a></li>
<li><a class="el" href="group__mrpt__vision__grp.html#gaec6f784e2f55e5476d108ace5182ef5f" title="Undistort one point given by its pixel coordinates and the camera parameters.">mrpt::vision::pinhole::undistort_point</a></li>
<li>ostream text print &lt;&lt; operators for <a class="el" href="structmrpt_1_1utils_1_1_t_pixel_coordf.html" title="A pair (x,y) of pixel coordinates (subpixel resolution).">mrpt::utils::TPixelCoordf</a> and <a class="el" href="structmrpt_1_1utils_1_1_t_pixel_coordf.html" title="A pair (x,y) of pixel coordinates (subpixel resolution).">mrpt::utils::TPixelCoordf</a>.</li>
<li>New ASSERT macros: ASSERT_EQUAL_, ASSERT_NOT_EQUAL_, ASSERT_BELOW_, ASSERT_ABOVE_.</li>
<li><a class="el" href="group__mrpt__obs__grp.html#gaa7c197033076cfa76c71a49eceebde44" title="Parse one line from an text input stream and interpret it as a CARMEN log entry, returning its MRPT o...">mrpt::slam::carmen_log_parse_line()</a> a tool for parsing CARMEN logs.</li>
<li><a class="el" href="group__mrpt__opengl__grp.html#ga30efc9f6fcb49801e989d174e0f65a61" title="Returns an opengl objects representation of an arbitrary graph, as a network of 3D pose frames...">mrpt::opengl::graph_tools::graph_visualize()</a>, a visualizer of graphs of pose constraints.</li>
<li><a class="el" href="namespacemrpt_1_1opengl_1_1stock__objects.html#a9b0593caac72e4147cff850b39c4f7b3" title="Returns two arrows representing a X,Y 2D corner (just thick lines, fast to render).">mrpt::opengl::stock_objects::CornerXYSimple()</a> for 2D corners.</li>
<li><a class="el" href="group__string__manage.html#ga9664a12c44f80487feca491ff658c74c" title="Return true if the two strings are equal (case sensitive)">mrpt::system::strCmp</a>, <a class="el" href="group__string__manage.html#ga554856afe84963ca30164dfe8fc9b754" title="Return true if the two strings are equal (case insensitive)">mrpt::system::strCmpI</a>, <a class="el" href="group__string__manage.html#ga8cf638f3a56c1df7844a1e7a210bcc61" title="Return true if &quot;str&quot; starts with &quot;subStr&quot; (case sensitive)">mrpt::system::strStarts</a>, <a class="el" href="group__string__manage.html#gaa6784fa3195ea1c2b6f66bae7c112e6d" title="Return true if &quot;str&quot; starts with &quot;subStr&quot; (case insensitive)">mrpt::system::strStartsI</a>.</li>
<li><a class="el" href="group__mrpt__system__os.html#gadfdf22e91c68cb814d8e5585220f7bd2" title="An OS-independent version of strncmp.">mrpt::system::os::_strncmp</a>, <a class="el" href="group__mrpt__system__os.html#gaad4fd17ac25e0afdcb8e1fc8b75120fd" title="An OS-independent version of strnicmp.">mrpt::system::os::_strnicmp</a>.</li>
</ul>
</li>
<li>New examples:<ul>
<li>opengl_objects_demo</li>
<li>phidgetProximitySensor</li>
<li>bundle_adj_full_demo</li>
<li>se3</li>
<li>slerp_demo</li>
<li>voronoi_demo</li>
</ul>
</li>
<li>Others:<ul>
<li>Change in interface of function <a class="el" href="group__mrpt__scanmatching__grp.html#gabb4485481a609553e61fe7bc262cf50b" title="This function implements the Horn method for computing the change in pose between two coordinate syst...">mrpt::scanmatching::HornMethod()</a></li>
<li>Change in behavior upon an <a class="el" href="classstd_1_1bad__alloc.html" title="STL class.">std::bad_alloc</a> exception in MRPT_START / MRPT_END blocks: instead of dumping an error message to cerr and exit the program, just propragate the exception with throw() so the user can decide what to do in those cases.</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>Fixed wrong size of 2D ellipsoids in <a class="el" href="classmrpt_1_1opengl_1_1_c_ellipsoid.html" title="A 2D ellipse or 3D ellipsoid, depending on the size of the m_cov matrix (2x2 or 3x3).">mrpt::opengl::CEllipsoid</a> when "quantiles" != 1.</li>
<li>Fixed crash in <a class="el" href="namespacemrpt_1_1math.html#adeb0bd3138c2f716e4b0317cacfc46a1">mrpt::math::maximum()</a> and <a class="el" href="eigen__plugins_8h.html#a5358430f009a259d728f3da31785e986" title="[VECTORS OR MATRICES] Finds the minimum value">minimum()</a> for empty vectors. This also solves Debian FTBFS bug <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=599989">#599989</a>.</li>
<li>Fixed crash in particle filters (both localization and RBPF-SLAM) when using the "optimal particle filter algorithm".</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html#acf77226d2d1670edc631cdd048b249d6">mrpt::opengl::CPointCloud::enableColorFromX()</a> didn't work for disabling the coloring of points.</li>
<li>Fixed build missing finite() function with GCC in some platforms (thanks Mike Davies for reporting!).</li>
<li>Fixed build without zlib in GNU/Linux.</li>
<li>Fixed minimal build, without OpenCV, wxWidgets and GL/GLUT.</li>
<li>Fixed wrong saving/loading to/from text files for <a class="el" href="classmrpt_1_1vision_1_1_c_feature_list.html" title="A list of visual features, to be used as output by detectors, as input/output by trackers, etc.">mrpt::vision::CFeatureList</a> (thanks "me138" for noticing!)</li>
<li>Fixed (aparently compiler/config-dependent) error when deserializing classes with an old deprecated name, i.e. registered with <a class="el" href="group__mrpt__base__grp.html#ga3d32f87193923526b0dd86ed968fb854" title="Mostly for internal use within mrpt sources, to handle exceptional cases with multiple serialization ...">registerClassCustomName()</a> (Thanks "ricardo" for reporting!)</li>
<li>Fixed exception in <a class="el" href="classmrpt_1_1math_1_1_c_levenberg_marquardt_templ.html" title="An implementation of the Levenberg-Marquardt algorithm for least-square minimization.">mrpt::math::CLevenbergMarquardtTempl</a> when saving the optimization path.</li>
<li>Iterators in <a class="el" href="classmrpt_1_1slam_1_1_c_rawlog.html" title="This class stores a rawlog (robotic datasets) in one of two possible formats:">mrpt::slam::CRawlog</a> only had the post-increment form, but actually implemented a pre-increment. Both, correct, versions now exist.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_base_g_u_i_window.html#af877c8001eef3292f9affc04ca4aa137" title="Changes the window title text.">mrpt::gui::CBaseGUIWindow::setWindowTitle()</a> didn't work (for some versions of wxWidgets only?).</li>
<li>mrpt::gui::CDisplayWindowPlots::plot(y) asserted on empty input vector (actually a bug in <a class="el" href="group__container__ops__grp.html#gac77eb1a332f0b7cd60ecf5918d2f4a9a" title="Generates an equidistant sequence of numbers given the first one, the last one and the desired number...">mrpt::math::linspace</a> for len=0)</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window_plots.html" title="Create a GUI window and display plots with MATLAB-like interfaces and commands.">mrpt::gui::CDisplayWindowPlots</a> did ignore the construction-time width x height.</li>
<li>Fixed bug in <a class="el" href="classmrpt_1_1utils_1_1_c_image.html#afd0dbc513f07e36a3764e674fdff6c1e" title="Compute the KLT response at a given pixel (x,y) - Only for grayscale images (for efficiency it avoids...">mrpt::utils::CImage::KLT_response</a>: due to wrong signed numbers usage, responses were high in textureless parts of images.</li>
<li>FIXED: <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> crashes when hitting ALT+Enter for fullscreen when user is waiting for a key to close the window.</li>
<li>icp-slam: Fixed potential wrong processing of datasets in observations-only format where the odometry initial value is not (0,0,0).</li>
<li>Build errors with some OpenCV versions (<a href="http://www.mrpt.org/node/369">Bug report &amp; patch</a> by "iXce"); fixed link errors against opencv 2.0 (thanks Rudan Janos).</li>
<li>FIXED: Text labels of CRenderizable classes inherited the color from the objects; now they're always white.</li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose_p_d_f_gaussian_inf.html" title="A Probability Density function (PDF) of a 2D pose  as a Gaussian with a mean and the inverse of the c...">mrpt::poses::CPosePDFGaussianInf</a> &amp; <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_gaussian_inf.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose  as a Gaussian des...">mrpt::poses::CPose3DPDFGaussianInf</a> were not registered at startup with <a class="el" href="group__mrpt__base__grp.html#ga5af77a9809680e1559cde8167361518e" title="Register a class into the MRPT internal list of &quot;CSerializable&quot; descendents.">registerClass()</a>.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><br/>
 <hr/>
 <br/>
</p>
<p><a class="anchor" id="0.9.1"></a> </p>
<h2>Version 0.9.1: Released 1-AUG-2010 (SVN 2076) </h2>
<ul>
<li><b>Most important changes:</b><ul>
<li>CRITICAL REGRESION FIXED: The program rbpf-slam did always crash at start-up in MRPT 0.9.0.</li>
<li>Changes in <a href="index.html#libs">libraries</a>:<ul>
<li>Further factorization: New libraries: <a href="mrpt-detectors.html">mrpt-detectors</a>, <a href="mrpt-bayes.html">mrpt-bayes</a> and <a href="mrpt-scanmatching.html">mrpt-scanmatching </a>.</li>
<li>Dependencies simplified - most notably, mrpt-gui is now not included by many libraries that did in previous versions (check the <a href="index.html#libs">deps graph </a> ).</li>
<li><b>Important:</b> Due to this last change, you <b>may need</b> to add a <code>#include &lt;<a class="el" href="gui_8h.html">mrpt/gui.h</a>&gt;</code> when using <a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> classes in places where formerly a <code>#include &lt;<a class="el" href="slam_8h.html">mrpt/slam.h</a>&gt;</code> was enough.</li>
</ul>
</li>
<li>Many new stuff and improvements in mrpt-vision, e.g. <a class="el" href="structmrpt_1_1vision_1_1_c_generic_feature_tracker.html" title="A virtual interface for all feature trackers, implementing the part of feature tracking that is commo...">mrpt::vision::CGenericFeatureTracker</a>, <a class="el" href="classmrpt_1_1vision_1_1_c_feature_list.html" title="A list of visual features, to be used as output by detectors, as input/output by trackers, etc.">mrpt::vision::CFeatureList</a>, etc.</li>
<li>Support for Videre Stereo cameras (By Cyril Gerber, thanks!)</li>
<li>New command-line dataset manipulation tool: rawlog-edit.</li>
<li>Fixed support for pkg-config with a new set of libmrpt-*.pc files (see new example MRPT/doc/mrpt_example1-with-Makefile and <a href="http://www.mrpt.org/Compiling_custom_applications_in_Linux_with_a_Makefile_and_pkg-config">this page</a>).</li>
</ul>
</li>
<li><b>Detailed list of changes:</b><ul>
<li>Changes in build system:<ul>
<li>Fixed support for pkg-config with a new set of libmrpt-*.pc files (see new example MRPT/doc/mrpt_example1-with-Makefile and <a href="http://www.mrpt.org/Compiling_custom_applications_in_Linux_with_a_Makefile_and_pkg-config">this page</a>).</li>
<li>Further factorization: New libraries: <a href="mrpt-detectors.html">mrpt-detectors</a>, <a href="mrpt-bayes.html">mrpt-bayes</a> and <a href="mrpt-scanmatching.html">mrpt-scanmatching </a>.</li>
<li>Dependencies simplified - most notably, mrpt-gui is now not included by many libraries that did in previous versions (check the <a href="index.html#libs">deps graph </a> ).</li>
<li>New CMake switch: "MRPT_BACKCOMPATIB_08X": Enabled by default; if disabled, some backward compatibility definitions are not declared. Useful to prepare code for future MRPT versions where deprecated definitions and names will be removed.</li>
</ul>
</li>
<li>Changes in applications:<ul>
<li>camera-calib can now open SwissRangers 3D cameras as well for real-time calibration.</li>
<li>rawlog-grabber: New config file optional argument: "rawlog_GZ_compress_level" to settle the desired GZ-compression level of rawlogs.</li>
</ul>
</li>
<li>Changes in classes:<ul>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>:<ul>
<li>It now has a new method (setFromImageReadOnly) and a new constructor as UNINITIALIZED_IMAGE.</li>
<li>New alternative checkerboard detector algorithm (by Scaramuzza et al.). See mrpt::utils::CImage::findChessboardCorners for references and more details.</li>
<li><a class="el" href="group__chessboard__calib.html#gac88718d9f59ced199ba4475ef7299f30" title="Look for the corners of a chessboard in the image using one of two different methods.">findChessboardCorners()</a> is no longer a method of CImage, but a function in <a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> (see <a class="el" href="group__chessboard__calib.html#gac88718d9f59ced199ba4475ef7299f30" title="Look for the corners of a chessboard in the image using one of two different methods.">mrpt::vision::findChessboardCorners</a>).</li>
<li>New method to compute KLT response at any given position: <a class="el" href="classmrpt_1_1utils_1_1_c_image.html#afd0dbc513f07e36a3764e674fdff6c1e" title="Compute the KLT response at a given pixel (x,y) - Only for grayscale images (for efficiency it avoids...">mrpt::utils::CImage::KLT_response</a></li>
<li>New efficient constructor to build a grayscale version of another image, or a fast "link" if it was already grayscale. See CImage::CImage( img, FAST_REF_OR_CONVERT_TO_GRAY )</li>
</ul>
</li>
<li>Many classes: UNINITIALIZED_* which were #defines have been transformed into enums to keep all that stuff into MRPT namespaces.</li>
<li><a class="el" href="classmrpt_1_1reactivenav_1_1_c_reactive_navigation_system.html" title="Implements a reactive navigation system based on TP-Space, with an arbitrary holonomic reactive metho...">mrpt::reactivenav::CReactiveNavigationSystem</a> does not have any longer the "debugWindows" option. This is done to remove the dependecy of mrpt-reactivenav on mrpt-gui.</li>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_feature_extraction.html" title="The central class from which images can be analyzed in search of different kinds of interest points a...">mrpt::vision::CFeatureExtraction</a> has a new option FASTOptions.use_KLT_response.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_observation.html" title="Declares a class that represents any robot&#39;s observation.">mrpt::slam::CObservation</a> now has virtual load() and unload() method to manually invoke delayed-load (actually only needed by 3D camera observations).</li>
<li><a class="el" href="classstlplus_1_1smart__ptr.html">stlplus::smart_ptr</a> templates now have an extra template argument "COUNTER" which defaults to an thread-safe atomic counter but can be set to a plain "unsigned int" in time-critical apps which are known to work in a single thread.</li>
<li><a class="el" 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...">mrpt::utils::CStream</a> now handles sizes as uint64_t instead of size_t, to allow files larger than 4Gb in 32bit systems.</li>
<li><a class="el" href="namespacemrpt_1_1hwdrivers.html#a9d0c0e836d0abcd45f253b11bc930641" title="Show to the user a list of possible camera drivers and creates and open the selected camera...">mrpt::hwdrivers::prepareVideoSourceFromUserSelection()</a> now also displays as an option to grab images from SwissRanger 3D cameras.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a> can now open SwissRanger 3D cameras.</li>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_feature_list.html" title="A list of visual features, to be used as output by detectors, as input/output by trackers, etc.">mrpt::vision::CFeatureList</a> now has KD-tree-based search.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html" title="A map of 2D/3D points with individual colours (RGB).">mrpt::slam::CColouredPointsMap</a>:<ul>
<li>Added a few new methods to modify and retrieve the color of points already in the map.</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_generic_sensor.html" title="A generic interface for a wide-variety of sensors designed to be used in the application RawLogGrabbe...">mrpt::hwdrivers::CGenericSensor</a>:<ul>
<li>Now has a generic interface for external image directories (it was only in CCameraSensor before), so more sensors can use this feature.</li>
<li>The sensor label member is now "m_sensorLabel" in this base class, instead of replicating it in all children classes.</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_observation3_d_range_scan.html" title="Declares a class derived from &quot;CObservation&quot; that encapsules a 3D range scan measurement (e...">mrpt::slam::CObservation3DRangeScan</a>:<ul>
<li>The confidence channel is stored as an image instead of a matrix to optimize memory and disk space.</li>
<li>New "auto-calibration" method: CObservation3DRangeScan::recoverCameraCalibrationParameters</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_swiss_ranger3_d_camera.html" title="A class for grabing &quot;range images&quot; from a MESA imaging SwissRanger 3D cameras (SR-2, SR-3000, SR-4k).">mrpt::hwdrivers::CSwissRanger3DCamera</a> is now prepared to store intensity &amp; confidence channels to external image files to save rawlog storage size.</li>
<li><a class="el" 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...">mrpt::utils::CStream</a> now has methods for sending/receiving messages in a predefined frame format. See <a class="el" href="classmrpt_1_1utils_1_1_c_stream.html#a95eb299dfa91e1d5962e2acd5bb671a6" title="Tries to receive a message from the device.">mrpt::utils::CStream::receiveMessage</a>, <a class="el" href="classmrpt_1_1utils_1_1_c_stream.html#a108c4d9cadd58b1ec0800c6c4816ff55" title="Send a message to the device.">mrpt::utils::CStream::sendMessage</a>.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_config_file_memory.html" title="This class implements a config file-like interface over a memory-stored string list.">mrpt::utils::CConfigFileMemory</a> has a new method getContent().</li>
<li>Template <a class="el" href="structmrpt_1_1utils_1_1_t_parameters.html" title="For usage when passing a dynamic number of (numeric) arguments to a function, by name.">mrpt::utils::TParameters</a> now has typedefs <a class="el" href="namespacemrpt_1_1utils.html#a694777f2a3544999baea34e43a42eceb" title="See the generic template mrpt::utils::TParameters.">mrpt::utils::TParametersDouble</a>, <a class="el" href="namespacemrpt_1_1utils.html#a53d400cb84997624634d404ca456cdb9" title="See the generic template mrpt::utils::TParameters.">mrpt::utils::TParametersString</a> and many new methods. See the example params-by-name.</li>
<li>New method TCamera::scaleToResolution() for scale camera calibration params for different resolutions.</li>
<li>In <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map.html" title="Declares a virtual base class for all metric maps storage classes.">mrpt::slam::CMetricMap</a><ul>
<li>New method loadFromSimpleMap() (fast inline call to loadFromProbabilisticPosesAndObservations, with a better name!).</li>
<li>The method alignBylikelihoodHillClimbing() has been removed, since it didn't make sense there and was a pretty old and unefficient implementation.</li>
</ul>
</li>
<li>In <a class="el" 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...">mrpt::slam::CSimpleMap</a>:<ul>
<li>New methods loadFromFile() and saveToFile().</li>
<li>Added STL-like iterators and such.</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_observation_g_p_s.html" title="Declares a class derived from &quot;CObservation&quot; that represents a Global Positioning System (GPS) readin...">mrpt::slam::CObservationGPS</a>: Fixed const'ness of the getAsStruct&lt;&gt;() methods.</li>
<li>Absolute pixel coordinates are now permited where previously there were only factors over width/height. See:<ul>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aa505e9d5ec6bcafbf338ec27810ccfa2" title="Change the viewport position and dimension on the rendering window.">mrpt::opengl::COpenGLViewport::setViewportPosition</a> and <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ad7f5073bf1cb2727da0fe167a0a32491" title="Get the current viewport position and dimension on the rendering window.">mrpt::opengl::COpenGLViewport::getViewportPosition</a>.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html#ac5665826075d8cee4e7e23259cbfa1bd" title="Add 2D text messages overlapped to the 3D rendered scene.">mrpt::gui::CDisplayWindow3D::addTextMessage</a>.</li>
<li>CMyGLCanvasBase::renderTextBitmap (now accepts negative pixel coords as well, meaning to wrap).</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_generic_sensor.html#a640e1b953865c3d2e881bbd2c1a81428" title="Register a class into the internal list of &quot;CGenericSensor&quot; descendents.">mrpt::hwdrivers::CGenericSensor::registerClass</a> is now public.</li>
<li>All MRPT containers (<a class="el" href="namespacemrpt.html#a4a6aab2c98368ca6b554c04f8fe84cfb">mrpt::vector_double</a>, all kind of matrices, arrays, etc) now have two new methods for saving to and loading from text files "as vectors", i.e. even for matrices, all the elements are saved/loaded as a simple sequence:<ul>
<li>loadFromTextFileAsVector</li>
<li>saveToTextFileAsVector</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_activ_media_robot_base.html" title="This software driver implements the communications (and some rudimentary control) for ActivMedia robo...">mrpt::hwdrivers::CActivMediaRobotBase</a> can now transparently open serial ports &gt;COM4 in Windows without the prefix "\\.\" (it's added automatically if needed).</li>
<li>The ANN library has been moved from mrpt-maps to mrpt-base (still can be reached at the same path under &lt;mrpt/otherlibs/ann/...&gt;. This is to allow more code to use KD-trees without depending on mrpt-maps.</li>
<li>mrpt::vision::TPixelCoordf now holds "float" coordinates instead of "double" since: it's enough for pixels, to save memory, and for consistency in name suffixes "f".</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_canvas.html" title="This virtual class defines the interface of any object accepting drawing primitives on it...">mrpt::utils::CCanvas</a> now uses TColor as color data type, instead of "int"s (finally!).</li>
</ul>
</li>
<li>New functions:<ul>
<li><a class="el" href="namespacemrpt_1_1math.html#a962c37014b369b1dd1c7961e332c239d" title="k-means algorithm to cluster a list of N points of arbitrary dimensionality into exactly K clusters...">mrpt::math::kmeans</a>, <a class="el" href="namespacemrpt_1_1math.html#ad0c38dff586346d5f1cfe8a9bd8a13cf" title="k-means++ algorithm to cluster a list of N points of arbitrary dimensionality into exactly K clusters...">mrpt::math::kmeanspp</a>: Efficient implementations of k-means and k-means++ algorithms. By David Arthur (Standford, USA) (See <a href="http://www.stanford.edu/~darthur/kmpp.zip">http://www.stanford.edu/~darthur/kmpp.zip</a> ).</li>
<li><a class="el" href="group__chessboard__calib.html#gafb7eb4cd30b399456b1eb456c32c4be4" title="Look for the corners of one or more chessboard/checkerboards in the image.">mrpt::vision::findMultipleChessboardsCorners</a></li>
<li>mrpt::vision::camera_calib_ba is a new method based on Bundle-Adjustment to calibrate a camera from the tracking of a set of random points.</li>
<li>Added &lt;&lt; and &gt;&gt; operators to mrpt::math::CArrayNumeric&lt;&gt; classes to dump/read them with MRPT's <a class="el" 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...">mrpt::utils::CStream</a> streams.</li>
<li><a class="el" href="group__mrpt__topography__grp.html#gaa620f63d0daefa3eb9c21c2a69b593f2" title="ENU to geocentric coordinates.">mrpt::topography::ENUToGeocentric</a></li>
<li>mrpt::gui::CMyGLCanvasBase::textBitmapWidth, a new function to compute the width of a bitmap string.</li>
</ul>
</li>
<li>New classes:<ul>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_stereo_grabber___s_v_s.html" title="A class for grabing stereo images from a STOC camera of Videre Design NOTE:">mrpt::hwdrivers::CStereoGrabber_SVS</a>: New class to grab from a Videre Stereo camera (By Cyril Gerber, thanks!). Support has been also built into <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a>.</li>
<li>New hierarchy of computer vision detectors/detectable objects. See new namespace <a class="el" href="namespacemrpt_1_1detectors.html">mrpt::detectors</a> for the new library mrpt-detectors.</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_sparse_matrix.html" title="A sparse matrix capable of efficient math operations (a wrapper around the CSparse library) The type ...">mrpt::math::CSparseMatrix</a> for efficient sparse matrix computations (based on code from robotvision &amp; the CSparse library - see the class doc for more details and credits).</li>
<li>New generalized KD-tree pattern class: <a class="el" href="classmrpt_1_1math_1_1_k_d_tree_capable.html" title="A generic adaptor class for providing Approximate Nearest Neighbors (ANN) (via the nanoflann library)...">mrpt::math::KDTreeCapable</a>, previously used only for points of maps, now used in more places.</li>
<li>Feature tracking for images now has a set of different implementations. See <a class="el" href="structmrpt_1_1vision_1_1_c_generic_feature_tracker.html" title="A virtual interface for all feature trackers, implementing the part of feature tracking that is commo...">mrpt::vision::CGenericFeatureTracker</a></li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_observation_stereo_images_features.html" title="Declares a class derived from &quot;CObservation&quot; that encapsules a pair of cameras and a set of matched i...">mrpt::slam::CObservationStereoImagesFeatures</a> to hold the minimum information needed by a stereo SLAM back-end algorithm.</li>
</ul>
</li>
<li>New applications:<ul>
<li>track-video-features: A demonstration of robust feature detection and tracking on a video/live camera stream. See <a href="http://www.mrpt.org/Application:track-video-features">http://www.mrpt.org/Application:track-video-features</a></li>
</ul>
</li>
<li>New examples:<ul>
<li>kmeans</li>
<li>params-by-name</li>
<li>checkerboardDetectors</li>
<li>multipleCheckerboards</li>
<li>face-detector</li>
</ul>
</li>
<li>Global settings:<ul>
<li>New global variable <a class="el" href="namespacemrpt_1_1global__settings.html#a82116abc80994c2092c0fc7f2d05d304" title="The size of points when exporting with getAs3DObject() (default=3.0) Affects to:">mrpt::global_settings::POINTSMAPS_3DOBJECT_POINTSIZE</a></li>
</ul>
</li>
<li>BUGFIXES:<ul>
<li><b>CRITICAL REGRESION FIXED</b>: The program rbpf-slam did always crash at start-up in MRPT 0.9.0.</li>
<li>Fixed annoying JavaScript error in CHM documentation.</li>
<li>Fixed bug when accessing matrixes in <a class="el" href="_c_kalman_filter_capable_8h.html">CKalmanFilterCapable.h</a> if the OBS_SIZE and the FEAT_SIZE parameters are different.</li>
<li>Fixed crash (on non Win32) when calling <a class="el" href="group__mrpt__thread.html#ga723810cea7feb46c7391c245c5c5eec2" title="Waits until the given thread ends.">mrpt::system::joinThread</a> on an empty thread handle.</li>
<li>Error in CStream-classes handling files larger than 4Gb.</li>
<li>Fixed build with BUILD_SHARED_LIBS=OFF under Visual Studio.</li>
<li>Fixed: RANSAC won't use the last input data point (Thanks "Stephane" for reporting!)</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d_1_1_t_likelihood_options.html#a5a2f6002d1a5aaa1346f3317c4b1f280" title="This method load the options from a &quot;.ini&quot; file.">mrpt::slam::COccupancyGridMap2D::TLikelihoodOptions::loadFromConfigFile</a> ignored the "section" name for loading "likelihoodMethod" (reported by Thomas Ciarfuglia, Università di Perugia).</li>
<li>Fixed build error when compiling without OpenGL/GLUT support.</li>
<li>The method <a class="el" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html#aaebb916ae54df35c9d4dda9ea6199bb6" title="Adds a new point given its coordinates and color (colors range is [0,1])">mrpt::slam::CColouredPointsMap::insertPoint( float x, float y, float z, float R, float G, float B )</a> was declared but not defined.</li>
<li>Fixed ignoring the first time ALT+ENTER is pressed in <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a></li>
<li>Fixed compilation against older OpenCV versions 1.1.0 and 2.0.0.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><br/>
 <hr/>
 <br/>
</p>
<p><a class="anchor" id="0.9.0"></a> </p>
<h2>Version 0.9.0: Released 3-JUN-2010 (SVN 1880) </h2>
<ul>
<li><b>Most relevant changes:</b><ul>
<li>New minor version number started (0.9.0) due to incompatible changes in the ABI and in some parts of the API (read below for "Important changes in the API").</li>
<li>The previous "mrpt-core" library has been split into several smaller libs for better modularity, less dependencies of user programs and faster recompiling.</li>
<li>Compile/build: Support for MSVC 2010.</li>
<li>Support for the 3D cameras SR3000/SR4000. See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_swiss_ranger3_d_camera.html" title="A class for grabing &quot;range images&quot; from a MESA imaging SwissRanger 3D cameras (SR-2, SR-3000, SR-4k).">mrpt::hwdrivers::CSwissRanger3DCamera</a> and <a href="http://www.mrpt.org/Example:SwissRanger_SR4000_3D_camera">this example</a>.</li>
<li>The library mrpt-htmslam is now part of public MRPT releases (I tried to also release hmt-slam-gui but it would delay for too long... still in SVN only for now).</li>
<li>The program 'icp-slam', and <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map_builder_i_c_p.html" title="A class for very simple 2D SLAM based on ICP.">mrpt::slam::CMetricMapBuilderICP</a>, are now capable of handling two kinds of rawlogs: based on CSensoryFrame's (as usual), and the newest only containing CObservation's. Note however that ICP-SLAM now requires all odometry actions/observations to have a valid timestamp (very old datasets &lt;=2007 would need to be fixed in RawlogViewer).</li>
<li>An important conceptual milestone: New base class <a class="el" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a> created to unify the MRPT RTTI system, instead of loading everything on CSerializable (which is now a derived class of CObject). This allows taking advantage of MRPT's smart pointers without forcing to implement serialization. Existing user code should be not affected at all.</li>
<li>Fixed critical bugs in rawlog-grabber and in 6D KF-SLAM (read below).</li>
<li>MRPT now uses Google's unit test framework (gtest). Dozens of automated tests already exist to provide a robust, continuous checking of the health of MRPT core functionality.</li>
</ul>
</li>
</ul>
<p><a class="anchor" id="0.9.0.API"></a></p>
<ul>
<li><b>Important changes in the API:</b> Changes that *may* break existing user code.<ul>
<li>Calls to buildAuxPointsMap() in some CObservation-derived classes must be replaced by buildAuxPointsMap&lt;CPointsMap&gt;().</li>
<li>Localization with particle filters is now implemented in <a class="el" href="classmrpt_1_1slam_1_1_c_monte_carlo_localization2_d.html" title="Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x...">mrpt::slam::CMonteCarloLocalization2D</a>, and <a class="el" href="classmrpt_1_1poses_1_1_c_pose_p_d_f_particles.html" title="Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x...">mrpt::poses::CPosePDFParticles</a> is now just a data storage class, used as a base class. If you used this class in your code, an option is to employ macros like "#if MRPT_VERSION&gt;=0x090", etc. to handle different versions of MRPT.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_observation_image.html" title="Declares a class derived from &quot;CObservation&quot; that encapsules an image from a camera, whose relative pose to robot is also stored.">mrpt::slam::CObservationImage</a> and <a class="el" href="classmrpt_1_1slam_1_1_c_observation_stereo_images.html" title="Observation class for either a pair of left+right or left+disparity images from a stereo camera...">mrpt::slam::CObservationStereoImages</a> now use a structure <a class="el" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">mrpt::utils::TCamera</a> instead of separate fields for focal length, intrinsic and distortion parameters.</li>
<li>color functions moved from <a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> to <a class="el" href="namespacemrpt_1_1utils.html" title="Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.">mrpt::utils</a> (See <a class="el" href="namespacemrpt_1_1utils.html#a6b025cb1f1c9c7047237998346be5c28" title="Transform a float number in the range [0,1] into RGB components.">mrpt::utils::colormap</a>, ...).</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>: The method cross_correlation() is now what was previously called <a class="el" href="group__mrpt__vision__grp.html#ga76734611e12d95e2d1f825d0a8d7b2c9" title="Computes the correlation between this image and another one, encapsulating the openCV function cvMatc...">openCV_cross_correlation()</a>.</li>
<li><a class="el" href="group__mrpt__vision__grp.html#ga76734611e12d95e2d1f825d0a8d7b2c9" title="Computes the correlation between this image and another one, encapsulating the openCV function cvMatc...">mrpt::vision::openCV_cross_correlation()</a> function deleted, since it's already in CImage.</li>
<li>mrpt::slam::CObservation::likelihoodWith() has been removed. It's somehow replaced by mrpt:<a class="el" href="group__mrpt__slam__grp.html#ga2d32509abfdfd42e7597186bf2ab0ab0" title="Estimates the &quot;overlap&quot; or &quot;matching ratio&quot; of two observations (range [0,1]), possibly taking into a...">slam::observationsOverlap()</a>.</li>
<li>COccupancyGridMap2D::extractFeatures(), COccupancyGridMap2D::extractFeatures(), ... have been moved out of the map itself to a new class: <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map_feature_extractor.html" title="A class for detecting features from occupancy grid maps.">mrpt::slam::COccupancyGridMapFeatureExtractor</a>.</li>
<li>CImageGrabber_OpenCV, CImageGrabber_dc1394 and CStereoGrabber_Bumblebee: Have been moved from <a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> to <a class="el" href="namespacemrpt_1_1hwdrivers.html" title="Contains classes for various device interfaces.">mrpt::hwdrivers</a>, its natural place. Users using these classes thru CCameraSensor will not realize of the difference.</li>
<li><a class="el" href="structmrpt_1_1utils_1_1_t_matching_pair.html" title="A structure for holding correspondences between two sets of points or points-like entities in 2D or 3...">mrpt::utils::TMatchingPair</a> and <a class="el" href="classmrpt_1_1utils_1_1_t_matching_pair_list.html" title="A list of TMatchingPair.">mrpt::utils::TMatchingPairList</a> have been moved from been member classes of <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map.html" title="Declares a virtual base class for all metric maps storage classes.">mrpt::slam::CMetricMap</a> to be independent structures, now sited in mrpt-base for a more spread usage. Note that for compatibility there are still typedefs within CMetricMap, but it's recommended to use the new names of the structs.</li>
<li>The member mrpt::slam::CPointsMap::TInsertionOptions::matchStaticPointsOnly has been removed, since it had little practical utility and broke independence between sub-libraries.</li>
<li>The header &lt;mrpt/slam/pose_graph_optimizers.h&gt; has been renamed &lt;mrpt/slam/graph_slam.h&gt;.</li>
<li>The class CRobotSimulator has been moved from <a class="el" href="namespacemrpt_1_1slam.html" title="This namespace contains algorithms for SLAM, localization, map building, representation of robot&#39;s ac...">mrpt::slam</a> to <a class="el" href="namespacemrpt_1_1utils.html" title="Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.">mrpt::utils</a>, since it had nothing to do with SLAM.</li>
<li>The function mrpt::hwdrivers::registerAllSensors() has been removed, since it's now not needed (registration is now done reliably at startup).</li>
</ul>
</li>
</ul>
<ul>
<li><b>Detailed list of changes:</b><ul>
<li>Applications:<ul>
<li>simul-landmarks:<ul>
<li>New parameter "show_in_3d" to display a 3D view with the complete simulated robot path and landmarks.</li>
<li>It can now simulate random walks of a robot in 6D, not only over a 2D plane as in previous versions.</li>
<li>Generated rawlogs are gz-compressed.</li>
</ul>
</li>
<li>RawlogViewer:<ul>
<li>Much more efficient operations of cutting a rawlog (removing a part, keeping a part only), via a new method mrpt::CRawlog::remove() for ranges of indices.</li>
<li>The program can now export all the images from a given camera as an AVI file (or two, for stereo cameras).</li>
<li>New menu option to regenerate the odometry timestamps of very old datasets (&lt;=2007).</li>
</ul>
</li>
<li>icp-slam:<ul>
<li>The program 'icp-slam', and <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map_builder_i_c_p.html" title="A class for very simple 2D SLAM based on ICP.">mrpt::slam::CMetricMapBuilderICP</a>, are now capable of handling two kinds of rawlogs: based on CSensoryFrame's (as usual), and the newest only containing CObservation's.</li>
<li>New parameters to set a minimum distance between pose correction with ICP, for faster execution.</li>
</ul>
</li>
<li>kf-slam:<ul>
<li>Now has a much more rich live visualization as a 3D view. See <a href="http://www.mrpt.org/Application:kf-slam">http://www.mrpt.org/Application:kf-slam</a></li>
</ul>
</li>
<li>ICP and RBPF SLAM now have a new option to always insert any kind of CObservation-derived class. See <a class="el" href="structmrpt_1_1slam_1_1_c_metric_map_builder_1_1_t_options.html#a9f88daece48938d630075a69473fb43c" title="A list of observation classes (derived from mrpt::slam::CObservation) which will be always inserted i...">mrpt::slam::CMetricMapBuilder::TOptions::alwaysInsertByClass</a></li>
<li>rawlog-grabber: Now supports extra sensors defined by the user by means of compile-time "plug ins". See <a href="http://www.mrpt.org/Application:rawlog-grabber">http://www.mrpt.org/Application:rawlog-grabber</a></li>
</ul>
</li>
<li>New namespaces:<ul>
<li><a class="el" href="namespacemrpt_1_1global__settings.html" title="Global variables to change the run-time behaviour of some MRPT classes within mrpt-core.">mrpt::global_settings</a> for global switches to tune MRPT behavior at runtime.</li>
<li><a class="el" href="namespacemrpt_1_1math_1_1jacobians.html" title="A collection of functions to compute jacobians of diverse transformations, etc (some functions are re...">mrpt::math::jacobians</a> that unifies Jacobian-related functions.</li>
</ul>
</li>
<li>New classes:<ul>
<li>Support for the SwissRanger 3D cameras SR3000/SR4000. See the C++ class <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_swiss_ranger3_d_camera.html" title="A class for grabing &quot;range images&quot; from a MESA imaging SwissRanger 3D cameras (SR-2, SR-3000, SR-4k).">mrpt::hwdrivers::CSwissRanger3DCamera</a> and <a href="http://www.mrpt.org/Example:SwissRanger_SR4000_3D_camera">this example</a>.</li>
<li>Implementation of the observer/observable design pattern in the classes: <a class="el" href="classmrpt_1_1utils_1_1_c_observable.html" title="Inherit from this class for those objects capable of being observed by a CObserver class...">mrpt::utils::CObservable</a> &amp; <a class="el" href="classmrpt_1_1utils_1_1_c_observer.html" title="Inherit from this class to get notified about events from any CObservable object after subscribing to...">mrpt::utils::CObserver</a> . See also the example "observer_pattern".</li>
<li>Usage of the observer/observable design to dispatch events in GUI windows. See <a class="el" href="classmrpt_1_1gui_1_1_c_base_g_u_i_window.html" title="The base class for GUI window classes.">mrpt::gui::CBaseGUIWindow</a>.</li>
<li>Usage of the observer/observable design to enable anyone to subscribe to changes in metric maps. See <a class="el" href="classmrpt_1_1slam_1_1mrpt_event_metric_map_insert.html" title="Event emitted by a metric up upon a succesful call to insertObservation()">mrpt::slam::mrptEventMetricMapInsert</a>, - New set of classes to represent 6D poses using 3D translation + a quaternion for rotation:<ul>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_quat.html" title="A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz).">mrpt::poses::CPose3DQuat</a> - which can be transparently converted to/from <a class="el" 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).">mrpt::poses::CPose3D</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_quat_p_d_f.html" title="Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually)...">mrpt::poses::CPose3DQuatPDF</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_quat_p_d_f_gaussian.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose using a quaternion...">mrpt::poses::CPose3DQuatPDFGaussian</a></li>
</ul>
</li>
<li>New class <a class="el" href="classmrpt_1_1utils_1_1_c_start_up_classes_register.html" title="A helper class that automatically register at start up a custom function to register all the CObject-...">mrpt::utils::CStartUpClassesRegister</a> useful to automatically register CObject-derived classes from user code (and all the MRPT libs).</li>
<li>New OpenGL class: <a class="el" href="classmrpt_1_1opengl_1_1_c_box.html" title="A solid or wireframe box in 3D, defined by 6 rectangular faces parallel to the planes X...">mrpt::opengl::CBox</a>, for representing rectangular solid or wireframed boxes.</li>
<li>New class: <a class="el" href="classmrpt_1_1utils_1_1_c_list_of_classes.html" title="A list (actually based on a std::set) of MRPT classes, capable of keeping any class registered by the...">mrpt::utils::CListOfClasses</a></li>
<li>New class <a class="el" href="classmrpt_1_1poses_1_1_c_robot2_d_pose_estimator.html" title="A simple filter to estimate and extrapolate the robot 2D (x,y,phi) pose from asynchronous odometry an...">mrpt::poses::CRobot2DPoseEstimator</a>: A simple filter to estimate and extrapolate the robot 2D (x,y,phi) pose from asynchronous odometry and localization data.</li>
<li>New thread-safe template queue: <a class="el" href="classmrpt_1_1utils_1_1_c_thread_safe_queue.html" title="A thread-safe template queue for object passing between threads; for a template argument of T...">mrpt::utils::CThreadSafeQueue</a>, which is a generalization of the previous <a class="el" href="group__mrpt__base__grp.html#gac9ce1b1023816c8f0cdba36331748601" title="A thread-safe class for message passing between threads.">mrpt::utils::CMessageQueue</a>.</li>
<li>New hardware driver: mrpt::hwdriver::CBoardIR for a MAPIR custom I/O board for infrared sensors.</li>
</ul>
</li>
<li>Improved classes:<ul>
<li><a class="el" href="classmrpt_1_1bayes_1_1_c_kalman_filter_capable.html" title="Virtual base for Kalman Filter (EKF,IEKF,UKF) implementations.">mrpt::bayes::CKalmanFilterCapable</a> now has a new parameter (debug_verify_analytic_jacobians) to automatically verify the user-providen Jacobians vs. numerical ones.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_metric_map.html" title="Declares a virtual base class for all metric maps storage classes.">mrpt::slam::CMetricMap</a> (all metric maps) now have a hook method to be called after successful observation insertion.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_rovio.html" title="A class to interface a Rovio robot (manufactured by WowWee).">mrpt::hwdrivers::CRovio</a> has been cleaned and redesigned for offering an easier interface.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> now switches full-screen pressing Alt+Enter.</li>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_feature_extraction.html" title="The central class from which images can be analyzed in search of different kinds of interest points a...">mrpt::vision::CFeatureExtraction</a> now supports the FAST feature detector.</li>
<li>Many <a class="el" href="namespacemrpt_1_1poses.html" title="Classes for 2D/3D geometry representation, both of single values and probability density distribution...">mrpt::poses</a> classes now have a more complete support for composition/inverse composition of poses/poses, poses/points, etc. including their uncertainties and Jacobians for the PDF classes.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_height_grid_map2_d.html" title="A mesh representation of a surface which keeps the estimated height for each (x,y) location...">mrpt::slam::CHeightGridMap2D</a> now has a method to compute the intersection of 3D rays with its cells.</li>
<li>New serialization format of CPose3D, which saves about a 5% in (uncompressed) rawlog file sizes.</li>
<li>Pose composition operator += added to <a class="el" href="classmrpt_1_1poses_1_1_c_pose_p_d_f_gaussian.html" title="Declares a class that represents a Probability Density function (PDF) of a 2D pose ...">mrpt::poses::CPosePDFGaussian</a>, since it was missing there, but existing in the 3D version <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_gaussian.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D pose ...">mrpt::poses::CPose3DPDFGaussian</a>.</li>
<li>Lightweight geometry structs TPose* &amp; TPoint* now also have method asString() and fromString().</li>
<li><a class="el" 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).">mrpt::poses::CPose3D</a> now has a constructor from a quaternion + a (x,y,z) displacement.</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_set_of_objects.html" title="A set of object, which are referenced to the coordinates framework established in this object...">mrpt::opengl::CSetOfObjects</a> and <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">mrpt::opengl::COpenGLViewport</a> now have <a class="el" href="eigen__plugins_8h.html#ab295fd8164bf1b1acecbcb29520d62b7">begin()</a> <a class="el" href="eigen__plugins_8h.html#ade5b39864c905cbb824d0ff6eb0d888c">end()</a> and iterators.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a> now accepts inserting IR and sonar observations (by rhn - mrhemali.rhn at porcupinefactory dot org)</li>
<li>Added event "file accessed" to <a class="el" href="classmrpt_1_1system_1_1_c_file_system_watcher.html" title="This class subscribes to notifications of file system changes, thus it can be used to efficiently sta...">mrpt::system::CFileSystemWatcher</a>:</li>
</ul>
</li>
<li>Build system:<ul>
<li>Support for MSVC 2010.</li>
</ul>
</li>
<li>New or improved functions:<ul>
<li>In <a class="el" href="namespacemrpt_1_1topography.html" title="This namespace provides topography helper functions, coordinate transformations.">mrpt::topography</a>:<ul>
<li>Introduction of the structure <a class="el" href="structmrpt_1_1topography_1_1_t_geodetic_coords.html" title="A set of geodetic coordinates: latitude, longitude and height, defined over a given geoid (typically...">mrpt::topography::TGeodeticCoords</a></li>
<li>New functions implementing more conversions.</li>
</ul>
</li>
<li>Set of new functions for propagating a Gaussian PDF trough an arbitrary function (see also example 'unscented_transformation_test')<ul>
<li><a class="el" href="group__gausspdf__transform__grp.html#ga690d0b41f293578fcfd067e9177fc863" title="Simple Montecarlo-base estimation of the Gaussian distribution of a variable Y=f(X) for an arbitrary ...">mrpt::math::transform_gaussian_montecarlo</a> : Monte Carlo approximation</li>
<li><a class="el" href="group__gausspdf__transform__grp.html#gac9caace672d90279c312d43877d8480b" title="First order uncertainty propagation estimator of the Gaussian distribution of a variable Y=f(X) for a...">mrpt::math::transform_gaussian_linear</a> : First order approximation (as in EKF)</li>
<li><a class="el" href="group__gausspdf__transform__grp.html#gaabbaca6808e3d9be3fd37f82f98049f0" title="Scaled unscented transformation (SUT) for estimating the Gaussian distribution of a variable Y=f(X) f...">mrpt::math::transform_gaussian_unscented</a> : Scaled Unscented Transformation (as in UKF).</li>
</ul>
</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html#ad7e91ccd233e610a748c2438715e1b62" title="Save to a text file.">mrpt::slam::CLandmarksMap::saveToTextFile()</a> now generates a text header in each file explaining the format of the file (compatible with MATLAB comments).</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ab7083a12323bf5f938c0f6b0a4f036e4" title="Compute the 3D ray corresponding to a given pixel; this can be used to allow the user to pick and sel...">mrpt::opengl::COpenGLViewport::get3DRayForPixelCoord</a> now also works with orthogonal projections.</li>
<li>3D windows can display an arbitrary number of 2D text messages. See mrpt::gui::CDisplayWindow3D::add2DTextMessage().</li>
<li><a class="el" href="structmrpt_1_1utils_1_1_t_type_name.html" title="A template to obtain the type of its argument as a string at compile time.">mrpt::utils::TTypeName</a> now also supports matrix and CArray-derived classes.</li>
<li>Functions that have been "templatized":<ul>
<li><a class="el" href="group__stats__grp.html#ga2ec8bf7897f7b8b0fee1ca9ae46443bb" title="Evaluates the univariate normal (Gaussian) distribution at a given point &quot;x&quot;.">mrpt::math::normalPDF</a></li>
<li><a class="el" href="group__stats__grp.html#gaa1cf7357c4043fb790efe19d3f6c2b7d" title="Computes covariances and mean of any vector of containers.">mrpt::math::covariancesAndMean</a></li>
</ul>
</li>
<li>New methods in all kind of matrices (some were only in CMatrixTemplate).<ul>
<li>insertMatrix, insertTransposeMatrix</li>
<li>extractCol, extractRow</li>
</ul>
</li>
<li>New functions:<ul>
<li><a class="el" href="group__mrpt__thread.html#gafbfb426dee2ea19f7c557b64ef60aa69" title="Terminate a thread, giving it no choice to delete objects, etc (use only as a last resource)...">mrpt::system::terminateThread</a>.</li>
<li>mrpt::math::unscented_transform_gaussian</li>
<li>mrpt::math::montecarlo_transform_gaussian</li>
<li><a class="el" href="group__stats__grp.html#gaf0a0f292b7248680014f55effd35873f" title="Computes covariances and mean of any vector of containers, given optional weights for the different s...">mrpt::math::covariancesAndMeanWeighted</a></li>
<li><a class="el" href="group__container__ops__grp.html#ga7e35ac8264c0ad08d184f5e50ceca5d6" title="Extract a column from a vector of vectors, and store it in another vector.">mrpt::math::extractColumnFromVectorOfVectors</a></li>
</ul>
</li>
</ul>
</li>
<li>New examples:<ul>
<li>observer_pattern</li>
<li>quaternions</li>
<li>unscented_transformation_test</li>
<li>grab3Dvideo</li>
</ul>
</li>
</ul>
</li>
<li><b>BUG FIXES:</b><ul>
<li><a class="el" 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> didn't always remove extra leading and trailing whitespaces in read_string().</li>
<li>Initial size of the window was ignored in <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a>.</li>
<li>Error returning 2x1 <a class="el" href="namespacemrpt_1_1math.html#a632ae0aecf78103f87f18f9ac33f7170">size()</a> in dynamic matrices, since there was only one static member shared by all matrices.</li>
<li>Swapped red-blue channels in mrpt::gui::wxImage2MRPTImage (Closes <a href="http://www.mrpt.org/node/70">this issue</a>).</li>
<li><a class="el" 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).">mrpt::poses::CPose3D</a> undefined values when initializing from a "-" operator, due to bug in <a class="el" href="group__container__ops__grp.html#ga65a4cb93289c9373a8830102a2296e2d" title="Efficiently compute the inverse of a 4x4 homogeneous matrix by only transposing the rotation 3x3 part...">mrpt::math::homogeneousMatrixInverse()</a>.</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_histogram.html#a3c73f961d0d19bb6feb8c91da2128709" title="Retuns the ratio in [0,1] range for the selected bin index, where first one is 0.">mrpt::math::CHistogram::getBinRatio()</a> and hence <a class="el" href="namespacemrpt_1_1math.html#a3d873f443e014c6c361a0d4cc32126af" title="Computes the normalized or normal histogram of a sequence of numbers given the number of bins and the...">mrpt::math::histogram</a> when do_normalization=true, always returned zero.</li>
<li>Fixed crash in rawlog-grabber when grabbing from a (non-stereo) camera and enabling preview (Closes <a href="https://sourceforge.net/tracker/?func=detail&amp;aid=2988657&amp;group_id=205280&amp;atid=993006">SF #2988657 </a>).</li>
<li>When grabbing images with <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a> and decimation is enabled in <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_generic_sensor.html" title="A generic interface for a wide-variety of sensors designed to be used in the application RawLogGrabbe...">mrpt::hwdrivers::CGenericSensor</a>, all the images were saved to disk. It's been fixed so only the decimated ones are saved.</li>
<li>Fixed direction errors in the computation of 3D rays of OpenGL viewports for perspective projection. See <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ab7083a12323bf5f938c0f6b0a4f036e4" title="Compute the 3D ray corresponding to a given pixel; this can be used to allow the user to pick and sel...">mrpt::opengl::COpenGLViewport::get3DRayForPixelCoord()</a></li>
<li>RawLogViewer: When loading gz-compressed rawlogs, the "Loading" dialog may close too early.</li>
<li>fixed compilation with GCC &lt; 4.4.1 - thanks to zhangbo (张波) for testing.</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html" title="A cloud of points, all with the same color or each depending on its value along a particular coordina...">mrpt::opengl::CPointCloud</a>: When color_from_Z is enabled, sometimes the colors switched when the range in Z was very close to 0.</li>
<li>rawlog-grabber: Parameter SF_max_time_span is now observed BEFORE inserting observations in sensory frames, thus the time span limit is strictly respected now.</li>
<li>More robust handling of strings with \ r \ n chars in matrixes fromMatlabFormat().</li>
<li>Fixed wrong results with <a class="el" href="namespacemrpt_1_1math.html#a414456e3e3b75b19cfda5e0a37c46e31" title="Computes the mean value of a vector.">mrpt::math::mean()</a> and other functions when applied to vectors of integers (By Edu).</li>
<li>Fixed <a class="el" href="group__string__manage.html#gaf5cda8c9ad3e48a986e53151b6043ce6" title="Tokenizes a string according to a set of delimiting characters.">mrpt::system::tokenize</a>'s wrong behavior with GCC.</li>
</ul>
</li>
</ul>
<hr/>
<p><a class="anchor" id="0.8.1"></a> </p>
<h2>Version 0.8.1: Released 6-MAR-2010 (svn 1590). </h2>
<ul>
<li>A very large reorganization and improvement of "mrpt::math". Thanks to Pablo Moreno for his big work here.<ul>
<li>Added a forward declarations header &lt;mrpt/math/math_fwrds.h&gt;</li>
<li>New header &lt;<a class="el" href="ops__containers_8h.html" title="This file implements several operations that operate element-wise on individual or pairs of container...">mrpt/math/ops_containers.h</a>&gt; with general arithmetic operations applicable to vectors, arrays and matrices of any kind.</li>
<li>Most matrix template implementations moved to &lt;<a class="el" href="ops__matrices_8h.html" title="This file implements miscelaneous matrix and matrix/vector operations, plus internal functions in mrp...">mrpt/math/ops_matrices.h</a>&gt;. User code that already included &lt;<a class="el" href="slam_8h.html">mrpt/slam.h</a>&gt; will need no change to keep compiling OK.</li>
<li>More small functions marked as inline.</li>
<li>Fixed some specializations that weren't actually called due to issues with forward declarations.</li>
<li>Clean up of the <a class="el" href="namespacemrpt_1_1math.html" title="This base provides a set of functions for maths stuff.">mrpt::math</a> namespace by moving auxiliary functions to <a class="el" href="namespacemrpt_1_1math_1_1detail.html">mrpt::math::detail</a>.</li>
<li>All kind of matrices now have dozens of common methods (multiply, leftDivide, rightDivide, inverse, det, eigenValues,...); this includes matrix views.</li>
</ul>
</li>
<li>Added md5 cryptographic hash function to utils.</li>
<li>MRPT can be now built in Win64.</li>
<li>Sonar observations are now processed in point maps. See CSimplePointsMap::insertObservation for arguments of type <a class="el" href="classmrpt_1_1slam_1_1_c_observation_range.html" title="Declares a class derived from &quot;CObservation&quot; that encapsules a single range measurement, and associated parameters.">mrpt::slam::CObservationRange</a>.</li>
<li>More robust wxSubsystem in <a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> classes.</li>
<li>Occupancy grid maps now have a method to simulate sonar sensors. See COccupancyGridMap2D::sonarSimulator.</li>
<li>All 3D objects in <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> now have a visible/invisible property. See <a class="el" href="classmrpt_1_1opengl_1_1_c_renderizable.html#a26a0f88efc4fa587ce6bae52577a7354" title="Set object visibility (default=true)">mrpt::opengl::CRenderizable::setVisibility</a></li>
<li>3D views (<a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> and mrpt::gui::CMyGLCanvasBase) now have:<ul>
<li>Functions to determine the 3D rays for coordinates picked by the user with the mouse. See the example "display3D".</li>
<li>A way to obtain the camera pose as a CPose3D object (see COpenGLViewport::getCurrentCameraPose).</li>
</ul>
</li>
<li>New application: navlog-viewer. A GUI tool to reproduce and examine navigation logs. See the applications wiki for more details.</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_textured_object.html" title="A base class for all OpenGL objects with loadable textures.">mrpt::opengl::CTexturedObject</a>, a new base class to factor code for all <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes loading/unloading texture images.</li>
<li>Particle filters now have new options: verbose, pfAuxFilterOptimal_MLE.</li>
<li>read_bool() for INI-like files now accepts "yes/no" and "true/false" apart from "1/0".</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_time_logger.html" title="A versatile &quot;profiler&quot; that logs the time spent within each pair of calls to enter(X)-leave(X), among other stats.">mrpt::utils::CTimeLogger</a> now can export all the timing data to a CSV file.</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_quaternion.html" title="A quaternion, which can represent a 3D rotation as pair , with a real part &quot;r&quot; and a 3D vector ...">mrpt::math::CQuaternion</a> has been "modernized": it now inherits from CArray&lt;T,4&gt; and many methods are inline and templates.</li>
<li>An important refactoring of code in all Particle Filters, both for localization and RBPF-mapping. As a result, with thousands lines of code less, many more algorithms and applications are now supported:<ul>
<li>The following classes: <a class="el" href="classmrpt_1_1poses_1_1_c_pose_p_d_f_particles.html" title="Declares a class that represents a Probability Density Function (PDF) over a 2D pose (x...">mrpt::poses::CPosePDFParticles</a>, <a class="el" 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...">mrpt::slam::CMultiMetricMapPDF</a> now support any combination of these algorithms:<ul>
<li>pfStandardProposal (SIR), sample size: fixed OR KLD-based dynamic size, different resampling strategies (<a class="el" href="classmrpt_1_1bayes_1_1_c_particle_filter.html#a5a2e5c42fba6719b5f2f4b8fa1f4154c" title="Defines the different resampling algorithms.">mrpt::bayes::CParticleFilter::TParticleResamplingAlgorithm</a>).</li>
<li>pfAuxiliaryPFStandard (APF), sample size: fixed OR KLD-based dynamic size.</li>
<li>pfAuxiliaryPFOptimal (Blanco et al.), sample size: fixed OR KLD-based dynamic size.</li>
</ul>
</li>
</ul>
</li>
<li>mrpt::system::aligned_malloc and family now work on all OS's and are used to align the memory of rows in dynamic matrices.</li>
<li>Due to many enhancements in the "template-fication" of MRPT, it's no longer equivalent to use std::vector&lt;double&gt; or vector_double, etc... The later form is the only one supported.</li>
<li>New set of classes to allow operating on a transformation of a matrix without building the auxiliary matrix, e.g. transpose, submatrices, etc... See mrpt::math::CMatrixView</li>
<li>The following classes have fully STL-like iterators, reverse_iterators and container-like methods (<a class="el" href="eigen__plugins_8h.html#ab295fd8164bf1b1acecbcb29520d62b7">begin()</a>,<a class="el" href="eigen__plugins_8h.html#ade5b39864c905cbb824d0ff6eb0d888c">end()</a>,...):<ul>
<li><a class="el" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html" title="A numeric matrix of compile-time fixed size.">mrpt::math::CMatrixFixedNumeric</a> (and derived classes)</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_matrix_template.html" title="This template class provides the basic functionality for a general 2D any-size, resizable container o...">mrpt::math::CMatrixTemplate</a> (and derived classes)</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_array.html" title="A STL container (as wrapper) for arrays of constant size defined at compile time - Users will most li...">mrpt::math::CArray</a> (and derived classes)</li>
</ul>
</li>
<li>Application 2d-slam-demo:<ul>
<li>It now supports command-line arguments. Try "2d-slam-demo --help"</li>
<li>Several improvements in the GUI.</li>
</ul>
</li>
<li>Functions modified as templates to allow its usage with a wider variety of parameter types:<ul>
<li><a class="el" href="group__container__ops__grp.html#ga13e2e339d944b37f2386fc4e0bb56935" title="Estimate the Jacobian of a multi-dimensional function around a point &quot;x&quot;, using finite differences of...">mrpt::math::estimateJacobian</a>, <a class="el" href="group__container__ops__grp.html#ga65a4cb93289c9373a8830102a2296e2d" title="Efficiently compute the inverse of a 4x4 homogeneous matrix by only transposing the rotation 3x3 part...">mrpt::math::homogeneousMatrixInverse</a></li>
</ul>
</li>
<li>New "STL extension" class: mrpt::utils::bimap&lt;KEY,VAL&gt;, a bidirectional equivalent of <a class="el" href="classstd_1_1map.html" title="STL class.">std::map</a>.</li>
<li>Reorganization of header &lt;<a class="el" href="stl__extensions_8h.html">mrpt/utils/stl_extensions.h</a>&gt;: it now actually includes a few new headers, one for each important class.</li>
<li>News in Kalman Filter implementation:<ul>
<li>New option to compute custom "new landmark"'s covariance, which is needed by, eg. MonoSLAM. The old version of "OnInverseObservationModel" still exists for backward-compatibility. See the new mrpt::bayes::OnInverseObservationModel.</li>
<li>Implementing the Jacobians is now optional. If the corresponding virtual methods are not implemented, it will be automatically detected and numeric approximation of the Jacobians will be estimated.</li>
</ul>
</li>
<li>All plots based on wxMathPlot now has a new entry in the popup menu for printing the plot to PS/PDF.</li>
<li>wxMathPlot updated to version 0.1.2 (Dec-2009).</li>
<li>Poses and point classes in <a class="el" href="namespacemrpt_1_1poses.html" title="Classes for 2D/3D geometry representation, both of single values and probability density distribution...">mrpt::poses</a> now have the operator[], usable in the new template constructor of <a class="el" href="classmrpt_1_1math_1_1_c_array_numeric.html" title="CArrayNumeric is an array for numeric types supporting several mathematical operations (actually...">mrpt::math::CArrayNumeric</a></li>
<li><a class="el" 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...">mrpt::utils::CLoadableOptions</a> now also allows writting the configuration to files, not only reading.</li>
<li>Build system:<ul>
<li>Fixed the detection of some standard functions (erfc,lrint,...) under GCC for defining the HAVE_XXX's in config.h</li>
</ul>
</li>
<li>New small functions:<ul>
<li><a class="el" href="group__stats__grp.html#ga031b06489a1ba993cc1200e4da42dfac">mrpt::math::chi2PDF</a>, <a class="el" href="group__stats__grp.html#gadaf15d0ae96eb360f18107703ff8ffc9">mrpt::math::chi2CDF</a>, <a class="el" href="group__stats__grp.html#ga3bff4b9c33b2b9b2982ce7358cd16039">mrpt::math::noncentralChi2CDF</a> (adapted from code in the Vigra project).</li>
<li>trace() (in all matrices), <a class="el" href="group__stats__grp.html#ga9ddb4b383120316162071a6c125537ef" title="Kullback-Leibler divergence (KLD) between two independent multivariate Gaussians.">mrpt::math::KLD_Gaussians</a>, <a class="el" href="group__stats__grp.html#ga11d16d8fc45991a4676b7200ec69465a" title="Return the mean and the 10%-90% confidence points (or with any other confidence value) of a set of sa...">mrpt::math::condidenceIntervals</a></li>
<li><a class="el" href="namespacemrpt_1_1random.html#a4b8c2d5323417f5760fb2ed586b07d0c" title="A random number generator for usage in STL algorithms expecting a function like this (eg...">mrpt::random::random_generator_for_STL</a></li>
</ul>
</li>
<li>New examples:<ul>
<li>math_iterators_test</li>
</ul>
</li>
<li>BUGFIXES:<ul>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_board_sonars.html" title="This &quot;software driver&quot; implements the communication protocol for interfacing a Ultrasonic range finde...">mrpt::hwdrivers::CBoardSonars</a> was not automatically registered as CGenericSensor.</li>
<li>Fixed compiling with ARIA disabled.</li>
<li>mrpt::utils::CSimpleDataBase: fixed crash when loading a record with an empty string in any field.</li>
<li>Linux only: Fixed errors compiling with <a class="el" href="glut_8h.html">glut.h</a> instead of <a class="el" href="freeglut_8h.html">freeglut.h</a> (Thanks rhn for reporting).</li>
<li>Fixed crash if <a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> windows are created, all destroyed, then some created again.</li>
<li>Linux only: Fixed ignored argument in CSemaphore::release()</li>
<li>Fixed wrong serialization of CSetOfTexturedTriangles.</li>
<li>Fixed compile errors for latest OpenCV versions due to need to include &lt;cvaux.h&gt; (By Vicente Arevalo).</li>
<li>CStream::printf would crash on very large strings. It now supports arbitrarily long strings, just like <a class="el" href="namespacemrpt.html#a3a27af794b658df5491e2b7678f8ccb8" title="A std::string version of C sprintf.">mrpt::format</a>.</li>
<li>Fixed an error compiling against OpenCV 1.1 (mainly for Fedora repositories).</li>
<li>Fixed crash if serializing a CObservation2DRangeScan or a CObservation3DRangeScan with zero scan points (will not happen in real situations, but it's safer now).</li>
<li>fixed a conceptual error in mrpt::slam::data_association: The observations do NOT have a covariance matrix! Formulas corrected accordingly.</li>
<li>data_association with JCBB only worked with Mahalanobis distance. Fixed for ML.</li>
<li>Error loading some parameters from a config file in <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_sick_laser_serial.html" title="This &quot;software driver&quot; implements the communication protocol for interfacing a SICK LMS 2XX laser sca...">mrpt::hwdrivers::CSickLaserSerial</a></li>
</ul>
</li>
</ul>
<p><br/>
 <hr/>
<p><a class="anchor" id="0.8.0"></a> </p>
<h2>Version 0.8.0: Released 30-Dec-2009 (SVN 1398). </h2>
<ul>
<li><b>Important changes:</b><ul>
<li>New minor version number due to a few incompatible changes in the API. The affected classes are:<ul>
<li><a class="el" href="classmrpt_1_1bayes_1_1_c_kalman_filter_capable.html" title="Virtual base for Kalman Filter (EKF,IEKF,UKF) implementations.">mrpt::bayes::CKalmanFilterCapable</a></li>
<li><a class="el" href="classmrpt_1_1reactivenav_1_1_c_reactive_interface_implementation.html" title="The pure virtual class that a user of CAbstractReactiveNavigationSystem-derived classes must implemen...">mrpt::reactivenav::CReactiveInterfaceImplementation</a></li>
<li>Headers for namespace <a class="el" href="namespacemrpt_1_1system.html" title="This namespace provides a OS-independent interface to many useful functions: filenames manipulation...">mrpt::system</a> have been factored in a number of smaller files.</li>
</ul>
</li>
<li>rbpf-slam now builds maps of points.</li>
<li>Data association implemented as a generic algorithm and demonstrated in the program 2d-slam-demo.</li>
<li>The interface of Kalman filters has been greatly redesigned for a better factoring of code and to explote fixed-size matrices.</li>
<li>Hardware and sensors:<ul>
<li>PointGrey Research (PGR) Bumblebee &amp; Bumblebee2 cameras: Better support in Win32 and supported for the first time in Linux as well. See mrpt::vision::CStereoGrabber_Bumblebee and <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a>.</li>
<li>New interface to SICK LMS100 via ethernet. Contributed by Adrien Barral (Robopec). See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_l_m_s100_eth.html" title="This &quot;software driver&quot; implements the communication protocol for interfacing a SICK LMS100 laser scan...">mrpt::hwdrivers::CLMS100Eth</a> and new example "SICK_lms100eth_test".</li>
<li>Support for advanced GPS devices: NTRIP client + emitter, RTK GPS, etc.</li>
<li>New class for accessing SICK LMS laser scanners with a standard serial port or USB-to-serial RS-232 or RS-424, working for Windows and Linux, up to 75 scans/sec.</li>
</ul>
</li>
<li>New algorithms (e.g. A*), many new methods in existing classes and several bug fixes.</li>
</ul>
</li>
</ul>
<ul>
<li><b>Detailed list of all changes.</b> New stuff and enhancements:<ul>
<li>MRPT can be now completely built under MinGW (GCC) if wxWidgets and OpenCV are also built with that compiler first. See the instructions in the Wiki.</li>
<li>Fixed size matrices can be declared with one or both of the dimensions equal to zero and that wouldn't lead to an error - until an element is tried to be accessed.</li>
<li>The observation <a class="el" href="classmrpt_1_1slam_1_1_c_range_bearing_k_f_s_l_a_m.html" title="An implementation of EKF-based SLAM with range-bearing sensors, odometry, a full 6D robot pose...">mrpt::slam::CRangeBearingKFSLAM</a> now has independent covariance matrices for each sensor point and also the field-of-view have been separated for yaw and pitch.</li>
<li>Added a simple profiler class <a class="el" href="classmrpt_1_1utils_1_1_c_time_logger.html" title="A versatile &quot;profiler&quot; that logs the time spent within each pair of calls to enter(X)-leave(X), among other stats.">mrpt::utils::CTimeLogger</a>.</li>
<li>Added a new option in CMake: MRPT_ENABLE_EMBEDDED_GLOBAL_PROFILER that transform all MRPT_START/MRPT_END macros into calls to the embedded profiler, dumping the results to std::cout (and MSVC output tab) at the end of each execution.</li>
<li><a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> windows now have a method CBaseGUIWindow::getPushedKey, which also returns the key modifiers (shift, alt, etc...).</li>
<li>CCameraSensor can now display a preview of the captured images with a "preview_reduction" factor to make them smaller.</li>
<li>Great improvements in creating threads by allowing arbitrary function parameters and non-static member methods. See the different signatures of <a class="el" href="group__mrpt__thread.html#ga336f5607e34b84bc7ac208068aa8e51e" title="Creates a new thread from a function (or static method) with one generic parameter.">mrpt::system::createThread</a> and <a class="el" href="group__mrpt__thread.html#ga04ca9cd3d32cc923c6fd4e42fc196e85" title="Creates a new thread running a non-static method (so it will have access to &quot;this&quot;) from another meth...">mrpt::system::createThreadFromObjectMethod</a> (By Pablo Moreno, small adds by JLBC).</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_image.html#a1b64eea6332fce6366c859d210b3e3d5" title="Save the image to a file, whose format is determined from the extension (internally uses OpenCV)...">mrpt::utils::CImage::saveToFile</a> now has a parameter to select the desired quality of JPEG files.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a> can now span several worker threads to save the grabbed images to disk, avoiding the CPU bottleneck when capturing high rate video.</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_array.html" title="A STL container (as wrapper) for arrays of constant size defined at compile time - Users will most li...">mrpt::math::CArray</a>: A STL-like container for C fixed-size arrays.</li>
<li>New method in CImageGrabber_dc1394 to enumerate all existing Firewire classes. See mrpt::vision::CImageGrabber_dc1394::enumerateCameras.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_g_p_s_interface.html" title="A parser of NMEA commands, for connecting to a GPS by a serial port.">mrpt::hwdrivers::CGPSInterface</a> now can send initialization commands to Javad/TopCon GPS units to setup RTK sources.</li>
<li><a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> window classes now have a static class factory "::Create(...)" similar to their constructor but returning smart pointers.</li>
<li>CPointsMap now has a proper observation likelihood method, similar to Sebastian Thrun's "Likelihood Field" for grids, but using points and KD-trees for the look-ups. See CPointsMap::TLikelihoodOptions</li>
<li>rbpf-slam:<ul>
<li>Many improvements to rbpf-slam, especially it now supports map building with maps of points.</li>
<li>ICP parameters of rbpf-slam can be now configured via the .ini file.</li>
<li>See the example file shared/mrpt/config_files/rbpf-slam/gridmapping_ICPbased.ini</li>
</ul>
</li>
<li>The application 2d-slam-demo now shows and computes stats on data association.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_hokuyo_u_r_g.html" title="This software driver implements the protocol SCIP-2.0 for interfacing HOKUYO URG, UTM and UXM laser s...">mrpt::hwdrivers::CHokuyoURG</a>:<ul>
<li>Now has methods setSerialPort/getSerialPort instead of the public-access variable "m_serial_port".</li>
<li>Added <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_hokuyo_u_r_g.html#a989289ffb6072e3f3493ab9fb5720b6e" title="If called (before calling &quot;turnOn&quot;), the field of view of the laser is reduced to the given range (in...">mrpt::hwdrivers::CHokuyoURG::setReducedFOV</a>.</li>
</ul>
</li>
<li>ReactiveNavigation: All functors are finally replaced by the new virtual class <a class="el" href="classmrpt_1_1reactivenav_1_1_c_reactive_interface_implementation.html" title="The pure virtual class that a user of CAbstractReactiveNavigationSystem-derived classes must implemen...">mrpt::reactivenav::CReactiveInterfaceImplementation</a>.</li>
<li>Data association is now correctly implemented and integrated into <a class="el" href="classmrpt_1_1slam_1_1_c_range_bearing_k_f_s_l_a_m2_d.html" title="An implementation of EKF-based SLAM with range-bearing sensors, odometry, and a 2D (+heading) robot p...">mrpt::slam::CRangeBearingKFSLAM2D</a>.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_coloured_points_map.html" title="A map of 2D/3D points with individual colours (RGB).">mrpt::slam::CColouredPointsMap</a>: It can be now selected different schemes for coloring (new: cmFromHeightRelativeToSensorGray).</li>
<li>Added missing loadFromTextFile method to fixed-size matrices.</li>
<li>Poses and points have new methods: asString, fromString. See <a class="el" href="classmrpt_1_1poses_1_1_c_pose_or_point.html" title="The base template class for 2D &amp; 3D points and poses.">mrpt::poses::CPoseOrPoint</a></li>
<li>getByName in <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes now is recursive when there are CSetOfObjects objects.</li>
<li>New class <a class="el" href="classmrpt_1_1utils_1_1_c_log.html" title="A decorator of CStringList special for keeping logs.">mrpt::utils::CLog</a>, by Vicente Arevalo.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_client_t_c_p_socket.html" title="A TCP socket that can be connected to a TCP server, implementing MRPT&#39;s CStream interface for passing...">mrpt::utils::CClientTCPSocket</a>: Connect and DNS look-up now have a configurable timeout.</li>
<li>For all classes that inherit from <a class="el" href="classmrpt_1_1utils_1_1_c_debug_output_capable.html" title="This base class provides a common printf-like method to send debug information to std::cout...">mrpt::utils::CDebugOutputCapable</a>, calling printf_debug now also sends the strings to the Visual Studio output window.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_generic_sensor.html" title="A generic interface for a wide-variety of sensors designed to be used in the application RawLogGrabbe...">mrpt::hwdrivers::CGenericSensor</a>:<ul>
<li>The class now implements "loadConfig" and the old virtual "loadConfig" has been renamed to "loadConfig_sensorSpecific". The former calls the latter automatically.</li>
<li>New generic parameter "grab_decimation" that enable decimating any source of observations.</li>
</ul>
</li>
<li>New class: <a class="el" href="classmrpt_1_1utils_1_1circular__buffer.html" title="A circular buffer of fixed size (defined at construction-time), implemented with a std::vector as the...">mrpt::utils::circular_buffer</a>. Used to enhance the reception buffers of these hardware drivers:<ul>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_hokuyo_u_r_g.html" title="This software driver implements the protocol SCIP-2.0 for interfacing HOKUYO URG, UTM and UXM laser s...">mrpt::hwdrivers::CHokuyoURG</a></li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">mrpt::hwdrivers::CInterfaceFTDI</a></li>
</ul>
</li>
<li>Utilities for multithread programming (See <a class="el" href="namespacemrpt_1_1synch.html" title="This namespace provides multitask, synchronization utilities.">mrpt::synch</a>)<ul>
<li>Added a pattern class for creating thread-safe variables protected by a critical section. See <a class="el" href="classmrpt_1_1synch_1_1_c_thread_safe_variable.html" title="A template for created thread-safe variables with an internal critical section controlled each read o...">mrpt::synch::CThreadSafeVariable</a>.</li>
<li>Macro <a class="el" href="_c_critical_section_8h.html#a063b848901ed4201c26e195505d31faf" title="A macro for protecting a given piece of code with a critical section; for example:">THREADSAFE_OPERATION(critsect, operation)</a>.</li>
</ul>
</li>
<li>Added serialization of missing std::vector&lt;T&gt; for T=<a class="el" href="classstd_1_1string.html" title="STL class.">std::string</a>, int8_t, int16_t.</li>
<li>New methods to read &amp; write the settings of a generic CCameraSensor object from/to a MRPT-provided wxPanel for GUI applications. See <a class="el" href="namespacemrpt_1_1hwdrivers.html#ade012ef508575eda3a40a8e8af5ade10" title="Parse the user options in the wxWidgets &quot;panel&quot; and write the configuration into the given section of...">mrpt::hwdrivers::writeConfigFromVideoSourcePanel</a>, <a class="el" href="namespacemrpt_1_1hwdrivers.html#ae1bc60d25c595b075be58ea224450a32" title="Parse the given section of the given configuration file and set accordingly the controls of the wxWid...">mrpt::hwdrivers::readConfigIntoVideoSourcePanel</a></li>
<li>COpenGLViewport now has settable min/max clipping values. See <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aa9e328e1afe4e3523649c01c656bcfb9" title="Set the min/max clip depth distances of the rendering frustum (default: 0.1 - 10000)">mrpt::opengl::COpenGLViewport::setViewportClipDistances</a>.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_config_file.html" title="This class allows loading and storing values and vectors of different types from &quot;.ini&quot; files easily.">mrpt::utils::CConfigFile</a> now can be created without specifying the associated file and do the association later with a new method.</li>
<li>Apart from 2D exclusion areas in laser scanners, 3D prism zones are now supported as well. C2DRangeFinderAbstract::loadExclusionAreas</li>
<li>A* algorithm implemented in mrpt::math::CAStarAlgorithm. (By Pablo Moreno)</li>
<li>The central registry of MRPT classes (derived from CSerializable) rewritten as a proper Singleton.</li>
<li>New interface to SICK LMS100 via ethernet. Contributed by Adrien Barral (Robopec). See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_l_m_s100_eth.html" title="This &quot;software driver&quot; implements the communication protocol for interfacing a SICK LMS100 laser scan...">mrpt::hwdrivers::CLMS100Eth</a> and new example "SICK_lms100eth_test".</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_client_t_c_p_socket.html" title="A TCP socket that can be connected to a TCP server, implementing MRPT&#39;s CStream interface for passing...">mrpt::utils::CClientTCPSocket</a> now gives a textual description of the error reasons (win32).</li>
<li>New namespace with small utilities for networking. See <a class="el" href="namespacemrpt_1_1utils_1_1net.html" title="A set of useful routines for networking.">mrpt::utils::net</a>.</li>
<li>New class for downloading differential GPS corrections from a NTRIP server. See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_n_t_r_i_p_client.html" title="A client for NTRIP (HTTP) sources of differential GPS corrections from internet servers, or Global navigation satellite system (GNSS) internet radio.">mrpt::hwdrivers::CNTRIPClient</a> and the example "ntrip-client".</li>
<li>Change in <a class="el" href="classmrpt_1_1bayes_1_1_c_kalman_filter_capable.html" title="Virtual base for Kalman Filter (EKF,IEKF,UKF) implementations.">mrpt::bayes::CKalmanFilterCapable</a>: The functionality to be implemented in the virtual method OnInverseObservationModel has been splitted in two parts: the same method, and the new OnNewLandmarkAddedToMap. This factorization allows more code reutilization.</li>
<li>Data association is now fully implemented in <a class="el" href="group__data__assoc__grp.html#gae98a41b16cbc015a8099b79ad1a5750e" title="Computes the data-association between the prediction of a set of landmarks and their observations...">mrpt::slam::data_association_full_covariance</a> and related methods.</li>
<li>New class for accessing SICK LMS laser scanners with a standard serial port or USB-to-serial RS-232 or RS-424, working for Windows and Linux, up to 75 scans/sec. See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_sick_laser_serial.html" title="This &quot;software driver&quot; implements the communication protocol for interfacing a SICK LMS 2XX laser sca...">mrpt::hwdrivers::CSickLaserSerial</a>, or the program rawlog-grabber. See also the new example configuration file "SICK_LMS_serial.ini".</li>
<li>New generic function for CRC16 computation. See <a class="el" href="namespacemrpt_1_1utils.html#a3245659930d8920d50eccdf2dab2f927" title="Computes the CRC16 checksum of a block of data.">mrpt::utils::compute_CRC16</a></li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_quaternion.html" title="A quaternion, which can represent a 3D rotation as pair , with a real part &quot;r&quot; and a 3D vector ...">mrpt::math::CQuaternion</a> now has methods for fixed size matrices.</li>
<li>Assembler optimized versions of small functions (<a class="el" href="namespacemrpt_1_1utils.html#ab7d9cdf7d271c2f41fc1c5c9fa7d0828" title="Returns the closer integer (int) to x.">mrpt::utils::round</a>,...).</li>
</ul>
</li>
<li>Changes in the build process:<ul>
<li>Clean up of options in cmake-gui. Many options are now "advanced" so they are hidden in the "simple view".</li>
<li>Better detection of wxWidgets libraries (static/dynamic libs), through a patch submitted to CMake. You'll need to update CMake to enjoy this feature.</li>
<li>Fixed building errors with wxWidgets 2.9.0</li>
<li>Fixed compilation of MRPT without opencv (in MSVC it reported an error: library 'mrpt-sifthess' missing).</li>
<li>Boost is not required anymore. boost-program-options has been replaced by the STL-based <a class="el" href="namespace_t_c_l_a_p.html">TCLAP</a> library.</li>
</ul>
</li>
<li>New small functions:<ul>
<li><a class="el" href="group__mrpt__thread.html#ga2d962c5a835828188d209dc802623ca5" title="Return the number of processors (&quot;cores&quot;), or 1 if it cannot be determined.">mrpt::system::getNumberOfProcessors</a></li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d.html#a6cd41bc62f7aaa11d969abe179a79599" title="Return true if the 6D pose represents a Z axis almost exactly vertical (upwards or downwards)...">mrpt::poses::CPose3D::isHorizontal</a></li>
<li>mrpt::math::meanAndCov and <a class="el" href="namespacemrpt_1_1math.html#a43f4e051fc574fd75b6800ad4fb25037" title="Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...">mrpt::math::cov</a> now also accept matrices as inputs (just like in MATLAB).</li>
<li><a class="el" href="namespacemrpt_1_1utils.html#aeae09d5d3a2adbfed024fdbe32ffda21" title="Converts (serializes) an MRPT object into an array of bytes within a std::string, without codifying t...">mrpt::utils::ObjectToRawString</a> and <a class="el" href="namespacemrpt_1_1utils.html#a42ebda9258713a4a9bada754001c4d8b" title="Converts back (de-serializes) a sequence of binary data within a std::string into a MRPT object...">mrpt::utils::RawStringToObject</a></li>
<li><a class="el" href="group__mrpt__topography__grp.html#gaf25c60e9571ef89dff7316ea87984f36" title="Returns the East-North-Up (ENU) coordinate system associated to the given point.">mrpt::topography::ENU_axes_from_WGS84</a></li>
<li><a class="el" href="group__mrpt__system__os.html#ga20c030721308318d3452add36f6caa5b" title="An OS-independent version of timegm (which is not present in all compilers): converts a time structur...">mrpt::system::os::timegm</a></li>
<li>mrpt::math::CMatrixTemplate::extractSubmatrixSymmetricalBlocks</li>
<li><a class="el" href="namespacemrpt_1_1utils.html#a3aaae8d44cd44b2e3d93e42644454589" title="If the second argument is above the first one, set the first argument to this higher value...">mrpt::utils::keep_max</a> and <a class="el" href="namespacemrpt_1_1utils.html#af67043bb92287af7092e91db2d6a1f19" title="If the second argument is below the first one, set the first argument to this lower value...">mrpt::utils::keep_min</a></li>
<li><a class="el" href="group__container__ops__grp.html#gae0851fd327043ae2a7054c33a3bbfcde" title="A versatile template to build vectors on-the-fly in a style close to MATLAB&#39;s v=[a b c d ...">mrpt::math::make_vector</a></li>
</ul>
</li>
<li>New examples:<ul>
<li>SICK_laser_serial_test</li>
<li>setOfTexturedTrianglesTest</li>
<li>ntrip-client</li>
<li>http_tests</li>
<li>SICK_lms100eth_test</li>
<li>a_starAlgorithm</li>
<li>cameraCampureAskDialog</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>CDisplayWindow3D won't process char key events (Thanks to Miyamoto Musashi for reporting a tested fix).</li>
<li>Linking errors due to missing template instantiations of some <a class="el" href="namespacemrpt_1_1math.html" title="This base provides a set of functions for maths stuff.">mrpt::math</a> functions (Thanks to Diego for reporting).</li>
<li>Fixed data association routines.</li>
<li>Fixed error when deserializing objects of type <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud_coloured.html" title="A cloud of points, each one with an individual colour (R,G,B).">mrpt::opengl::CPointCloudColoured</a></li>
<li>Fixed potential crash in <a class="el" href="group__time__date.html#ga3c75acbd894c8a3ff621641a47aa8c28" title="Convert a timestamp into this textual form (in local time): YEAR/MONTH/DAY,HH:MM:SS.MMM.">mrpt::system::dateTimeLocalToString</a> and other time functions when passed an invalid timestamp value.</li>
<li><a class="el" href="group__time__date.html#ga19c9ba03de2d9944dc7075ebce87abf6" title="Returns a formated string with the given time difference (passed as the number of seconds)...">mrpt::system::formatTimeInterval</a> won't show the decimal part of seconds.</li>
<li>Win32-MSVC only: Removed the "-D_SECURE_SCL=0" flag in user code that uses MRPT through CMake, since it may lead to increadibly-hard-to-debug crashes.</li>
<li>Duplicated landmarkIDs in range-bearing observations are now detected as errors.</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_textured_plane.html" title="A 2D plane in the XY plane with a texture image.">mrpt::opengl::CTexturedPlane</a> didn't reflect the change of texture after the first time it was rendered.</li>
<li>CCameraSensor::setPathForExternalImages didn't work for saving; it was neccesary to also set CImage::IMAGES_PATH_BASE, which is NOT the expected behavior by the user.</li>
<li>Fixed linking errors in user programs linked to MRPT thru CMake, when MRPT is compiled as static libs and ffmpeg support is enabled.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_config_file_base.html#a8df61de014e456e2e13f8ea30d445683" title="Save a configuration parameter of type &quot;double&quot;.">mrpt::utils::CConfigFileMemory::write</a> may raise an exception even if there was no error.</li>
<li>Linux: Fixed <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_serial_port.html" title="A communications serial port built as an implementation of a utils::CStream.">mrpt::hwdrivers::CSerialPort</a> won't write the whole data block on Write().</li>
<li>Fixed OpenGLCanvas not creating a depth buffer in some platforms/systems.</li>
<li>(Win32 only) <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">mrpt::hwdrivers::CInterfaceFTDI</a> won't neither close the USB link or unload the FT2XX.DLL at destruction.</li>
<li>C locales changed by default in wxWidgets &gt;=2.9.0 will mess up reading from config files. Fixed by forcing "C" numerics locale in all GUI applications.</li>
<li>Fixed potential random crash in <a class="el" href="group__time__date.html#gae5c2069a367dd2255a98a57997ecd6dd" title="Builds a timestamp from the parts (Parts are in UTC)">mrpt::system::buildTimestampFromParts</a> when used in multi-threaded applications.</li>
<li>lib3ds: Won't render scenes with small scales (LIB3DS_EPSILON has been reduced).</li>
<li>GUI apps: Many errors in wxWidgets wxFlexSizers fixed, as detected by the recent wx2.9.0 in Debug mode.</li>
<li>The following functions (in <a class="el" href="namespacemrpt_1_1system.html" title="This namespace provides a OS-independent interface to many useful functions: filenames manipulation...">mrpt::system</a>) did crash when a malformed TTimeStamp was passed as argument: timestampToParts, dateTimeToString, extractDayTimeFromTimestamp, timeToString, dateToString.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_client_t_c_p_socket.html#a9a4528c704db3d89620213271d9fdd22" title="Establishes a connection with a remote part.">mrpt::utils::CClientTCPSocket::connect</a> won't resolve server names.</li>
<li>Fixed hardcoded type "double" in a method of the generic template <a class="el" href="structmrpt_1_1utils_1_1_t_parameters.html" title="For usage when passing a dynamic number of (numeric) arguments to a function, by name.">mrpt::utils::TParameters</a>.</li>
<li>Fixed random crashes when opening several CDisplayWindow*'s at the same time.</li>
<li>Fixed infinite recursion (stack overflow) when deleting an arc in a <a class="el" href="classmrpt_1_1hmtslam_1_1_c_hierarchical_m_h_map.html" title="The most high level class for storing hybrid, multi-hypothesis maps in a graph-based model...">mrpt::hmtslam::CHierarchicalMHMap</a>.</li>
<li>Potential crash when freeing OpenGL textures from CTexturedPlane due to incorrect call to "glDeleteTextures".</li>
<li>Potential error in <a class="el" href="group__mrpt__thread.html#ga07d252d6de608a5cf3a4c1380c2ecdb1" title="Returns the creation and exit times of the current thread and its CPU time consumed.">mrpt::system::getCurrentThreadTimes</a> with modern MSVC compilers.</li>
<li>Fixed Debian bug <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=543621">#543621</a>.</li>
<li>Fixed a minor error in mrpt::math::computeAverageLogLik, giving a constant offset.</li>
</ul>
</li>
</ul>
<p><a class="anchor" id="0.7.1"></a> </p>
<h2>Version 0.7.1: Released 17-Aug-2009 (SVN 1144). </h2>
<ul>
<li>New methods in <a class="el" href="namespacemrpt_1_1math.html" title="This base provides a set of functions for maths stuff.">mrpt::math</a> to compute the covariance from a list of samples (See <a class="el" href="namespacemrpt_1_1math.html#a43f4e051fc574fd75b6800ad4fb25037" title="Computes the covariance matrix from a list of samples in an NxM matrix, where each row is a sample...">mrpt::math::cov</a>,...)</li>
<li>Small optimizations to random generation of samples from multivariate Gaussians.</li>
<li>RBPF-SLAM: all observations are not processed now, but only those after a given minimum increment in odometry (like in GMapping). See <a class="el" 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)...">mrpt::slam::CMetricMapBuilderRBPF</a></li>
<li>New efficient operators "+=" to compose CPose2D and CPose3D objects.</li>
<li>New methods in matrix classes:<ul>
<li>add_Ac</li>
<li>substract_Ac</li>
</ul>
</li>
<li>Slightly more efficient and more correct computation of covariance matrix in <a class="el" href="group__mrpt__scanmatching__grp.html#ga7a5ed1b5f7e14adbcd2ec35198327ae7" title="This method provides the basic least-square-error solution to a set of over-constrained correspondenc...">mrpt::scanmatching::leastSquareErrorRigidTransformation</a>.</li>
<li>Fixed the internal detection of OpenCV version according to the newest convention used in OpenCV SVN. This should fix compiling errors in some Linux distributions.</li>
<li>Reduction in the number of MRPT libraries: "mrpt-ann" and "mrpt-3ds" have disappeared (for all platforms), since their code is now integrated in "mrpt-core".</li>
<li><b>The following classes have been renamed</b> (and their corresponding header files as well). Note that typedefs with the old names will be maintained, but they are now deprecated and will disappear in future releases.<ul>
<li>CMRPTImage --&gt; CImage</li>
<li>CMRPTImageFloat --&gt; CImageFloat</li>
<li>CMRPTCanvas --&gt; CCanvas</li>
<li>CMRPTMessage --&gt; CMessage</li>
</ul>
</li>
<li>New wrapper class added for rendering a scene off-screen using framebuffer object extension (see <a class="el" href="classmrpt_1_1opengl_1_1_c_f_b_o_render.html" title="A class for rendering 3D scenes off-screen directly into an image using OpenGL extensions (glext)...">mrpt::opengl::CFBORender</a> class and example fbo_render_test) (By Vicente Arevalo).</li>
<li>Embedded lib3ds 1.3 (Library Author: Jan Eric Kyprianidis), for use in all platforms.</li>
<li>PTGs can be created through a class factory. See <a class="el" href="classmrpt_1_1reactivenav_1_1_c_parameterized_trajectory_generator.html#adb5b71869058d8b2ca57e3da2661fdf0" title="The class factory for creating a PTG from a list of parameters &quot;params&quot;.">mrpt::reactivenav::CParameterizedTrajectoryGenerator::CreatePTG</a>.</li>
<li>PTG classes rewritten and greatly simplified by using standard STL containers.</li>
<li>New utility <a class="el" href="structmrpt_1_1utils_1_1_t_parameters.html" title="For usage when passing a dynamic number of (numeric) arguments to a function, by name.">mrpt::utils::TParameters</a>.</li>
<li><a class="el" href="classmrpt_1_1math_1_1_c_polygon.html" title="A wrapper of a TPolygon2D class, implementing CSerializable.">mrpt::math::CPolygon</a> is now a wrapper around a <a class="el" href="classmrpt_1_1math_1_1_t_polygon2_d.html" title="2D polygon, inheriting from std::vector&lt;TPoint2D&gt;.">mrpt::math::TPolygon2D</a>, implementing serialization, backwards compatible with old code.</li>
<li>Added new header "mrpt/reactivenav/motion_planning_utils.h" with global utility functions for reactive navigation and motion planning. See <a class="el" href="namespacemrpt_1_1reactivenav.html" title="This namespace contains classes for building a TP-Space Reactive Navigation System.">mrpt::reactivenav</a>.</li>
<li>New methods in <a class="el" href="classmrpt_1_1slam_1_1_c_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans or other sensors...">mrpt::slam::CPointsMap</a> classes to set all the points at once (setAllPoints).</li>
<li>(UNCOMPLETED!!) New robot navigation algorithm in the mrpt-reactivenav library: PTG-based Rapidly-exploring Random Tree (PRRT) method. See <a class="el" href="classmrpt_1_1reactivenav_1_1_c_p_r_r_t_navigator.html" title="This class is a multi-threaded mobile robot navigator, implementing an (anytime) PTG-based Rapidly-ex...">mrpt::reactivenav::CPRRTNavigator</a></li>
<li>Smart pointers are now thread safe through atomic increment/decrement operations.</li>
<li>New class for atomic operations. See <a class="el" href="classmrpt_1_1synch_1_1_c_atomic_counter.html" title="This class acts exactly as an int (or long) variable, but with atomic increment and decrement operato...">mrpt::synch::CAtomicCounter</a></li>
<li>Support for custom menu entries in the popup menu of <a class="el" href="classmrpt_1_1gui_1_1_c_display_window_plots.html" title="Create a GUI window and display plots with MATLAB-like interfaces and commands.">mrpt::gui::CDisplayWindowPlots</a>. See example displayPlots and class CDisplayWindowPlots.</li>
<li>Compilation under MinGW completely fixed and tested, including OpenCV and wxWidgets.</li>
<li>Added == operator to fixed-size matrices and some CPosePDF* classes.</li>
<li>Added STL containers utility "erase_return_next" to <a class="el" href="stl__extensions_8h.html">stl_extensions.h</a></li>
<li>Implemented missing converter from SOG PDFs in CPose3DPDF::createFrom2D.</li>
<li>Windows Installer: Added missing links for some GUI applications.</li>
<li>Added several insertion-related methods in some <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes.</li>
<li>(UNCOMPLETED!!): Recovered "mono-slam" as a GUI application for both off-line and real-time monocular camera SLAM. Algorithm recovered by Mohammad Ali Amiri Atashgah (University of Sharif Technology, Tehran, Iran), GUI implementation by Jose Luis Blanco.</li>
<li>New examples:<ul>
<li>fbo_render_test</li>
</ul>
</li>
<li>New programs:<ul>
<li>mono-slam: Monocular SLAM (experimental state, UNCOMPLETED!).</li>
<li>prrt-navigator-demo: A GUI to experiment with the new PTG-based Rapidly-exploring Random Tree (PRRT) method (UNCOMPLETED!).</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>2D ellipses won't render properly in <a class="el" href="classmrpt_1_1opengl_1_1_c_ellipsoid.html" title="A 2D ellipse or 3D ellipsoid, depending on the size of the m_cov matrix (2x2 or 3x3).">mrpt::opengl::CEllipsoid</a>.</li>
<li>Potential static/dynamic library errors when linking against Boost. (Thanks Philipp Robbel for noticing!)</li>
<li>CColouredPointsMap will contain inconsistent data after calling insertPoint() or many other methods.</li>
<li>CPose3D might accept angle values out of the range ]-pi,pi]. Thanks to Philipp Robbel for noticing!</li>
<li>COccupancyGridMap2D::laserScanSimulator: Simulation of scan rays ending in free space were not marked as invalid.</li>
<li>Only the header files for mrpt-core were installed in Linux with "make install" (this also affected each Linux distribution packages!). (Closes <a href="http://sourceforge.net/tracker/?func=detail&amp;atid=993006&amp;aid=2807979&amp;group_id=205280">SF #2807979 </a>, thanks Joel).</li>
<li>ransac_detect_2D_lines (and probably all RANSAC methods) may raise exceptions for some degenerate cases. Thanks to Joel Mckay for reporting and debugging.</li>
<li>Compile errors when using automatic serialization of the STL containers "set" and "multiset".</li>
<li>NULL pointer access when de-serializing an object of a non-registered class.</li>
<li>rbpf-slam: The program did get stuck when used in "fixed number of samples" and one particle has a likelihood &gt;20 orders of magnitud than the others. Thanks to Philipp Robbel for detecting and helping to isolate the issue.</li>
<li>rbpf-slam: Images "mapping_%05i.png" files were vertically flipped.</li>
<li>Won't fuse two point maps due to an error in CSimplePointsMap::fuseWith. Thanks to Wilian França Costa for the patch.</li>
<li>Fixed a little bug in <a class="el" href="classmrpt_1_1opengl_1_1_c_ellipsoid.html" title="A 2D ellipse or 3D ellipsoid, depending on the size of the m_cov matrix (2x2 or 3x3).">mrpt::opengl::CEllipsoid</a> ray tracing.</li>
<li>Wrong computation of ICP covariance. Thanks to Wilian França Costa for the patch.</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
</p>
<p><a class="anchor" id="0.7.0"></a> </p>
<h2>Version 0.7.0: Released 27-May-2009 (SVN 1042). </h2>
<ul>
<li><b>IMPORTANT CHANGES</b>:<ul>
<li>Old deprecated methods removed.</li>
<li>Changes which may require modifications in user's code:<ul>
<li>Interface of all probability density functions (PDF) changed for efficiency: getEstimatedMean -&gt; getMean, getEstimatedCov -&gt; getCovarianceAndMean or getCovariance ; and objects returned by referenced instead of returning a copy. Old PDF interface methods marked as deprecated (and will dissapear in future releases).</li>
<li>Members x y z (and phi yaw pitch roll where applicable) from <a class="el" href="classmrpt_1_1poses_1_1_c_pose_or_point.html" title="The base template class for 2D &amp; 3D points and poses.">mrpt::poses::CPoseOrPoint</a> and derived classes are not public anymore. They must be read out with inline members x(), <a class="el" href="namespace_eigen_1_1internal.html#a3d7a581aeb951248dc6fe114e9e05f07">y()</a> and so on, and written with x(newval), y(newval), etc... This change is needed to assure that the internal state, e.g. in <a class="el" 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).">mrpt::poses::CPose3D</a>, is always consistent.</li>
<li>A few matrix arithmetic methods renamed for consistency: Now all start with "multiply_XXX", "add_XXX", etc...</li>
<li>Some constructors in poses,points &amp; matrices marked as "explicit" to avoid unintended conversions.</li>
<li>Random number generators marked as deprecated. New programs should use the new object <a class="el" href="namespacemrpt_1_1random.html#a4743bfa8fcb282b6f5d66395ccabaa73" title="A static instance of a CRandomGenerator class, for use in single-thread applications.">mrpt::random::randomGenerator</a> or instance objects of the class <a class="el" href="classmrpt_1_1random_1_1_c_random_generator.html" title="A thred-safe pseudo random number generator, based on an internal MT19937 randomness generator...">mrpt::random::CRandomGenerator</a> for thread-safety.</li>
</ul>
</li>
<li>All covariance matrices passed to a new matrix class with compile time fixed-size, with dramatic speed ups.</li>
<li>Data declarations in <a class="el" href="geometry_8h.html">geometry.h</a> have been moved to lightweight_geom_data, although TPolygons and TObjects are not really lightweight (Pablo).</li>
<li><a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> now integrates SURF features (Requires OpenCV 1.1.0, integrated by Francisco-Angel Moreno), and new interest point descriptors.</li>
<li>New hardware supported:<ul>
<li>IP cameras via rtsp:// protocol (due to support of FFmpeg libraries).</li>
<li>xSens IMU, MTi devices (Built-in version of XSens library).</li>
</ul>
</li>
<li>Win32 only: .lib and .dll files now have a postfix with the MRPT version, that is, "libmrpt-core070.lib" instead of "libmrpt-core.lib", etc...</li>
<li>New algorithms: A generic and applied RANSAC, Dijkstra for graphs, an optimizer for networks of relative poses and data association algorithms. See the list of changes below.</li>
<li>Efficient geometry structures and dozens of new geomtry methods (mainly by Pablo Moreno).</li>
<li>Geometry methods improved, corrected and expanded in <a class="el" href="namespacemrpt_1_1math.html" title="This base provides a set of functions for maths stuff.">mrpt::math</a> (by Pablo Moreno). See the list of changes below.</li>
<li>A more powerful serialization engine capable of handling arbitrarily complex data types built with STL containers and MRPT classes. See the <a href="http://www.mrpt.org/Serialization">wiki page</a>.</li>
<li>Several bug fixes.</li>
<li>New programs:<ul>
<li>camera-calib: A new GUI program (fused of old "camera-calib" &amp; "camera-calib-gui") for camera calibration with live camera capture.</li>
<li>features-matching: A new computer vision demo application.</li>
<li>2d-slam-demo: A GUI application which allows the user to run a Extended Kalman Filter (EKF) implementation of range-bearing 2D SLAM in step-by-step or continuous mode.</li>
</ul>
</li>
<li>Many new examples:<ul>
<li>createVideoFile.</li>
<li>data-association-demo</li>
<li>dijkstra-example</li>
<li>gauss_img_filtering</li>
<li>grab_camera_ffmpeg</li>
<li>optimize_pose_network</li>
<li>polyhedronIntersection: Demonstration of the capabilities of polygon intersection in 3D (Pablo).</li>
<li>polygonSplit: Polygon split (Pablo).</li>
<li>ransac-demo-applications</li>
<li>ransac-demo-plane3D</li>
<li>smart_pointers_test</li>
<li>stl_containers_serialize</li>
<li>tuMicos</li>
<li>type_name</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>Detailed list of changes:<ul>
<li>New methods in CPolyhedron to apply common operations to polyhedra. As a corollary, a lot of new polyhedra are now available. polyhedronIntersection demo now includes four times more polyhedra.</li>
<li>New powerful method in CPolyhedron to create different types of polyhedra using a regular base. Many existing methods have been adapted to this interface.</li>
<li>Added support for base64 encoding &amp; decoding. See <a class="el" href="group__string__manage.html#gac6d3779d08013438db00f640ced3b5ec" title="Decode a base-64 string into the original sequence of bytes.">mrpt::system::decodeBase64</a>, <a class="el" href="group__string__manage.html#ga5c6b7bdd3ba2ec8ac942286317c6a773" title="Encode a sequence of bytes as a string in base-64.">mrpt::system::encodeBase64</a></li>
<li>Polyhedra intersection demo improved with twelve additional pairs of polyhedra, including a random one (Pablo).</li>
<li>Ray tracing now works with CEllipsoid (Pablo).</li>
<li>Ray tracing now works with CCylinder (Pablo).</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_simple_database.html" title="This class impements a very simple database system.">mrpt::utils::CSimpleDatabase</a> interface converted to smart pointers.</li>
<li>Added "hold_on" and "hold_off" to <a class="el" href="classmrpt_1_1gui_1_1_c_display_window_plots.html" title="Create a GUI window and display plots with MATLAB-like interfaces and commands.">mrpt::gui::CDisplayWindowPlots</a>.</li>
<li>New class for 2D range-bearing SLAM. See <a class="el" href="classmrpt_1_1slam_1_1_c_range_bearing_k_f_s_l_a_m2_d.html" title="An implementation of EKF-based SLAM with range-bearing sensors, odometry, and a 2D (+heading) robot p...">mrpt::slam::CRangeBearingKFSLAM2D</a></li>
<li>CGeneralizedCylinder now works internally using CPose3D instead of TPoint3D.</li>
<li>Fixed a bug in the calculation of the distance between TPoints3D.</li>
<li>XSens Technology has granted us permission to ship the Xsens CMT library along MRPT, thus MRPT now has out-of-the-box support for XSENS MTi devices. See rawlog-grabber and <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_i_m_u_x_sens.html" title="A class for interfacing Inertial Measuring Units (IMUs) of the type &quot;XSens MTi&quot; It uses a serial port...">mrpt::hwdrivers::CIMUXSens</a></li>
<li>rawlog-grabber can now save odometry and sonar data from an ARIA-compatible robot (Pioneers 3-DX, AT, etc...). See the new configuration file "share/config_files/rawlog-grabber/activmedia_robot.ini".</li>
<li>rawlog-grabber can record video from IP-cameras thru FFMpeg via the common camera class <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a>.</li>
<li>(paco) Bumblebee stereo camera interface mrpt::vision::CStereoGrabber_Bumblebee updates to the lattest vendor's API for Win32 (Francisco Angel Moreno).</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_activ_media_robot_base.html" title="This software driver implements the communications (and some rudimentary control) for ActivMedia robo...">mrpt::hwdrivers::CActivMediaRobotBase</a> extended to read sonar data, bumpers and enable the guidance of the robot through a joystick attached to the computer.</li>
<li>Ray tracing has been considerably sped up.</li>
<li>New methods to <a class="el" href="classmrpt_1_1math_1_1_c_histogram.html" title="This class provides an easy way of computing histograms for unidimensional real valued variables...">mrpt::math::CHistogram</a> to ease the computation of PDFs.</li>
<li>New methods to control section visibility in <a class="el" href="classmrpt_1_1opengl_1_1_c_generalized_cylinder.html" title="This object represents any figure obtained by extruding any profile along a given axis...">mrpt::opengl::CGeneralizedCylinder</a>.</li>
<li>CDisplayWindowPlots now have templatized methods.</li>
<li>Added missing 2D point PDF. See <a class="el" href="classmrpt_1_1poses_1_1_c_point2_d_p_d_f.html" title="Declares a class that represents a Probability Distribution function (PDF) of a 2D point (x...">mrpt::poses::CPoint2DPDF</a>.</li>
<li>Fixed-size matrices (see <a class="el" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html" title="A numeric matrix of compile-time fixed size.">mrpt::math::CMatrixFixedNumeric</a>) used in many places now where the size can be known at compile-time, representing a dramatic sped up.</li>
<li>CGeneralizedCylinder now supports ray tracing (Pablo).</li>
<li>Added a non-optimal method to split polygons in theirs convex components, including a simple demo (Pablo).</li>
<li>Matrices now have hard-coded optimized implementations for some 2x2 and 3x3 operations (eg. determinant, inverse)</li>
<li>(experimental!!) A new generic method, mrpt::slam::data_association, which implements NN (nearest neightbor) and JCBB (Joint Compatibility Branch &amp; Bound).</li>
<li>Additional methods to retrieve data from <a class="el" href="classmrpt_1_1opengl_1_1_c_generalized_cylinder.html" title="This object represents any figure obtained by extruding any profile along a given axis...">mrpt::opengl::CGeneralizedCylinder</a> (Pablo).</li>
<li>Added some methods to <a class="el" href="classmrpt_1_1math_1_1_c_matrix_template.html" title="This template class provides the basic functionality for a general 2D any-size, resizable container o...">mrpt::math::CMatrixTemplate</a> (Pablo).</li>
<li>New methods in the geometric classes and in <a class="el" href="classmrpt_1_1opengl_1_1_c_polyhedron.html" title="This class represents arbitrary polyhedra.">mrpt::opengl::CPolyhedron</a> (Pablo).</li>
<li>New methods in <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>: scaleImage, rotateImage, ...</li>
<li>Added new malloc/realloc/free equivalents for aligned memory. See <a class="el" href="group__mrpt__memory.html#ga40295c41a02e957fdfb7af5a747fec4e" title="Returns an aligned memory block.">mrpt::system::os::aligned_malloc</a></li>
<li>New application: <em>features-matching</em>, for demonstrating and evaluating the performance of several image feature detectors &amp; descriptors. See <a href="http://www.mrpt.org/Application:features-matching">its wiki page</a>.</li>
<li>mrpt::registerAllClasses mustn't be called manually anymore: it's always automatically executed at startup.</li>
<li>Added a generic mechanism to obtain the (compiler independant, unlike typeid) name of a type. See <a class="el" href="structmrpt_1_1utils_1_1_t_type_name.html" title="A template to obtain the type of its argument as a string at compile time.">mrpt::utils::TTypeName</a>, and the <a href="http://www.mrpt.org/Metaprogramming:Type_name_to_string">documentation on the wiki</a>.</li>
<li>Now all STL containers are serialized automatically via template &lt;&lt; and &gt;&gt; operators, thus the old classes vector_serializable, etc.. are not needed anymore and has been removed. See <a class="el" href="stl__extensions_8h.html">utils/stl_extensions.h</a></li>
<li>Small changes in polyhedron intersection demo (Pablo).</li>
<li>Added methods to agglutinate vectors of <a class="el" href="structmrpt_1_1math_1_1_t_segment3_d.html" title="3D segment, consisting of two points.">mrpt::math::TSegment3D</a> into vectors of (probably skew) <a class="el" href="classmrpt_1_1math_1_1_t_polygon3_d.html" title="3D polygon, inheriting from std::vector&lt;TPoint3D&gt;">mrpt::math::TPolygon3D</a>. Due to their similarities, this code may evolve into a template in the future, so that it's suitable for both 2D and 3D objects (Pablo).</li>
<li>Added methods to extract vectors of <a class="el" href="structmrpt_1_1math_1_1_t_object2_d.html" title="Standard type for storing any lightweight 2D type.">mrpt::math::TObject2D</a> and <a class="el" href="structmrpt_1_1math_1_1_t_object3_d.html" title="Standard object for storing any 3D lightweight object.">mrpt::math::TObject3D</a> by type (Pablo).</li>
<li>More <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes adapted to <a class="el" href="structmrpt_1_1math_1_1_t_point3_d.html" title="Lightweight 3D point.">mrpt::math::TPoint3D</a> and other geometric lightweight types (Pablo).</li>
<li>Maps of landmarks now reuse the feature descriptors defined in <a class="el" href="classmrpt_1_1vision_1_1_c_feature.html" title="A generic 2D feature from an image, extracted with CFeatureExtraction Each feature may have one or mo...">mrpt::vision::CFeature</a>. See <a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html" title="A class for storing a map of 3D probabilistic landmarks.">mrpt::slam::CLandmarksMap</a></li>
<li>Geometric lightweight types have been serialized (JL/Pablo).</li>
<li>CSetOfLines class has been almost completely redone, although mantaining its former interface (Pablo).</li>
<li>mrpt::opengl::CPolyhedron::rayTrace now works properly (Pablo).</li>
<li><a class="el" href="classmrpt_1_1vision_1_1_c_feature_extraction.html" title="The central class from which images can be analyzed in search of different kinds of interest points a...">mrpt::vision::CFeatureExtraction</a> now has a more uniform interface which separates interest point detectors and descriptors (Francisco-Angel Moreno &amp; Jose Luis)</li>
<li>New feature detector: Intensity-domain spin images (SpinImage). See mrpt::vision::CFeatureExtractor</li>
<li>Safer constructors of smart pointers from base to derived classes since classes are now always checked at runtime (unless ASSERT_'s are disabled from CMake).</li>
<li>Added a CSparseMatrix template, which relies on <a class="el" href="classstd_1_1map.html" title="STL class.">std::map</a> (Pablo).</li>
<li>Added support for intersections in vectors and generic objects (Pablo).</li>
<li>Minor change in <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d.html#aaabe44aa147e5391009051b49a6d524e" title="An alternative, slightly more efficient way of doing  with G and L being 3D points and P this 6D pose...">mrpt::poses::CPose3D::composePoint</a> for efficiency purposes (Pablo).</li>
<li>Added methods to estimate lines and planes using linear regression (Pablo).</li>
<li>Added method <a class="el" href="group__stats__grp.html#gaa1cf7357c4043fb790efe19d3f6c2b7d" title="Computes covariances and mean of any vector of containers.">mrpt::math::covariancesAndMean</a> to get covariances and mean of any set of points in N-dimensions (Pablo).</li>
<li>The Levenberg-Marquardt implementation now has a second template parameter for the type of the "user parameter" passed to the evaluation functor. Instead of forcing it being a numeric vector, it can now be any arbitrary object. See <a class="el" href="classmrpt_1_1math_1_1_c_levenberg_marquardt_templ.html" title="An implementation of the Levenberg-Marquardt algorithm for least-square minimization.">mrpt::math::CLevenbergMarquardtTempl</a></li>
<li>New consistent pose-network optimizers (Experimental!):<ul>
<li>Based on Levenberg-Marquardt. See mrpt::slam::optimizePoseGraph_levmarq</li>
</ul>
</li>
<li>A new generic implementation of Dijkstra algorithm for shortest paths on a directed, possibly weighted, graph. See mrpt::math::CDijkstra</li>
<li>New centralized class for random number generators: <a class="el" href="classmrpt_1_1random_1_1_c_random_generator.html" title="A thred-safe pseudo random number generator, based on an internal MT19937 randomness generator...">mrpt::random::CRandomGenerator</a> . Old methods marked as deprecated.</li>
<li>Random Generators rewritten as a class for thread-safety: Each object has its own internal state for the PRNG.</li>
<li>New base class <a class="el" href="classmrpt_1_1utils_1_1_c_probability_density_function.html" title="A generic template for probability density distributions (PDFs).">mrpt::utils::CProbabilityDensityFunction</a> for all PDF classes.</li>
<li>Added bi-directional conversions between 3D poses and quaternion. See <a class="el" href="classmrpt_1_1math_1_1_c_quaternion.html" title="A quaternion, which can represent a 3D rotation as pair , with a real part &quot;r&quot; and a 3D vector ...">mrpt::math::CQuaternion</a> and <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d.html#a31e4434ffbcf84c2675abcc131a51abf" title="Returns the quaternion associated to the rotation of this object (NOTE: XYZ translation is ignored)  ...">mrpt::poses::CPose3D::getAsQuaternion</a></li>
<li>A new common base class for all GUI windows. See <a class="el" href="classmrpt_1_1gui_1_1_c_base_g_u_i_window.html" title="The base class for GUI window classes.">mrpt::gui::CBaseGUIWindow</a></li>
<li>Matrix constructors from poses and points moved from CMatrix &amp; CMatrixD to CMatrixTemplateNumeric for greater utility.</li>
<li>Added unary "-" operators to <a class="el" 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).">mrpt::poses::CPose3D</a> and <a class="el" href="classmrpt_1_1poses_1_1_c_pose2_d.html" title="A class used to store a 2D pose.">mrpt::poses::CPose2D</a> for obtaining the inverse poses quickly.</li>
<li>Removed deprecated methods:<ul>
<li>From <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>: loadFromBMP, loadFromJPEG, saveToBMP, saveToJPEG. Replaced by saveToFile and loadFromFile.</li>
<li>From <a class="el" href="classmrpt_1_1slam_1_1_c_rawlog.html" title="This class stores a rawlog (robotic datasets) in one of two possible formats:">mrpt::slam::CRawlog</a> and its iterators: isAction. Replace by getType</li>
</ul>
</li>
<li>Integration of ffmpeg libraries for frame-by-frame access to any kind of video or streams, like IP cameras via rtsp:// protocol. See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_f_f_m_p_e_g___input_stream.html" title="A generic class which process a video file or other kind of input stream (http, rtsp) and allows the ...">mrpt::hwdrivers::CFFMPEG_InputStream</a></li>
<li>3D windows has a method to obtain the rendered image for user processing as desired. See <a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html#a8dd06a361527d2f8e3617ec848bb7587" title="Enables the grabbing of CImage objects from screenshots of the window.">mrpt::gui::CDisplayWindow3D::captureImagesStart</a></li>
<li>Added copy constructors for <a class="el" href="structmrpt_1_1math_1_1_t_object2_d.html" title="Standard type for storing any lightweight 2D type.">mrpt::math::TObject2D</a> and <a class="el" href="structmrpt_1_1math_1_1_t_object3_d.html" title="Standard object for storing any 3D lightweight object.">mrpt::math::TObject3D</a> to allow use in containers (Pablo).</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_polyhedron.html" title="This class represents arbitrary polyhedra.">mrpt::opengl::CPolyhedron</a> and <a class="el" href="classmrpt_1_1opengl_1_1_c_generalized_cylinder.html" title="This object represents any figure obtained by extruding any profile along a given axis...">mrpt::opengl::CGeneralizedCylinder</a> classes accustomed to the new geometric methods (Pablo).</li>
<li>Added non-secure methods to access geometric object's coordinates (like in <a class="el" href="structmrpt_1_1math_1_1_t_point2_d.html" title="Lightweight 2D point.">mrpt::math::TPoint2D</a>) as an array (Pablo).</li>
<li>Intersections in <a class="el" href="namespacemrpt_1_1math.html" title="This base provides a set of functions for maths stuff.">mrpt::math</a> now work properly in almost every case (Pablo).</li>
<li>Added a signWithZero function in utils_defs (Pablo).</li>
<li>Added methods in <a class="el" href="classmrpt_1_1opengl_1_1_c_polyhedron.html" title="This class represents arbitrary polyhedra.">mrpt::opengl::CPolyhedron</a> to work with sets of <a class="el" href="classmrpt_1_1math_1_1_t_polygon3_d.html" title="3D polygon, inheriting from std::vector&lt;TPoint3D&gt;">mrpt::math::TPolygon3D</a> (Pablo).</li>
<li>Added a new test for pragma pack (Pablo).</li>
<li>Added a video file writer from a sequence of images. See <a class="el" href="classmrpt_1_1vision_1_1_c_video_file_writer.html" title="An output stream which takes a sequence of images and writes a video file in any of a given of compat...">mrpt::vision::CVideoFileWriter</a></li>
<li>Deleted old obsolete classes from <a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a>: CGaussianConvolutionKernel, CImageConvolution</li>
<li>New utilities added to <a class="el" href="namespacemrpt_1_1utils_1_1metaprogramming.html" title="A set of utility objects for metaprogramming with STL algorithms.">mrpt::utils::metaprogramming</a></li>
<li>Applied uses of RANSAC added in <a class="el" href="ransac__applications_8h.html">ransac_applications.h</a>. See <a class="el" href="group__ransac__grp.html#gad7752b90d12df1104ea99deb81a87cb6" title="Fit a number of 3-D planes to a given point cloud, automatically determining the number of existing p...">mrpt::math::ransac_detect_3D_planes</a>, <a class="el" href="group__ransac__grp.html#ga5eda1cbb54c7a1dc20cc3f905414bc05" title="Fit a number of 2-D lines to a given point cloud, automatically determining the number of existing li...">mrpt::math::ransac_detect_2D_lines</a> and <a href="http://www.mrpt.org/RANSAC_C++_examples">examples</a>.</li>
<li>Fonts used in <a class="el" href="classmrpt_1_1utils_1_1_c_canvas.html" title="This virtual class defines the interface of any object accepting drawing primitives on it...">mrpt::utils::CCanvas</a> are now internally saved as gz-compressed data streams, automatically decompressed on first use. This saves ~1Mb in the .DLL/.so file for mrpt-core when compiled with Asian fonts.</li>
<li>Two new gz-compression methods: <a class="el" href="namespacemrpt_1_1compress_1_1zip.html#a19ffeb11cd206759b10f07dabd180faa" title="Compress a memory buffer in gz-file format and return it as a block a memory.">mrpt::compress::zip::compress_gz_data_block</a> and <a class="el" href="namespacemrpt_1_1compress_1_1zip.html#a9f33fa39c5dc810d14fa459141e8b6b1" title="Decompress an array of bytes storing a gz-compressed stream of data into a memory buffer...">mrpt::compress::zip::decompress_gz_data_block</a></li>
<li>Load/Save of matrices as text files moved from <a class="el" href="classmrpt_1_1math_1_1_c_matrix_template_numeric.html" title="A matrix of dynamic size.">mrpt::math::CMatrixTemplateNumeric</a> to <a class="el" href="classmrpt_1_1math_1_1_c_matrix_template.html" title="This template class provides the basic functionality for a general 2D any-size, resizable container o...">mrpt::math::CMatrixTemplate</a>.</li>
<li><a class="el" href="group__mrpt__scanmatching__grp.html#ga1714c0f5d66a47509926ffdbfcd261d6" title="This method implements a RANSAC-based robust estimation of the rigid transformation between two plane...">mrpt::scanmatching::robustRigidTransformation</a> (and the program grid-matching) dynamically determine the number of RANSAC iterations by default.</li>
<li>Exceptions now show a more detailed stack trace. See <a class="el" href="group__mrpt__system__os.html#ga264db8d9d6e0f4db51ee9de8e29029b6" title="Dumps the current program stack with detailed information of source files and lines.">mrpt::system::stack_trace</a> (requires wxWidgets and building in "Debug").</li>
<li>Added methods to retrieve polygons (as defined in <a class="el" href="geometry_8h.html">geometry.h</a>) for some graphical classes.</li>
<li>Added constructors to transparently swap between heavy and lightweight pose classes (heavy poses are intended to stop being used in some classes in the near future).</li>
<li>Geometry methods improved, although still not fully functional.</li>
<li>Added generic RANSAC implementation. See <a class="el" href="classmrpt_1_1math_1_1_r_a_n_s_a_c___template.html" title="A generic RANSAC implementation with models as matrices.">mrpt::math::RANSAC_Template</a>, and <a href="http://www.mrpt.org/RANSAC_C++_examples">examples</a>.</li>
<li>Edit CPtuHokuyo rawlog-grabber profile to work with CTuMicos.</li>
<li>New classes for Micos Tu DT-80. See class <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_tu_micos.html" title="This class implements initialization and comunication methods to control a Tilt Unit model DT-80...">mrpt::hwdrivers::CTuMicos</a>.</li>
<li><a class="el" href="group__filesystem.html#ga076a37d5291251595fef9a49c1f3fd46" title="Delete all the files in a given directory (nothing done if directory does not exists, or path is a file).">mrpt::system::deleteFilesInDirectory</a> now has a uniform behavior in all platforms, and do not raise "consoles" in Windows GUI applications.</li>
<li>lightweight_geom_data (.h and .cpp) added to store some 3D types which require little storage (Pablo Moreno).</li>
<li>mrpt::math::geometry methods heavily improved (not fully implemented) (Pablo Moreno).</li>
<li>COpenGLStandardObject now includes some new methods (Pablo Moreno).</li>
<li>Minor changes in other OpenGL classes (Pablo Moreno).</li>
<li>Fixed a bug which caused CMyOpenGLCanvasBase to crash in some cases.</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>RawLogViewer didn't change the label of sensors when multiple observations of the same name were in one Sensory Frame.</li>
<li>Visual Leak Detector didn't work for multi-threaded applications.</li>
<li>Fixed failing <a class="el" href="group__filesystem.html#ga0a8ee608bba288dbb2ad2b93e0bf91e9" title="Test if a given directory exists (it fails if the given path refers to an existing file)...">mrpt::system::directoryExists</a> when using a trailing "/"</li>
<li>Fixed dealing with image assignments when the source is externally stored in <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>.</li>
<li>CMetricMapBuilder::loadCurrentMapFromFile won't load a GZ-compressed .simplemap file (Reported by Zoltan Tuza).</li>
<li>Bad serialization of grayscale image origin (Francisco Moreno).</li>
<li>rbpf-slam won't show the live 3D view (Thanks Yuan Fang for reporting).</li>
<li>There was no way to retrieve the main viewport's camera parameters for CDisplayWindow3D (Thanks Vijay Somers).</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_image.html#a50fc13111fafbf571e63f6777535fb84" title="Returns the image as a matrix with pixel grayscale values in the range [0,1].">mrpt::utils::CImage::getAsMatrix</a> didn't return intensity values in the normalized range [0,1] as documented.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_memory_stream.html" title="This CStream derived class allow using a memory buffer as a CStream.">mrpt::utils::CMemoryStream</a>: won't read the last byte of the memory block; won't assign an external memory block with assignMemoryNotOwn</li>
<li>Compile error in Linux with libdc1394 &gt;=2.0.0 but &lt;2.2.0 (Thanks Allemant David for reporting).</li>
<li>Compile errors when compiling in Linux without OpenGL (Thanks Michael Lisowski for reporting).</li>
<li>Linking error with Visual Studio when building as DLLs: missing implementation of CAngularObservationMesh::TFloatRange::XXX. (Closes SF <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=2693938&amp;group_id=205280&amp;atid=993006">2693938</a>).</li>
<li>SceneViewer3D does not save the menu image when saving a snapshot from the menu.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window.html" title="This class creates a window as a graphical user interface (GUI) for displaying images to the user...">mrpt::gui::CDisplayWindow</a> now correctly detects key-strokes.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window.html" title="This class creates a window as a graphical user interface (GUI) for displaying images to the user...">mrpt::gui::CDisplayWindow</a> now does not flick (on Win32) anymore when updating the image.</li>
<li><a class="el" href="group__mrpt__system__os.html#ga538802487a6af115d4cf809da2a08829" title="Saves a vector directly as a binary dump to a file:">mrpt::system::vectorToBinaryFile</a> crashes for vectors of zero-length.</li>
<li>Errors when compiling with ASSERTs off (Thanks Scott! Closes SF <a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2616902&amp;group_id=205280&amp;atid=993006">2616902</a>).</li>
<li><a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_interpolator.html#a051aae098355a1bf0849ffa16a99d21a" title="Get the previous CPose3D in the map with a minimum defined distance.">mrpt::poses::CPose3DInterpolator::getPreviousPoseWithMinDistance</a> won't return the first pose in the path as a valid result.</li>
<li><a class="el" href="group__mrpt__thread.html#ga723810cea7feb46c7391c245c5c5eec2" title="Waits until the given thread ends.">mrpt::system::joinThread</a> could block in Windows if the thread was already closed.</li>
<li>Fixed pragmas in mrpt-hwdrivers headers, which may lead to undefined functins while linking against hwdrivers in Visual Studio, non CMake-based projects.</li>
<li>Solved wrong name of .lib for mrpt-xsens under Windows, for Debug build (Thanks Vicente Arevalo!).</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_simple_database.html#a09e1bcfa81c3429575e3c42d008725f6" title="Loads the content of this database from a a XML file.">mrpt::utils::CSimpleDatabase::loadFromXML</a> won't load any valid XML file.</li>
<li>Fixed two extremely unusual cases where a <a class="el" 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).">mrpt::poses::CPose3D</a> could not be properly created from its homogeneous matrix.</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 <a class="anchor" id="0.6.5"></a> </p>
<h2>Version 0.6.5: Released 8-Feb-2009.</h2>
<ul>
<li>New method for 3D-ICP, aligning pairs of 3D point clouds using a KD-tree for looking for correspondences and Horn's equation for each iteration. See the class <a class="el" 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 ...">mrpt::slam::CICP</a>, <a class="el" href="classmrpt_1_1slam_1_1_c_metric_maps_alignment_algorithm.html#a0c431844ae5fa69e580920d6ab9b145b" title="The method for aligning a pair of metric maps, aligning the full 6D pose.">mrpt::slam::CMetricMapsAlignmentAlgorithm::Align3D</a>, and the <a href="http://www.mrpt.org/3D-ICP_Example">tutorial page</a>.</li>
<li>Added class COpenGLStandardObject to render custom objects using OpenGL primitives like GL_TRIANGLES or GL_QUAD_STRIP (Pablo Moreno).</li>
<li>CText now accepts color changes (Pablo Moreno).</li>
<li>Added "contains" method for CSetOfObjects (Pablo Moreno).</li>
<li>Added methods for loading matrices from MATLAB-like strings. See mrpt::math::CMatrixTemplate&lt;T&gt;::fromMatlabStringFormat and <a class="el" href="classmrpt_1_1utils_1_1_c_config_file_base.html#acb74289bf998e2a2b9685832d0fa8123" title="Reads a configuration parameter as a matrix written in a matlab-like format - for example: &quot;[2 3 4 ; ...">mrpt::utils::CConfigFileBase::read_matrix</a>.</li>
<li>New method for computing the mahalanobis distance. See <a class="el" href="group__stats__grp.html#ga9f4f0d1f3c898ec9b9017aa4632ff977" title="Computes the mahalanobis distance of a vector X given the mean MU and the covariance *inverse* COV_in...">mrpt::math::mahalanobisDistance</a></li>
<li>Levenberg-Marquardt and many other functions in <a class="el" href="namespacemrpt_1_1random.html" title="A namespace of pseudo-random numbers genrators of diferent distributions.">mrpt::random</a> converted into templates.</li>
<li>Added some minor methods to graphic classes, especially CSetOfLines (Pablo Moreno).</li>
<li>Matrix's method to save as plain text has been extended with the possibility of adding user comments and selecting the output format. See <a class="el" href="namespacemrpt_1_1math.html#a5c655254dc91e1e5e5b7e43ab7572d85">mrpt::math::TMatrixTextFileFormat</a>.</li>
<li>Added ray trace simulation methods to CRenderizable and every children class except for C3DSScene, CEllipsoid, CCylinder, CGeneralizedCylinder, CPolyhedron and some classes which don't represent any surfaced object (Pablo Moreno).</li>
<li>Added some classes to <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> namespace (Pablo Moreno):<ul>
<li>CAngularObservationMesh to represent a 3D world obtained from a set of traced rays.</li>
<li>CCylinder to represent a cylinder, cone or truncated cylinder.</li>
<li>CGeneralizedCylinder to represent a generalized cylinder with an axis roughly perpendicular to the Z coordinate.</li>
<li>CPolyhedron to represent any object without curves. Includes methods to create common polyhedron, although still lacks some geometric methods.</li>
</ul>
</li>
<li>CRenderizable::setColor method now works properly (affecting every child) when used in a CSetOfObjects or CSetOfTriangles (Pablo Moreno).</li>
<li>Added method mrpt::CMatrixTemplateNumeric::rank to calculate the rank of a matrix (Pablo Moreno).</li>
<li><a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> windows now correctly detect key-strokes on both the console and the windows themselves. Key codes can be obtained from the method <a class="el" href="classmrpt_1_1gui_1_1_c_base_g_u_i_window.html#ac3c1c14a30af0d92bb28d5c4930099f0" title="Waits for any key to be pushed on the image or the console, and returns the key code.">mrpt::gui::CDisplayWindow::waitForKey</a></li>
<li>Header files defining the mrpt fonts (used in <a class="el" href="classmrpt_1_1utils_1_1_c_canvas.html" title="This virtual class defines the interface of any object accepting drawing primitives on it...">mrpt::utils::CCanvas</a>) have been removed from the external headers and are internal now.</li>
<li>OpenGL objects now have a scale factor. See <a class="el" href="classmrpt_1_1opengl_1_1_c_renderizable.html#afd1dd27b9f326d4f73135c461eafa717" title="Scale to apply to the object, in all three axes (default=1)">mrpt::opengl::CRenderizable::setScale</a></li>
<li>Added type <a class="el" href="namespacemrpt_1_1math.html#a86e3d3b86e340752db1950fe2ce9cab2" title="Declares a matrix of &quot;long doubles&quot; (non serializable), or of &quot;doubles&quot; if the compiler does not supp...">mrpt::math::CMatrixLongDouble</a> for matrices of "long double" (becomes "double" if the compiler does not suppor them).</li>
<li>New namespaces:<ul>
<li><a class="el" href="namespacemrpt_1_1vision_1_1pinhole.html" title="Functions related to pinhole camera models, point projections, etc.">mrpt::vision::pinhole</a> with functions related to camera projection models.</li>
<li><a class="el" href="namespacemrpt_1_1utils_1_1metaprogramming.html" title="A set of utility objects for metaprogramming with STL algorithms.">mrpt::utils::metaprogramming</a> for grouping the metaprogramming classes.</li>
</ul>
</li>
<li>Points and poses constructors from other classes that imply a loss of information are defined as explicit, e.g. CPose3D -&gt; CPose2D, etc...</li>
<li>Fixed unnecessary link dependencies on 3ds,zlib &amp; ann libs when linking as DLL in Windows.</li>
<li>Quick method <a class="el" href="classmrpt_1_1opengl_1_1_c_open_g_l_scene.html#a48c4ac59331686468aa7067e302125f4" title="Saves the scene to a 3Dscene file, loadable by the application SceneViewer3D.">mrpt::opengl::COpenGLScene::saveToFile</a> to save 3D scenes.</li>
<li>New method for automated camera calibration: <a class="el" href="group__chessboard__calib.html#ga1da75caa6896523de9ecce29f5abe391" title="Performs a camera calibration (computation of projection and distortion parameters) from a sequence o...">mrpt::vision::checkerBoardCameraCalibration</a></li>
<li>Important changes to improve the design of <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes: "render" method is "const", more set/get methods instead of public members, etc.</li>
<li>New exception class <a class="el" href="classmrpt_1_1utils_1_1_c_exception_e_o_f.html" title="Used in mrpt::utils::CStream.">mrpt::utils::CExceptionEOF</a>, used to distinguish between normal and erroneous EOFs found while de-serializing objects from a stream.</li>
<li>Added method for RTK GPS path reconstruction: <a class="el" href="group__mrpt__topography__grp.html#ga9c017d0f875ed7f8cd455ec0c5d7fe56" title="Reconstruct the path of a vehicle equipped with 3 RTK GPSs.">mrpt::topography::path_from_rtk_gps</a></li>
<li>New math methods: <a class="el" href="group__container__ops__grp.html#ga6b94c41c7406e0d606111a7b771b72e0" title="Modify a sequence of angle values such as no consecutive values have a jump larger than PI in absolut...">mrpt::math::unwrap2PiSequence</a>, <a class="el" href="group__stats__grp.html#ga3bd9ff688b42b58bd8c2f5d6f420868f" title="Computes the average of a sequence of angles in radians taking into account the correct wrapping in t...">mrpt::math::averageWrap2Pi</a></li>
<li>Added template function <a class="el" href="group__stlext__grp.html#ga0683c85522dd9009f2c2801c18e12eae" title="Returns the index of the value &quot;T&quot; in the container &quot;vect&quot; (std::vector,std::deque,etc), or string::npos if not found.">mrpt::utils::find_in_vector</a> for searching an element in any <a class="el" href="classstd_1_1vector.html" title="STL class.">std::vector</a> container (like "find" in other containers).</li>
<li>New interpolation methods for 1D functions: <a class="el" href="group__interpolation__grp.html#ga199ae09bf97644048fe53590964abd1b" title="Linear interpolation/extrapolation: evaluates at &quot;x&quot; the line (x0,y0)-(x1,y1).">mrpt::math::interpolate2points</a>, <a class="el" href="group__interpolation__grp.html#ga1e31a6d4b982eee16bab9ae66c0ee042" title="Interpolates or extrapolates using a least-square linear fit of the set of values &quot;x&quot; and &quot;y&quot;...">mrpt::math::leastSquareLinearFit</a>.</li>
<li>CStream::printf now correctly returns an "int" instead of "void".</li>
<li>Types vector_XXX moved from global to "mrpt" namespace.</li>
<li>New color types <a class="el" href="structmrpt_1_1utils_1_1_t_color.html" title="A RGB color - 8bit.">mrpt::utils::TColor</a> &amp; <a class="el" href="structmrpt_1_1utils_1_1_t_colorf.html" title="A RGB color - floats in the range [0,1].">mrpt::utils::TColorf</a>.</li>
<li>Added support for exclusion areas to mark sensed point as invalid in laser scanners. See C2DRangeFinderAbstract::loadExclusionAreas</li>
<li>New method CPose3D::composePoint for more efficient 3D pose+point composition.</li>
<li>New examples:<ul>
<li>icp3D: Demonstration of usage for 3D-ICP.</li>
<li>rayTrace: Demo of 3D ray tracing (Pablo Moreno).</li>
<li>leastSquares: Demonstration of linear least squares interpolation.</li>
</ul>
</li>
<li>SceneViewer3D:<ul>
<li>New menu action "Take snapshot" (F2).</li>
</ul>
</li>
<li>RawLogViewer:<ul>
<li>New combo-box for selecting among different, automatically detected paths for external images. For example, this allows quickly changing between rectified and original images.</li>
<li>All I/O file operations now support the gz-compressed format.</li>
<li>Edit dialog: Support for multiple selections instead of the old combos.</li>
<li>Menu "regenerate GPS" timestamps now allows operating over several sensor labels at once.</li>
<li>"Raw Map" module: Now builds 3D maps from sequences with 3 RTK GPS.</li>
</ul>
</li>
<li>Support for configuration blocks in rawlogs. See <a class="el" href="classmrpt_1_1slam_1_1_c_rawlog.html#a46191591ea40eeea66cdf80baf6f6984" title="Saves the block of comment text for the rawlog into the passed config file object.">mrpt::slam::CRawlog::getCommentTextAsConfigFile</a></li>
<li>Many improvements in the CMake build system for Linux systems, as part of the Fedora package review process (Thanks to Mamoru Tasaka).</li>
<li>BUG FIXES:<ul>
<li>Error when compiling without GL/GLUT under Linux (Thanks to Chun-Wei for reporting).</li>
<li>Wrong computation of the likelihood in COccupancyGridMap2D::computeObservationLikelihood_CellsDifference (Thanks to Fabian Menges, SF <a href="https://sourceforge.net/tracker2/?func=detail&amp;atid=993006&amp;aid=2570053&amp;group_id=205280">2570053</a>).</li>
<li><a class="el" href="namespacemrpt_1_1utils.html#a06ed9b2f48694d76491290d425bcc5b8" title="Used to pass MRPT objects into a CORBA-like object (strings).">mrpt::utils::ObjectToString</a> won't really save the object as a string.</li>
<li>mrpt::utils::format now works for strings of arbitrarily large lengths.</li>
<li>Visual Studio: Exception when mrpt::utils::format tries to generate a too long string.</li>
<li>Wrong name of mrpt-zlib libs when compiling without wxWidgets and as DLL.</li>
<li>Compilation of app grid-matching fails (SF <a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2490011&amp;group_id=205280&amp;atid=993006">2490011</a>, Fabian Menges).</li>
<li>CPose3DInterpolator: Solved spureous transitions when "yaw" crosses the +-PI threshold.</li>
<li>RawLogViewer: Comments text block was lost after some edit operations.</li>
<li>Fixed all the warnings: "dpkg-shlibdeps: warning: dependency on ... could be avoided if ... were not uselessly linked against it (they use none of its symbols)".</li>
<li>Fixed an issue with architectures with big endiannes. Fixed Debian bug <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=509366">#509366 </a>.</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 <a class="anchor" id="0.6.4"></a> </p>
<h2>Version 0.6.4: Released 20-Dec-2008 (SVN: 696).</h2>
<ul>
<li>Full support for compiling all the libraries as DLLs under Windows.</li>
<li>Topography helper methods are now grouped in a new namespace: <a class="el" href="namespacemrpt_1_1topography.html" title="This namespace provides topography helper functions, coordinate transformations.">mrpt::topography</a></li>
<li>New class <a class="el" href="classmrpt_1_1utils_1_1_c_console_redirector.html" title="By creating an object of this class, all the output to std::cout (and std::cerr) will be redirected t...">mrpt::utils::CConsoleRedirector</a> for redirecting all the output from std::cout / std::cerr to a log file.</li>
<li>New methods in <a class="el" href="classmrpt_1_1utils_1_1_c_debug_output_capable.html" title="This base class provides a common printf-like method to send debug information to std::cout...">mrpt::utils::CDebugOutputCapable</a> for making easy reporting messages to both the console and a log file.</li>
<li>New boolean matrix classes: <a class="el" href="namespacemrpt_1_1math.html#a765e955a6829486aae0340e4087964e6" title="Declares a matrix of booleans (non serializable).">mrpt::math::CMatrixBool</a> and <a class="el" href="classmrpt_1_1math_1_1_c_matrix_b.html" title="This class is a &quot;CSerializable&quot; wrapper for &quot;CMatrixBool&quot;.">mrpt::math::CMatrixB</a></li>
<li><a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> container classes now have a templatized getByClass&lt;&gt;() method.</li>
<li>New interface class for generic PTU called CPtuBase. (Jose Raul Ruiz Sarmiento)</li>
<li>New classes for Directed Perception PTU-46-17.5 and PTU Hokuyo interfacing. See class mrpt::hwdrivers::CPtu and <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_ptu_hokuyo.html">mrpt::hwdrivers::CPtuHokuyo</a>. (Jose Raul Ruiz Sarmiento)</li>
<li>Fixed the destination of MRPTConfig.cmake in "make install" (and debian packages) such CMake can now automatically find MRPT without asking the user.</li>
<li>Added the target "make uninstall" for Linux/Unix systems.</li>
<li>New predefined 3D objects (By Miguel Angel Espada Bernal). See <a href="http://www.mrpt.org/Predefined_3D_Objects">http://www.mrpt.org/Predefined_3D_Objects</a></li>
<li>Added mime type files for installation in Linux systems (FreeDesktop-compatible, e.g. KDE, Gnome).</li>
<li>Created test targets. Use: "make", "make test"</li>
<li>Better portability with new HAVE_XXX entries in the "config.h" file.</li>
<li>Compilation with MinGW/GCC under Windows now supported. Refer to the <a href="http://www.mrpt.org/Guide:Installing_MinGW_(GCC_for_Windows)">guide on the wiki </a>.</li>
<li>Occupancy grids now have an alternative method to insert laser scans (now set by default), which takes into account the "widening" of the laser beams with distance. See the insertionOptions member of mrpt::slam::COccupancyGridMap, and also <a href="http://www.mrpt.org/Occupancy_Grids">the gridmaps tutorial</a>.</li>
<li>New configuration pragma MRPT_ALWAYS_CHECKS_DEBUG_MATRICES, enabled by default. The old MRPT_ALWAYS_CHECKS_DEBUG is not disabled by default for speed up in a number of classes under Release compilation.</li>
<li>New class for pixel color retrieval with sub-pixel accuracy from images with transformed coordinates. See <a class="el" href="classmrpt_1_1utils_1_1_c_mapped_image.html" title="This class encapsulates a MRPT Image and allows the sampling of individual pixels with sub-pixel accu...">mrpt::utils::CMappedImage</a></li>
<li>New image processing operations: rectify, Median and Gaussian filter, etc... In <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a>.</li>
<li>New method to merge several multivariate Gaussians in a Gaussian mixture (SOG) by minimizing the KL-divergence. See <a class="el" href="classmrpt_1_1poses_1_1_c_pose_p_d_f_s_o_g.html#a6b6a41a954f3636e569215352c28b308" title="Merge very close modes so the overall number of modes is reduced while preserving the total distribut...">mrpt::poses::CPosePDFSOG::mergeModes</a>.</li>
<li>Application SceneViewer renamed to SceneViewer3D to solve the Debian bug <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505272">#505272 </a>.</li>
<li>New class <a class="el" href="classmrpt_1_1opengl_1_1_c_set_of_textured_triangles.html" title="A set of textured triangles.">mrpt::opengl::CSetOfTexturedTriangles</a> for arbitrary shapes in 3D scenes with textures (by Vicente Arevalo).</li>
<li>Preview of image capture is posible in rawlog-grabber, thru new option in <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a>.</li>
<li>Added support for grabbing FireWire cameras using the library dc1394-2 (The Windows port of dc1394-2 is not released yet). See the new class mrpt::vision::CImageGrabber_dc1394.</li>
<li>New methods in matrix classes (and for vectors in <a class="el" href="group__container__ops__grp.html#ga40e8e47dea9f504a28d2a70ea8ddb158" title="Loads one row of a text file as a numerical std::vector.">mrpt::math::loadVector</a>) for initializing directly from const C arrays.</li>
<li>RawlogViewer:<ul>
<li>Many small improvements in laser &amp; image animations.</li>
<li>New menu commands for transforming rawlogs, manipulating gps data, etc...</li>
</ul>
</li>
<li>rawlog-grabber:<ul>
<li>Camera sensors now save images to a external directory. This format is also supported by RawlogViewer and dramatically reduces the cost of visualizing and loading large rawlogs.</li>
<li>Support for high-speed &amp; high-resolution IEEE1394 cameras through the class <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a> -&gt; grabber_type = dc1394.</li>
</ul>
</li>
<li>New examples:<ul>
<li>ptuDPerception: Example of use performs a simple scan.</li>
<li>ptuHokuyo: A demostration of how coordinate ptu and hokuyo for obtain a map of points that we show using a opengl window.</li>
<li>sog-merge: Algorithm for merging SOG pose pdfs.</li>
<li>pioneerRobotDemo: A demonstration of connection to a Pioneer robot (ActiveMedia Robotics) and some data requests.</li>
<li>gps-coordinates: Computation of XYZ local coordinates between two precise GPS measurements.</li>
</ul>
</li>
<li>New applications:<ul>
<li>grid-matching: A demonstration of algorithms for occupancy grid map matching. See the <a href="http://www.mrpt.org/Applications">application page</a>.</li>
<li>stereo-calib-gui: A tool for calibrating stereo cameras. Based on code from the new OpenCV 1.1.0 and the OpenCV book (requires OpenCV 1.1.0).</li>
</ul>
</li>
<li>BUG FIXES:<ul>
<li>removeObject didn't work in <a class="el" href="namespacemrpt_1_1opengl.html" title="The namespace for 3D scene representation and rendering.">mrpt::opengl</a> classes.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_config_file.html" title="This class allows loading and storing values and vectors of different types from &quot;.ini&quot; files easily.">mrpt::utils::CConfigFile</a> reported keys as non-existing if they existed but the actual value was an empty string.</li>
<li>occupancy grid map: Potential seg.fault when inserting a laser scan with the first range being invalid.</li>
<li>color gradient in <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud.html" title="A cloud of points, all with the same color or each depending on its value along a particular coordina...">mrpt::opengl::CPointCloud</a> was lost with time when color_from_z=true.</li>
<li><a class="el" href="group__filesystem.html#gac857ed6d7bd5a5d17c3ab8fc249e8cfa" title="Extract the extension of a filename.">mrpt::system::extractFileExtension</a> flag for ignore gz extensions didn't work.</li>
<li>Serialization is now compatible between systems with different endianness.</li>
<li>Fail to compile with GCC 4.4, Debian bug <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505668">#505668 </a>. Thanks to Martin Michlmayr.</li>
<li>Hopefuly fixed all wrong calculations of very precise (x,y,z) coordinates from latitude, longitude and height, in <a class="el" href="classmrpt_1_1slam_1_1_c_observation_g_p_s.html" title="Declares a class derived from &quot;CObservation&quot; that represents a Global Positioning System (GPS) readin...">mrpt::slam::CObservationGPS</a>.</li>
<li>Wrong data grabbed from xSens IMU: Gyroscope data saved as XYZ velocities. In <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_i_m_u_x_sens.html" title="A class for interfacing Inertial Measuring Units (IMUs) of the type &quot;XSens MTi&quot; It uses a serial port...">mrpt::hwdrivers::CIMUXSens</a></li>
<li>Possible lock when reading from a serial port from two different objects <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_serial_port.html" title="A communications serial port built as an implementation of a utils::CStream.">mrpt::hwdrivers::CSerialPort</a></li>
<li><a class="el" href="group__mrpt__system__os.html#ga819ac14dfaf6d9b5f25c14196fb120eb" title="An OS-independent version of getch, which waits until a key is pushed.">mrpt::system::os::getch</a>: Now really does NOT wait for an enter, but just one keystroke in Linux.</li>
<li><a class="el" href="group__filesystem.html#ga89b806814023cd0411a99d6cb4d54ea9" title="Extract just the name (without extension) of a filename from a complete path plus name plus extension...">mrpt::system::extractFileName</a> didn't work for filenames already without an extension.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_memory_chunk.html" title="A memory buffer (implements CStream) which can be itself serialized.">mrpt::utils::CMemoryChunk</a> led to segmentation faults since the re-implementation with smart pointers.</li>
<li>Wrongly report missing parser for de-serializing a <a class="el" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CSimplePointsMap</a> object in the lastest binary format.</li>
<li>OpenGL render system had an inconsistence with the internal MRPT representation of 3D objects (by Pablo Moreno Olalla).</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 <a class="anchor" id="0.6.3"></a> </p>
<h2>Version 0.6.3: Released 23-Oct-2008.</h2>
<ul>
<li>Updated "INSTALL-COMPILE.html"</li>
<li><a class="el" href="namespacemrpt_1_1gui.html" title="Classes for creating GUI windows for 2D and 3D visualization.">mrpt::gui</a> windows can now be used also from user GUIs. This was previously possible from console apps only.</li>
<li>Supports compiling without OpenCV.</li>
<li>BUG FIXES:<ul>
<li>GridmapNavSimul crashes on exit, for Windows only (SF <a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2189710&amp;group_id=205280&amp;atid=993006">2189710</a>).</li>
<li>Fixed possible compiling errors related to Boost (Thanks Xuan Vu!).</li>
<li>Wrong headers in some embedded jpeglib sources (Thanks Hai Li!).</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 <a class="anchor" id="0.6.2"></a> </p>
<h2>Version 0.6.2: Released 21-Oct-2008.</h2>
<ul>
<li><b>IMPORTANT CHANGES</b>:<ul>
<li>All metric maps now accept full 6D poses for evaluating observation likelihood, and rbpf-slam now always uses internally 6D poses.</li>
<li><a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> now integrates SIFT features computation thru Hess' C library (<a href="http://web.engr.oregonstate.edu/~hess/">http://web.engr.oregonstate.edu/~hess/</a>) (by Francisco Angel Moreno).</li>
<li>Many bug fixes, and new samples and applications.</li>
</ul>
</li>
</ul>
<ul>
<li>Detailed list of changes:<ul>
<li>All metric maps now accept full 6D poses for evaluating observation likelihood.</li>
<li>Added new macros for easier RTTI: IS_CLASS and IS_DERIVED.</li>
<li>New sensor class compatible with rawlog-grabber: A camera image grabber. See <a class="el" href="classmrpt_1_1hwdrivers_1_1_c_camera_sensor.html" title="The central class for camera grabbers in MRPT, implementing the &quot;generic sensor&quot; interface.">mrpt::hwdrivers::CCameraSensor</a>.</li>
<li>xSens IMU MTi now works on both Windows &amp; Linux with the new xSens software sources.</li>
<li><a class="el" href="classmrpt_1_1hwdrivers_1_1_c_i_m_u_x_sens.html" title="A class for interfacing Inertial Measuring Units (IMUs) of the type &quot;XSens MTi&quot; It uses a serial port...">mrpt::hwdrivers::CIMUXSens</a> now asks the IMU for calibrated acc. &amp; gyr. data as well.</li>
<li>New methods in <a class="el" href="namespacemrpt_1_1math.html" title="This base provides a set of functions for maths stuff.">mrpt::math</a>.</li>
<li>Linux &amp; gcc only: Use --as-needed to avoid executables depending on useless .so libraries.</li>
<li><a class="el" href="classmrpt_1_1gui_1_1_c_display_window3_d.html" title="A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.">mrpt::gui::CDisplayWindow3D</a> now can save the render canvas directy as a sequence of images, which helps to create videos from real-time animations.</li>
<li><a class="el" href="classmrpt_1_1bayes_1_1_c_particle_filter_capable.html#ae7468df83aa6ac4c3d616167036fd6d0" title="A static method to perform the computation of the samples resulting from resampling a given set of pa...">mrpt::bayes::CParticleFilterCapable::computeResampling</a> now implements all 4 resampling algorithms.</li>
<li><a class="el" href="namespacemrpt_1_1vision.html" title="Classes for computer vision, detectors, features, etc.">mrpt::vision</a> now integrates SIFT features computation thru Hess' C library (<a href="http://web.engr.oregonstate.edu/~hess/">http://web.engr.oregonstate.edu/~hess/</a>) (by Francisco Angel Moreno).</li>
<li>mrpt::math::CMatrixTemplateNumeric::loadFromTextFile: Lines starting with '%' or '#' are interpreted as comments and ignored.</li>
<li>New methods in <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a> for fast flip and Red-Blue swap.</li>
<li>More efficient capture of video in mrpt::vision::CImageGrabber_OpenCV (by Vicente Arevalo).</li>
<li>Applications renamed for consistency:<ul>
<li>"pf-localization"</li>
<li>"rawlog-grabber"</li>
</ul>
</li>
<li>New class <a class="el" href="classmrpt_1_1poses_1_1_c_pose_random_sampler.html" title="An efficient generator of random samples drawn from a given 2D (CPosePDF) or 3D (CPose3DPDF) pose pro...">mrpt::poses::CPoseRandomSampler</a> to efficiently draw samples from any 2D/3D pose PDF. Used to refactor code in some SLAM classes. E.g: pf-localization is now 20% faster.</li>
<li>Boost libraries are required for compiling some parts of MRPT. Follow the updated instructions in <a href="http://www.mrpt.org/Building_and_Installing_Instructions.">http://www.mrpt.org/Building_and_Installing_Instructions.</a></li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_referenced_mem_block.html" title="Represents a memory block (via &quot;void*&quot;) that can be shared between several objects through copy opera...">mrpt::utils::CReferencedMemBlock</a> redesigned: it was too obscure, now it's based on a simpler <a class="el" href="classstlplus_1_1smart__ptr.html">stlplus::smart_ptr</a></li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_file_output_stream.html" title="This CStream derived class allow using a file as a write-only, binary stream.">mrpt::utils::CFileOutputStream</a> &amp; <a class="el" href="classmrpt_1_1utils_1_1_c_file_input_stream.html" title="This CStream derived class allow using a file as a read-only, binary stream.">mrpt::utils::CFileInputStream</a> now has default constructors and "open" methods.</li>
<li><a class="el" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html" title="This object renders a 2D laser scan by means of three elements: the points, the line along end-points...">mrpt::opengl::CPlanarLaserScan</a> implemented.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a>: Simulator of laser scans now includes an optional noise in bearing angles.</li>
<li>rbpf-slam:<ul>
<li>New version 0.3: A full 6D state if always kept, even if the robot moves on a flat surface only. This enables experimenting with 6D SLAM approaches based on particle filtering.</li>
</ul>
</li>
<li>RawLogViewer, changes:<ul>
<li>Proper display of IMU observations with all their data fields.</li>
<li>Dialog "Edit" now also processes files gz-compressed.</li>
<li>Dialog "Motion model" allows modification of a part of the rawlog only.</li>
</ul>
</li>
<li>New examples:<ul>
<li>feature_extraction: Test for image feature detection using KLT, Harris and SIFTs.</li>
<li>resampling-test: Particle filtering resampling schemes.</li>
</ul>
</li>
<li>New applications:<ul>
<li>ro-localization: Range-Only Localization with particle filters. See <a href="http://www.mrpt.org/Applications">its wiki page</a>.</li>
<li>simul-grid: A command-line application to simulate rawlogs of laser scans using a world modelled by a grid map.</li>
<li>GridmapNavSimul: A GUI application which simulates a robot controlled by a joystick and generate rawlogs with noisy odometry and laser scans plus ground truth. See <a href="http://www.mrpt.org/Applications">the wiki</a>.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>Link errors in examples if paths have blank spaces.</li>
<li>ReactiveNavigationDemo crashes with VFF method (Xuan Vu: SF <a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2183187&amp;group_id=205280&amp;atid=993006">#2183187</a>).</li>
<li>RawlogViewer crashes when opening logs with embedded images (Xuan Vu: SF <a href="https://sourceforge.net/tracker2/?func=detail&amp;aid=2182167&amp;group_id=205280&amp;atid=993006">#2182167</a>).</li>
<li>USB laser scanner data acquisition: wrong bit mask in mm mode.</li>
<li>rawlog-grabber: Loss of 1 observation per grabbing period fixed.</li>
<li><a class="el" href="classmrpt_1_1utils_1_1_c_file_stream.html" title="This CStream derived class allow using a file as a read/write binary stream, creating it if the file ...">mrpt::utils::CFileStream</a>: Error when opening a file for append (fomAppend) and the file didn't exist.</li>
<li>mrpt::slam:COccupancyGridMap2D: fixed marking as occupied cells at the end of truncated rays when shorter than the "maxDistanceInsertion".</li>
<li>mrpt::vision::CImageGrabber_OpenCV didn't report an error when reaching the end of a video file.</li>
<li>Timestamps were lost in <a class="el" href="classmrpt_1_1slam_1_1_c_action.html" title="Declares a class for storing a robot action.">mrpt::slam::CAction</a> 's when copied.</li>
<li>Linker errors when compiling an external application using MRPTConfig.cmake with GCC and in Debug.</li>
<li>Wrong destruction of critical sections when embedded into objects within smart_ptr's.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_action_robot_movement2_d.html" title="Represents a probabilistic 2D movement of the robot mobile base.">mrpt::slam::CActionRobotMovement2D</a>: Wrong copy of objects with the = operator.</li>
<li>mrpt::utils::CFileGZOutputStream crashes if "close" called instead of closing at destructor.</li>
<li>Errors compiling with BUILD_ARIA=0.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><a class="anchor" id="0.6.1"></a> </p>
<h2>Version 0.6.1: Released 27-Aug-2008.</h2>
<ul>
<li>HOKUYO communications reconnect even if USB cable unplugged &amp; plugged again.</li>
<li>New, more robust version of Linux serial port.</li>
<li>particleFilterApplication now supports ".gz" input files as well.</li>
<li>"zlib" &amp; "jpeglib" included as separate libraries, for Windows in the case of not having wxWidgets.</li>
<li>xmlParser library files (src/core/utils/xmlparser/*): Legal issue fixed by replacing license with a BSD-like license from Frank Vanden Berghen (thanks!).</li>
<li>New target (Linux only): "make documentation_tutorial".</li>
<li>New examples:<ul>
<li>gravity3d: Demonstration of 3D animation and physics simulation.</li>
</ul>
</li>
<li>New applications:<ul>
<li>simul-landmarks</li>
<li>simul-beacons</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>Communications with HOKUYO in Linux eventually crashes.</li>
<li>Error in "make install", tried to copy tutorial.ps.gz intended for Debian packages. (Thanks sisyphus me)</li>
<li>Wrong text format of dates &amp; times in <a class="el" href="namespacemrpt_1_1system.html" title="This namespace provides a OS-independent interface to many useful functions: filenames manipulation...">mrpt::system</a> functions.</li>
<li>Mismatched new / free[] solved in <a class="el" href="group__mrpt__thread.html#ga336f5607e34b84bc7ac208068aa8e51e" title="Creates a new thread from a function (or static method) with one generic parameter.">mrpt::system::createThread</a> (Linux).</li>
<li>Applications icp-slam, kf-slam, rbpf-slam didn't recognize gz-compressed rawlogs.</li>
</ul>
</li>
<li>All Debian scripts &amp; files moved away from MRPT source tree for consistency.</li>
</ul>
<p><br/>
<hr/>
<br/>
 <a class="anchor" id="0.6.0"></a> </p>
<h2>Version 0.6.0: Released 14-Aug-2008.</h2>
<ul>
<li><b>IMPORTANT CHANGES</b>:<ul>
<li>All classes reorganized into a new set of namespaces. Existing user-code out of MRPT will not compile, though changes typically imply just changing the names of the included files and adding some "using namespace XXX;" lines.</li>
<li>Better support of user applications using CMake command "FIND_PACKAGE( MRPT REQUIRED )". Refer to: <a href="http://www.mrpt.org/Writing_applications_with_the_MRPT_C%2B%2B_Library">http://www.mrpt.org/Writing_applications_with_the_MRPT_C%2B%2B_Library</a></li>
<li>Pointers have been passed to smart pointer all across the code.</li>
<li>RawLog files: a new "observations-only" format has been introduced, and now all rawlog are saved compressed using "gzip" automatically (they are decompressed automatically to the user when loaded). Alternatively the user can rename a rawlog file to "name.rawwlog.gz", then use standard tools to extract the uncompressed version, if necessary.</li>
<li>The MRPT libraries can now be compiled as a shared library (.dll/.so), by setting MRPT_BUILD_SHARED_LIB from the CMake GUI.</li>
<li>New hardware libraries supported:<ul>
<li>Cross-platform (Windows/Linux) library ARIA (distributed by ActivMedia Robotics under GNU GPL) integrated into MRPT. Select the appropriate switch in CMake to enable it. See hwdrivers::CActivMediaRobotBase.</li>
<li>New hardware driver for XSens inertial measuring units (IMU). See hwdrivers::CIMUXSens.</li>
</ul>
</li>
<li>New applications:<ul>
<li>RawLogGrabber, for gathering data in real-time from a robotic platform. See wiki page: <a href="http://www.mrpt.org/Application:RawLogGrabber">http://www.mrpt.org/Application:RawLogGrabber</a></li>
<li>hmtMapViewer, an inspection tool for HMT-SLAM. See wiki page: <a href="http://www.mrpt.org/HMT-SLAM:An_Open_Source_Implementation">http://www.mrpt.org/HMT-SLAM:An_Open_Source_Implementation</a></li>
</ul>
</li>
<li>Visual Studio 6 is not supported anymore from now on: it's a too old compiler, buggy, and lacks many modern C++ features.</li>
<li>Many bugs fixed.</li>
</ul>
</li>
</ul>
<ul>
<li>All changes:<ul>
<li>Many additions to conform to Debian packaging standards and freedesktop.org standard files for creating application menus, etc.</li>
<li>Added new "colored points" map &amp; opengl objects. See mrpt::slam::CColouredPointMap and <a class="el" href="classmrpt_1_1opengl_1_1_c_point_cloud_coloured.html" title="A cloud of points, each one with an individual colour (R,G,B).">mrpt::opengl::CPointCloudColoured</a>.</li>
<li>SceneViewer also is able to read from .gz'd files (.3Dscene files, but can be renamed to .3Dscene.gz if desired).</li>
<li>Management of local and UTC times clarifies with new methods. See <a class="el" href="namespacemrpt_1_1system.html" title="This namespace provides a OS-independent interface to many useful functions: filenames manipulation...">mrpt::system</a>, time functions.</li>
<li>Added a new class for transparent disk-swapped loading of very large datasets. see mrpt::slam::CRawlogXXL.</li>
<li>Exception handling prepared to correctly manage bad_alloc exceptions (for out of memory scenarios).</li>
<li>Added a 1D function interpolator using splines. See <a class="el" href="classmrpt_1_1math_1_1_c_spline_interpolator1_d.html" title="A (persistent) sequence of (x,y) coordinates, allowing queries of intermediate points through spline ...">mrpt::math::CSplineInterpolator1D</a>.</li>
<li>Added a 6D poses interpolator, using splines. See <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_interpolator.html" title="A trajectory in time and in 6D (CPose3D) that interpolates using splines the intervals between a set ...">mrpt::poses::CPose3DInterpolator</a>.</li>
<li>Removed built-in zlib library, replaced by wxWidget's one.</li>
<li>Added support for easy read and write of .gz files. For the automatic streams, see <a class="el" href="classmrpt_1_1utils_1_1_c_file_g_z_input_stream.html" title="Transparently opens a compressed &quot;gz&quot; file and reads uncompressed data from it.">mrpt::utils::CFileGZInputStream</a> and mrpt::utils::CFileGZOutputStream. For manual operation, see <a class="el" href="namespacemrpt_1_1compress_1_1zip.html" title="Compression using the &quot;zip&quot; algorithm and from/to gzip (gz) files.">mrpt::compress::zip</a>.</li>
<li>New opengl object: <a class="el" href="classmrpt_1_1opengl_1_1_c3_d_s_scene.html" title="This element keeps a set of objects imported from a 3DStudio file (.3ds).">mrpt::opengl::C3DSScene</a> for importing complete scenes from 3D Studio files (using the open source lib3ds library, Copyright (C) 1996-2007 by Jan Eric Kyprianidis &lt;www.kyprianidis.com&gt; ).</li>
<li>Class for storing rawlogs renamed as "mrpt::slam::CRawlog", and enabled for the new observation-only <a href="http://www.mrpt.org/http://www.mrpt.org/Rawlog_Format">rawlog file format</a>.</li>
<li>Introduced precompiled headers for a dramatic reduction of compilation time thru the header &lt;<a class="el" href="slam_8h.html">mrpt/slam.h</a>&gt;.</li>
<li>The method CSerializable::duplicate has been optimized using directly the derived class copy constructor instead of a temporary memory buffer.</li>
<li>Created a new metric map: grid map of heights. See <a class="el" href="classmrpt_1_1slam_1_1_c_height_grid_map2_d.html" title="A mesh representation of a surface which keeps the estimated height for each (x,y) location...">mrpt::slam::CHeightGridMap2D</a>.</li>
<li>Added a method for estimating the Jacobian of a function by finite differences. See math::estimateJacobian.</li>
<li>Source tree has undergone a re-ordering and rename. Now, libraries are named as: mrpt-core, mrpt-hwdrivers, mrpt-ann, etc. and all the sources are in &lt;mrpt&gt;/src.</li>
<li>Added generic class for Levenberg-Marquart optimization problems. See utils::CLevenbergMarquardt and the <a href="http://www.mrpt.org/Levenberg%E2%80%93Marquardt_algorithm">wiki tutorial on the topic</a>.</li>
<li>Added communications support for the new HOKUYO UTM-30LX (Windows and Linux). Refer to the <a href="http://www.mrpt.org/Example:HOKUYO_URG_Laser_Scanner">wiki page</a>.</li>
<li>New method introduced to gas distribution mapping: optimized Kalman filter with constant time update. See <a class="el" href="classmrpt_1_1slam_1_1_c_gas_concentration_grid_map2_d.html" title="CGasConcentrationGridMap2D represents a PDF of gas concentrations over a 2D area.">mrpt::slam::CGasConcentrationGridMap2D</a>.</li>
<li>The class utils::CTicTac now does not use dynamic memory, so it's constructor &amp; destructor are faster.</li>
<li>Several optimizations applied to 2D and 3D geometry classes (poses::CPoseOrPoint derived ones).</li>
<li>Added cross-platform support for "alloca". See system::alloca.</li>
<li>Sources updated to be compatible with GCC 4.3 and Visual Studio C++ 2008.</li>
<li>Thread statistics now are also implemented for Linux. See system::getCurrentThreadTimes.</li>
<li>HWDRIVERS classes unified under the "generic sensor model". See hwdrivers::CGenericSensor.</li>
<li>3D render canvas classes unified under the new class utils::WX_gui::CMyGLCanvas_Base.</li>
<li>Added serializable STL classes. See utils::vector_serializable, etc. See <a class="el" href="stl__extensions_8h.html">utils/stl_extensions.h</a></li>
<li>Added serialization to the whole mapping framework state in HMT-SLAM, and many related classes. See <a class="el" href="classmrpt_1_1hmtslam_1_1_c_h_m_t_s_l_a_m.html" title="An implementation of Hybrid Metric Topological SLAM (HMT-SLAM).">mrpt::hmtslam::CHMTSLAM</a>.</li>
<li>lib_hwdrivers: Custom device-dependent initialization commands can be sent when opening a GPS interface. See hwdrivers::CGPSInterface.</li>
<li>Joysticks and game-pads fully supported now under both Windows and Linux. See hwdrivers::CJoystick.</li>
<li>Added new applications:<ul>
<li>RawLogGrabber, for gathering data in real-time from a robotic platform. See wiki page: <a href="http://www.mrpt.org/Application:RawLogGrabber">http://www.mrpt.org/Application:RawLogGrabber</a></li>
<li>hmtMapViewer, an inspection tool for HMT-SLAM. See wiki page: <a href="http://www.mrpt.org/HMT-SLAM:An_Open_Source_Implementation">http://www.mrpt.org/HMT-SLAM:An_Open_Source_Implementation</a></li>
</ul>
</li>
<li>Added new examples:<ul>
<li>/samples/UTILS/fileSystemWatcher: Demonstrating watching of directory changes. Based on class utils::CFileSystemWatcher.</li>
</ul>
</li>
<li>RawLogViewer:<ul>
<li>A new facy custom tree view, extremely more efficient for very large datasets and with a time-line to graphically visualize timestamps.</li>
<li>Many new commands: resort from timestamps, regenerate timestamps from GPS observations, etc.</li>
<li>In the "raw-map" window the user can change now the number of types of maps to build from odometry + raw observations.</li>
<li>Implemented building a map from a rawlog with RTK GPS data. See "RawMap" dialog.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>Textual representation of dates and times with seconds represented with just one digit.</li>
<li>Fixed wrong computation of transformation from GPS to local coordinates.</li>
<li>Exception raised if an empty CImage is serialized.</li>
<li>Wrong conversion of old serialization versions of gridmaps.</li>
<li>Parameters of a gas gridmap were ignored after loading from .ini.</li>
<li>Changing by hand the coordinates in <a class="el" 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).">mrpt::poses::CPose3D</a> was not persistent when serializing the object.</li>
<li>Added missing "+ operators" to <a class="el" href="classmrpt_1_1poses_1_1_c_point3_d.html" title="A class used to store a 3D point.">mrpt::poses::CPoint3D</a>.</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CSimplePointsMap</a>: Serialization was not cross-platform (it used "unsigned long" data type).</li>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_observation_g_p_s.html" title="Declares a class derived from &quot;CObservation&quot; that represents a Global Positioning System (GPS) readin...">mrpt::slam::CObservationGPS</a> didn't save the "sensorPose" when streaming.</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>MAY-2008:<ul>
<li>mrpt::poses::CPointsMap now also has a horizontal tolerance range for "horizontal" or "planar" maps.</li>
<li>Pseudorandom number generator algorithm Mersenne twister MT19937 implemented in utils::RandomGenerator for uniform distributions (in turn used for the rest). This assures same PRNs over different platforms.</li>
<li>gui::CDisplayWindowPlots now can also manage 2D bitmaps plots, that can be combined with 2D vectorial plots. See gui::CDisplayWindowPlots::image.</li>
<li>CPointsMap::compute3DMatchingRatio is now ~6 times faster (using KD-tree).</li>
<li>Missing implementation of KD-tree for 3D points in mrpt::poses::CPointsMap now complete.</li>
<li>Added support for file-system watching. See utils::CFileSystemWatcher.</li>
<li>SceneViewer:<ul>
<li>New option to allow free rotation and zoom of the camera even for scenes with the flag "followCamera".</li>
</ul>
</li>
<li>RawLogViewer:<ul>
<li>Added importer for "rtl" log files.</li>
<li>Added capability to export several GPSs to text files.</li>
<li>Sensor labels appear in the tree view.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>"mrpt::slam::CSensFrameProbSequence::operator =" was wrongly implemented.</li>
<li>In gridmaps (<a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a>):<ul>
<li>Calling <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html#a1232d285cf713134549eb4d409ca9dfa" title="Change the size of gridmap, maintaining previous contents.">mrpt::slam::COccupancyGridMap2D::resizeGrid</a> only supports growing the grid (not shrinking). This is now forced internally to fix impredictable results.</li>
<li>In some situations, inserting a 2D laser scan ray ending very close to the border didn't make the grid to extend its size, and may lead to memory corruption.</li>
<li>Disabled ROWSIZE_MULTIPLE_16 in <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a> to avoid rare memory corruptions (bug to be tracked down if wanna enable it in the future again...).</li>
</ul>
</li>
<li>Fixed support for Bumblebee in external applications through CMake system (MRPTconfig.cmake).</li>
<li>Wrong reporting of stacked exceptions messages.</li>
<li>Fixed wrong calculation of (x,y,z) coordinates from latitude, longitude and height, in <a class="el" href="classmrpt_1_1slam_1_1_c_observation_g_p_s.html" title="Declares a class derived from &quot;CObservation&quot; that represents a Global Positioning System (GPS) readin...">mrpt::slam::CObservationGPS</a>.</li>
<li>utils::CClientSocket did send debug information in the middle of actual data!. Thanks to Vicente Arevalo for reporting.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 <a class="anchor" id="0.5.5"></a> </p>
<h2>Version 0.5.5: Released April 30, 2008.</h2>
<ul>
<li>APR-2008:<ul>
<li>New 2D font render engine in utils::CCanvas. It now supports a number of different fonts, including CJK (Chinese-Japanese-Korean) characters.</li>
<li>HOKUYO URG04 laser scanner interface now works for Linux and Windows. See hwdrivers::CHokuyoURG and <a href="http://www.mrpt.org/Example:HOKUYO_URG_Laser_Scanner">the wiki page</a>.</li>
<li>Serialization format changed: added an end-flag and 5 bytes saved per dumped object. See the serialization description <a href="http://www.mrpt.org/Serialization">here</a>.</li>
<li>Management of 3D scenes greatly improved through the introduction of multi-viewports. This has been a major change, but compatibility with old code has been maintained as much as possible. See opengl::COpenGLScene, or the <a href="http://www.mrpt.org/Tutorial_3D_Scenes">tutorial</a>.</li>
<li>Generation of HTML and CHM documentation has been integrated in the project workspace, as "make documentation_XXX" for "make" or new projects in Visual Studio.</li>
<li>Occupancy grids reimplemented with a discrete representation of log-odds. Most common operations are now faster (e.g. inserting a laser scan is x10 faster!). See mrpt::slam::COccupancyGridMap and <a href="http://www.mrpt.org/Occupancy_Grids">the gridmaps tutorial</a>.</li>
<li>The file "MRPT_version.h" is now automatically updated from CMake with the version + SVN (if local copy is a repository).</li>
<li>Socket classes are now fully implemented for Linux and Windows. See utils::CClientTCPSocket and utils::CServerTCPSocket.</li>
<li>Added two new CStream classes: utils::CFileInputStream, utils::CFileOutputStream, specializations of the old utils::CFileStream.</li>
<li>File stream classes rewritten based on standard std::iostream classes (faster I/O). See utils::CFileStream.</li>
<li>Examples can now be built and run from any directory, through the new config <a href="file:">file:</a> "MRPT_examples_config.h".</li>
<li>Added support to any number of points map within <a class="el" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">mrpt::slam::CMultiMetricMap</a>.</li>
<li>Added a new way to store images within utils::CImage: external storage in separate files, to enable managing very large rawlogs efficiently. It is transparent to the user, the images will be loaded automatically from disk when needed.</li>
<li>Options of <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a>, mrpt::poses::CPointsMap and <a class="el" href="namespacemrpt_1_1slam.html" title="This namespace contains algorithms for SLAM, localization, map building, representation of robot&#39;s ac...">mrpt::slam</a>:::CMultiMetricMap are now persistent (included in the serialization).</li>
<li>Macros max,min,max3,min3 passed to inline template functions, reusing std::max &amp; std::min.</li>
<li>The following synchronization classes can now be safely copied (eg. within STL containers) and they still refer to the same OS's synchronization object: synch::CSemaphore, synch::CCriticalSection, synch::CEvent.</li>
<li>New class utils::CReferencedMemBlock for memory blocks that have to be shared between objects when copied with "=".</li>
<li>Major revision of many classes to satisfy design rules in Scott Meyers' "Effective C++ book" (-Weffc++ gcc option).</li>
<li>Added new examples:<ul>
<li>/samples/MRML/pathPlanning: Demonstrating path finding in occupancy grid maps for circular robots.</li>
<li>/samples/MRML/benchmark-gridmap</li>
<li>/samples/MRML/gridMapLikelihoodCharacterization</li>
<li>/samples/HWDRIVERS/HOKUYO_laser_test: Added example for HOKUYO laser range finder.</li>
</ul>
</li>
<li>Re-factorization of the main library (lib_MRPT) for faster rebuild and better modularity. New libraries in "/apps/lib_XXX":<ul>
<li>lib_HMTSLAM.</li>
<li>lib_HWDRIVERS.</li>
</ul>
</li>
<li>RawLogViewer version 2.2:<ul>
<li>Now the user can choose the format (png,jpg,...) of the image files when generating image lists, transforming into external storage image observations, etc.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>No timestamp saved in rawlogs for some observations.</li>
<li>Extra NULL character stored in type list in utils::CTypeSelector.</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>MAR-2008:<ul>
<li>New classes added in file "UTILS/safe_pointers.h" for making classes with pointer members safer.</li>
<li>Added switches to CMake system to disable MRPT_START/END and ASSERT_ blocks, for speed up on well tested applications.</li>
<li>Added new class utils::CMemoryChunk.</li>
<li>Added a new application for building metric maps from ".simplemap" files.</li>
<li>Added a class for message passing between threads. See utils::CMessageQueue.</li>
<li>Created <a class="el" href="classmrpt_1_1slam_1_1_t_k_l_d_params.html" title="Option set for KLD algorithm.">mrpt::slam::TKLDParams</a> to unify KLD-sampling parameters across different classes.</li>
<li>mrpt::slam::CHybridMetricMap finally renamed <a class="el" 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...">mrpt::slam::CMultiMetricMapPDF</a>, for consistency with <a class="el" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">mrpt::slam::CMultiMetricMap</a>.</li>
<li>Particle filter classes re-organized: options are now kept in bayes::CParticleFilter, and steps are run with CParticleFilter::executeOn, to avoid pointers (less safe) and be more sensible.</li>
<li>Added a tolerance threshold for the pitch/roll of laser scans to be treated as "horizontal" in <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a>.</li>
<li>A textual label added to all observations to describe its sensor (See CObservation::sensorLabel).</li>
<li><a class="el" 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...">mrpt::slam::CSensoryFrame</a> and <a class="el" href="classmrpt_1_1slam_1_1_c_action_collection.html" title="Declares a class for storing a collection of robot actions.">mrpt::slam::CActionCollection</a> now behave like STL containers (begin,end,iterator,erase,...); internal lists are protected.</li>
<li>All geometry, PDFs, and Kalman Filter classes passed from float -&gt; double.</li>
<li>Added a new, more efficient implementation to bayes::CKalmanFilterCapable, processing one observation (not each scalar component) at once.</li>
<li>Added new fast operations to matrices. See math::CMatrixTemplateNumeric.</li>
<li>Fixed the small memory leak of the ANN library by calling annClose.</li>
<li>SceneViewer:<ul>
<li>Scenes are compiled into OpenGL lists for efficiency.</li>
</ul>
</li>
<li>RawLogViewer version 2.2:<ul>
<li>Added a command to convert images of old rawlogs into delayed-load images.</li>
<li>Support for delayed-load images: now much larger rawlogs can be managed efficiently.</li>
<li>Added "compact rawlog" command: group consecutive actions &amp; observations.</li>
<li>Added "loss-less decimation".</li>
<li>Added "edit rawlog" by name of sensor.</li>
<li>Now two monocular images can be displayed simultaneously in the "View images as video"-module.</li>
<li>Added "export/import to ALOG format".</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>Fixed compiling errors when compiling under Linux without GL/GLUT.</li>
<li>Wrong copy of 3D angles in CPose3DPDFGaussian::copyFrom.</li>
<li>Missing a valid, secure operator (operator =) for bayes::CParticleFilterData.</li>
<li>Compiling errors due to non-ASCII Spanish characters (thanks to Zhe Zhang).</li>
<li>Unpredictable result if a 2D laser scan with all invalid points is inserted in a pointsmap.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>Version 0.5.4: Released March 6, 2008.</h2>
<ul>
<li>MAR-2008:<ul>
<li>Size variables in mrpt::poses::CPointsMap, math::CPolygon, and ReactiveNavigationLibrary passed to "size_t".</li>
<li>Thread join implemented in Windows.</li>
<li>Added a new class synch::CCriticalSectionLocker to assure consistent critical section leaving in any situation (exceptions, programmer's mistakes,...).</li>
<li>Implemented Iterative Kalman Filter (IKF). See bayes::CKalmanFilterCapable.</li>
<li>Next MRPT release will be published under the GNU GPL version 3 (comment blocks updated in all source files).</li>
<li>Correspondences between point maps implemented with KD-tree: "classic ICP" is now ~10x faster.</li>
<li>Removed wrong covariance estimation in <a class="el" href="classmrpt_1_1slam_1_1_c_points_map.html#a396aa18fe072aec193268cdc4875daee" title="Computes the matchings between this and another 2D/3D points map.">mrpt::poses::CPointsMap::computeMatchingWith2D</a> and added a new better one to <a class="el" 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 ...">mrpt::slam::CICP</a>.</li>
<li>The library ANN (Approximate Nearest Neighbor) by Sunil Arya and David Mount (University of Maryland) has been integrated in the build tree.</li>
<li>Added an option to utils::CImage to disable ZIP compression when storing images.</li>
<li>Added the all new implementation of HMT-SLAM. See mrpt::slam::CHMTSLAM.</li>
<li>Fixed all 64-bit portability issues detected by Visual Studio 2005.</li>
<li>Created a repository of 3D objects in opengl::stock_objects.</li>
<li>COpenGLScene &amp; opengl::CSetOfObjects now have the list of objects as "protected" for assure safe memory-management.</li>
<li>Added build options as switchs in the CMake build system for:<ul>
<li>The GCC stdlibc++ "parallel mode". See <a href="http://algo2.iti.uni-karlsruhe.de/singler/mcstl/.">http://algo2.iti.uni-karlsruhe.de/singler/mcstl/.</a></li>
<li>Selecting 8bits/16bits cell size in occupancy grid maps.</li>
<li>Enabling code profiling (GNU GCC only).</li>
</ul>
</li>
<li>Added new applications:<ul>
<li>icp-slam: A very naive mapping algorithm based on a single metric map &amp; ICP laser scan alignment. See <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map_builder_i_c_p.html" title="A class for very simple 2D SLAM based on ICP.">mrpt::slam::CMetricMapBuilderICP</a>.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>Copy operator of 6D poses didn't work always as expected.</li>
<li>Pose composition of 6D Gaussian poses (poses::CPose3DPDFGaussian) used wrong Jacobians.</li>
</ul>
</li>
</ul>
</li>
<li>FEB-2008:<ul>
<li>Added a new application: camera-calib, by Vicente Arevalo (University of Malaga).</li>
<li>Added "point size" property to UTILS:opengl::CPointCloud.</li>
<li>Windows only: OpenCV linked again as a DLL instead of a static library, in order to free 30Mb in MRPT packages, useless for non-Windows users.</li>
<li>RawlogViewer &amp; SceneViewer: Directory of last opened file now saved when invoking programs with file as command-line argument.</li>
<li>Added a new mechanism for displaying mathematical graphs using MATLAB-like "plot" commands. See gui::CDisplayWindowPlots.</li>
<li>Visual Leak Detector integrated in the CMake build system.</li>
<li>Extended Kalman Filter implementation rewritten from scratch. See bayes::CKalmanFilterCapable.</li>
<li>Implemented missing operations (move,resize,...) in gui::CDisplayWindow &amp; gui::CDisplayWindow3D.</li>
<li>New implementation of the Kalman Filter in <a class="el" href="classmrpt_1_1slam_1_1_c_range_bearing_k_f_s_l_a_m.html" title="An implementation of EKF-based SLAM with range-bearing sensors, odometry, a full 6D robot pose...">mrpt::slam::CRangeBearingKFSLAM</a>: 'a la Davison', orders of magnitude faster than naive Kalman (new version 0.2 of application "kf-slam").</li>
<li>Improved 3D/6D geometry implementation: x2 speed-up in (inverse) pose compositions (utils::CPoseOrPoint and derived classes).</li>
<li>Addition of a new matrix class: math::CMatrixFixed, for compile-time known sizes (more efficient??).</li>
<li>Fixed compiling errors if MRPT_HAS_WXWIDGETS = 0.</li>
<li>Generation of CMakeLists fully automated for samples.</li>
<li>Added support for "pkg-config libMRPT --libs --cflags" if the library is make install'ed, UNIX only.</li>
<li>"Save as..." implemented in gui::CDisplayWindow.</li>
<li>Added new examples:<ul>
<li>samples/UTILS/threadsTest, demonstrating the creation of threads and synchronization.</li>
<li>UTILS/benchmark-matrix.</li>
<li>samples/UTILS/bayesianTracking, implementing a very simple bearing &amp; tracking problem with both a EKF and a particle filter (PF).</li>
<li>samples/UTILS/displayPlots.</li>
<li>MRML/grid-matching.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>Core dump due to a wrong initialization of <a class="el" 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...">mrpt::slam::CSensoryFrame</a> using the *copy constuctor*.</li>
<li>RawlogViewer: Changing a sensor pose in the "sensor/camera modification dialog" didn't change it for 6D poses.</li>
<li>utils::CDirectoryExplorer missed files under Windows when marked as FILE_ATTRIB_NORMAL.</li>
<li>Core dump (double free) if a matrix is set to size (0,0) and then resized again (it affected the new matrix loadFromTextFile method).</li>
<li>Inverted axes in CDisplayWindow3D &amp; SceneViewer when camera elevation=-90deg.</li>
<li>Wrong generation of random samples in random::randomNormalMultiDimensional.</li>
<li>Missing synchronization within WxSubsystem's thread.</li>
<li>Not using double-buffering in SceneViewer.</li>
<li>Wrong simulation of bearing-range observations for any 6D pose in <a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html" title="A class for storing a map of 3D probabilistic landmarks.">mrpt::slam::CLandmarksMap</a>.</li>
<li>gui::CDisplayWindow &amp; gui::CDisplayWindow3D timeout waiting to close windows after class destruction.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>Version 0.5.3 (First public release, January 31, 2008)</h2>
<ul>
<li>JAN-2008:<ul>
<li>Small changes in CMake files to prepare first public source release.</li>
<li>utils::WxSubsystem created as a centralized manager of GUI windows in the MRPT using the cross-platform wxWidgets. Now used for CDisplayWindow &amp; CDisplayWindow3D.</li>
<li>Application "ReactiveNavigationDemo" rewritten using wxWidgets and integrated in the MRPT CMake tree.</li>
<li>Bumblebee camera support integrated in CMake file system.</li>
<li>RawLogViewer 2.1 finished.</li>
<li>SceneViewer 1.1 finished.</li>
<li>New methods added to matrixes and to the MATH namespace.</li>
<li>"mrpt::slam::CSensFrameProbSequence" and "mrpt::slam::CIncrementalMapPartitioner" modified to work with full 3D/6D poses rather than planar robot poses only.</li>
<li>Added a working example of EKF-SLAM including a sample dataset.</li>
<li>Tree structure modified for clarity, clean up of files at the root directory.</li>
<li>RawLogViewer: Added viewer of <a class="el" href="classmrpt_1_1slam_1_1_c_observation_bearing_range.html" title="This observation represents a number of range-bearing value pairs, each one for a detected landmark...">mrpt::slam::CObservationBearingRange</a>.</li>
<li>Added a new method to compute spherical coordinates of a 3D point from a 6D pose (see <a class="el" 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).">mrpt::poses::CPose3D</a>).</li>
<li>MRPT_ALWAYS_CHECKS_DEBUG is now enabled by default.</li>
<li>Added new matrix operations to employ them in a more efficient EKF implementation.</li>
<li>Changes all across the library to enable compilation in 64 bit targets (without warnings).</li>
<li>getCurrentTime now gives high-resolution time (usecs) in Linux.</li>
<li>Added the option "justOneOccupiedCellPerRay" to <a class="el" href="classmrpt_1_1slam_1_1_c_occupancy_grid_map2_d.html" title="A class for storing an occupancy grid map.">mrpt::slam::COccupancyGridMap2D</a>.</li>
<li>Added new applications:<ul>
<li>map-partition.</li>
<li>KF-SLAM.</li>
</ul>
</li>
<li>Added new examples:<ul>
<li>MRML/landmarkRawlogSimulator, a simulator of a robot with a 3D range-bearing sensor.</li>
</ul>
</li>
<li>BUGS FIXED:<ul>
<li>CSemaphore::waitForSignal now also works for an timeout=0 (no timeout).</li>
<li>In openCV_cross_correlation: wrong order of (v,u) coordinates! Have been replaced by (x,y) to prevent more errors.</li>
<li>Wrong calculation of mean in CGraphPartitioner::SpectralBisection.</li>
<li>Wrong calculations in "multiply_HCHt"</li>
<li>"dateTimeToString" gave wrong data.</li>
<li>Out of vector bound exception in RawLogViewer exporter to text files.</li>
<li>Wrong normalization of 3D vectors in generateAxisBaseFromDirection.</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>DEC-2007:<ul>
<li>Speed up in rendering of 3D ellipsoids by computing eigenvectors only once.</li>
<li>Implemented RO-SLAM with SOG (<a class="el" href="classmrpt_1_1slam_1_1_c_beacon_map.html" title="A class for storing a map of 3D probabilistic beacons, using a Montecarlo, Gaussian, or Sum of Gaussians (SOG) representation (for range-only SLAM).">mrpt::slam::CBeaconMap</a>)</li>
<li>Added a method to generate permutations of vectors (See utils::RandomGenerator).</li>
<li>Started RawLogViewer 2.1: Added a new module for laser scan animations.</li>
<li>Added a new cross-platform 3DSceneViewer application.</li>
<li>Deleted the old application x3DSceneViewer</li>
<li>New example: MRML/geometry3D</li>
<li>BUGS FIXED:<ul>
<li>Wrong initialization of CMatrix from a CPoint3D</li>
<li>Wrong calculation of yaw/pitch/roll fields in CPose3D when composing poses.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 </p>
<h2>Version 0.5.2 (Released December 26, 2007)</h2>
<ul>
<li>DEC-2007:<ul>
<li>Release of RawLogViewer 2.0, the first portable (win32/linux-gtk) version.</li>
<li>Old win32 version "RawLogsViewer" removed from the repository!</li>
<li>GUI classes (CDisplayWindow, CDisplayWindow3D) have been rewritten in:<ul>
<li>Windows: Native MSW API.</li>
<li>Linux: GTK2</li>
</ul>
</li>
<li>New features to RawLogViewer (change sensor poses,...)</li>
<li>Added general abstract methods to CObservation for getting/setting the sensor pose.</li>
<li>Added to RawLogViewer: Import a directory of images as a rawlog.</li>
<li>utils::CDirectoryExplorer rewritten &amp; ported to Linux.</li>
<li>BUG FIXED: 'system::sleep' was aborted by signals in Linux. It now resumes until the desired delay.</li>
<li>Linux implementation for CSerialPort.</li>
<li>RawLogViewer: ScanMatching module finished.</li>
<li>New class for landmark observations by bearing and range (See <a class="el" href="classmrpt_1_1slam_1_1_c_observation_bearing_range.html" title="This observation represents a number of range-bearing value pairs, each one for a detected landmark...">mrpt::slam::CObservationBearingRange</a>).</li>
<li>Timestamps have been added to CAction's.</li>
<li>BUG FIXED: Invalid encoder info in CActionRobotMovement2D.</li>
<li>New methods added to CRawlog to enable a better encapsulation of the internal list of objects as "private".</li>
</ul>
</li>
<li>NOV-2007:<ul>
<li>BUG FIXED: CObservationGPS didn't load from CStream in Linux. Serialization version 1 is now portable.</li>
<li>Added the sprintf-like function "format" for <a class="el" href="classstd_1_1string.html" title="STL class.">std::string</a>'s.</li>
<li>Integration of xmlParser library within utils::CSimpleDatabase.</li>
<li>A new class for managing the custom USB board that interfaces SRF10 ultrasonic range finders. Class hwdrivers::CBoardSonars.</li>
<li>Class hwdrivers::CBoardENoses has been finished and tested with the real devices.</li>
<li>Many includes in "utils_defs.h" moved to those source files really requiring them, to speed up compilation.</li>
<li>Fixs to allow compiling using the free Borland C++ 5.5.1 compiler from CMake makefiles.</li>
<li>Added new sample for eNose board interface.</li>
</ul>
</li>
</ul>
<h2>Version 0.5.1 (Released for BABEL, November 13, 2007)</h2>
<ul>
<li>NOV-2007:<ul>
<li>BUG FIXED: math::generateAxisBaseFromDirection now returns all the three vectors normalized.</li>
<li>Implemented Sum of Gaussians (SOG) as a way to create the PDF of a beacon for RO-SLAM (in mrpt::slam::CBeaconMaps).</li>
<li>Added a new example to "samples/MRML": beaconRawlogSimulator.</li>
<li>Added a new class for interfacing an "e-Noses" board via USB, in hwdrivers::CBoardENoses.</li>
<li>OpenCV added as a monolithic, static linking library to avoid DLL dependencies (for Windows).</li>
<li>New wiki-based website. Old doxygen-based documentation headers (.h) removed.</li>
<li>BUG FIXED: Memory leaks in the MRPT class registration system and in utils::CTicTac have been removed (Using "Visual Leak Detector" it seems there are no more leaks by now...).</li>
<li>BUG FIXED: THROW_EXCEPTION_XXX macros redesigned to avoid eventual exceptions in wxWidgets applications.</li>
</ul>
</li>
</ul>
<ul>
<li>OCT-2007:<ul>
<li>Methods "computeMatchingWith2D" modified for a sensible usage of the "const" modifier.</li>
<li>Changed <a class="el" href="classmrpt_1_1slam_1_1_c_metric_maps_alignment_algorithm.html#aa6dafc1cecd79b3181dc6509f87e5d68" title="The method for aligning a pair of metric maps, aligning only 2D + orientation.">mrpt::slam::CMetricMapsAlignmentAlgorithm::Align</a> to avoid the warning "break strict-aliasing rules" about the CPosePDF**.</li>
<li>Added tutorial: Serialization.</li>
<li>Added new class <a class="el" href="classmrpt_1_1poses_1_1_c_pose3_d_p_d_f_s_o_g.html" title="Declares a class that represents a Probability Density function (PDF) of a 3D(6D) pose ...">mrpt::poses::CPose3DPDFSOG</a> for Sum of Gaussians-representation of a 6D pose probability density.</li>
<li>Reactive Navigation Library ported from Win32 API to standard C++.</li>
<li>Resampling methods now are separated in a generic, static method bayes::CParticleFilterCapable::computeResampling.</li>
</ul>
</li>
</ul>
<h2>Version 0.4 (Released for BABEL, October 13, 2007)</h2>
<ul>
<li>OCT-2007:<ul>
<li>BUG FIXED: Loading grayscale images CImageFloat now forces to load images from files as grayscale always.</li>
<li>BUG FIXED: To allow inserting into gridmaps laser scans taken with the sensor bottom-up.</li>
<li>All the makefiles of MRPT has been moved to CMake.</li>
</ul>
</li>
<li>SEP-2007:<ul>
<li>Structure of "include" directory changed to include the prefix "&lt;MRPT/...". This is for leading to a one-directory install into "usr/include" in Linux systems.</li>
<li>CSemaphore implemented for Linux using pthreads.</li>
<li>CDisplayWindow3D is now based on GLUT and works in Windows &amp; Linux.</li>
<li>Added a new application by Antonio J. Ortiz de Galistea: a MonoSLAM demo.</li>
<li>Different PF resampling methods are now supported. See CParticleFilter::resample.</li>
<li>CParticleFilter now has a centralized structure for all the PF-related options.</li>
<li>BUG FIXED: CDisplayWindow2D now has an extra (global) thread to process OpenCV messages without the need for the application to call "waitForKey".</li>
<li>Added a new procedure into CMultiMetricMapPDF for expanding the potential range of observation likelihoods without having a numerical overflow.</li>
<li>Add Class for Sonar SRF10 Interface (AJOGD).</li>
<li>CImage now is a wrapper class over OpenCV. More image file types are supported now.</li>
<li>CDisplayWindow now completely portable between windows/Linux thorugh OpenCV.</li>
</ul>
</li>
<li>AUG-2007:<ul>
<li>BUG FIXED: In utils::CConfigFile.</li>
<li>Started new application RawLogViewer using wxWidGets for a portable version (windows/linux).</li>
<li>Added utils::getAllRegisteredClasses to obtain at runtime the list of all MRPT registered classes.</li>
<li>Started the porting towards "bakefiles"</li>
<li>A new function added to obtain the compilation date and the library version (including SVN). See utils::SystemUtils.</li>
<li>Started a new version of the application "RawLogViewer" in portable wxWidGets for linux compatibility!.</li>
<li>Borland C++ 5.5 not supported any more, due to a lot of internal compiler errors. We use now BCC version 6.0.</li>
<li>Range-Only SLAM will be integrated into existing SLAM classes through the new class <a class="el" href="classmrpt_1_1slam_1_1_c_beacon_map.html" title="A class for storing a map of 3D probabilistic beacons, using a Montecarlo, Gaussian, or Sum of Gaussians (SOG) representation (for range-only SLAM).">mrpt::slam::CBeaconMap</a>, now fully integrated into <a class="el" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">mrpt::slam::CMultiMetricMap</a>.</li>
<li>A new class for integrating different PDF representations of beacons (<a class="el" href="classmrpt_1_1slam_1_1_c_beacon.html" title="The class for storing individual &quot;beacon landmarks&quot; under a variety of 3D position PDF distributions...">mrpt::slam::CBeacon</a>) and the corresponding map (<a class="el" href="classmrpt_1_1slam_1_1_c_beacon_map.html" title="A class for storing a map of 3D probabilistic beacons, using a Montecarlo, Gaussian, or Sum of Gaussians (SOG) representation (for range-only SLAM).">mrpt::slam::CBeaconMap</a>).</li>
</ul>
</li>
<li>JUL-2007:<ul>
<li>A new class of CAction for 6D movements (<a class="el" href="classmrpt_1_1slam_1_1_c_action_robot_movement3_d.html" title="Represents a probabilistic 3D (6D) movement.">mrpt::slam::CActionRobotMovement3D</a>).</li>
<li>CStream &amp; CSerializable now have more consistent "const" declarations.</li>
</ul>
</li>
</ul>
<hr/>
 <h2>Version 0.3 (Released for BABEL v3.800, July 2007)</h2>
<ul>
<li>JUL-2007:<ul>
<li>A new class for Range-Only Localization (<a class="el" href="classmrpt_1_1slam_1_1_c_rejection_sampling_range_only_localization.html" title="An implementation of rejection sampling for generating 2D robot pose from range-only measurements wit...">mrpt::slam::CRejectionSamplingRangeOnlyLocalization</a>).</li>
<li>Range-Only SLAM is now supported with a new map class (<a class="el" href="classmrpt_1_1slam_1_1_c_beacon_map.html" title="A class for storing a map of 3D probabilistic beacons, using a Montecarlo, Gaussian, or Sum of Gaussians (SOG) representation (for range-only SLAM).">mrpt::slam::CBeaconMap</a>), which has been also integrated in <a class="el" href="classmrpt_1_1slam_1_1_c_multi_metric_map.html" title="This class stores any customizable set of metric maps.">mrpt::slam::CMultiMetricMap</a>.</li>
<li>A new class for parsing messages from/to a USB FTDI device (hwdrivers::CInterfaceFTDIMessages).</li>
<li>Added a new class for 3D Point PDF representation as a SOG (poses::CPoint3DPFGSOG).</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 </p>
<h2>Version 0.2</h2>
<ul>
<li>JUN-2007:<ul>
<li>From now on MRPT is updated through Subversion (SVN).</li>
<li>Start solving portability issues towards a full Linux support.</li>
</ul>
</li>
<li>MAY-2007:<ul>
<li>Included the makefile project for "Code::Blocks" compiler, for supporting Linux GCC C++ compiler.</li>
</ul>
</li>
<li>FEB-2007:<ul>
<li>BUG FIXED: In "CSerializable::duplicate()"</li>
<li>Added new config file-like interfaces. See utils::CConfigFileBase and derived classes.</li>
<li>Added utils::CStringList.</li>
</ul>
</li>
<li>JAN-2007:<ul>
<li>New fast image correlation method based on 2D FFT. See CImage::cross_correlation_FFT</li>
<li>2D FFT functions added to utils::MATH</li>
<li>The class utils::CConfigFile now can read entries as "std::vector"'s.</li>
<li>New utilities added to utils::MRPT_OS for tokenizing strings.</li>
</ul>
</li>
</ul>
<p><br/>
<hr/>
<br/>
 </p>
<h2>Version ALFA 0.1 (Published with BABEL v3.0.0, Jan-2007)</h2>
<ul>
<li>JAN-2007:<ul>
<li>The classes "utils::CBitmapXX" have been removed, and BMP image format operations appropriately integrated into existing utils::CImage and utils::CImageFloat classes.</li>
<li>Now 3D scenes are supported through "opengl::COpenGLScene", objects in "mrpt::opengl" namespace, and an external 3D Scene viewer application for Windows.</li>
</ul>
</li>
<li>DEC-2006:<ul>
<li>Addition of TCP/IP sockets, through classes utils::CServerTCPSocket and utils::CClientTCPSocket, allowing serialization of MRPT objects through a TCP socket.</li>
<li>New classes in HWDRIVERS namespace allow using serial ports and interfacing GPS units.</li>
<li>A new interface utils::CCanvas has been defined for enabling drawing primitives to be implemented in graphical classes.</li>
<li>New class gui::CDisplayWindow for visualization of images in a GUI.</li>
<li>Portability issues solved for compatibility with Microsoft Visual Studio 2005 (VC8), including the new standard C++ library "secure" functions.</li>
<li>A new class "mrpt::slam::CMultiMetricMap" has been introduced for storing any set of metric maps, in a much more convenient and flexible way that the previous (non existing now) class "mrpt::slam::CHybridMetricMap"</li>
</ul>
</li>
<li>NOV-2006:<ul>
<li>The new Optimal Auxiliary Particle Filter has been implemented in "poses::CPosePDFParticles", and in "mrpt::slam::CMultiMetricMapPDF"</li>
<li>BUG FIXED: In matrix inversion, into class "math::CMatrixTemplateNumeric".</li>
<li>RANSAC method added for correspondences-pair lists, in "mrpt::slam::CICP::robustRigidTransformation"</li>
</ul>
</li>
<li>OCT-2006:<ul>
<li>The Dieter Fox's algorithm "KLD-sampling" for adative particle filter has been implemented in the class "poses::CPosePDFParticles"</li>
<li>Major changes in the way bayes::CParticleFilter works: Now there are four diferent particle filter algorithms defined.</li>
<li>New utils::MATH functions added (chi-square and normal quantiles, etc...)</li>
<li>A new probabilistic motion model has been added to "mrpt::slam::CActionRobotMovement2D", the particles draw process described in Thrun's 2006 book.</li>
</ul>
</li>
<li>SEP-2006:<ul>
<li>The Lu &amp; Milios algorithm now works with any user-supplied matrix of pose constrains. See "mrpt::slam::CConsistentObservationAlignment".</li>
<li>A new generic matrix template has been created, "math::CMatrixTemplate" and "math::CMatrixTemplateNumeric", which are now the base for math::CMatrix and math::CMatrixD.</li>
<li>Template functions defined for dealing with STL's vectors: basic math operations, printing to screen,... in "utils::MATH"</li>
<li>The <a class="el" 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 ...">mrpt::slam::CICP</a> algorithm now also deals with <a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html" title="A class for storing a map of 3D probabilistic landmarks.">mrpt::slam::CLandmarksMap</a> metric maps.</li>
</ul>
</li>
<li>AUG-2006:<ul>
<li>A new SLAM framework has been implemented in the main class mrpt::slam::CHierarchicalMappingFramework</li>
<li>A new class added for managing INI-like config files "utils::CConfigFile".</li>
<li>Hill-climbing algorithm "utils::CHillClimbing" added to the library.</li>
<li>Improved SIFT features detection, triangulation and matching in "mrpt::slam::CLandmarksMap" for pairs of stereo images.</li>
</ul>
</li>
<li>JUN-2006:<ul>
<li>New functions added to "poses::CPointPDFGaussian" for Bayesian fusion, correspondence likelihood,...</li>
</ul>
</li>
<li>MAY-2006:<ul>
<li>Introduction of "pixel to 3D" functions in vision</li>
<li>SIFT features extractor moved to vision</li>
</ul>
</li>
<li>ABR-2006:<ul>
<li><a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html" title="A class for storing a map of 3D probabilistic landmarks.">mrpt::slam::CLandmarksMap</a> now works with SIFT features: loading from images, fusing,...</li>
<li>SIFT features extractor in "utils::CImage"</li>
</ul>
</li>
<li>FEB-2006:<ul>
<li>The class mrpt::slam::COccupancyGrid2D now uses 16bit for storing cell values, and many new options added.</li>
<li>Rao-Blackwellized Particle filters now supported in class <a class="el" 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...">mrpt::slam::CMultiMetricMapPDF</a></li>
</ul>
</li>
<li>JAN-2006:<ul>
<li>Landmarks-based maps now supported with <a class="el" href="classmrpt_1_1slam_1_1_c_landmarks_map.html" title="A class for storing a map of 3D probabilistic landmarks.">mrpt::slam::CLandmarksMap</a></li>
<li>ZIP compression supported with the introduction of classes in the new namespace compress::zip.</li>
<li>Rao-Balckwellized particle filter mapping supported with <a class="el" 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)...">mrpt::slam::CMetricMapBuilderRBPF</a></li>
<li>Points map are now fused considering the weights of points (<a class="el" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">mrpt::slam::CSimplePointsMap</a>)</li>
<li>Definition of a new class mrpt::slam::CMetricMapBuilding for grouping map building methods.</li>
<li>Addition of a new class for 3D occupancy grid building.</li>
<li>New types of points map derived from <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map.html" title="Declares a virtual base class for all metric maps storage classes.">mrpt::slam::CMetricMap</a>.</li>
</ul>
</li>
<li>DEC-2005:<ul>
<li>New methods added to MRML, for circular robots paths planning. See the base class <a class="el" href="classmrpt_1_1slam_1_1_c_path_planning_method.html" title="A virtual base class for computing the optimal path for a robot from a origin location to a target po...">mrpt::slam::CPathPlanningMethod</a></li>
<li>The method by Lu &amp; Milios for consistent maps alignment has been integrated into the MRML library, in the <a class="el" href="classmrpt_1_1slam_1_1_c_consistent_observation_alignment.html" title="An algorithm for globally, consistent alignment of a sequence of observations.">mrpt::slam::CConsistentObservationAlignment</a></li>
<li>The CObservation-derived classes has been modified to adhere to the "BABEL modules proposal for robotics architecture" (Technical report, dec.2005)</li>
<li>Metrics maps has been grouped using a common base class: <a class="el" href="classmrpt_1_1slam_1_1_c_metric_map.html" title="Declares a virtual base class for all metric maps storage classes.">mrpt::slam::CMetricMap</a></li>
<li>The spectral-based method for maps partitioning has been integrated into the MRML library, in the class <a class="el" href="classmrpt_1_1slam_1_1_c_incremental_map_partitioner.html" title="This class can be used to make partitions on a map/graph build from observations taken at some poses/...">mrpt::slam::CIncrementalMapPartitioner</a>.</li>
<li>CObservationLaserRangeScan renamed as CObservation2DRangeScan.</li>
</ul>
</li>
<li>NOV-2005:<ul>
<li>New types of observations added (<a class="el" href="classmrpt_1_1slam_1_1_c_observation.html" title="Declares a class that represents any robot&#39;s observation.">mrpt::slam::CObservation</a> descendant classes) for images (from a camera) and for sonar readings.</li>
</ul>
</li>
<li>OCT-2005:<ul>
<li>New class added: A simple SLAM method for 2D localization and simple, metric maps building (non-hierarchical global maps). See mrpt::slam::CSimple2DSLAM.</li>
<li>Addition of "streaming versioning" for <a class="el" 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> classes.</li>
<li>A new observation type has been introduced, the mrpt::slam::CObservationIRRing.</li>
<li>Introduction of 3D poses using 4x4 transformation matrices and yaw/pitch/roll angles.</li>
<li>Polymorphism mechanishs for <a class="el" 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> derived classes and correct streaming using "&lt;&lt;" and "&gt;&gt;" operators has been provided through a set of "#define"'s and functions. See <a class="el" href="_c_serializable_8h.html">CSerializable.h</a></li>
</ul>
</li>
<li>SEP-2005:<ul>
<li>Reactive Navigator totally rewritten for integration into MRPT applications repository (See MRPT::reactivenav::CReactiveNavigationSystem).</li>
<li>Added MRPT applications repository section.</li>
</ul>
</li>
<li>AUG-2005:<ul>
<li>Particle filters basic algorithm added to UTILS library.</li>
<li>Bitmap classes (utils::CBitmap) totally rewritten for a sensible use of classes inheritance.</li>
</ul>
</li>
<li>JUN-2005:<ul>
<li>First version of the library! there are a few classes for matrix manipulation, 2D point map management, and an implementation of the ICP algorithm. </li>
</ul>
</li>
</ul>
</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>