Navio2 Poshold / althold vs Pixhawk & Pixhawk 2.1 Cube

Over the past two years, I’ve successfully built several quads and hexacopters with Pixhawk and clone flight controllers. I love the idea of having ROS available on the drone itself for future robotics projects, so the Navio2 seemed like a perfect fit for my future builds.

After a week of building, tearing down and rebuilding with every combination of flight controllers, three types of ESCs, different motors and frames, I’m left a little puzzled at the Navio2 and its seemingly erratic aircraft stability compared to even a first generation 3DR Pixhawk. I have purchased two full Navio2 setups; one is running on a Raspberry Pi 3 B+ and the other on a Pi 3 A+. Both fly the same:

In Position Hold, Loiter, or Altitude hold, the best result by far is the Pixhawk 2.1 Cube (black) with the Here GPS. As it should be - its price is well above the other two options. You lift off a quad, hex or Y6, and just hover perfectly in place.

A regular “first generation” 3DR Pixhawk with its older GPS and sensors performs slightly less well, and there is a little wander, but fairly acceptable across frame types.

Unfortunately for me, the Navio2 comes in decidedly last in stability and ability to hover without stick input in position hold; both altitude fluctuation and wander are rather severe. I admit I wasn’t expecting this. I’ve tried both Navio2 boards, three different Raspberry Pi boards, both GPS antennas, and all three different frame types, with several different ESC combinations. All produce this same result.

My question to the group at this point is, are the IMU sensors and/or GPS/compass utilized in the Navio2 just that much less accurate, and would I be wasting my time to try to fine-tune things from here to match or beat the Pixhawk? Or are many of you getting Pixhawk (or better) stability out of these boards? If so, I will try to figure out where the issue(s) are with my Navio2 builds.

I honestly do like the idea behind the Navio2 & RPi board combo, and am willing to put some time into tinkering with settings to make things work. But if the end result isn’t going to match or beat even a first gen Pixhawk, I’d appreciate knowing now so that I can change my plans going forward for these builds.
Thank you all for any thoughts on this.

Without any log, no way to help you.

There are some points to check:

  • vibration levels,
  • compass calibration,
  • GPS health (antenna placement, settings, hdop…)

Can you share some .bin logs showing your problem.

Hi Marc, thanks for the offer to help! By the way, I have appreciated reading some of your posts, especially the instructions on upgrading to the latest arducopter version. I should reiterate that every build I made this week worked perfect with the Pixhawk 2.1 (cube); nearly as good with the original Pixhawk; but unfortunately not as well with the Navio2. So all the other components I’ve been swapping in and out trying to improve the Navio setup are good. I’m left wondering if there’s some kind of RF issue going on or something that only the Navio is susceptible to, that the Pixhawks aren’t. Or perhaps the Raspberry Pi boards are creating some kind of interference with my setup.

Here’s a .bin file from my last flight tonight. I kept it short and tested for stability in Position Hold, then hit RTL which performed flawlessly. It is by FAR the best flight I’ve gotten with the Navio2 on my CarbonCore Y6 frame. I made three changes since my last Navio flight.

  1. Switched to a Raspberry Pi 4 B, in case the Raspberry Pi 3 boards were a problem. Also mounted the case with only strips of double sided tape direct to the deck in case the vibration mount was moving too much.
  2. Moved the Flight Controller forward on the drone deck, as opposed to in the middle where I had it before. My thinking here was getting it further away from the RC receiver.
  3. Mounted the GPS on an extra extension pole above its normal mount to get it further away from everything else, just in case that was an issue. (Although it gives no issue in the normal location with either Pixhawk GPS.)

This resulted in the best flight I’ve had from all the Navio2 setups I’ve tried. Altitude was fairly consistent for once, and while it did wander and pitch in the air a bit, not having to constantly adjust the throttle was much closer to flying a Pixhawk than previous flights.

Looking at the auto analysis of this log in Mission Planner shows compass issues (I did calibrate them before flight) and motor balance issues - not sure what is causing that, but it’s been on every Navio2 flight I’ve had, with three different kinds of ESCs. The ESCs in tonight’s flight were new BLheli_S ESCs if it matters. I also used two brands of BLheli_32 ESCs in past flights and all perform perfectly in both OneShot and DShot modes on the Pixhawks, but poorly on the Navio2. Any idea on what to change there would be appreciated!
Thanks for the help, and please let me know if you want me to experiment with anything else to try and figure out if we can get the Navio2 to work as well or better than the Pixhawks. :slightly_smiling_face:
2020-02-02 22-34-09.bin (1.4 MB)


I had a look at your log.

GPS health is good, i do not think it is necessary to have your antenna over elevated. (Compare the number of sat received with an old log with the antenna on the canopy). I had some bad GPS health with a loose plug (I think it was the cause, as I managed to reproduce it on the bench). Corrective action was to unplug and slightly open the leaves of the antenna plug.

Log show some EKF YAW RESET with compass swap. You could check the compass calibration screen and uncheck use the second compass if needed? Only use the one with the smaller offset.

Your Tilt and Roll P term is quite low, there is a lag between desired and real roll or pitch. It could explain some tendency to float around position.

Oneshot is not working since 3.6.0 (Oneshot 125 for my use). I cannot comment around DShot, as I did not try (ESC not DShot compatible) and have no way to check the output signal on Navio motor out.

Thanks for taking a look! Before I saw your reply this morning, I had switched the Navio2 & Raspberry Pi 4 flight controller over to a smaller quad in case the large Y6 frame was too hard for it to control without really tweaking the PIDs.
This quad is about 560mm motor to motor diagonal size. Sunnysky 2212 motors w/ 11" CF props, 3S battery.

The good news is this got the best performance from the Navio2 I’ve seen yet. Not quite Pixhawk level in lateral stability (still some wandering) but vast improvement in altitude hold.
I made two changes:

  1. Swapped out GPS antenna with the other Navio2 setup (first time I traded GPS antennas between the boards) to see if it would make any difference.
  2. Changed ESC mode to Normal instead of Oneshot in Mission Planner.

Looking at the auto analysis in Mission Planner on this latest flight, there are still two errors. Any chance you or anyone reading this could shed some light on them?

  1. Test: Compass = FAIL - Large change in mag_field (100.82%)
  2. Test: Motor Balance = WARN - Motor channel averages = [1453, 1499, 1378, 1446]
    Average motor output = 1444
    Difference between min and max motor averages = 121

Here is the .bin log file from this morning’s flight on the quad frame and a couple pics of the setup. Not perfect yet, but this is real progress, and getting closer to Pixhawk-like stability. Thank you!

2020-02-04 09-05-49.bin (2.7 MB)

Hi Jedidiah,

We usually recommend using an additional external compass with Navio2.

I’d recommend you double-check that the geometric center of the drone coincides with its gravity center.
Also, may I ask you to clarify if there were any issues during the ESCs calibration process?

Hi Tatiana,
Thank you for the reply and suggestions. I didn’t see anything in the setup documents about attaching an external compass, so that’s why I didn’t try it. I have several external GPS units w/ their own compass that I could use to test that - I might even try a Here GPS if I can get the cable to work.
Is there any particular reason the onboard sensors of the Navio2 don’t work that well? Is it RF or magnetic interference from the Raspberry Pi board maybe?

Unfortunately on the ESC issue, the ESCs don’t seem to be the problem. I’ve tried three different brands with BLheli_S and BLheli_32 firmware and with the Navio2, since we can only use “normal” PWM mode in Mission Planner, the motor control is just not as smooth. Is there any possible way we can try to get OneShot125 working or preferably even DShot150? I’m sure there are members of the community that would benefit from those modes working, and we would be happy to help test any beta code, etc, that Emlid needs help with if we can make some progress on that front.

EDIT: I’ll rebuild the frame completely just in case it helps the center of gravity too.
Thank you for the suggestions and I will try adding the second external GPS / Compass and see if that makes a big difference.