rpicopter / MotionSensorExample

MPU6050/MPU6500/MPU9150/MPU9250 over I2c for RaspberryPi
136 stars 80 forks source link

MotionSensorExample

MPU6050/MPU6500/MPU9150/MPU9250 over I2c for RaspberryPi using official Invensense libraries (v5.1): http://www.invensense.com/developers/index.php?_r=downloads

This is a sample program for testing your MPU Motion Sensor with Rasperry Pi. It does all the initialization and gathers:

and calculates Yaw, Pitch, Roll in degrees which in turn is displayed as an output.

Wiring I2C uses only2 wires for data transmission: SCL and SDA RPi pin 3 -> MPU SDA RPi pin 5 -> MPU SCL

You will also need to provide power (3.3V) to your MPU. You can use external power or hook it up with RPi. For example: RPi pin 1 (3.3V) -> MPU VCC RPi pin 6 (Ground) -> MPU GND

Compilation: On RPi, edit MotionSensor/Makefile and adjust CXX_OPTS to specify your board (-DMPU6050 for MPU6050, -DMPU9150 for MPU9150), issue make

Cross compiling: Edit all Makefiles in all directories and adjust CXX. Issue make

Running: make sure you have i2c_dev module loaded (modprobe i2c_dev) run mstest

Output: Initializing I2C devices... Testing device connections... MPU6050 connection successful Initializing DMP... Enabling DMP... DMP ready! Initializing IMU... Checking... Done. IMU init done; offset values are : yaw = -0.169205, pitch = -1.301078, roll = -1.168776

yaw = -0.174 pitch = 1.325 roll = -1.219 t = 20.24 1 0 0 yaw = -0.179 pitch = 1.350 roll = -1.267 t = 20.22 2 0 0 yaw = -0.185 pitch = 1.372 roll = -1.314 t = 20.23 3 0 0 yaw = -0.190 pitch = 1.395 roll = -1.361 t = 20.21 4 0 0 yaw = -0.195 pitch = 1.418 roll = -1.410 t = 20.23 5 0 0 yaw = -0.201 pitch = 1.441 roll = -1.454 t = 20.23 6 0 0 yaw = -0.206 pitch = 1.465 roll = -1.498 t = 20.23 7 0 0 yaw = -0.211 pitch = 1.485 roll = -1.545 t = 20.23 8 0 0 yaw = -0.216 pitch = 1.506 roll = -1.587 t = 20.23 9 0 0

....

Additional info: Current setup is to run at 40Hz, this can be adjusted in the ms_open function, however note that your code will need to read the values with respective speed or quicker. Otherwise the MPU fifo buffer will overflown.

To read MPU see ms_update - it calls 'dmp read fifo' in a while loop. This means that if fifo is empty this will stall until a packet is available.


Gregory Dymarek