Really simple compass question

How many compasses does the pixhawk 2 have (with the external Here Gnss compass) and how should they be set in Arducopter? Should all three compass options be active? which ones should be selected as external?
All rather basic and obvious questions which are not included in the manual or setup instructions (their compass setting page doesn’t have these options, only a pixhawk auto option which i don’t see in MP 1.3.5)

I see in the changelog notes for MP 1.3.50 the line:
ConfigHWCompass: remove quickselect for new AC versions

I am not a Copter user, so I’m not sure what’s changed with this line, or if it’s relevant. But it’s possible that the docs require updates if something has been changed recently about the compass setup. (Someone else might have to help)

Just to verify, you’re talking about this page of the Copter docs? Compass Calibration — Copter documentation And the linked Advanced Compass Setup page also doesn’t help?

Some questions that I might be able to help with:

My PH2 has 2 internal compasses, and 1 in the Here, for a total of 3. You can verify all 3 are present on your system by looking for non-zero values of COMPASS_DEV_ID_# (where # = 1, 2, or 3).

I recommend using as many compasses as you can. I believe the system relies on the primary compass, and uses the others as backups in case of failure or unexpected readings. That being said, I have had “compass disagreement” problems often, and have had to disable the 2 internal compasses to pass Pre-Arm checks. This may be because of my individual setup. (amount of nearby metal, electro-magnetic interference, etc.)

This is a good question, I’ll have to ask others to chime in. Some things I notice:

  1. There are parameters COMPASS_EXTERNAL, COMPASS_EXTERN2 and COMPASS_EXTERN3 that carry this information.
  2. I see in the code that each compass should know whether it’s internal or external (from the mag_state.external variable, defined in AP_Compass.h)
  3. The check-box on the MP compass page probably controls this parameter. I am not sure why a user would want to manually change the EXTERNAL parameter.

Can someone else provide further info?