How can one input heading data from sources other than magnetometer?

Hi Martin,do you ever try to use external nmea compass like Airmar h2183?

Hi Arwah,

Yes, I have used external compasses as well as ship gyros and dual-antenna GPS which output heading data, usually available as NMEA 0183 “HDT” sentence. I have not used the Airmar H2183. To the best of my knowledge it is does not measure true heading directly but relies on an internal magnetic compass, and as such offers nothing that the Pixhawk, for example (with its onboard 3-axis magnetomer and 3-axis accelerometer and 3-axis gyro), does not already incorporate.

For some purposes, one might want to avoid reliance on magnetic sensors for heading data, or one might want greater accuracy of heading data than that offered by the so-called MEMS (Micro-electro-mechanical system) ICs upon which the Pixhawk and Airmar rely. For those purposes one might want to use a dual-antenna GNSS system, that yelds heading accuracy ~0.5° or less, or even a true ship’s gyro; not a MEMS “gyro” that might actually measure directly angular velocity, but which is not sensitive enough to measure Earth’s angular velocity, and so is not practical for deriving true heading.




I would also be interested in some for of sponsorship for a solution to using NMEA HDT data instead of i2c mag data for drone heading.

Do you know if this has been solved?



1 Like

Hi Gabriel,

As far as I know, this Github site would be the place to follow for the latest on merging the fork of ArduPilot code that accommodates heading data:

GPS: support yaw from GPS

Grant Morphett (@gmorph) did a lot of work on this, and I would say that yes, this has been “solved”, insofar as HDT can be “ingested” and used in the ArduPilot Extended Kalman Filter.

I’ve only proven a particular build (406bd1d1) of version 3.3.0-dev Rover for PX4-v2. I’ve given up trying to grasp the whole of ArduPilot code or even to build ArduPilot firmware from source.

I’m not sure when you say “I would also be interested in some for of sponsorship…” whether you are looking for solutions, understanding, or money. For my part, I’ve gone in a different direction with autopilot code for boats.


1 Like

Grant, when I make all of the COMPASS_USE# parameters = 0, the pixhawk appears to use more than just GPS to determine the heading. I came to this conclusion because the “GPS track” in Mission Planner did not match the “Current heading”. The GPS track seemed to be doing exactly what I expected, but the overall heading was not behaving predictably. I assume that it is also being influenced by the IMUs in the pixhawk. I would like to only use GPS for heading. Is that an EKF parameter? Thanks