Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 3ebaf504d69f581a8834e53e04e712a5 > files > 412

gearbox-devel-9.11-6.fc14.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>GearBox Project</title>

<link rel="icon" href="gbx_icon_cardbox_sky.png" type="image/png">
<link rel="shortcut icon" href="gbx_icon_cardbox_sky.png" type="image/png">

<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-3583782-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
<!-- Returning you to your regular programming -->
</head><body>

<!-- Header -->

<table border="0" cellspacing="0" cellpadding="0">

<tr><!-- create row -->

<!-- spacer cell -->
<!-- #CC CC CC -->
<td rowspan="1" colspan="1" bgcolor="#EEEEEE">&nbsp;&nbsp;&nbsp;&nbsp;</td>

<!-- menu cell -->
<td width="170" rowspan="1" colspan="1" align="left" valign="top" bgcolor="#EEEEEE">


<p>&nbsp;</p>
<p align="center"><a href="index.html"><img src="gbx_logo_cardbox_sky_150x150.png"></a></p><br>

<strong>INTRODUCTION</strong><br>
<strong><a href="gbx_doc_overview.html" style="text-decoration:none">Overview</a></strong><br>
<strong><a href="gbx_doc_getting.html" style="text-decoration:none">Download and Install</a></strong><br>
<!-- <strong><a href="gbx_doc_quickstart.html" style="text-decoration:none">Quick Start</a></strong><br> -->
<strong><a href="gbx_doc_documentation.html" style="text-decoration:none">Documentation</a></strong><br>
<strong><a href="gbx_doc_publications.html" style="text-decoration:none">Publications</a></strong><br>
<br>

<strong>REPOSITORY</strong><br>
<strong><a href="group__gbx__libs.html" style="text-decoration:none">Libraries</a></strong><br>
<!-- <strong><a href="group__gbx__utils.html" style="text-decoration:none">Utilities</a></strong><br> -->
<br>

<strong>DEVELOPER</strong><br>

<!--<strong><a href="gbx_doc_tutorials.html" style="text-decoration:none">Tutorials</a></strong><br>
<strong><a href="group__gbx__examples.html" style="text-decoration:none">Examples</a></strong><br>-->
<strong><a href="gbx_doc_devguide.html" style="text-decoration:none">Dev Guide</a></strong><br>
<!-- 
<strong><a href="gbx_doc_faq.html" style="text-decoration:none">FAQ</a></strong><br>
-->
<strong><a href="http://cdash.acfr.usyd.edu.au/index.php?project=Gearbox" style="text-decoration:none">Dashboard</a></strong><br>
<!--<strong><a href="http://wiki2.cas.edu.au/orca">Wiki</a></strong><br>
login/pass: orca/orca<br>-->
<br>

<strong>PEOPLE</strong><br>
<strong><a href="gbx_doc_contributors.html" style="text-decoration:none">Contributors</a></strong><br>
<strong><a href="gbx_doc_users.html" style="text-decoration:none">Users</a></strong><br>
<br>

<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=216468&amp;type=2" width="125" height="37" border="0" alt="SourceForge.net Logo" /></a><br>
<strong><a href="http://sourceforge.net/projects/gearbox">Project</a></strong><br>
<strong><a href="http://sourceforge.net/project/showfiles.php?group_id=216468">Download</a></strong><br>
<!--<strong><a href="http://sourceforge.net/tracker/?group_id=216468">Bugs/Feedback</a></strong><br>-->
<strong><a href="http://sourceforge.net/mail/?group_id=216468">Mailing lists</a></strong></p>
<p>&nbsp;</p>

</td><!-- /menu cell -->

<!-- one grey spacer cells -->
<td rowspan="1" colspan="1" bgcolor="#EEEEEE">&nbsp;&nbsp;&nbsp;&nbsp;</td>

<!-- one white spacer cells -->
<td rowspan="1" colspan="1">&nbsp;&nbsp;&nbsp;&nbsp;</td>

<!-- main content cell -->
<td rowspan="1" colspan="1" align="left" valign="top">


<!-- Generated by Doxygen 1.6.2-20100208 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;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><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>GbxNovatelAcfr<br/>
<small>
[<a class="el" href="group__gbx__libs.html">Libraries</a>,&nbsp;<a class="el" href="group__gbx__cpp.html">C++</a>,&nbsp;<a class="el" href="group__gbx__linux.html">Linux</a>,&nbsp;<a class="el" href="group__gbx__hardware.html">Hardware Drivers</a>]</small>
</h1>
<p>ACFR driver for a Novatel(SPAN) system.  
<a href="#_details">More...</a></p>
<table border="0" cellpadding="0" cellspacing="0">
</table>
<p>ACFR driver for a Novatel(SPAN) system. </p>
<p>NovatelSPAN is a proprietary Novatel navigation system. It minimally consists out of a Novatel OEMV GPS receiver (OEM4 receivers should be compatible). If combined with an IMU, a SPAN system can provide an INS navigation solution at high rate (up to 100Hz). The driver initializes the hardware and reports navigation data continuously.</p>
<p>for a full list of functions see <a class="el" href="namespacegbxnovatelacfr.html">gbxnovatelacfr</a></p>
<dl class="user"><dt><b>Tested Hardware</b></dt><dd></dd></dl>
<p>Specific devices this driver has been tested with:</p>
<ul>
<li><a class="el" href="gbxnovatelacfr__hw__reviews.html#gbxnovatelacfr_hw_reviews_michael">Novatel ProPak V3 (OEMV) receiver with Honeywell HG1700AG62 IMU (Michael Moser)</a></li>
<li><a class="el" href="gbxnovatelacfr__hw__reviews.html#gbxnovatelacfr_hw_reviews_alen">Novatel Pro-Pak-G2 plus receiver (Alen Alempijevic)</a></li>
</ul>
<dl class="user"><dt><b>Header file</b></dt><dd></dd></dl>
<div class="fragment"><pre class="fragment">
#include &lt;gbxnovatelacfr/driver.h&gt;
</pre></div><dl class="user"><dt><b>Style</b></dt><dd>See <a href="http://orca-robotics.sourceforge.net/orca/orca_doc_style.html">http://orca-robotics.sourceforge.net/orca/orca_doc_style.html</a></dd></dl>
<dl class="user"><dt><b>Copyright</b></dt><dd>Mathew Ridley, Ben Upcroft, Michael Moser</dd></dl>
<dl class="user"><dt><b>Responsible Developer</b></dt><dd>Michael Moser</dd></dl>
<dl class="user"><dt><b>License</b></dt><dd>LGPL</dd></dl>
<dl class="user"><dt><b>Dependencies.</b></dt><dd><a class="el" href="group__gbx__library__gbxserialacfr.html">libGbxSerialAcfr</a>, <a class="el" href="group__gbx__library__gbxutilacfr.html">GbxUtilAcfr</a></dd></dl>
<dl class="user"><dt><b>Example</b></dt><dd></dd></dl>
<p>See test/test.cpp for a full blown usage-example and test/example.readme on how to compile the test program.</p>
<p>To run the test program (defaults: /dev/ttyS0, 115200 bps, ...) call it without parameters. </p>
<div class="fragment"><pre class="fragment">
$ gbxnovatelacfrtest
</pre></div><p>If you want to change things, get a short usage description: </p>
<div class="fragment"><pre class="fragment">
$ gbxnovatelacfrtest -h
</pre></div><p>The test program reports back all messages received from the driver and prints out the data fields for each message (in verbose mode).</p>
<dl class="user"><dt><b>Minimal Example</b></dt><dd></dd></dl>
<p>This example (no error checking for clarity, but fully functional) shows the driver's intended usage:</p>
<ul>
<li>create configuration (see <a class="el" href="classgbxnovatelacfr_1_1Config.html">gbxnovatelacfr::Config</a>, <a class="el" href="classgbxnovatelacfr_1_1SimpleConfig.html">gbxnovatelacfr::SimpleConfig</a> and <a class="el" href="classgbxnovatelacfr_1_1GpsOnlyConfig.html">gbxnovatelacfr::GpsOnlyConfig</a>)</li>
<li>create driver (<a class="el" href="classgbxnovatelacfr_1_1Driver.html">gbxnovatelacfr::Driver</a>)</li>
<li>read from driver and wait for external termination</li>
</ul>
<div class="fragment"><pre class="fragment">
#include &lt;gbxnovatelacfr/driver.h&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;vector&gt;

namespace gna = gbxnovatelacfr;

int main(void){

    // create a valid configuration
    std::vector&lt;double&gt; imuToGpsOffset(3,0.0); // made up; this MUST be correct for real work (see gbxnovatelacfr::Config::imuToGpsOffset_)
    gna::SimpleConfig sCfg(std::string("/dev/ttyS0"), 115200, std::string("IMU_HG1700_AG11"), imuToGpsOffset);
    gna::Config cfg(sCfg);

    // create the driver
    gna::Driver driver(cfg);

    while(0){
        // read from the driver
        std::auto_ptr&lt;gna::GenericData &gt; generic = driver.read();

        // figure out what type of data we got
        switch(generic-&gt;type()){
            case gna::InsPva:
                {
                    // process data
                    gna::InsPvaData *data = dynamic_cast&lt;gna::InsPvaData *&gt;(generic.get());
                    std::cout &lt;&lt; data-&gt;toString() &lt;&lt; "\n";
                }
                break;
            case gna::BestGpsPos:
                {
                    // process data
                    gna::BestGpsPosData *data = dynamic_cast&lt;gna::BestGpsPosData *&gt;(generic.get());
                    std::cout &lt;&lt; data-&gt;toString() &lt;&lt; "\n";
                }
                break;
            case gna::BestGpsVel:
                {
                    // process data
                    gna::BestGpsVelData *data = dynamic_cast&lt;gna::BestGpsVelData *&gt;(generic.get());
                    std::cout &lt;&lt; data-&gt;toString() &lt;&lt; "\n";
                }
                break;
            case gna::RawImu:
                {
                    // process data
                    gna::RawImuData *data = dynamic_cast&lt;gna::RawImuData *&gt;(generic.get());
                    std::cout &lt;&lt; data-&gt;toString() &lt;&lt; "\n";
                }
                break;
            default:
                if(0 == generic.get()){
                    std::cout &lt;&lt; "Got NULL message!\n";
                }
                else{
                    std::cout &lt;&lt; "Got unknown message!\n";
                    std::cout &lt;&lt; generic-&gt;toString() &lt;&lt; "\n"; // yes this works, since toString() is a member of the base class
                }
                break;
        }
    }

    return EXIT_SUCCESS;
}
</pre></div><dl class="user"><dt><b>References</b></dt><dd></dd></dl>
<p>This driver was programmed based on the protocol/message descriptions in Novatel's manuals, it does not contain any code from Novatel. The main source for information was:</p>
<ul>
<li><a href="http://www.novatel.com/Documents/Manuals/om-20000094.pdf">http://www.novatel.com/Documents/Manuals/om-20000094.pdf</a> (Novatel OEMV reference)</li>
<li><a href="http://www.novatel.com/Documents/Manuals/om-20000104.pdf">http://www.novatel.com/Documents/Manuals/om-20000104.pdf</a> (SPAN-system manual)</li>
</ul>
<p>The following sources have also been helpful:</p>
<ul>
<li><a href="http://www.novatel.com/Documents/Manuals/GPS+Reference.pdf">http://www.novatel.com/Documents/Manuals/GPS+Reference.pdf</a> (a good overview about GPS: correct, complete, concise)</li>
<li><a href="http://www.novatel.com/support/faqs.htm">http://www.novatel.com/support/faqs.htm</a></li>
<li><a href="http://www.novatel.com/support/applicationnotes.htm">http://www.novatel.com/support/applicationnotes.htm</a> (more details on specific subjects than the manuals)</li>
</ul>
<dl class="user"><dt><b>Limitations</b></dt><dd></dd></dl>
<ul>
<li>This is a Linux-only implementation (because of the serial library and the system-calls for timestamps, this might change in the future, particularly if there is user-demand)</li>
<li>Only supports a subset of the messages a NovatelSPAN system can provide, this can be extended, but only if there is demand.</li>
<li>The binary parser currently works on little endian architectures (e.g. x86) only. This is checked at run-time.</li>
<li>Driver currently treats the hardware as data-source only, communication _to_ the hardware is possible only during initialization.</li>
<li>Driver does limited checking if configuring the receiver was successful/as-intended:<ul>
<li>Driver checks for 'ack' for commands, reports 'no-ack' and retries</li>
<li>This detects malformed commands _only_</li>
<li>The receiver (and hence the driver) will accept commands to e.g. setup an IMU, even if no IMU is present</li>
</ul>
</li>
<li>Driver does not deal with persistent storage:<ul>
<li>It is possible to make settings persistent between sessions (receiver command 'saveconfig'). Our driver does not use this command, but it could have been used manually.</li>
<li>There are cases where persistent settings could interfere with normal operation of the driver. This is particularly likely to happen when the hardware is shared between projects. There is no easy way to test for this, and the current implementation ignores the problem completely (the user is always right).</li>
<li>Workaround: To make sure that there are no lingering persistent settings, use the receiver's 'freset' command to bring it back to factory-defaults. The driver itself does not do this, on the grounds that it also might delete settings that were made persistent with good reason and purpose. If you are sharing equipment, check with everybody involved, before you use this approach.</li>
</ul>
</li>
</ul>
<dl class="user"><dt><b>History</b></dt><dd></dd></dl>
<ul>
<li>August 2009: Bugfix (patch by Ian Mahon), driver's GPS status/solution-type enums matched to Novatel's. Note: This will create mismatches with old log-files (not data, status/solution-type only)!</li>
<li>January 2009: Accepted into distribution after second hardware review.</li>
<li>January 2009: Second hardware review, <a class="el" href="gbxnovatelacfr__hw__reviews.html#gbxnovatelacfr_hw_reviews_alen">Novatel Pro-Pak-G2 plus receiver (Alen Alempijevic)</a></li>
<li>August 2008: First hardware review, <a class="el" href="gbxnovatelacfr__hw__reviews.html#gbxnovatelacfr_hw_reviews_michael">Novatel ProPak V3 (OEMV) receiver with Honeywell HG1700AG62 IMU (Michael Moser)</a></li>
<li>July/August 2008: Code reviews by AlexB and GeoffB (see developer mailing-list archives)</li>
<li>June 2008: Started moving functionality from Orca/Hydro's insgps component to gearbox. </li>
</ul>
</div>

            </td>
            <td colspan="1">&nbsp;</td>
         </tr>
        </table>
<!-- end of table -->

 <hr size="1"><address style="align: right;"><small>Generated for GearBox by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.5 </small></address>
</body>
</html>