Compass, heading and yaw performance problems

OK, here is problem
with my hexacopter, considering the yaw, heading and compass performance:

When calibrated the compasses using live calibration, it
goes successful, but after that the “compass variance” error comes up. Expected
– it is mentioned in the documentation.

Calibrating with the manual method – works, writes the
offsets, requires reboot. At the beginning all is fine, but after a minute or
so, the “Inconsistent compasses” error comes up. Some more attempts to
calibrate lead to one time success with no errors. Then the next problem occurs
– it is difficult to maintain the set yaw and heading. In loiter mode, when
turned to exact north and commanded to go forward, it start drifting towards
west. Backwards drifts towards east. Left – towards south, right – to north. If
I orient it west, these drifts are changed symmetrically. If it is oriented
exactly north west, there are no drifts. So it looks like it is pulled towards
northwest-southeast axis.

I guess, it is the same reason for the yaw problem – it turns
itself by the yaw axis without commanding it. In both directions. Slightly, but
too much for me. Sometimes it turns as much as 15 degrees. When I command it to
turn, it makes it unevenly, and after I release the stick, it turns a bit
further and then stops. Usually it is necessary to command it a bit opposite to
put it in the desired yaw position. And after a while it may turn a bit left or

Made the Compass/Motor test – it shows influence as high as
60% with 15A of current. That is about half the throttle. It doesn’t look
normal I guess … ?

Everything is checked according to manuals and documentation
– motor numbers, propellers’ rotating directions, corresponding output channels
of the Navio. It maintains stable roll and pitch positions, so I guess, the
motor numbers are correct and the PID numbers are acceptable.

I am using a Tarot 680 Pro hexa frame in X-configuration,
modified with 81cm span (axle to axle), 14x5.5 props, the Navio2 board attached
to RPi3 with ArduCopter-hexa 3.4rc1 software. ESC’s are located directly below
the motors for good cooling. Some pictures attached.

Some thoughts:

Is it possible to fly this vehicle with compasses disabled?
Will it use the IMU’s instead to keep current yaw? I guess, that way I can
confirm if the problem is in the compasses or not…

The drifting in loiter mode – is it caused by the erroreous
data from the compass or something else. I am imagining a scenario where the
autopilot tries to maintain current bearing, but when it starts to move and the
GPS shows different heading, it will try to correct.

3.4 rc4 should be the latest at the moment - so update is recommended;
always use live calibration method with missionplanner (afaik manual calibration is not supported at the moment;
reboot after EVERY compass calibration - otherwise you get inconsistent compass error;
use compass #2 for better experience;
loiter and automode require compass; stabilize and alt hold mode do not use your compass when flying (it’s documented on ardupilot’s page for all flight modes)

uneven yaw - a toroid could help

overshooting is a PID tuning issue; you could try completing autotune for yaw axis and observe if it makes a difference

It’s not overshooting because it does not return back to the desired bearing. I have to return it manually.

yeah that’s not overshooting then;
try to follow the other steps mentionend above and also put in right values for magnetic declination
and report back!

I ordered an external compass and am waiting for delivery. Will keep in touch for the result…

Got the compass. Everything that seems to be connected to compass issues is now fixed. I disabled the internal compasses and connected the external one. The autopilot keeps its bearing steadily and correctly obeys to my commands during loiter mode. Made two missions, it executed them with very little tolerance.
So, I guess, there is a design flaw with the compasses - probably their position or something. Trouble is that I now rely only on one compass. And if there something happens, it will not be able to detect the problem…
This is the compass -
I had to set its orientation to 180 roll for it to work.
Still, there is problem when I try to move the copter with higher speeds (up to 15 m/s) - it starts losing orientation. I guess, I would have to tune something … ?