DGPS

The principle
The Differential GPS present here is based on the Ublox chip M8P. There are two types of Ublox M8P:
* NEO-M8P-0: acting as the rover (mobile)
* NEO-M8P-2: acting as the rover (mobile) or as the ground station
The NEO-M8P-2 acting as the ground station must know its position. This can be done by locating the ground antenna to a know position and set the Ublox to this position, or setting the Ublox to send its estimated position after a given converging time and precision.
When running the Ublox ground station acquire observation data and output them with its position to the NEO-M8P rover (mobile). 
The ground station output three messages types of the RTCM3 standard to the rover (mobile):
* RTCM3.2 1005 : Ground station position
* RTCM3.2 1077 : GPS observation data
* RTCM3.2 1087 : Glonass observation data 
The NEO-M8P acting as a rover (mobile) computes the station position with the data received from the ground. By comparing the computed position with the position received, the rover deduce the error to take into account to estimate its position from its own observation data.
Implementation
Ublox systems integration: we use gps boards from DROTEK. The boards are very small, and equiped with USB and UART. The antenna are active ones from Tallisman. 
Datalink: to not duplicate radio links the ground and board Ublox use the paparazzi telemetry.
* on the ground side, the NEO-M8OP-2 is connected to the laptop using the USB connector (should be /dev/ttyAVCMX). The "rtcm2ivy" ground application (sw/ground_segment/misc/rtcm2ivy) broadcast the RTCM data from the ground ublox to the IVY bus. The paparazzi server (sw/ground_segment/tmtc/server) gets the data from the IVY bus and send it to the rover (mobiles) using the telemetry (sw/ground_segment/tmtc/link -d /dev/paparazzi/xbee -transport xbee -s 57600). All rovers (mobile) linked to the same ground station receive the RTCM data.
* on the rover (mobile) side, the NEO-M8P is connected to the autopilot using the UART. The ublox input RTCM3 message coming from the ground, and output UBX (position) messages to the autopilot. The u-Blox can have three status: 3D, DGPS, RTK
If the rover (mobile) stop receiving ground data, the NEO-M8P acts as a regular GPS, switching from DGPS/RTK to 3D.
Ublox Configuration
Ublox provides a Windows application (U-CENTER) to upgrade and configure the Ublox chips. The NEO-M8P requires at least the U-CENTER V8.24. In a linux environment this version needs to be run in a Windows virtual machine. Previous version (ex.V8.16) that could be run with Linux/Wine are not compatible for the NEO-M8P. 
It is recommended to configure also the on board Ublox with U-CENTER tools, as the modules/gps/gps_ubx_ucenter is not working for the moment.
Ground station ublox 
* Check firmware "view / Messages View / UBX / MON (Monitor) / VER (version)"
* Set default settings view / Configuration View / ..."
* Set output messages "view / Configuration View / Msg (Messages)": USB F5-05 RTCM3.2 1005 (send), F5-4D RTCM3.2 1077 (send), F5-4D RTCM3.2 1087 (send), 01-3B NAV_SVIN (send), (CFG send)
* Set model type "view / Configuration View / NAV5 (Navigation 5)": Dynamic Model : 2-Stationnary (send) (CFG send)
* Set interface "view / Configuration View / PORT": Target: USB, Protocol in: none, Protocol out: 0+1+5 - UBX+NMEA+RTCM3 (send) (CFG send)
* Set acquisition rate "view / Configuration View / RATE (Rates)"Target: Measurement period :1000 (ms) (send) (CFG send)
* Set position type "view / Configuration View / TMODE3 (Time Mode 3)"
* Check converging estimated position "view / Messages View / UBX / NAV (Navigation) / SVIN (survey)"
* Check sending messages "view / Messages View / RTCM3"
Mobile (rover) ublox
* Check firmware "view / Messages View / UBX / MON (Monitor) / VER (version)"
* Set default settings view / Configuration View / ..."
* Set output messages "view / Configuration View / Msg (Messages)": UART1 01-05 NAV-PVT (send), 01-06 NAV-SOL (send), 01-30 NAV-SVINFO (send)
* Set model type "view / Configuration View / NAV5 (Navigation 5)": Dynamic Model : 7-Airborne < 2g (send) (CFG send)
* Set interface "view / Configuration View / PORT": Target: UART1, Protocol in: 5-RTCM3, Protocol out: 0-UBX (send), Baudrate: 115200 (send) (CFG send)
* Set acquisition rate "view / Configuration View / RATE (Rates)"Target: Measurement period :200 (ms) (send) (CFG send)
Paparazzi Configuration
Airframe XML configuration file:
 <module name="gps" type="ublox">
 <configure name="GPS_BAUD" value="B115200"/>
 <define name="USE_GPS_UBX_RTCM" value="TRUE"/> 
 </module>
Telemetry XML configuration file (optional):
 <mode name="RTCM3" >
 <message name="GPS_RXMRTCM" period="1"/>
 <message name="GPS_INT" period=".25"/>
 <message name="GPS_RTK" period="1"/>
 </mode>
== External RTK Ground Station == 
(Working Draft)With this implementation, the RTK ground application runs in a separate machine (ex."Raspberry Pi"), providing a wireless "hotspot" access to the ground station laptop (GCS). This is a more operational way to use the system, as the RTK station is located outside, and ground station laptops can be located inside.
TODO
Implementation
Install a debian