Close
0%
0%

Affordable bionic prosthesis

This project aims to create an affordable lower limb prosthesis for above knee amputees using hobby grade components.

Similar projects worth following
This project presents the design and fabrication of a prototype of bionic prosthesis for transfemoral amputees. It consists of two joints, knee and ankle, powered by brushless motors. The device interfaces with standard sockets through a pyramid adapter. The main structure is 3d printed in PLA+ and precision parts were machined in aluminum. The control strategy is based on machine learning algorithms implemented on an ARM cortex-M7 microcontroller. The total hardware cost is under one thousand US dollars. The components used are hobby-grade.

The global objective is to create a prototype that serves as ground and inspiration for the development of more accessible assistive devices.

This is the final project I've been working on to graduate as a Telematics Engineer @ Universidad de Montevideo. I've decided to document the process and share it on Hackaday after much progress was already made, but I'll do my best to share every step. Will try not to get too technical on the involved research. Many design considerations, including a biomechanics analysis, partial geometry optimization of a few design parameters and more are not shared in this post for the sake of simplicity and understanding. If you'd like to see that, the thesis pdf will be shared. Hope this can help someone!

I've been referencing other projects and research, and have taken inspiration from those. This project does not claim improvements over available work. It was a humble and simplified attempt at creating something super complex.

Although I'm working and presenting this work on my own, it wouldn't have been possible without the help of many people, who really got involved in the project. Each one of them contributed to this. Be it from a technical, researcher, or subjective perspective, or those that just asked about the project every now and then, thank you. 

Main design inspiration comes from Matt Carney, PhD's work at the Biomechatronics MIT lab. His thesis, called "Design and Evaluation of a Reaction-Force Series Elastic Actuator Configurable as Biomimetic Powered Ankle and Knee Prostheses" was a key resource for this work. Although this is a much simpler and less spec'd version, I intended to give it a try with a restricted budget and with purely hobby components.

  • 1 × Odrive V3.6 Motor controller
  • 2 × CALT PD56 Optical rotary encoder
  • 2 × Eaglepower EA65 KV180 Brushless Outrunner motor
  • 1 × Teensy 4.1 ARM cortex M7 microcontroller
  • 1 × MPU6050 IMU module

View all 15 components

  • User tests!

    Maximiliano Palay06/27/2022 at 16:45 0 comments

    To avoid compromising the safety of anyone external to the project, I performed the tests myself using a splint. The splint was made out of aluminum extrusion and 3D printed PLA+, using the same nylon stars as the data capturing device. This enabled rapid testing and iterations over the control mechanism, which was -at first- useless. On paper and on the bench tests, the control scheme worked quite nicely. When the prosthesis was loaded with weight, it didn't work, basically.

    Let me share a few thoughts that appeared with the tests:

    • You have to trust the device. Putting all your weight and producing a full step seems easy, but it's not. It's quite difficult to trust the device and be sure it will perform as expected.
    • The splint provides a limited degree of resemblance, although I think it's enough to test general functioning of the device.
    • The user has to know the little quirks and movements that make the prosthesis work. Understanding its behavior and its causes seems to be fundamental in the process of learning how to use it.
    • Using a prosthesis is tiring! After a few steps, I was already sweating - a lot.

    This might seem trivial to some. But experiencing these things made me realize actually how hard it is to use a prosthesis.

    After several tests and trips, I observed that when I stepped over the prosthesis, the thing gave in too much. It flexed the knee, producing a sensation of instability. But the neural network was performing ok, it's just that the training data shows that -presumably- at impact, the knee flexes quite a bit. Probably to dampen the strike on the ground. The data was then filtered to remove high frequency components, these "impact flexes", and the model was retrained. This helped very much with the problem.

    Although the first tests looked quite terrible, they evolved into something much smoother. I had to learn to trust the device and produce full steps. The final tests are shown in the following video.

    On this video, some gait deformations can be seen as a result of the prosthesis being too tall for myself. The prosthesis size can't be shortened on the current design. The prosthesis behaves correctly in swing and stance phases, extending and retracting as needed, resembling a biological limb.

  • Control scheme

    Maximiliano Palay06/20/2022 at 14:20 0 comments

    A central part of this project. How is the prosthesis controlled? How does the user have to interact with it?

    Typical control systems

    Typically, intelligent prostheses use a range of sensors including IMUs, load cells and sEMG. The cheapest of these are the IMUs and thus the ones being used. A load cell could have been incorporated, and is useful to determine different events and gait phases. I couldn't find one with the necessary specs and cheap enough to include it in the budget. 

    These systems usually have a 3-level control scheme, with a top level which recognizes the user intention, a mid controller which is activated by the higher level controller, which determines the behavior of the prosthesis. And the lower level comprehends the controllers and actuation systems to make things happen.

    This project's control, neural networks

    To break down such an immense problem, this project implements a two level control scheme, eliminating the highest level. That being said, the prosthesis always "thinks" the user's intention is to walk. The mid level controller is implemented using a neural network, which takes IMU data and joint angles for the 50 previous time steps and predicts the joint angles 5 time steps into the future.

    Why a neural network? The answer results from a previous question, how do able-bodied people walk? The answer is quite difficult, honestly. It is a mostly automated process, we don't put a lot of effort into thinking what we have to do in order to walk. Directly interpreting data from an IMU to detect gait phases would be a hard task to say the least. This is where Machine Learning (ML) comes into play. If the IMU data has a correlation with the joint angles, a model can "learn" the relationship and it can then be used to make predictions.

    Mid-level control scheme. The neural network takes a total of 400 numbers to predict both joint angles.

    Several neural network architectures were tested, including RNNs, LSTMs, and CNNs. As the control algorithms run onboard of the prosthesis, memory and runtime restrictions means the model cannot be too big or computationally expensive. This was implemented in Tensorflow, and optimized to run on a microcontroller using TFLM (Tensorflow Lite for Microcontrollers). At the time this was done, LSTM and RNN kernels were partially ported to TFLM, so the final NN had a few convolutional layers and a trailing fully connected network.

    Data capturing

    To train a neural network, there is a need to have data, lots of it. Typically, motion capture systems (MCS) enable the measurement of different stats that are useful to calculate the joint angles. Ideally, I would have used a motion capture system in combination with an IMU, and recorded data of several subjects walking to train the neural network. I couldn't find any dataset with these characteristics and the amount of data necessary for this application on the internet. Without access to a motion capture system, I decided to build my own. Nothing remotely close to an optical MCS, but at least I can grab data whenever I want to.

    So I made this device that attaches to my right leg, with the use of straps and fixed footwear. It was built using 3D printed parts and aluminum extrusions. Two AS5600 magnetic encoders measure the joint angles, and an IMU attached to the front part of the leg, above the knee, measures 6DOF data. These three sensors are connected to an Arduino Nano using an i2c multiplexer (the encoders have hardcoded addresses). The Arduino measures raw data from the sensors, creates a string with all the data in a CSV manner, and sends it through the serial port to a host computer, which registers the data. This happens at 50Hz.

    Thanks to my uncle for lending me his treadmill!

    Inverse & forward kinematics

    The prosthesis does not use encoders at the joint origins. It is necessary to know the joint angles using the motor encoders. This requires a forward kinematics models that, knowing the...

    Read more »

  • Mechanics first tests!

    Maximiliano Palay06/11/2022 at 22:17 0 comments

    It's time to test the actuators in place! Although the movement was simulated in Fusion360, there's nothing like seeing the real deal.  Any problems with design or manufacturing could have affected the physical model. Some hand-powered movement tests were already performed to ensure the mechanism behaves properly. Now, let the motors power the mechanism.

    This was performed using a python script and odrivetool, with a couple of set points that move the joints back and forth. You get some slow-mo as well!

    It's evident on the higher speed tests that the noise level is quite high. Probably, this is due to the plastic structure resonating and actually amplifying the noise.

    Some wiggle is noticeable on the slow-mo footage. This was improved with torquing the ball nut to the rotor assembly, so it had the same torque on all four attaching screws.

    On to the proper control systems!

  • Assembly

    Maximiliano Palay06/05/2022 at 23:12 0 comments

    Assembling the prototype was the last step to transition into the control side of things. Although I have been designing the control scheme since the beginning, the real tests are about to come. More on this on a future log.

    The assembly consisted of two main stages, mounting the actuation system first (joints blocks and actuators), and then mounting the electronics and making the necessary connections. The following time-lapse briefly shows most of this process.

    A few snapshots. You might see knee and ankle blocks with metallic paint and raw black. This was because these required a few modifications. The final ones are black.

    Final knee block with rod end and pyramid adapter in place.
    Rear view of the prosthesis and unmounted motors with the 3-phase motor cables already passed through channels that communicate the electronics cavity with the back. Both joint blocks are already mounted.
    Actuation system mounted. Wires are routed and coming out the front cavity.
    Odrive about to be secured in the front cavity. A 3D printed clip keeps the encoder cables neatly routed.
    A self built breakout for the Teensy 4.1 with JST connectors for ease of assembly/disassembly. Connectors for power, power and I2C for the IMU, both RGB LEDs and UART for the Odrive.
    3/4 view of the prosthesis with electronics in place and LEDs on.

  • Structure post processing

    Maximiliano Palay05/27/2022 at 15:52 0 comments

    After finishing the 3D printing process, the next step was gluing the two body halves together. The design incorporates four channels to place four threaded rods at the joint to strengthen the structure.

    Had to remove A LOT of support structures.

    After joining the two halves together with the help of epoxy and the M3 threaded rods, the time came to make this look good. The quality out of the printer isn't as good as an injection molded part. Of course not. But I wanted a look that resembles a commercial product. It could be metallic or plastic, but smooth surfaces.

    Using a pneumatic sander, the surface was smoothed down to 360 grit.

    Sanding down the unified structure. Although this was at an early stage, the contrast between sanded and unsanded is clearly seen.

    Sanded down structure.

    The real aesthetic magic was done with the paint job. It provided a metallic look. This was carried out by an auto body shop, which painted it with regular automotive grade paint and applied a clear coat on top.

  • 3D Printing

    Maximiliano Palay05/25/2022 at 15:02 0 comments

    With over 20 3D printed parts, this was a long process. The printer used is an Anycubic Kossel Delta. 0.15 mm layer height. Just regular PLA+. Different infill and parameter configurations for different pieces.Overall printing time was about a week. Made a small setup to capture some timelapses. Had to be on the safe side with a UPS, and as some prints were multiple days nonstop, the room temperature was "controlled" with an AC.

    3D printing setup. Anycubic Kossel, UPS, a very [un]professional lighting setup, and smartphones setup to capture time lapses.

    The LED diffusers were printed with clear resin on the Anycubic Photon Mono.

    LED diffusers coming out of the Anycubic Photon Mono.
    LED diffusers being cured with UV light.

  • Actuators - Assembly

    Maximiliano Palay05/18/2022 at 22:38 0 comments

    A video of the assembly does a better job than I can at explaining the procedure. It is rather simple once all the components are ready. The hardest part is probably mounting the encoder disc on the rotor and securing the encoder sensor on the motor mount. Temporary 3D printed rod ends are shown in this process.


    I'll leave a couple of snaps of the finished products as well.
    The finished actuators side to side. On this image, temporary 3D printed rod ends are shown.
    The finished actuators facing each other, front and rear views. On this image, temporary 3D printed rod ends are shown.

  • Actuators - Fabrication updates

    Maximiliano Palay05/17/2022 at 19:11 0 comments

    I'm dropping a few pictures from visits to the machinist.

    The design required the stock 1204 ball screws to be cut down to proper length, and an M8 thread was machined on one end of each. Furthermore, rod ends were adapted to restrict the ball joint to a uniaxial rotating joint with bearings. Originally, newly fabricated rod ends were on the plans. But the machinist offered to modify existing ones which would simplify the fabrication and reduce overall costs.

    First visit to the machinist.
    First visit to the machinist. The original rotors are covered in tape to protect them from scratches. These already have the center bore and the four holes for mounting the ball nut. At the top of the image, the ball screws are shown already cut to length and threaded. Parts of the 3D printed prototype can be seen with a navy-grey color. Some aluminum parts with progress pending can be seen as well.
    Partially assembled rotor.
    The modified rotor with the new axis press fitted can be seen at the left of the image. The angular contact ball bearings are over the rotor. At the top right, the modified stator with the original bearing seats removed, and the new aluminum piece fitted inside. This piece was glued with anaerobic cement. At the bottom right, the crown.
    Modified rod end.
    One of the modified rod ends, without bearings. The original ball joint was removed and two bearing seats were machined from aluminum and press fitted into the original rod end casing.

  • Body Design

    Maximiliano Palay05/15/2022 at 13:47 0 comments

    As shown in the concept image, the prosthesis was to be manufactured using a 30x30 mm aluminum extrusion as the main structure, and 3D printed components around it to hold everything together. This had numerous advantages, such as ease of assembly and disassembly, a large amount of mounting points (or rails) over the four sides of the aluminum profile. These are key points for working on a prototype.

    The main disadvantage of this concept is volume. The profile takes up space which could be more efficiently used, distributing the greater surface and not having it on a column shape would enable placing of electronics on the inside of the prosthesis, rather than mounting everything around the extrusion. The latter would result in a bulky prototype.

    After a couple of revisions (Revs 1 and 2), this initial concept design was halted. It wasn't just about the volume, it would be very difficult to make it look good too. Revision 3 was all about "let's see what I can come up with in a few minutes, dreaming about fully printing it in 3D". This resulted in more of a leg shape right off the bat. Sketches of a design were then paper-drawn, and a more though out model was created. This generated the fourth and final revision.

    There's a myriad of design aspects, issues and solutions to talk about. I'll highlight a few things. The prosthesis begins with a pyramid adapter at the top that enable it to interface with existing prosthetic sockets. The main body is split in half since the design phase, because the 3D printer to be used does not fit the whole body at once. The foot requires much more design to provide proper damping and suspension, in this case, the foot is just support. This project focuses on creating a functional prototype, and the foot is left for future improvement. The electronics are held inside the body inside two frontal cavities, which are enclosed by covers that are held in place using magnets. This allows for the covers to be easily removable without any tools. This is a plus for showing and explaining the project. The internal electronics cavities have several mounting holes to attach the components with screws.

    The whole assembly is over 150 pieces.

    The knee and ankle were designed in a "block" fashion. These are kind of like rotating blocks over an axle, hence their name. In the exploded view animation, both blocks are shown to be cut inn half. This is to enable a more symmetric fabrication and have the layers aligned with the direction of greater stress. Each block's halves are joined together by M3 screws and nuts.

    Used bearings are 608 for the joints axes and 625 for the motor mounts. The axes are M8 and M5 screws respectively.

    The model has two lateral panels with LEDs to communicate the prosthesis status to the user. And you can't deny these are aesthetic A*! The LEDs to be used are RGB, placed in combination with a diffuser that "shapes the light" to its slot form.

    3/4 render of the prosthesis.

  • Actuators

    Maximiliano Palay05/08/2022 at 19:45 0 comments

    The actuators are a fundamental part of this project. One actuator could be custom designed for each joint, this would possibly provide benefits regarding mass and volume. To reduce complexity and manufacturing costs, the same actuator is used for both joints.

    To achieve the actuator concept, inexpensive hobby drone motors are used in combination with [the cheapest] ball screw reductions. After having the physical motors on hand, I partially modeled them as accurately as possible. The CAD models aren't available on the internet. The center hub with the bearing seats was not modeled due to the fact that I already knew it would have to be removed.

    Original EA65 brushless motors.
    Original EA65 brushless motors.

    To achieve the concept, the motors have to be modified in order to allow the screw to pass through, and the ball nut has to be attached to the rotor in some way. The resulting axis has to be bore. Furthermore, the stock bearings aren't meant to handle high axial forces, so these have to be changed for others which allow this. To handle this axial forces, new angular contact ball bearings are placed. These come in a pair arrangement and there is a specific way to mount them.

    The design process was iterative. I created a first generation model with modifications, printed a 3D mockup of it, and exchanged ideas with the machinist that would perform the modifications and manufacture the new pieces. The first generation actuator involved creating an entirely new rotor with included axis, which would incorporate the section of the original rotor which holds the magnets. Several instances with the machinist were required before achieving the final design. He gave insight into what design aspects made the costs lower and reduced fabrication complexity.

    3D printed mockup of the actuator.
    3D printed mockup of the actuator.

    The final design retains the original rotor, and new pieces are created, such as a new axle, bearings seats and what I call the rotor assembly crown, which presses the assembly together using 6 M2 screws. The crown gets its name because of its shape, and the shape is such because it allows for the mounting of the encoder disc. The ball nut is held through 4 M4 screws in a sandwich configuration which presses the new axle, the rotor and the nut together.

    Actuator design, assembled view.
    Actuator design, assembled view.

    The actuator modifications turned out to be quite complex. If I could go back in time, I would purchase a frameless brushless motor and design from scratch the necessary parts. At the time, frameless motors with the desired characteristics and price were not found.

View all 12 project logs

Enjoy this project?

Share

Discussions

Bharbour wrote 08/08/2022 at 23:37 point

Nice Job!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates