IMU based real time whole body motion tracking system

University of Hamburg

Real-time motion tracking performance on a desktop.


This project presents the development of an innovative, low-cost, full-body motion tracking system utilizing six Inertial Measurement Units (IMUs). The comprehensive design encompasses custom circuit board creation, firmware development, and the implementation of a real-time tracking algorithm. Engineered to meet the demanding needs of virtual reality (VR) applications, gaming, and animation development, this system offers a versatile and accessible solution for capturing human motion with high accuracy. By significantly reducing the cost and complexity traditionally associated with motion capture technology, it opens up new possibilities for creators and developers across various industries. The system's efficiency and affordability make it an ideal tool for enhancing interactive experiences, fostering more immersive and dynamic virtual environments, and streamlining the animation process.

Software Framework

The Arduino firmware is simple. In the arduino_secrets.h we define the IP address for the PC and each sensor(1-6 are necessary, 7-8 are backup sensors), WiFi SSID and Pass. Currently they need to be flashed into the board before use. The IP addresses are defined in arduino_secrets.h, we need to choose one from the IP list. For example: if we want to flash the firm ware to the sensor with IP 7. We need to change line 145 in D1Mini.ino to: WiFi.config(IMU_IP7, gateway, subnet, DNS); .We will consider to make this more convenient to use, maybe write a GUI which can set up different SSID. We have two solutions (D1 Mini and Nano 33). Nano 33 comes with everything we need: WiFi module, IMU and controller. But the IMU is 6 axis, therefor the absolute orientation is unavailable. D1 Mini is the NodeMCU 1.0(ESP-12E Module) in Arduino library.

Attention training framework

As we choose the absolute IMU as our sensor, it provides absolute orientation. But another option is to compute the absolute orientation from the raw data with the Fusion Algorithm. For this purpose, we also write the "Tara" function to compensate the initial sensor bias.:

Accuracy test in real time

In each iteration of the main loop() function, we first read IMU data, output a sequence number (for data losing check), the gyro, acceleration, magneto, and the quaternion, using UDP to the WiFi interface. BNO 055 outputs data at roughly 100 Hz, on ROS side each IMU topic reveives data at about 80~90 Hz.

Whole system includes 6 IMUs


@INPROCEEDINGS{author={Cong, Lin},
  title={Full body motion tracking sensor},