COMPASS_LEARN=3 can't use position control modes - which modes are those?

I was reviewing a list of changes in copter 4.1 and noticed the note about compass improvements.

It looks like I’d like to use COMPASS_LEARN=3 - but the notes for it say you can’t use position control modes with that setting.

I did a search on “position control modes” to see if what I’d be prohibited from doing in manual or automated flight. I couldn’t tell from the things I found what the restrictions were.

I use the flight modes of loiter, altitude hold, RTL and auto. In auto, I do navigate to waypoints, spline and loiter points.

Are any of these restricted by the COMPASS_LEARN=3 setting?

The last few flights I’d been using COMPASS_LEARN=2 - but now I realize I don’t really understand the difference between “1” for “internal learning” and “2” for “EKF learning”. Is there a reference for these terms that might help me understand the best setting to use?

Thank you!

Stabilize and AltHold are you modes of choice here.
Loiter, PosHold and auto or guided modes all require 3D fixes and headings.

Thanks Shawn -

It sounds like the intension is to allow a pilot to set COMPASS_LEARN to “3” and then use stabilize and ALT-Hold to do a compass calibration flight - and then set COMPASS_LEARN back to “0”.

Its not clear if setting COMPASS_LEARN to “3” will disable modes like Loiter or Auto - or if using those modes will simply disable the compass learn process.

When I googled “ardupilot position control modes” I found articles in the ardupilot dev sections about Position Control versus WP Navigation. I didn’t know how any of this related to the restriction on “position control modes” mentioned on the description of COMPASS_LEARN=3.

From the explanation on the Parameters doc, it seems that COMPASS_LEARN=1 (internal-learning) is the value referenced in the comment about “suitable only for fixed wing aircraft”. (the description isn’t explicit - I may have this wrong)

The COMPASS_LEARN=2 (EKF-learning) is also unclear to me - I’m not sure how this differs from InFlight-Learning.

Thanks for helping me get this straight.

I agree the doco is a little vague about the process.
COMPASS_LEARN,0 is the default, at least for a multirotor.

You can set it to 3, do a short flight in AltHold with a few turns and you’ll find when the process is complete (in a few seconds) COMPASS_LEARN will be returned to it’s previous value, usually 0.

I cant remember if there’s a call-out or message if you have telemetry, there probably is.

I’ve used RCx_OPTION=62 to trigger compass learn. I set it on a momentary switch to trigger it, and yes it did return a message say it was complete (in Yaapu at least). Seemed to work pretty well for me.

Thanks Allister - good suggestion. Sounds easy enough to just set the “3” and hover in circles in my back yard until the MavLink message shows up on Yaapu. I’ll try it tomorrow morning. Thanks!