Tip! Disabling Internal Compass with ArduCopter 3.6+

Hi, everyone.

I’m using ArduCopter for the last 4 years and I always tried to find a way to disable the internal compass(es) to avoid the “error compass variance” and things like that when you have an external compass that can be used solely. So, the new version of ArduCopter (>3.6) have a parameter called COMPASS_TYPEMASK that can be used to do the job. I was suffering with errors on internal compasses of a Pixracer R14 running ArduCopter 3.6.1 in a micro quad and I used this parameter to disable the 2 internal compasses. The parameter is easier to be used in QGroundControl, because when you access it in QGC, you will see the possible options as checkboxes. The parameter is a bitmask where each bit is relative to a compass driver that should be loaded or not. I’ve just checked all the driver’s checkboxes to avoid the use of the corresponding driver and let the driver of my external compass unchecked, so, it is the only one that is loaded now and my problems with compass has gone. The only pre-req is that your external compass must be different from the internal ones.

The attached images shows the parameter configuration screen in QGC, the IDs of detected compasses in QGC and the Compass Setup Screen in Mission Planner.

So, I’d like to thanks ArduPilot developer team for including this new parameter and I hope we have less fly aways… :slight_smile:

In this link, you can see some captured screens of this new feature.



This is great thanks for calling this out.
I too run Pixracer and it drives me crazy with compass issues. Looks like this may help.
Not sure I completely understand how to use it,but will read it a bit more.

OR, you could change COMPASS_USEx parameters like you should, 4 years ago… :slight_smile:

Ya thats the trouble I keep having
going to give it a go.

Nope, you can’t. It’s not the same thing. Sometimes you get conflict between external and internal compasses (like me) and even if you mark to don’t use it, the compass will be loaded and identified by the FC. I think that’s why the new parameter was created.

1 Like

Absolutely not the same, if you have 2 internal like Cube 2.1 and 2 external than it is a mess to disable the 2 internals and force the unit to use the 2 externals.

Disabling the driver of everything except the 2 external compasses allowed me to have the unit detect only the 2 external ones and have it working flawlessy.

I think a compass setup review and fix is the thing that Ardupilot needs the most.



Thanks for helping explain to others in this important area.

So in general I think the COMPASS_USE2 = 0, COMPASS_USE3 = 0 should be enough to disable the internal compasses at least on systems that have no more than 3 compasses. For setups with more than 3 compasses, it may be necessary to disable some compass drivers (which is what COMPASS_TYPEMASK is for) although I would have expected that the external compass(s) would always be detected first and should appear as the first compass.

1 Like

Thank you so much for pointing this out, like you i have had problems with internal compasses. Turning them off in the mission planner parameters did nothing, the flight controller would still throw up the error messages, i must have spent many hours searching for the answer on the internet, never did solve it. I for one will be trying this - thanks.

Hello all,

I do have one question about this subject. Iam using radiolink m8nubx-m8030 gps which has hmc5983 chip. But i only see hmc5883 at the compass_typemask parameter. My question is if i only leave hmc5883 enabled and disable the rest will i have any issue?

At the moment this field is at default setting 32. And the gps is working fine at least it says 3d fix.

This chipset mismatch is an issue for operation?

Hello. I really don’t know. Sorry…