00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef Ins_H
00020 #define Ins_H
00021
00022 #include <ctime>
00023 #include <string>
00024 #include <fstream>
00025 #include <vector>
00026 #include <cmath>
00027 #include <iostream>
00028 #include <boost/numeric/ublas/vector.hpp>
00029 #include <boost/numeric/ublas/vector_proxy.hpp>
00030 #include <boost/numeric/ublas/vector_sparse.hpp>
00031 #include <boost/numeric/ublas/storage_sparse.hpp>
00032 #include <boost/numeric/ublas/io.hpp>
00033 #include <boost/numeric/ublas/matrix.hpp>
00034 #include "Navigator.h"
00035 #include "uvsim/sensing/Imu6DofSensor.h"
00036 #include "uvsim/navigation/GeoMag.h"
00037 #include "uvsim/guidance/GeoCoord.h"
00038 #include "uvsim/utilities/utilities.h"
00039 #include "uvsim/utilities/constants.h"
00040
00041 using namespace boost::numeric::ublas;
00042
00043 namespace uvsim
00044 {
00045
00046
00047 class Ins
00048 {
00049 public:
00050
00051
00052 double latitude, longitude, altitude;
00053 double latitude0, longitude0, altitude0;
00054 double latitudedot, longitudedot, altitudedot;
00055 double latitudedot0, longitudedot0, altitudedot0;
00056 double latitudeInit, longitudeInit, altitudeInit;
00057 vector<double> accelInertial, accelInertial0, specificForce,
00058 velocity, velocity0, accel, gyro, mag, quatdot, quatdot0,
00059 quat, quat0, euler, accel0, gyro0, mag0;
00060 double freq;
00061 matrix<double> W, DCM;
00062 timeval timeInitial, timePrev, timePres;
00063 vector<double> accelM, accelB, gyroM, gyroB,
00064 magM, magB;
00065 Imu6DofSensor * imu;
00066
00067
00068 static const int initCycles = 2000;
00069 static const double magYear = 2009;
00070
00071
00072 vector<double> sum_mag, sum_accel, sum_gyro,
00073 sumSq_mag, sumSq_accel, sumSq_gyro,
00074 avg_mag, avg_accel, avg_gyro,
00075 std_mag, std_accel, std_gyro;
00076
00077
00078 GeoMag * geoMag;
00079
00080
00081 Ins(std::string accelCalib, std::string gyroCalib, std::string magCalib,
00082 double frequency, Imu6DofSensor * imu);
00083
00084
00085 void initializeStatic(double altitude0, double latitudae0, double longitude0);
00086
00087
00088 void read();
00089
00090
00091 void update();
00092
00093
00094 void print();
00095
00096
00097 void stop();
00098
00099
00100 vector<double> getQuat()
00101 {
00102 return quat;
00103 }
00104 GeoCoord getGeo()
00105 {
00106 return GeoCoord(longitude, latitude, altitude);
00107 }
00108
00109
00110 virtual ~Ins();
00111
00112 };
00113
00114 }
00115
00116 #endif
00117