We’ve been getting a number of enquiries about using the MPU-9150 chip with the Arduino Due so it was clearly time to do something about it! We are pleased to say that the latest version of MPU9150Lib now supports the Arduino Due in addition to the 8 bit Arduinos previously supported.
MPU9150Lib, the Arduino library for the InvenSense MPU-9150, now supports dual IMU chips operating simultaneouslyPublished May 2, 2013 Arduino , IMU , Software development 1 Comment
The latest version of MPU9150Lib can support simultaneous operation of InvenSense MPU-9150s at the default I2C address (0×68) and the alternate address (0×69). The Arduino9150 sketch now has a #define that allows either IMU chip to be used. A new sketch, ArduinoDual9150 shows how to use two IMU chips simultaneously. The calibration sketches have also been modified to support dual IMU setups. Both AccelCal9150 and MagCal9150 have #defines to select which IMU chip is being calibrated. Each IMU chip has its own dedicated area in EEPROM.
Operating multiple IMUs simultaneously brings up some interesting possibilities. One is that a significant reduction in noise and increase in accuracy can be obtained by integrating the outputs from multiple IMUs. We’d be interested to hear how people are using multiple IMUs.
In theory, the MPU-9150 has two alternate I2C addresses – the standard 0×68 and the alternate 0×69. However, it has to be said that we have never managed to get the alternate address to work. If there’s a need to put more than one MPU-9150 on the same I2C port, the easiest way is to use an I2C switch such as the PCA9546A. This is a four port device (there are other options) and also does voltage level translation. It’s easy to use – just do an I2C write to its address to select which of the four outputs is in use and then the device on that switch port can be addressed as normal. So up to four MPU-9150s at address 0×68 can be connected in this way.
As far as the MPU9150Lib goes, changes would be needed to the MotionDriver library as it uses global structures. These would have to be changed so that there was a set for each MPU-9150 in use. One way would be to encapsulate the MotionDriver code into a couple of C++ classes. MPU9150Lib itself should be fine – just create an object for each MPU-9150.
*** Update ***
It now seems that the problems we were having with the alternate address were due to the way the magnetometer was being accessed in a previous version of the library. The latest version works fine – and supports dual IMUs operating simultaneously. However, to go beyond two IMUs on a single I2C bus, an I2C switch would still be needed.
MPU9150Lib for the InvenSense MPU-9150 IMU chip with Arduino has been updated with some new featuresPublished April 29, 2013 Arduino , IMU 13 Comments
- It is now possible to set the magnetometer update rate separately from the DMP update rate for the accels and gyros. The magnetometer rate has to be less than or equal to 100Hz and also less than or equal to the DMP update rate.
- It turns out that the DMP only puts raw accel data into the FIFO even if biases are set so the library now does this adjustment in software. Hopefully the calibrated accel data will be more useful with corrected offsets.
- It’s now possible to specify the low pass filter rate that the DMP uses for the gyro and accel data. It defaulted to 42Hz in the past but now it’s possible to set it between 5Hz and 188Hz. As a commenter pointed out (thanks!) setting some heavy filtering really helps with accel calibration.
Hopefully this will address the requests we have received. Please keep the information flow going – let us know how we are doing!
It’s always interesting to put Ubuntu on boards like the BeagleBone Black. Fortunately, Robert Nelson has done his usual thing and got it working nicely. Just follow the easy instructions here and you get a working console version. However, it’s more fun to have a GUI. There are instructions for LXDE but the normal Ubuntu desktop is more interesting. The command:
sudo apt-get install ubuntu-desktop
gets that installed and you get to the login screen but then things go downhill. It’s never actually got the desktop completely displayed but does display the desktop background image. The nice thing is that the Angstrom image is still in the onboard flash so that can be booted just by removing the SD card. Maybe it’ll work one day…
Tags: BeagleBone, Gumstix, Syntro
We’ve been running Ubuntu 13.04 on our build workstations for a few weeks now without issues. The big feature for us was Qt5 which is the new default in Ubuntu. We decided to port all of our Syntro and wearable computing applications to Qt5 and it went without a hitch. Kudos to the Qt developers for making this so easy!
Qt4 support is still available from the Ubuntu apt repository and easily coexists on 13.04.
The Qt5 upgrade on Ubuntu was so painless, that we decided to migrate all of our applications to Qt5 on Windows as well. That was a little more work than the Linux port, but still not a big deal. On Windows we develop with Visual Studio 2010 using the Qt VS Add-in. If we used QtCreator on Windows the port probably would have been as easy as on Linux.
We are still supporting Qt4 for the ARM SBC boards like the Gumstix, Raspberry Pi and the Beaglebones. Our plan is to move the Gumstix BSPs to Qt5 just as soon as we get a working Qt5 recipe for our Yocto Project build system. The Qt4 based Gumstix BSPs have been building just fine with Yocto in the meantime using this latest Ubuntu.
It’s great when upgrades go this smoothly.
We’d like to be able to support our InvenSense MPU-9150 IMU demonstration code (MPU9150Lib) on the Arduino Due. However, the Due lacks EEPROM and the current Arduino libraries have no support for writing to flash memory. We need non-volatile storage for calibration data and it would be nice to avoid having to transfer this into the sketch source by hand. Using flash is the only other option for non-volatile storage without adding an external chip. So, we have put a library on GitHub (DueFlash) that provides a simple way of writing data to flash memory. It also includes a test sketch that allows writing and verification of the flash data and demonstrates how to use the library. It should be said that the library is at a very early stage and almost certainly is far from perfect. In particular, it’s not clear how this affects flash memory lifetime. You have been warned!