In 2014 my girlfriend told me that she is working on a university project which was involving "mobility in the city". As she doesn't wanted to go for yet another car design ,she looked around what really would improve the mobility of humans.
After some research she found that hampered people still live in a world where a lot of them can't feel equal with those who can walk. This is due the fact that hampered people often have to use wheelchairs which cause their head to be in a height where other people have their... body-parts you can't have a conversation with 😉
But how to make hampered people walk again? Well, as she is an engineer and not a medical student, the solution had to be somehow technical. After some more research she decided to design a exoskeleton. Of course this also already had been done but isn't this a lot more fun than designing the 10 000th car (yes, even as german engineers, at some point cars get boring).
So the idea was born. Design an exoskeleton!
As she was the first student at her university thinking about exoskeletons, she had to do some pioneer work to do. What do people wish for that are affected and can't walk on their own anymore? How could a solution look like? How about the materials? etc. etc...
At some point she asked me: Would it be possible to animate the exoskeleton I am working at with real body movements?
Well... of course it is possible but... where to get the data from? Measure the leg movement on our own! And as we have a measurement device, why not displaying the data real time? And if we have it real time, can't we record it for later analysis? It was one of those small ideas that totally escalated. This sometimes happens but to be honest, those are the projects I like the most!
Where to start?
I had no idea about 3D Animations but this would be a good point to start. I have written down my experiences here, so you can check out how to get started with 3D in WPF. WPF might have not been the best tool but it was the one I had the most experience with.
So I started with setting up a basic software where you can control the movement of a skeleton with some sliders.
Why just the lower body? The first human skeleton 3D Model I used was simply too complex to be animated smoothly in WPF. The polygon count was enormous!
Ok, now we need some sensors to measure the rotation of the joints and somehow bring it into the software. We decided that for the hip it is also good enough that we only focus on one axis as the exoskeleton wouldn't need much more.
How to measure rotations? Potentiometers! I always try to make things as low cost as possible. To get some flexibility we decided to build gimbals instead of stiff mountings.
After the sensors had been ready it was time for the electronics. I used a small PSoC4 Prototyping kit with an HC-06 Bluetooth Adapter.
As speed is not a big issue but precision is more important, the ADC values are averaged before they are send to the application. I tried to minimize the noise from the Potentiometers by bringing back one potential as reference signal together with the signal. It's not perfect but with the averaging its good enough. A better approach would be to convert directly at the Potentiometers and collect the data with some kind of bus... but let's not overengineer this 😉
The Software Part
The Software now needed the possibility to select the port the data was coming in and a way to calibrate the movement of the 3D Model
This is how it looks like in action (the video was taken before we attached velcro to the wooden bars, Duct-Tape FTW) :
After I had my proof of concept, I now could focus on optimizing the app. As mentioned, the complexity of the original 3D skeleton I used was too high. I therefore used another model which gave me the possibility to even add the upper body and the exoskeleton my girlfriend designed.
Of course it is nice to display leg movement in real time, but for scientific investigations this is not enough. I added the possibility to record the movement. As I wanted to make visualization of the data as easy as possible, projects along with the recorded data are saved as Excel sheets.
Users can load those excel files into the application and play them
And here you have 2 beautiful posters of the exoskeleton my girlfriend designed: