Good news: Invensense has finally released a licence that allows open source projects such as ArduCopter/Plane to use the built-in sensor fusion processor in the MPU-6000 gyro/accel chip used in APM 2.x!
This processor, called the Digital Motion Processor (DMP), has been in the APM 2.x sensors from the beginning, but we weren't using it because Invensense had not specifically allowed their driver to be distributed with open source software. However, after much discussion, they have now written a licence that allows this.
You can get it on the Invensense Developers Corner here. (You'll have to register first). I'm not a lawyer, so I won't attempt to analyze the language to see if there are any holes in it, but the Invensense developer relations managers and their legal team wrote it with projects like ArduPlane/Copter in mind, and they've assured me that we now have the green light to use the DMP code. (The agreement specifies the MPU-6050, which is the I2C version of the chip, but that includes the MPU-6000, which is the SPI version that we use).
The Ardu* dev team is hard at work at implementing the DMP code in the ArduCopter/Plane code and we hope to have that ready for the next release. It will probably give you a choice of using the current DCM, running on the main processor, or the DMP running on the MPU-6000, freeing up a good bit of processing power for other functions.
We have not done a rigorous test of the DMP vs the DCM, so we can't yet say that one is better than the other. But this licence now allows us give people the option of trying it, and if it perorms better than the DCM, or just as well but freeing up computational power, we can switch to it going forward.
Comments
Seems like the DMP code has been "cracked" or whatever:https://github.com/bzerk/MPU6050_DMP_6_axis_demo_/blob/master/MPU60...
I think keeping the Arducopter code more general will make it easier to adopt new sensortechnology in future and not being dependend on one company. Perhaps a MPU DMP code could lengthen the lifetime of current apm2.x, but in the long run i doubt a benefit.
Besides this i think giving some code to an open source project will make it free for every open source project.
Jake Stew "My conclusion so far is that the DMP is bunk! Total vaporware." That also seems to be the conclusion of Fabio Varesano as well. For me invense can stick their code up their...... .
Just my opinion.
So long
Kraut Rob
I can not wait to see the comparative results between DCM vs DMP
Greg: via SPI. We do mag/GPS sensor fusion externally and send offsets back into the MPU-6000 via Accel bias factors.
Does the mpu6000 talk to the mag directly over I2C, and if so how do the mag offsets get incorporated?
Thanks Chris. I'll just wait (patiently) for the boffins to get on with it then ;)
It'll be interesting to see how it pans out.
Crispin: Yes, that's possible. In our testing so far, the DMP performed about as well as the DCM, but until we can fully implement (which we are now doing), we won't be able to properly test them head to head to know which is really better in our applications.
I accept that off-loading the work from the main processor would be a good thing in the broader sense. Not knowing anything about how "sensor fusion" works, I guess the (rhetorical) question is: Are there good ways and bad ways to do it? Could Invesense put a method in that is "just ok" but being a black box, we would never be able to change it.
I dont even know what I'm looking for on that site. I agreed to something and then the downloads were nothing but .pdf . I need the code that will replace mpu_read(), read_adc_raw(), HMC5883_read(), HMC5883_calculate(pitch, roll) and not need all kinds of low level tricks.
Jumbo news, it's been a year or more since people got excited about the DMP but couldn't use it.
This might be good for me, but probably just another hurdle in figuring out how to implement and make good use. I'm trying to use the new IMU in Jean-Louis' TrIMUpter code and when I add the IMU code as it is now, it chokes and only arms one motor which does respond to motion. If I run the tricopter code as it was written for IMU V2, it reads the Rx and outputs to the ESC's but the IMU is all screwed up since it isnt the right version. It's very frustrating trying to do something nobody else has any interest in. It almost works.
-
1
-
2
of 2 Next