SIC_MPU9250 IMU SYSTEM USER DOCUMENTATION

WHAT IS THE SIC_MPU9250

Anyone using an Inertial Measurement Unit (IMU) wants the IMU to spit out filtered orientation readings and also be able to integrate it into their preferred project(s) without the unnecessary stress and headaches of the mathematics and computational algorithms behind it.

The SIC_MPU9250 solves the above problem. It is an easy-to-use Advanced Inertial Measurement Unit (IMU) built on and based on the popular MPU9250 IMU. It consists of the MPU9250 IMU and a computational system for easy calibration and Madgwick filter implementation for the MPU9250 IMU. It also has libraries for easy interfacing with ROS2-based and Arduino-based projects (as well as for Python and Cpp microcomputer-based projects).

NOTE: It can easily be used by hobbyists, students, learners, researchers, etc.

THE COMMON MPU9250 PROBLEM

The MPU9250 IMU is a widely used Inertial Measurement Unit (IMU) among hobbyists, researchers, engineers, and developers in robotics, drones, virtual reality, augmented reality, and wearable technology. It is renowned for its accuracy, reliability, and affordability, making it a popular choice for projects requiring motion tracking and orientation sensing.

While there are libraries available to assist in using the MPU9250 IMU, common issues encountered with it typically revolve around calibration (especially of the magnetometer), setup, noise filtering, and seamless integration into preferred projects.

Calibrating its sensors, especially the magnetometer, is usually an issue and can be frustrating as wrong calibration will result in faulty orientation readings. Also, implementing filtering algorithms like the popular Kalman or Madgwick filter to get less noisy filtered orientation readings can be another problem, not to mention trying to add the whole code into your preferred project (which is usually bulky).

Ultimately, anyone using an IMU desires filtered orientation readings without the unnecessary stress and headaches of calibration and noise filtering when integrating it into their projects.

The SIC_MPU9250 easily solves and abstracts all these problems so you can focus on using the filtered readings in your projects.

In summary, the SIC_MPU9250 provides the following:

  • Easy calibration via a GUI application.
  • Easy Madgwick filter gain setup (and visualization) via a GUI application.
  • Easy integration with ROS2-based (microcomputer or PC) projects with its ROS2 package.
  • Easy integration with Arduino-based projects with its I2C library.
  • Easy integration with a microcomputer-based (Python or Cpp) project with its Python and Cpp library.

SIC_MPU9250 MODULE SPECIFICATION

  • Supply Voltage – 5V (typical)
  • Low Power Consumption.
  • Communication Interface – USB Serial (with FTDI Programmer) and I2C
  • The I2C interface has its separate power which can take 5V or 3.3V depending on the Arduino-based microcontroller communicating with it.
  • It uses the NWU (North West Up) Reference Frame.
  • Easily integrates with ROS2 and Arduino (as well as Python and Cpp) projects.
  • Orientation readings (Roll, Pitch, and Yaw) are in radians. It also outputs quaternion orientation readings.
  • Angular rate readings are in rad/sec.
  • Acceleration readings are in m/s2.

NOTE: only orientation readings are filtered, not the rate or acceleration readings but it also provides the orientation, angular rates, and acceleration variances which can be used in more advanced filter algorithms as covariance matrices.

SIC_MPU9250 APPLICATIONS

  • Robotics (Arduino, ROS2, Python, and C++)
  • Precise Motion tracking
  • Drones
  • GPS systems
  • Heading reference system

SIC_MPU9250 USAGE NOTE

The SIC_MPU9250 was developed primarily to be used with ROS2 and Arduino robotics projects but it can also be used with just Python and C++ as well as with any other motion-tracking projects.

Its GUI setup application works on PCs running Ubuntu OS [22.04], Windows, and Mac. One must have python3 installed to run the GUI setup application. Do not run the GUI setup application on microcomputers (e.g. Raspberry PI, etc.)

The SIC_MPU9250 can be used with Arduino-based microcontrollers (e.g. Arduino UNO, NANO, MEGA, Esp32, etc.). It can also be used with microcomputers like Raspberry Pi 4, Nvidia, etc, and PCs, for ROS2 (and Cpp) applications as long as you can install ubuntu22.04 (and ros-humble) on it.

The SIC_MPU9250 can be used with Python-based microcomputer and PC robotics projects as long as you can run Python3 on the microcomputer or PC (with any preferred OS – Ubuntu Windows, Rapbian, etc.)

SIC_MPU9250 USAGE GUIDE SUMMARY

  • Get/Purchase the sic_mpu9250_driver module (it will come with an FTDI programmer for USB serial communication). [Contact to purchase]
  • Download the FTDI driver and connect the sic_mpu9250_driver module to your PC. [link to full tutorial]
  • Download and run the sic_mpu9250_setup_application to calibrate the IMU and set up the Madgwick filter parameter and gain. You will be able to visualize the final result. [link to full tutorial]
  • Use it in your Arduino-based project with its sic_mpu9250_i2c_lib library. [link to full tutorial]
  • Use it in your ROS2-based project with its sic_mpu9250_ros package [link to full tutorial]
  • There’s also an option for using it in your Python-based or Cpp-based project using its libraries – sic_mpu9250_pyserial_lib, and sic_mpu9250_cppserial_lib

CHECK OUT THESE RELATED ARDUINO LIBRARIES

Check out these Github repos of libraries that went a long way in developing the sic_mpu9250 imu computation system. You can use them in your projects also (Ensure to star them).

  • imu_madgwick_filter – Madgwick filter Arduino library based on (and adapted from) the imu_tool Madgwick code by CCNYRoboticsLab, adapted by samuko-things.
  • arduino_matrix_vector_lab – Arduino library that helps you perform vector and matrix operations and transformation with arrays, developed by samuko-things.
  • invensense_imu – Arduino and CMake library for communicating with the InvenSense MPU-6500, MPU-9250 and MPU-9255 nine-axis IMUs, by Bolder Flight.
  • Serial_comm_pyserial_and_arduino – sample serial communication code between Pyserial and Arduino that can be adapted to any project, developed by samuko-things.