#10 - Powerglove Update: Quaternions
It’s been a while since I’ve posted an update on my Power Glove Adventure. I didn’t touch it for a while because I kept struggling with getting the keypad to work. It felt like a simple thing, but it kept glitching and I got frustrated. So I decided to tackle another part of the project!
The original Power Glove used a TV mount with microphones and had small speakers mounted on the top of the hand. This way the Power Glove could use echolocation to find its position with respect to the television. The idea sounds great but in practice, it wasn’t very accurate.
Inertial Measurement Unit
I want to replace this system with a simple IMU chip in my build. But “simple” might not be the best word to describe the chip. An IMU or Inertial Measurement Unit is a chip that has a few onboard sensors like an accelerometer and gyroscope to track its position in space. Why wasn’t the IMU used in the original design? It simply didn’t exist in 1989, and if I did, I’m sure the US military would have killed for it. These days you can pick one up for 30 euros at your local electronics store. I picked up an Adafruit BNO055 and got cracking.
The Adafruit website has an example for both the Raspberry Pi and the Arduino. I tried to set up both and got the furthest with the Raspberry Pi. So I kept working on that version for now. Unfortunately, I wasn’t able to get it all working. For some reason, the movements of my hand don’t match up with the movements of the model.
Some things I’m trying:
- Lining up the 3D model correctly - I lined the 3D Model up in Blender. I used the “Front View” camera and pointed the hand away from me. When I loaded the model into an STL viewer, I noticed the hand was pointing up. This made me dive into the coordinate system and I found out that Blender for some reason has the Y-axis as “Depth” in the front view instead of the Z-axis. After lining the model up with the Z-axis I got a bit closer but it’s still not working.
- Diving into quaternions - Next up was to dive more into the code and see what is going wrong. I noticed that the read-out of the heading, pan and tilt did make sense. But the 3d model was still not aligning with my movements. After some digging into the code, I noticed that the position of the model is decided by quaternions. By what? Exactly my first thought. I barely understand it myself so I won’t try to explain it. But here is a good Youtube Video I found on the topic.
In the end, I haven’t found a fix yet. But I’m getting closer. And learned something new along the way. Although my brain still hurts from all the math.