For participants only. Not for public distribution.

Note #42
GPSINS Server Design

Khian Hao Lim
Last revised February 7, 2004 .

Responsibility of the GPSINS Server

This server talks to the GPS receiver, Inertial sensors and Odometry system and provides accurate and updated body positions and angles estimates. At best, body position is accurate up to decimeter level accuracy, while body angles are accurate up to 2 or 3 degrees.

Hardware and Services

GPS Receiver: Novatel Propak LB

IMU: Xbow AHRS 400CB-200

Additional: Omnistar High Performance (HP) subscription


The figure below shows how the GPSINS server fits into the rest of the system. In the figure, an arrow goes from a client and points at a server if it requests data from the server, blue boxes are clients or servers while grey entities are hardware.

We had plans for the a yaw gyro to augment the heading readings but in the end Crossbow was not able to provide it. It can be seen that the Speed Server and Move Client are clients that request for data from the GPSINS server while the GPSINS server requests for odometry data from the METER server.


Design and Implementation

More elaboration of the following can be found in the report linked from the References Section below.

The source can be found in the overbot cvs source tree at sandbox/gc/src/qnx/nav/gpsins/

The program man page can be found in sandbox/gc/doc/manuals/

Angular rates and euler angles(Roll, Pitch, Yaw) of the body is taken directly from the AHRS which already has kalman filtered angles at 60hz.

When GPS signal is present, the GPS receiver produces 20 hz of accurate data. With Omnistar HP, this can be accurate down to 10 cm.

Using an Extended Kalman Filter (refer to Report linked off the References Section below), the position estimation is given at 60hz by incorporate data from both sources.

The same filter is meant to incorporate the data from the odometry (see future work section below) server with the AHRS data when there is no GPS signal to provide the abstraction of 60hz position estimation.


Testing has only been done off the vehicle so far. To aid the testing and visualization of the position and angle data, a gui has been developed. Its source can be found at sandbox/gc/src/qnx/nav/gpsins_gui. The program man page can be found in sandbox/gc/doc/manuals/

Current Status and Further Work

  1. The odometry server (METER server in the figure above) has not been implemented and so position estimation is accurate only when it receives GPS signal. Without GPS signals, the software currently tries to incorporate the accelerometer readings from the Crossbow unit and estimate distance. However, due to the possible drift from accelerometer reading offsets, this is accurate probably only for 10 seconds. Once the GPSINS server is able to retrieve odometry data, the data from odometry can be used as truth when no GPS signals are present.
  2. The GPS receiver needs to be mounted to the back of the vehicle and the GPS antenna needs to be mounted at the top of the vehicle.
  3. Omnistar HP service takes 20-30 min for signal reacquisition after loss on the Propak-LB firmware. Novatel released beta firmware that should solve this problem. I have yet to experiment with it.


A slightly older summary of how the GPSINS server works can be found in this report which I submitted as my Stanford University EE391 class report.