Sie sind auf Seite 1von 104

research group of Astronomy and Geomatics Barcelona, Spain

Using the GPSTk for GNSS learning and research

Salazar D., Hernandez-Pajares M., Juan J.M. and Sanz J. gAGE/UPC, Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

Contents
research group of Astronomy and Geomatics Barcelona, Spain

GPSTk overview Some current features GPSTk advantages and disadvantages How to get the GPSTk GPSTk basics GNSS Data Structures (GDS) Processing paradigm Some processing examples Comparison with other GPS software Conclusions
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

GPSTk overview
research group of Astronomy and Geomatics Barcelona, Spain

The GPSTk is: A library to write GNSS software Includes example applications. The GPSTk is Free Software (LGPL): Both non-commercial and commercial applications.

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

GPSTk overview
research group of Astronomy and Geomatics Barcelona, Spain

The LGPL free software license means that: The original code belonged to ARL:UT, but it was released to the public. New features added to the library are property of their authors, but them must be also released as LGPL. New software developed taking advantage of the GPSTk library (linking) is property of their authors.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

GPSTk overview
research group of Astronomy and Geomatics Barcelona, Spain

The LGPL free software license means that: In summary, with the GPSTk you can develop both free and non-free (commercial) software. This license is very convenient both for companies and educational/research institutions.

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

GPSTk overview
research group of Astronomy and Geomatics Barcelona, Spain

Initiated at ARL:UT, it now has several official developers around the world. The GPSTk is easy to extend and maintain, lowering programming costs. It is very well documented. Website: http://www.gpstk.org
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

GPSTk overview
research group of Astronomy and Geomatics Barcelona, Spain

It is written in ISO-standard C++. Design is object-oriented, easing maintenance and extensibility. It is VERY portable:
Operative System portability: Works in Windows, Linux, Mac OSX, AIX, etc. Hardware portability: Big and small systems, both 32 and 64 bits.

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

GPSTk portability
research group of Astronomy and Geomatics Barcelona, Spain

GUMSTIX Miniature computer

gAGE

NOKIA Internet Tablets

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

Some current features


research group of Astronomy and Geomatics Barcelona, Spain

Time conversions. RINEX files reading/writing: Observation Ephemeris Meteorological Ephemeris computation: Broadcast SP3.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

Some current features


research group of Astronomy and Geomatics Barcelona, Spain

Mathematical tools: Matrices, vectors, interpolation, numeric integration, LMS, W-LMS, Kalman filter, etc. Application development support: Exceptions handling. Command line framework. Configuration files management. Code positioning, RAIM, DGPS and Precise Point Positioning (PPP) support.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

10

Some current features


research group of Astronomy and Geomatics Barcelona, Spain

Several tropospheric models: Saastamoinen, Goad-Goodman, New Brunswick, Niell, etc. Classes for precise modeling: Phase centers, Wind-up, gravitational delay, etc. Tidal models: Solid tides, Ocean loading, Pole tides
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

11

Some current features


research group of Astronomy and Geomatics Barcelona, Spain

Full support for Antex (antenna) files. Advanced GNSS Data Structures (GDS) for data processing and management. Other features like:
Stocastic models Probabilistic functions (normal, chi-square, etc) Run-time programmable solvers!!!
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

12

GPSTk advantages
research group of Astronomy and Geomatics Barcelona, Spain

gAGE

Programmers don't have to reinvent the wheel: Don't use your time to program, test and debug common, non-interesting routines (like RINEX parsing, for instance) Use your time to learn and experiment. Use your time to develop new techniques. You can trust on the GPSTk: Its performance has been validated with other state-of-the-art GPS software suites.

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

13

GPSTk advantages
research group of Astronomy and Geomatics Barcelona, Spain

It includes data management facilities that support clean and easy to maintain source code. It is open-source, and therefore: Great for learning how complex algorithms work. It eases reimplementation in other languagues and/or hardware.

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

14

GPSTk disadvantages
research group of Astronomy and Geomatics Barcelona, Spain

The programmer needs C++ knowledge to use it effectively. C++ is very flexible, but it may become complex and exotic. The compilation process is slower and more complex than using interpreted languages. Many engineers are more confortable with tools like Mathlab (although they are very slow).
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

15

How to get the GPSTk


research group of Astronomy and Geomatics Barcelona, Spain

The GPSTk requires:


C++ compiler (g++, MS Visual C++, etc) Jam or make Optional: doxygen, perl, gnuplot

Easy installation:
Download source code from GPSTk website or subversion repository Decompress if needed Compile: jam is currently the easiest way Generate documentation with doxygen

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

16

GPSTk basics: Vectors


research group of Astronomy and Geomatics Barcelona, Spain

Vector<double>vect1(4); Vector<double>vect2(4); for(inti=0;i<4;++i) { vect1(i)=3.0+i; vect2(i)=5.02.5*i; } Vector<double>vect3=vect1+vect2; cout<<vect1<<endl; cout<<vect2<<endl; cout<<vect3<<endl;


SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

17

GPSTk basics: Matrices


research group of Astronomy and Geomatics Barcelona, Spain

Matrix<double>A(3,3,5.0); Matrix<double>I=ident<double>(3); Matrix<double>B=A2.0*I; Matrix<double>C(3,3); for(introw=0;row<3;++row) { for(intcol=0;col<3;++col) { C(row,col)=row+0.9*B(row,col); } } Matrix<double>CT=transpose(C); Matrix<double>D=inverseChol(CT*C);


SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

18

GPSTk basics: Solvers


research group of Astronomy and Geomatics Barcelona, Spain

Vector<double>vect(3,0.0); vect(0)=94.50; vect(1)=112.01; vect(2)=121.86; Matrix<double>mat(3,2,0.0); for(introw=0;row<3;++row) for(intcol=0;col<2;++col) mat(row,col)=1.5+row+0.9*row*col; SolverLMSsolver; solver.Compute(vect,mat); cout<<solver.solution(0)<<":" <<solver.solution(1)<<endl;
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

19

GPSTk basics: Time


research group of Astronomy and Geomatics Barcelona, Spain

DayTimeepoch1(2009,10,28,10,30,0.0); DayTimeepoch2=epoch1+3600.0; cout<<epoch1<<endl <<epoch2<<endl; cout<<epoch1.GPSfullweek()<<"" <<epoch1.DOY()<<"" <<epoch1.GPSsecond()<<endl;

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

20

GPSTk basics: Position


research group of Astronomy and Geomatics Barcelona, Spain

PositionposBCN(4789031.0, 176583.0, 4195015.0); PositionposHANOI; posHANOI.setGeodetic(21.033,105.85,308.0); PositionposSAT(22300542.564, 9466839.117, 10798193.375); cout<<posBCN<<endl <<posHANOI<<endl <<posHANOI.elevation(posSAT)<<":" <<posHANOI.azimuth(posSAT)<<endl;
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

21

GPSTk basics: RINEX


research group of Astronomy and Geomatics Barcelona, Spain

RinexObsStreamrinexData("bahr1620.04o"); RinexObsHeaderrinexHeader; rinexData>>rinexHeader; cout<<rinexHeader.markerName<<":" <<rinexHeader.antType<<":" <<rinexHeader.firstObs<<endl; RinexObsDataobsData; while(rinexData>>obsData) { obsData.dump(cout); }


SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

22

GPSTk basics: Ephemeris


research group of Astronomy and Geomatics Barcelona, Spain

SP3EphemerisStoreSP3EphList; SP3EphList.loadFile("igs13354.sp3"); SatIDsat(10,SatID::systemGPS); DayTimeepoch(SP3EphList.getInitialTime()); DayTimeepochEnd(SP3EphList.getFinalTime()); while(epoch<epochEnd){ epoch+=60.0; XvtsvPos; try{ svPos=SP3EphList.getXvt(sat,epoch); cout<<epoch.DOYsecond()<<"" <<svPos.x[0]<<"" <<svPos.x[1]<<"" <<svPos.x[2]<<endl; } catch(InvalidRequest&e){continue;} }
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

23

GPSTk basics: Ephemeris


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

24

GPSTk basics: Solid tides


research group of Astronomy and Geomatics Barcelona, Spain

PositionposHANOI; posHANOI.setGeodetic(21.033,105.85,308.0); SolidTidessolid; DayTimeepoch(2009,10,28,0,0,0.0); DayTimeepochEnd(2009,10,29,0,0,0.0); while(epoch<epochEnd){ TriplehanoiTide; hanoiTide=solid.getSolidTide(epoch,posHANOI); cout<<epoch.DOYsecond()<<"" <<hanoiTide[0]<<"" <<hanoiTide[1]<<"" <<hanoiTide[2]<<endl; epoch+=300.0; }
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

25

GPSTk basics: Solid tides


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

26

GNSS Data Structures


research group of Astronomy and Geomatics Barcelona, Spain

GNSS Data Structures (GDS) were designed to help in GNSS data processing. They address GNSS data management problems. You can program without them, but they will make your work a lot easier.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

27

GNSS Data Structures


research group of Astronomy and Geomatics Barcelona, Spain

Almost all GNSS data may be identified (or indexed) by: Source: Receiver logging data. Satellite: GPS, GALILEO, GLONASS... Epoch: Time the data belongs to. Type: C1, P1, L2, etc, and other types. Key point: Save Meta-Information: Save 4 indexes to identify each piece of data
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

28

GNSS Data Structures


research group of Astronomy and Geomatics Barcelona, Spain

Source: Implemented as class SourceID. Satellite: Implemented as class SatID. Several systems: GPS, Galileo, Glonass... Epoch: Implemented as class DayTime. Type: Implemented as class TypeID. Includes basic observations: C1, P1, etc. Other types: Relativity, troposphere, etc. You can create new types as needed!!!.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

29

GDS example
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Keep only C1 observable in GDS:

gpsData.keepOnlyTypeID(TypeID::C1)

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

30

GDS example
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Keep only C1 observable in GDS:

gpsData.keepOnlyTypeID(TypeID::C1)

gAGE

GDS

Method

Type to keep

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

31

Implementation
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Remove a given satellite from GDS:

gpsData.removeSatID(sat21)

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

32

Implementation
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Remove a given satellite from GDS:

gpsData.removeSatID(sat21)

gAGE

GDS

Method

Satellite to remove

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

33

Implementation
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Remove a given satellite from GDS:

gpsData.removeSatID(sat21) Note: sat21 = SatID( 21, SatID::systemGPS )


SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

34

Implementation
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Access GDS in a matrix-like fashion:

gpsData.body(TypeID::LI)(sat14)

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

35

Implementation
research group of Astronomy and Geomatics Barcelona, Spain

GDS provide several methods to ease handling. For instance: Access GDS in a matrix-like fashion:

gpsData.body(TypeID::LI)(sat14)

gAGE

GDS Branches

Type

Satellite

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

36

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Operator >> is overloaded: We redefine it in C++ to make data flow from one processing step to the next

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

37

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Declare object rinexFile to take data out of Rinex observation file:
RinexObsStream rinexFile("ebre0300.02o");

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

38

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Declare object rinexFile to take data out of Rinex observation file:
RinexObsStream rinexFile("ebre0300.02o");

gAGE

Class to handle Object name Rinex Obs files

Rinex file name

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

39

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Declare object gpsData. This is a GDS:

gnssRinex gpsData;

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

40

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Declare object gpsData. This is a GDS:

gnssRinex gpsData;

gAGE

GDS Class Object name

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

41

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Combine everything and take one epoch of data out of Rinex file into GDS:
RinexObsStream rinexFile("ebre0300.02o"); gnssRinex gpsData; rinexFile >> gpsData;

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

42

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Combine everything and take one epoch of data out of Rinex file into GDS:
RinexObsStream rinexFile("ebre0300.02o"); gnssRinex gpsData; rinexFile >> gpsData;

Processing line

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

43

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Example: Combine everything and take one epoch of data out of Rinex file into GDS:
RinexObsStream rinexFile("ebre0300.02o"); gnssRinex gpsData; rinexFile >> gpsData;

Processing line

gAGE

Flow operator
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

44

Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain

Main Idea: GNSS data processing becomes like an assembly line. The GDS flows from one workstation to the next, like a car in factory. And, like the car, the GDS changes along the processing line. For the developer, the GDS is like a white box holding all the information needed, and properly indexed.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

45

research group of Astronomy and Geomatics Barcelona, Spain

Processing code-based GPS data with the GPSTk and GDS A simple example:
C1 code observable + least-mean squares solver Plain standard GPS processing

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

46

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Get data out of Rinex file, one epoch at a time Get data into GDS (gpsData) Do it until Rinex file ends.

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

47

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Get data out of Rinex file, one epoch at a time Get data into GDS (gpsData) Do it until Rinex file ends.

while ( rinexFile >> gpsData ) { }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

48

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Get data into modeling object gpsModel GpsModel was previously initialized: Ephemeris, tropospheric model, Klobuchar ionospheric model, etc. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

49

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Get data into modeling object gpsModel GpsModel was previously initialized: Ephemeris, tropospheric model, Klobuchar ionospheric model, etc. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { gpsData >> gpsModel }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

50

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Resulting GDS with original data and modeled data gets into solver object lmsSolver lmsSolver is from SolverLMS class. lmsSolver was previously initialized. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { gpsData >> gpsModel }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

51

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Resulting GDS with original data and modeled data gets into solver object lmsSolver lmsSolver is from SolverLMS class. lmsSolver was previously initialized. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> lmsSolver; }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

52

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

Resulting GDS with original data and modeled data gets into solver object lmsSolver lmsSolver is from SolverLMS class. lmsSolver was previously initialized. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> lmsSolver; }

gAGE

Processing line

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

53

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

All GNSS data processing is done!!! Print results to the screen. C++ cout object is used to print to screen. Solution is inside lmsSolver: Ask for type. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> lmsSolver;

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

54

C1 + LMS
research group of Astronomy and Geomatics Barcelona, Spain

All GNSS data processing is done!!! Print results to the screen. C++ cout object is used to print to screen. Solution is inside lmsSolver: Ask for type. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> lmsSolver; cout << lmsSolver.getSolution(TypeID::dx) << '' ''; cout << lmsSolver.getSolution(TypeID::dy) << '' ''; cout << lmsSolver.getSolution(TypeID::dz) << endl;

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

55

research group of Astronomy and Geomatics Barcelona, Spain

C1 code observable + least-mean squares solver + East-North-Up (ENU) system

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

56

C1 + LMS + ENU
research group of Astronomy and Geomatics Barcelona, Spain

Add a change-base object to processing line: XYZ2NEU class change from ECEF to ENU. Create object baseChange from XYZ2NEU class.

gAGE

while ( rinexFile >> gpsData ) { gpsData >> gpsModel }

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

57

C1 + LMS + ENU
research group of Astronomy and Geomatics Barcelona, Spain

Add a change-base object to processing line: XYZ2NEU class change from ECEF to NEU. Create object baseChange from XYZ2NEU class.

gAGE

while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> baseChange }

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

58

C1 + LMS + ENU
research group of Astronomy and Geomatics Barcelona, Spain

Resulting GDS gets into object enuSolver enuSolver belongs to SolverLMS class. enuSolver was previously initialized to solve using dLat, dLon,dUp and cdt. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> baseChange }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

59

C1 + LMS + ENU
research group of Astronomy and Geomatics Barcelona, Spain

Resulting GDS gets into object enuSolver enuSolver belongs to SolverLMS class. enuSolver was previously initialized to solve using dLat, dLon,dUp and cdt. Initialization phase is not shown here. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> baseChange >> enuSolver; }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

60

C1 + LMS + ENU
research group of Astronomy and Geomatics Barcelona, Spain

All GNSS data processing is done!!! Print results to the screen. Solution is inside enuSolver: Ask for type. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> baseChange >> enuSolver;

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

61

C1 + LMS + ENU
research group of Astronomy and Geomatics Barcelona, Spain

All GNSS data processing is done!!! Print results to the screen. Solution is inside enuSolver: Ask for type. while ( rinexFile >> gpsData ) { gpsData >> gpsModel >> baseChange >> enuSolver; cout << enuSolver.getSolution(TypeID::dLat) << '' ''; cout << enuSolver.getSolution(TypeID::dLon) << '' ''; cout << enuSolver.getSolution(TypeID::dH) << endl; }
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

62

research group of Astronomy and Geomatics Barcelona, Spain

PC (ionosphere free) code + smoothing with LC + weighted least-mean squares solver + East-North-Up (ENU) system

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

63

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

First, get combinations we will need: PC and LC (ionosphere-free). LI (ionospheric combination). MW (Melbourne-Wbbena) Look for corresponding classes in GPSTk API while ( rinexFile >> gpsData ) { gpsData >> }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

64

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

First, get combinations we will need: PC and LC (ionosphere-free). LI (ionospheric combination). MW (Melbourne-Wbbena) Look for corresponding classes in GPSTk API while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW }

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

65

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Then, detect and mark cycle-slips: Two different and complementary methods are used. Everything is in a single processing line. while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

66

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Then, detect and mark cycle-slips: Two different and complementary methods are used. Everything is in a single processing line. while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

67

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Smooth code with phase

while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

68

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Smooth code with phase

while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW >> smoothPC

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

69

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Smooth code with phase Apply model

while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW >> smoothPC >> gpsModel

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

70

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Smooth code with phase Apply model Compute weights

while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW >> smoothPC >> gpsModel >> getWeights

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

71

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Smooth code with phase Apply model Compute weights Change base and solve with a WMS solver while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW >> smoothPC >> gpsModel >> getWeights >> baseChange >> wmsSolver;

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

72

Smoothed-PC + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

All GNSS data processing is done!!! Print results to the screen. Solution is inside wmsSolver: Ask for type. Everything is in a single processing line. while ( rinexFile >> gpsData ) { gpsData >> getPC >> getLC >> getLI >> getMW
>> markCSLI >> markCSMW >> smoothPC >> gpsModel >> getWeights >> baseChange >> wmsSolver;

gAGE

}
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

73

research group of Astronomy and Geomatics Barcelona, Spain

Differential GPS + C1 code observable + weighted least-mean squares + East-North-Up (ENU) system

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

74

C1 + DGPS + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

First, process reference station data: synchro is a Synchronize class object. It is in charge of synchronizing reference and rover data streams. Initialization is not shown here. Consult API. while ( rinexFile >> gpsData ) { gpsDataRef >> synchro >> refModel; }
Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

75

C1 + DGPS + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Then, indicate the reference data: delta is a DeltaOp class object. It computes single diffences using common satellites. You must tell it which is the reference data. while ( rinexFile >> gpsData ) { gpsDataRef >> synchro >> refModel; delta.setRefData( gpsDataRef.body ); }
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

76

C1 + DGPS + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

Finally, process rover receiver data: You must insert delta object into processing line to compute single differences. while ( rinexFile >> gpsData ) { gpsDataRef >> synchro >> refModel; delta.setRefData( gpsDataRef.body ); gpsData >> gpsModel >> getWeights >> delta >> baseChange >> wmsSolver; }
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

77

C1 + DGPS + WMS + ENU


research group of Astronomy and Geomatics Barcelona, Spain

All GNSS data processing is done!!! Print results to the screen. Solution is inside wmsSolver: Ask for type. while ( rinexFile >> gpsData ) { gpsDataRef >> synchro >> refModel; delta.setRefData( gpsDataRef.body ); gpsData >> gpsModel >> getWeights >> delta >> baseChange >> wmsSolver; }
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

78

Code-based results (as expected)


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

79

research group of Astronomy and Geomatics Barcelona, Spain

Processing phase-based GPS data with the GPSTk and GDS Example of Precise Point Positioning (PPP)

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

80

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides);

gAGE

Set correcting object with tide information. It also includes RX antenna phase center and eccentricity
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

81

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel

gAGE

Compute basic components of model

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

82

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites

gAGE

Remove satellites in eclipse

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

83

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay

gAGE

Compute gravitational delay

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

84

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter

gAGE

Compute the effect of satellite phase centers

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

85

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables

gAGE

Correct observables from tides, RX phase center, etc

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

86

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp

gAGE

Compute wind-up effect

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

87

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo

gAGE

Compute tropospheric effect (Niell model)

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

88

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations

gAGE

Compute common linear combinations: PC, LC, LI, ...

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

89

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW
Marck cycle slips: Two complementary algorithms

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

90

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay Compute prefit residuals >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW >> computePrefitResiduals

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

91

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay Decimate data if epoch is not a multiple of 900 seconds >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW >> computePrefitResiduals >> decimateData

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

92

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay Change from ECEF to ENU reference frame >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW >> computePrefitResiduals >> decimateData >> baseChange

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

93

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay Solve equations with a properly adjusted Kalman filter >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW >> computePrefitResiduals >> decimateData >> baseChange >> pppSolver;
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

94

PPP (static, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo All this processing is repeated for each epoch >> computeLinearCombinations >> markCSLI >> markCSMW >> computePrefitResiduals >> decimateData >> baseChange >> pppSolver;
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

95

PPP: MADR 2008/05/27, static, forward


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

96

PPP: MADR 2008/05/27, static, forward


research group of Astronomy and Geomatics Barcelona, Spain

The achieved accuracy is better than 2 centimeters!!!

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

97

PPP (kinematic, forward mode)


research group of Astronomy and Geomatics Barcelona, Spain

WhiteNoiseModel newCoordinatesModel(100.0); pppSolver.setCoordinatesModel(&newCoordinatesModel); correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites ... ... >> pppSolver;

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

98

PPP:MADR 2008/05/27, kinematic, forward


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

99

Comparison with other GPS software


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

100

Comparison with other GPS software


research group of Astronomy and Geomatics Barcelona, Spain

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

101

Conclusions
research group of Astronomy and Geomatics Barcelona, Spain

GPSTk is already a solid base to work upon, saving tedious work to the programmer and researcher. The GPSTk provides solid advantages both for companies and educational/research institutions. GPSTk portability, design and openness makes it very flexible for multiple uses. GDS provide a powerful, flexible and easy to use processing framework.
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

102

Conclusions
research group of Astronomy and Geomatics Barcelona, Spain

GPSTk results are comparable with the best GPS data processing software available. There are several areas being improved: RINEX version 3 handling. Robust outlier detection classes. More sophisticated tide models. Other GNSS processing strategies (RTK).
SEAGAL Project Workshop. Hanoi, 2009. Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

gAGE

103

research group of Astronomy and Geomatics Barcelona, Spain

Thanks for your attention and time!

gAGE

SEAGAL Project Workshop. Hanoi, 2009.

Salazar, D., Hernandez-Pajares, M., Juan, J.M., Sanz, J.

104

Das könnte Ihnen auch gefallen