Servers by jDrones

How to pass it on

Last June we had help to install the driver: (

to include the GPHDT sentence from our GPS Compass (Hemisphere V103). And it has worked fine apart from the fact that it is not being registered as a compass in ArduPilot.

Here it is in my back garden showing a YAW of 89.66, and the HDT message from the V103 says 89.79 and 89.96 so that is only minor differences. See the images here:

So, how do we pass it on, so that it is shown on the HW ID list as a compass ? Is it maybe an amendment to the driver, that is needed ?


Yes, I think we would need a NMEA compass driver written in ArduPilot to consume the message. Once a developer did that they could send a Pull-Request to ArduPilot to have it included in the main code so that it would appear for everyone in the next major release.

I’m ought to be able to develop the code. I know the GPS-compass, but I do not know the Architecture of ArduPilot.
Can direct me to some How-To’s or a piece of code to addapt?

@rmackay9, @Knaldgas, @tridge

I think you are right that such an NMEA Compass will benefit the community. My application is to do hydrographic surveys fx in harbors, where a magnetic compass can have troubles close to harbor walls etc. I know a commercial developer of USV’s who use ArduPilot and a magnetic compass and admit, that they operate in manual mode close to bridges etc.

Can you possibly propose someone, who can help us with this ? @Knaldgas and I know the GPS Compass, and @Knaldgas can develop the code, but is not familiar with the ArduPilot framework.

Do I understand it correctly, that most of the work is done in the AP_GPS_NMEA.cpp driver ?

We have some information here on writing drivers. Coincidentally we had some discussion during the developer conference about integrating a NMEA compass. One issue may be that the sensor may report an earth-frame heading instead of a full 3D vector. If this is the case it will be more difficult to integrate because the EKF expects a 3D vector.

Servers by jDrones