Beruflich Dokumente
Kultur Dokumente
Salazar D., Hernandez-Pajares M., Juan J.M. and Sanz J. gAGE/UPC, Barcelona, Spain
gAGE
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
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
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
GPSTk portability
research group of Astronomy and Geomatics Barcelona, Spain
gAGE
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
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
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
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.
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
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
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
16
gAGE
17
gAGE
18
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
gAGE
20
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
gAGE
22
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
gAGE
24
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
gAGE
26
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
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
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
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
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
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
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:
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
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
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
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
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
39
Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain
gnssRinex gpsData;
gAGE
40
Processing paradigm
research group of Astronomy and Geomatics Barcelona, Spain
gnssRinex gpsData;
gAGE
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
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
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
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
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
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.
gAGE
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
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
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
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
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
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
55
gAGE
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
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
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
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
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
PC (ionosphere free) code + smoothing with LC + weighted least-mean squares solver + East-North-Up (ENU) system
gAGE
63
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
64
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
65
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
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
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
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
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
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
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
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
Differential GPS + C1 code observable + weighted least-mean squares + East-North-Up (ENU) system
gAGE
74
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
75
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
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
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
gAGE
79
Processing phase-based GPS data with the GPSTk and GDS Example of Precise Point Positioning (PPP)
gAGE
80
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
gAGE
82
gAGE
83
gAGE
84
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter
gAGE
85
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables
gAGE
86
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp
gAGE
87
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo
gAGE
88
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations
gAGE
89
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW
Marck cycle slips: Two complementary algorithms
gAGE
90
correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites >> gravitationalDelay Compute prefit residuals >> computeSatellitePhaseCenter >> correctObservables >> windUp >> computeTropo >> computeLinearCombinations >> markCSLI >> markCSMW >> computePrefitResiduals
gAGE
91
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
92
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
93
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
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
gAGE
96
gAGE
97
WhiteNoiseModel newCoordinatesModel(100.0); pppSolver.setCoordinatesModel(&newCoordinatesModel); correctObservables.setExtraBiases(tides); gpsData >> basicGPSModel >> removeEclipsedSatellites ... ... >> pppSolver;
gAGE
98
gAGE
99
gAGE
100
gAGE
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
gAGE
104