I was recently asked to help develop a proof-of-concept demonstration which involved the use of an IMU (inertial measurement unit). We decided to opt for the Variense VMU931 IMU, as it was quite well priced (~£75, or $100), reasonably rugged, provided fairly high resolution data, and had a high sampling rate. The unit has nine degrees of freedom and includes a gyroscope, accelerometer and magnetometer.

As it’s a fairly new product, there are very few (i.e. no) tools/libraries that could communicate with the device aside from those provided by Variense, which are Windows only and quite limited. Variense DO provide a packet parsing library that will go from the binary format to rotation/acceeration/heading values, but this is stand-alone and does not help with communicating with the device.

In order to remedy this, I have written an “end-to-end” library (named PyVMU) which handles device communication and packet parsing, written in pure Python using the PySerial library.

I have published the library on GitHub, and would welcome any feedback or pull requests. Some documentation is available at ReadTheDocs.