Building a 3D input device from IMUs, general questions

Hello everyone,

I am mainly working for 3D & VFX, and am currently working on a "puppet" project that would act as a physical interface to control the pose of a character's rig. Ideally, a sensor would get the current orientation of each articulation, then send it via the Arduino Serial to the computer, which would translate it into Blender through a custom Plugin.

This project is highly inspired from an existing project aged from +- 10 years that you can find here. Ideally, the final "product" would borrow the same features as this reference (Modularity, Scale, Precision, Plug & Play). You can find the paper of this project's researches here.
Finally, you can find another exemple of the general idea with this product.

As I am more at ease with the Blender/High level programming part of it, I am mainly here to ask for advices & help for the Electronics & the Lower level programming side.
I'll try to first describe some of the thoughts, things I learned while doing searches on this topic, and then ask the few questions I have.

Before going further into the subject, I want to apologize if by any chance my questions are naive or stupid, my interest in electronics is fairly recent and I am open to learn any topic I'm not confortable with.

I saw several people doing similar tests using 6-DOF & 9-DOF IMU & using these values in Blender, to get the orientation of each bone. This way seems the more viable to me right now.
From what I read, the most accurate thing to get absolute rotation would be reading 9-DOF values & interpreting them using Sensor Fusion. (Kallman Filter ? Madgwick Algorithm ?)

As 9-DOF IMU tend to price higher than 6-DOF, I would like to test both of them to see if I can get away with a cheaper 6-DOF or if I really need a more expensive sensor/a sensor that got more degrees of freedom.

Right now, I got these references in mind (Don't hesitate to suggest some if you have !)

  • 6-DOF
    • Adafruit LSM6DSOX
  • 9-DOF
    • MiniIMU-9 v6 from Pololu
    • Adafruit LSM9DS1 ADA4634

The final "product" would make usage of a dozen of sensors minimum, with a distance of 6 to 15 centimeters between each one depending on the pose.

All of them would be plugged to a I2C Mux, itself plugged to the arduino that would transmit the data over Serial using USB. (Ideally, I will switch to bluetooth + external Battery when I will be far enough in the development)

The thing is, in the paper mentionned above (Where the author make usage of Hall Sensors instead of IMUs) he said that
"Before arriving at Hall sensors, we also evaluated two alternative sensor types. Potentiometers do not provide sufficient precision and suffer from a dead-zone. A combination of a 3D accelerometer and a 3D magnetometer seems promising, since it frees mechanical design, but would require a locally stable magnetic field within a range of 10cm. Our experiments show that the magnetic field diverges wildly inside an office environment, leading to angular errors above 40◦. Our final Hall sensor and magnet pairing avoids this as the magnetic field is entirely dominated by the nearby magnet, not even detectably affected by the other magnets on the same joint."

So I'll move on to the questions :

  • Taking into account the final sensor amount (Between 6 & 25) would it be better to use the I2C bus, or to prefer SPI ?
  • As I am more at ease on the high-level programming side of it, would it be OK to process the sensor fusion on Python on the PC instead of having the Arduino program doing it before ? What would be the best ? Which algorithm is prefered ?
  • With this setup, would it be possible to get the absolute rotation even on power on ? Without having to calibrate it everytime you power it, I mean. If no, what would be the possible workarounds ?
  • Would using multiple magnetometers near each other be a problem as mentionned before ? If yes, which minimal distance should be respected to avoid this ?
  • Would using a potentiometer for 1 angle articulations be viable ? If I manage to find one that would have little to no dead zone of course.
  • Taking into account all parameters above, does the 6 or 9 dof would be a great choice, or am I taking a wrong way ?
  • And finally, more generally : Which problems, caveats I haven't thought of may I encounter ? Would you have any ideas, recommandations, resources that could help ?

Many thanks by advance to each and every soul that would help me !
I tried my best to dig the internet until I'll find satisfaction before posting here, but even tho I'm not 100% sure about it. I hope I'm not off topic, or breaking any rules.

:slight_smile:

6DOF sensors cannot measure yaw, the absolute orientation relative to North. 9DOF sensors add a magnetometer for that purpose.

A fusion algorithm, and individual sensor calibration is required for both 6DOF and 9DOF IMUs. For best results use a modern sensor from a reputable supplier, not the long obsolete MPU-6050 or MPU-9250 sensors, cheap imitations of which are flooding the market.

Thanks for your answer.

Yeah that's pretty much what I understood.

Do you have, by any chance, any reliable model recommandations ? Would the Pololu MiniIMU 9 v6 do the job ? I looked barely everywhere, and it seems to be the best Quality/Price ratio out there, but I'm not 100% sure as I am still at the beginning of my sensors journey, and would love advice on this.

Thanks by advance !

The market is competitive, and all the modern consumer grade 6 or 9DOF sensors have similar performance. The Pololu sensor is a good choice.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.