BNO086 IMU Flight Controller for mini quadcopter

Is the BNO086 IMU applicable (accurate and fast enough) for using to build a flight controller for a mini quadcopter (small brushed Coreless motors)?

Sure - the main concern is usually how fast the main flight controller can process/integrate its data, and whether the drone’s control is stable enough at the IMU’s accuracy (but you won’t know that for certain until testing)

Thanks. I’m about to order the Sparkfun parts, and I’ll see how it goes.

Working on it.

1 Like

Got my small quadcopter (BNO086 and ESP32 Thingplus) hovering fairly well. The power is tethered to a 5v3A voltage regulators. My brushed 720 Coreless motors are not powerful enough to fly unassisted so I have to hold on to it at the bottom of the power wires while it is hovering; yet is ‘feels’ like good balance response. So next step is to try 8520 motors with 3 inch props to see if I can get more thrust. And a Lipo that will provide the necessary current.

1 Like

Awesome - share a video when you do!

1 Like

Here the quadcopter is fairly stable.

1 Like

The above image and video uses the 8520 coreless motors. While these motors/propellers did provide more lift, the quadcopter is still too heavy to fly. I don’t think my DIY skills can provide a frame that is light enough for these motors. My primary objective is the use the BNO086 IMU and the ESP32 microcontroller to obtain flight. So I’ll probably be switching to something like the Velox V2306 2550KV motors and AM32 ESCs; I’m still researching these. Also, currently with the IMU, I’m using the I2C interface. I plan to followup on a previous comment to use the SPI interface which might provide more consistent data thus better orientation stability.

1 Like

Sweet - There are a lot of 3D-printable frames you can print for free too

@Chris_Shipman I am working on F450 Quadcopter project with my own custom Flight controller on Raspberry Pi 4B. I wanted to know how was your experience with BNO086? I have used BNO055 for my project but sometime it shows spikes in fused euler angles more over i think BNO055 is not suitable for drone application. Will you suggest a suitable 9 axis imu sensor for my project like BNO085 , BNO086 or anything else?

@Muhammad_Anees, my experience with the BNO086 IMU is so far limited to accessing orientation data for the X and Y axises. So far I have not considered the Z axis nor the magnetometer. I’m using the Sparkfun_BNO08x_Arduino_Library with the ‘enableGameRotationvector’, which seemed to have faster access receiving data from the IMU. I’m using i2C for communicating with the IMU from a (Sparkfun) ESP32 microcontroller. The IMU update interval runs on the approximate average of 3 milliseconds. Looking at the timing on my o’scope, the timing varies considerable around 2 msecs to 5 msecs. In a previous post was a comment to use the SPI (instead of I2C), due to SPI being a faster communications protocol and possible operates at a more consistent frequency; I’m planning to check that out. I’m currently building (yet another) quadcopter (QC) board/frame for a single axis test fixture. I’ve moved on from the brushed 8520 motors to brushless Velox V2306 2550KV motors and AM32 4 in 1 ESCs.

Related to your comments about the ‘spikes’ in the fusion angles, are accessing the IMU data using interrupts? When I first tested the BNO086 IMU without interrupts, there was definitely inconsistent data. There was a comment in the Sparkfun Arduino library code that running without the interrupt was not a good idea and that is how it turned out. I haven’t used Raspberry Pi for accessing ‘real-time’ data. What is frequency that your control loop for accessing data from the BNO055? Also is the access at a consistent time interval?

My frequency for control loop is bout 70Hz and I am accessingsl on consistent time interval. I have tried pulling up bno055 i2c pins externally but there was no effect on spikes. SPI pins are not available on it.
Given below are euler responses of BNO055 in NDOF mode when imu is stationary values are stable there is no spike when imu is not stationary it gives spike of around 600 value after 3 to 4 seconds. I have tried different filters but issue persisted
Can you elaborate how interrupts can be used to remove these spikes. I am using adafruit_bno055 library to read imu data

Is anything else on the i2c bus? How long are the wires? You might need to scope the signals if you have one available

Looks like the adafruit bno055 library doesn’t support the hardware interrupt. There is some BNO055 interrupt library examples for GitHub - DFRobot/DFRobot_BNO055, yet those examples only cover larger movements for motion detection.

Also the Adafruit FAQS have some good ( and possible problematic) details on this sensor: FAQs | Adafruit BNO055 Absolute Orientation Sensor | Adafruit Learning System .

Also o’scope the voltage signal to make sure it is stable during operation of the IMU. I typically add a 10uF (to 100uF) cap to the breakout boards.

1 Like

Quadcopter: ESP32 ThingPlusC, BNO086 IMU, AM32 ESCs, V2306 motors

Progress on my quadcopter learning adventure. This video shows this test assembly hovering well. Of course the wires are still constraining. So the next step is to mount the Sparkfun ESP32 ThingPlus C above the Sparkfun BNO086 IMU board. In this configuration the ESP32 uC will not be connected to the laptop for sending PID variables and throttle variables, but will receive these variable updates via the ESP32 wifi. So we shall see how the PID tuning goes for this configuration.

1 Like