Real-time control of a prosthetic robotic arm POPPY with muscle activities


The prosthesis for people with motor disabilities has been improving in recent years, with diverse techniques, like the one of the control by muscular activity, that try to facilitate the daily tasks of the people. The existing control systems for this type of prosthesis are limited and this implies a long and difficult learning. The costs also are high and nonaccessible for all, for that reason with the appearance of the printers 3D, has been generated noncommercial designs but of low cost.

The present project tries to unite the contexts of control by muscular activity and impression 3D. Making use of the Poppy robotic platform developed by Flowers Lab at Inria, and in particular the arm of a Poppy Humanoid which will simulate a myoelectric prosthesis, and of the equipment for the acquisition of muscular activities pertaining to the laboratory of the INCIA (integrative neuroscience institute at Univ. Bordeaux, France).

##Working methodology

This project follows the following methodology:

  • Connection Poppy and Matlab.
  • Calculation of inverse kinematics.
  • Control by EMG signals.
  • Development of a prototype prosthetic arm for future scientific research.

To develop this project, first we started with the connection between Poppy and Matlab, then we used the inverse kinematic to control more efficiently the poppy’s arm. You can see the procedure in this link.

For control by EMG signals, we used all the electronic equipment of INCIA.if you have the same electronic equipment you can see all the software used in this [link] ( and you can download all the database that we made with many subjects.

In the following video , we show you how it works:

Prosthetic arm prototype

Finally we developed a prototype for use in future research.We can control it by Matlab or Python, It is completely customizable. you can download everything that you need (electronic, software and mechanics) in this link, as well all the documentation.

A video demostration of the various possibilities offered by this prototype, here below


Wow ! very nice work !!
I like the control by muscles, it remind me about the Thymio product but I think it is completely different.

For the prototype of arm with hand… I was to do the same thing… But you already did :slight_smile: I was doing the part to fix the first XL-320 to plug on the arm.
I see you use XL-320 to control hand but do you plug directly the first XL320 to the elbow servo mechanism ? Or is there another wire to control the hand ?

The book about convex optimisation is used in the video… did you read it ? :wink: Did you use convex optimisation to control the hand ?

For my artistic project, I will cut the hand to have 2 degrees of freedom at the wrist.

Thanks very much :smile:


I tried to connect directly (XL-320 and MX-28) using a single connection, but there are two constraints:

  • Different voltage (MX28: 12V ; XL 320: 7.4V)
  • Different communication protocol (Pypot can’t change between the two protocols for the moment).

To avoid using two different source of power, i made a electronic card , where you can centralize the control.


I didnt used optimisation because I calculated the inverse Kinematics using trigonometric methods, fixing in one position the motor that was causing redundancy.

Finally, this arm is totally modifiable :smile: , in the documentation, you can find all the information necessary for tunning your own design.

Good Luck. :v:



As an internship student in Flowers Team, I am about to continue these works, and I have a few questions about this project.

Firstly, is the inverse kinematics process controlling the prosthetic prototype limited to the three DoF it shares with the “regular” Poppy arm, i.e.

  • q0 > r_shoulder_y
  • q1 > r_shoulder_x
  • q2 > r_elbow_y

Indeed, only these three motors’ angles are mentioned in the control interface, and the wrist’s DoF appear as the “Wrist” slider and the “Open/Close Gripper” checkbox.

This observation leads to my second question: among the nine motors, which ones are effectively used, and how?

I guess that is about r_arm_z, fixed at a null angle in the video demo. and that answers the question about the arm’s motors. However, when it comes to the wrist’s motors, we can see in the demo that some of them are used to keep the gripper and the glass horizontal. Is this feature integrated after the inverse kinematics process, based on the three arm angles previously computed?

Thanks in advance,

Hello SĂ©bastien,
First very happy that you’re going to continue and improve my work.
Indeed, I did the calculation of the inverse kinematics only using 3 motors and I fixed “r_arm_z” at -90° with this way I only explored the space of my interest ( Cinematique Inverse bras de Poppy), the wrist motor and gripper don’t change the IK, I controlled these ones separately.
If your question is, which motors are effectively used in the Inverse Kinematics? I only use 3 motors.
q0 > r_shoulder_y
q1 > r_shoulder_x
q2 > r_elbow_y
Then the motors XL-320 are coupled in the IK using linear regression, and the motor “r_arm_z” is always locked at -90°.
Well I only made this arrangement because I wanted to prove my hypothesis, but then another internship student worked exclusively in the inverse kinematics with a better performance.
I made one software entirely in python to control the arm ( you can add the new IK library and it will work much better.
Well, the Monday 8 I will go to INRIA and we can speak a little more.