?? bayes++.html
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"> <TITLE>Bayes++ Bayesian Filtering</TITLE> <LINK REL="stylesheet" HREF="Deployment/paper.css" TYPE="text/css"></HEAD><H1 ALIGN=CENTER><U>Bayes++</U></H1><H1 ALIGN=CENTER><B>Open Source Bayesian Filtering Classes</B></H1><H2 ALIGN=CENTER>Michael Stevens</H2><P STYLE="margin-bottom: 0cm"><BR></P><CENTER> <TABLE WIDTH=100% BORDER=5 CELLPADDING=0 CELLSPACING=4 BGCOLOR="#c0c0c0"> <TR VALIGN=TOP> <TD WIDTH=368 HEIGHT=48> <H2><A HREF="Bayesian Filtering Classes.html">Bayesian Filtering</A></H2> <P>Overview of Bayesian filtering with the Filtering Classes </P> </TD> <TD WIDTH=330> <H2 ALIGN=RIGHT><A HREF="mailto:mail@michael-stevens.de">mail@michael-stevens.de</A></H2> <H2 ALIGN=RIGHT><A HREF="http://www.acfr.usyd.edu.au/">Australian Centre for Field Robotics</A></H2> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=368> <H3><A HREF="ClassDocumentation/html/index.html">Documentation generated by Doxygen</A></H3> <BLOCKQUOTE><A HREF="ClassDocumentation/html/classBayesian__filter_1_1Bayes__filter__base.html">Filter hierarchy</A><BR><A HREF="ClassDocumentation/html/classBayesian__filter_1_1Predict__model__base.html">Prediction models</A> and <A HREF="ClassDocumentation/html/classBayesian__filter_1_1Observe__model__base.html">Observation models</A><BR><BR><A HREF="ClassDocumentation/html/functions.html">Class members</A> and <A HREF="ClassDocumentation/html/files.html">File list of Bayes++</A> </BLOCKQUOTE> </TD> <TD WIDTH=330> <H3 ALIGN=RIGHT><A NAME="download"></A><A HREF="http://sourceforge.net/projects/bayesclasses/">Project Summary</A> and <A HREF="http://sourceforge.net/project/showfiles.php?group_id=54729">Download</A></H3> <P ALIGN=RIGHT><A NAME="CVS_Repository"></A><IMG SRC="http://sourceforge.net/sflogo.php?group_id=54729&type=5" NAME="Grafik1" ALT="SourceForge Logo" ALIGN=TOP WIDTH=120 HEIGHT=40 BORDER=0> <A HREF="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/bayesclasses">CVS Repository</A><BR>Bayes++ uses the <A HREF="http://www.boost.org/" TARGET="_top"><FONT SIZE=5>Boost</FONT></A><BR>peer-reviewed portable C++ source libraries</P> </TD> </TR> </TABLE></CENTER><P ALIGN=LEFT> Bayesian Filtering is a probabilistic technique for data fusion. The technique combines a concise mathematical formulation of a system with observations of that system. Probabilities are used to represent the state of a system, likelihood functions to represent their relationships. In this form Bayesian inference can be applied and further related probabilities deduced. See <A HREF="http://www.wikipedia.org/">Wikipedia</A> for information on <A HREF="http://www.wikipedia.org/wiki/Probability_theory">Probabilitytheory</A>, <A HREF="http://www.wikipedia.org/wiki/Bayes'_theorem">Bayestheorem</A>, <A HREF="http://www.wikipedia.org/wiki/Bayesian_inference">BayesianInference</A>.</P><P ALIGN=LEFT>For <U>discrete</U> systems the Bayesian formulationresults in a naturally iterative data fusion solution. For <U>dynamic</U>systems there is a class of solutions, discrete <U>filters</U>, that combine observed outputs of the system with the system's dynamic model. An <U>estimator</U> computes a estimate of the systems state with each observationof the system. Linear estimators such as the Kalman Filter are commonly applied.</P><P ALIGN=LEFT>Bayes++ is an open source library of C++ classes. Theseclasses represent and implement a wide variety of numericalalgorithms for Bayesian Filtering of discrete systems. The classesprovide tested and consistent numerical methods and the classhierarchy explicitly represents the variety of filtering algorithmsand system model types.</P><H2>Simple Example</H2><P>This is very simple example; for those who have never used theBayesian Filtering Classes before. If you wish to see how simple itis to use Bayes++ then <A HREF="Simple/simpleExample.cpp">View theSource</A>.</P><P>The example shows how two classes are created. The first is theprediction model, the second the observation model. In this examplethey represent a simple linear problem with only one state variableand constant model noises. A filter fuses the results of predictionand observation.</P><P>See the <A HREF="Bayesian Filtering Classes.html">BayesianFiltering classes</A> for a description of the classes used andall three examples provided with Bayes++.</P><H2>Compiling the Examples</H2><P>First <A HREF="#download">download</A> and extract <B>Bayes++</B>and also the <B>Boost</B> library. <B>Boost</B> is used to providecompiler independence, and a common build system. Two Boost headerlibraries are used: <B>uBLAS</B> for linear algebra, and <B>random</B>for the PV and QuadCalib examples. The Boost headers can be placedanywhere relative to Bayes++, but it is easy if you follow thisstructure:</P><DL> <DD><DL> <DT><EM>...sourceDirectory</EM></DT> <DD><DL> <DT>Bayes++</DT> <DD>BayesFilter</DD> <DD>PV</DD> <DD>QuadCalib</DD> <DD>Simple</DD> <DD>Test</DD> </DL></DD> <DD><DL> <DT>boost_1_33_1</DT> <DD>boost</DD> <DD><I>etc</I></DD> </DL></DD> </DL></DD></DL><P><P>Using the Boost Build system version 2 is the best way to compile theexamples. This uses the <B>bjam</B> (Boost jam) program to computedependencies and invoke the compiler. The documentation in yourdownloaded copy of Boost explains how to obtain compile the latestversion of bjam yourself. For everything to work <B>bjam</B> must beplaced in the path. <BR>To build Bayes++ and the examples simplyexecute: (Bayes++ should be the current directory)</P><PRE STYLE="margin-bottom: 0.5cm"> bjam --v2 -sBOOST_ROOT="../boost_1_33_1"</PRE><P>If there is more then one toolsets (compiler etc) available you maywant to tell bjam which to use. For example to use Visual C++execute:</P><PRE STYLE="margin-bottom: 0.5cm"> bjam --v2 msvc -sBOOST_ROOT="../boost_1_33_1"</PRE><P>It is possible to drop the BOOST_ROOT variable by either creating a<B>build_build.jam</B> file in <I>sourceDirectory</I> (or above) orby setting it as an environment variable.</P></P><H4>Location of compiled examples and libraries</H4><P>The executables for the three examples will be placed inside adirectory hierarchy named <B>target</B>. Static libraries for debugand release builds of the <B>BayesFilter</B> library are placed in<B>target/BayesFilter</B>. The <B>target</B> directory and its subdirectoriesare created automatically.</P?<H4>Visual C++ solution</H4><P>For Visual C++ 7.0/7.1/8.0 etc, you can also use the <B>Bayes++.sln</B> solutionand the active configuration <B>uBLAS Debug</B>. The compiler optionsmust be set so the <B>Boost</B> include files can be found. That is,the <U>include path</U> must contain the base directory of Boost. Inthis case the local <B>boost</B> directory. In VC7.1 you should dothis by choosing the <I>Tools/Options/Projects/VC++ Directories</I>option.</P><P>Visual C++ 7.0 requires the use of Boost version 1_32_0. Visual C++ 7.1 (or later) requires Boost version 1_33_0 (or later).I</P><H2>Licensing</H2><P>All Bayes++ source code files are copyright with the licenseconditions as given here. The copyright notice is that of the MITlicense. This in no way restricts any commercial use you may wish tomake using our source code. As long as you respect the copyright andlicense conditions, Michael Stevens and the Australian Centre forField Robotics are happy to for you to use it in any way you wish.</P><P>Bayes++ the Bayesian Filtering Library</P><P>Copyright (c) 2003,2004,2005 Michael Stevens, Copyright (c) 2002Michael Stevens and Australian Centre for Field Robotics</P><P>Permission is hereby granted, free of charge, to any personobtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software withoutrestriction, including without limitation the rights to use, copy,modify, merge, publish, distribute, sublicense, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnishedto do so, subject to the following conditions:</P><P>The above copyright notice and this permission notice shall beincluded in all copies or substantial portions of the Software.</P><P>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OFANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THEWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE ANDNON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ANACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.</P><H2>SLAM : Simultaneous Localization and Mapping</H2><P>SLAM is one of the most interesting problems in Bayesianfiltering. It's structure implies that it cannot be correctly solvedwithout using stochastic approach. This is due to mapped states beingdependent on other mapped states and the localization state. Thisdependence also make the problem complex, therefore a simple approachsuch as representing all correlations is not tractable for largenumbers of states.</P><P>Bayes++ has been used to implement various simple and some moreadvanced SLAM solutions. In particular a full implementation ofFastSLAM has been implemented. This technique is described in thepaper "FastSLAM : Factored Solution to the SimultaneousLocalization and Mapping Problem", M. Montemerlo, S. Thrun S, D.Koller, B. Wegbreit, Proceedings of the AAAI National Conference onArtificial Intelligence 2002.</P><P>The Bayes++ implementation of FastSLAM and a very simple Kalman(full correlation) SLAM implementation is available as part of themost recent <A HREF="#download">download</A>.</P><H2>Scilab, Matlab, MuPAD</H2><P>These mathematical tools are particularly useful for visualisingfiltering results. However they are all rather slow, and it is veryeasy to produce very poorly implemented filters in their programminglanguages. Fortunately all these tools provide mechanisms forextension with external programs. Example interface code is providedin the <A HREF="#CVS_Repository">Bayes++ CVS repository</A> forMatlab and MuPAD. An interface to Scilab is not yet available.</P><H2>Portability</H2><P>Bayes++ only makes use of ISO standard C++. The source code usesmoderately advance C++ constructs. It only makes restricted use ofthe C++ template system directly. However the Boost libraries used(in particular uBLAS) make extensive use of template techniques.Boost also includes many workarounds for compiler deficiencies.Therefore with few alterations Bayes++ should work with any modernC++ compiler supported by Boost.</P><P>Bayes++ is tested with: <B>Boost 1.33.0</B></P><P>Bayes++ is tested with: <B>GCC 3.3.5</B>, <B>GCC 3.4.4, <B>GCC 4.0.0</B>,<B>VisualC++ 7.1</B> and <B>IntelC++ 8.1</B></P><P>Later versions of GCC 3.x and GCC 4.x should also run Bayes++ with ease.However GCC 3.3.0 is know to be incompatible with uBLAS and toproduce incorrect code with -O2 optimization.</P><P>VisualC++ 7.1 often requiresthe /Zm option to be used so it can compile complex headers.</P><H2>Release Criteria</H2><P>This releases is validated using the compilers and Boost versionslisted above using the following tests.</P><OL><LI><P>Build system: Compatibility with both Boost Build version 1and version 2.<BR>Successfully complete <B>bjam</B> to build defaultlibraries and examples.<BR>Successfully complete <B>bjam</B> to buildSLAM system.</P><LI><P>Test examples: simpleExample, PV, QuadCalib <BR>Compile debugand release builds (using Boost Build version 2) :- with no errorsand no warnings.<BR>Execution output :- Identical to expectedreference results.</P><LI><P>Numerical tests: rtheta - Range angle observer.<BR>Anon-linear range angle observer test. The observer moves in a 2dimensional state space. Motion prediction occurs with a linearmodel with additive noise. The two states are coupled both in themodel and in additive noise. Range and angle of a fixed target isobserved. The target is placed so discontinues angles are
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -