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.
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.
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.:
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.
@INPROCEEDINGS{author={Cong, Lin},
booktitle={github},
title={Full body motion tracking sensor},
year={2021},}