As there are a lot of experimenters and DIY people here, I have a small question...
I have been playing around with the MPU-9150 IMU from Invensense, but was a little worried about the amount of processing (and code!) that needs to run on the host CPU. I then switched to the BNO055 from Bosch to see how that would work. I must say I'm very impressed by this device, extremely easy to interface, outputs quaternions and euler angles directly from the chip (the chip has a Cortex M0 CPU built in that does all the hard work).
Now, have I just not yet seen "the problems" with this device, or is it indeed as nice as it appears to be ? I have not had chance yet "to fly" the thing, for now it just sits on a couple of boards I have designed, testing right now on a small LPC1549 board (with CAN bus, USB and SD card).
Picture below of the testboard
Any thoughts/experience of the BNO055 device ?
Replies
Hi all,
I'm currently building a quad from scratch and I'm facing a trouble with Accelerometer and vibrations from motors (about +/-0.5g/axis when running fast).
I know that I have to balance the motors and propellers but I looking for another solution because balancing motors and propellers is not simple (tape bands tends to jump out).
I currently work with an 3 axis acc ADXL345 and 3 axis L3G4200D. Both of them are not low pass filtered hardwarely and I had to implement a LPF in my code which has a lower sampling rate than a hard LPF.
I have seen that this module from bosh has a built-in LPF and do the quaternion job at a 100Hz. Nowaday I perform it with a 8-bit ARM ATmega328P at a 50Hz freq. That seems to be enough to control the quad but not to filter data from vibs that are about 300Hz.
Do you think that an investment in this module would be a good Idea (a bit expensive)? Otherwise I've heard about the module MPU-6050 which has additional filter built-in. What do you think would be the best idea? Otherwise what would you recommend me to do in order to attenuate this noise?
Thanks for you help.
Hi Carsten,
Glad you brought attention to this little sensor module.
I definitely will be getting one of these, the encapsulated processing makes this look really easy to use.
https://www.adafruit.com/products/2472?gclid=Cj0KEQjwyozABRDtgPTM0t...
My use is for ground based robotics navigation, but I actually think this would be perfectly usable for lots of UAS applications as well.
One of the reasons that a higher update rate is needed is because of all the time the host processor has to spend calculating the desired actual information.
With it already done for you in this, the FC's main CPU could spend it's time more profitably on other things.
It would require writing or rewriting the flight or robot controller's code so that it could most profitably take advantage of the pre-calculated data, but that should actually free up both time and space.
Distributed computing at this level is a great thing, excellent device.
I have sent Emails to Philip and Tridge about this module, it will be interesting to see if either of them thinks it is useful.
Best regards,
Gary
I have been using MPU6050 quite successfully - but I do not use third-party libraries, I write my code from scratch. However, I have a blog post at http://flightcontroller.blogspot.com/2015/06/mpu-6050-configuration... that explains my library and provides references to the code on GitHub. You are welcome to review it, but, as I mentioned before, use it just a a guideline and write your own code.
Hi Carsten,
When you say that the BNO055 "outputs quaternions and euler angles directly from the chip (the chip has a Cortex M0 CPU built in that does all the hard work)" , how does that work exactly? How much different is the code that I will need to upload to it to obtain acceleration values etc, compared to, say, the MPU9150?
Currently I'm working with an MPU6050 for a class project, but I'm finding it quite difficult and confusing to work with (I'm trying and failing to understand the Jeff Rowberg library), being a newbie in electronics. For my project, I need the sensor to be able to detect sudden changes in acceleration (like in hand tremors - shaking), and I'll also probably need the displacement value as well to tell motors how much to move to return to their original position.
Do you think the BNO055 would be able to achieve these goals?
From what I read in the datasheet, BNO055 in data fusion mode provides updates at 100 Hz - is that enough to control quad? On my custom board doing all orientation calculations in code using DCM algorithm on PIC24EP using MPU6050 I get about 400 Hz update rate and planning to increase that to 1kHz going to 32-bit PIC with FPU.
It seems to me that 100 Hz is a little too low... Any thoughts?
Carsten Groen said:
Is drone ready now and working fine with BNO ?
It's not for a drone ;)
But apart from that, yes it works very nicely! The MPU9150 I had here has since gone to the bin !
I have BNO055 in 4 projects now
I think it's just as you say - it's as nice as it appears to be.
We have been playing around with various degrees of freedom and writing code to calculate tilt compensation, etc. and this unit (along with a few other Cortex M0-based IMUs) are just a doddle to use.
Thanks Mike,
I have now done some rough code in my Android app to show the data from the IMU. The board was taken for a flight, and results were excellent!
I have also come to the conclusion that it is in fact as nice at it appears to be :) I will continue working with the little jewel and see what I can discover :)
Thanks for your input !
No worries.
I want to standardise on it, but my problem is sourcing. I live in SE Asia, ordering from North America gets great prices, but comes with a massive $85 shipping premium...
So, I am using less-than ideal units from China which, on paper, give the same results as the BNO055, but in reality aren't anywhere near as nice to use and don't have great docs or library support.