Wearable robot based on STM32F7 and ST IMU sensors

Document created by Julien Tiron Moderator on Mar 31, 2017Last modified by Julien Tiron Moderator on Apr 1, 2017
Version 3Show Document
  • View in full screen mode

About this project

Based on STMicroelectronics IMU sensors, STM32F7 discovery board and a 3D printed robot, this project targets Human/robot interaction.

Wearable backpack 


Project info

Type : Wearable robot prototype to be worn like a backpack. The command is performed using three ST 9 axes IMU sensors on the user arm. The robot tracks the hand and matches its end effector position with the hand position. This prototype has been developed to explore intuitive control using IMU sensors.    

Progress : still in progress 

Difficulty : Advanced 


The Team :


Julien Tiron

Software development/ 3D modeling/ Hardware design


Julien Tiron


Things used in this project

Hardware components :

Résultat de recherche d'images pour "stm32f7 discovery"STM32F746G-DISCO132F746GDISCOVERY - Discovery kit with STM32F746NG MCU - STMicroelectronics Complete discovery board with good form factor
AX-12 servomotor6-8Dynamixel AX-12A Robot Actuator from Robotis Position controlled motor using half-duplex communication
ZMP IMU-Z Body Motion Sensor Package1ZMP Inc. | 全身モーションキャプチャ ZMP® IMU-Z Body Motion Sensor Package IMU suit based on ST IMU 9 axes sensors
19.6V - 2.3Ah Battery for Bioloid 

Hand tools and fabrication machines :

-3D printer (200x200x200mm)
-Soldering iron

Software Tools :

-STM32 CubeMX

-IAR for ARM

-Visual Studio C#




This project has been started to explore human/robot interactions, especially intuitive control based on IMU sensors and sensor fusion. Below are the main purposes of the project:

  • Focus on inverse kinematics based on user hand position.
  • Build a prototype to observe the feasibility of such system and develop needed software and hardware.
  • The platform has to be modular to be able to answer most of the wearable robotic applications.
  • Evaluate IMU sensors as interface between wearable robots and humans.
  • Identify and solve the difficulties linked to wearable robots design and development.


Hand position

The hand position of the user is obtained using 3 IMU sensors placed on the user arm. Using the 9 axes data, a model of the arm is built in a C# application. With this model, the position of the hand can be calculated. Finally the position is sent to the STM32F7.












GUI of the C# application         



Inverse kinematics and robotic arm model


Once the hand position is retrieved from the IMU suit, the STM32F7 computes inverse kinematics solver to position the servomotors accordingly.  

Denavit-Hartenberg model for the robotic arm and inverse kinematics formulas



A 3D printed case has been designed to host the STM32F7 discovery board, the battery and a PCB. 3D printing has also been used to build the 3 DOF arm.


Hardware setup



There are several targeted use cases: 

  • Heavy weight lifting assistant (e.g. building construction, factory work…).

  • “Backpack assistant”, integrated in a backpack, the robot can exchange objects with the user.

  • “Smart Camera stand”, camera stand with intuitive control using IMU sensors.


Future work

  • Implement force control to enable heavy lifting application.
  • Add flexion sensors on the hand to extend the control over the robotic arm (pointing/grasping movement…).
  • Implement fuzzy logic, neural network training and ANFIS network.

ANFIS (Adaptive Neuro-Fuzzy inference system) example on 2 DOF arm


  • To be uploaded later 
  • Inverse kinematics algorithm in C#

//calculate angles for three servomotors to match given coordinates,
private Vec4 inverseKinematics3D(double x, double y, double z)
Vec4 servoAngles = new Vec4();
double theta1, theta2, theta3;
double X0, Y0, D;
double Z0 = 5; 
double a1 = 5; 
double a2 = 35; 
double a3 = 20;
theta1 = Math.Atan(y / x);
X0 = Math.Sqrt(Math.Pow(a1, 2) - Math.Pow(Z0, 2)) * Math.Cos(theta1);
Y0 = Math.Sqrt(Math.Pow(a1, 2) - Math.Pow(Z0, 2)) * Math.Sin(theta1);
D = (Math.Pow(x - X0, 2) + Math.Pow(y - Y0, 2) + Math.Pow(z - Z0, 2) - a2 - a3) / (2 * a2 * a3);
theta3 = Math.Atan(-Math.Sqrt(1 - Math.Pow(D, 2)) / D);
theta2 = Math.Atan((z - Z0) / (Math.Sqrt(Math.Pow(x - X0, 2) + Math.Pow(y - Y0, 2)))) - Math.Atan((a3 * Math.Sin(theta3)) / (a2 + a3 * Math.Cos(theta3)));
servoAngles.x = imuzDraw1.Rad2Deg(theta1);
servoAngles.y = imuzDraw1.Rad2Deg(theta2);
servoAngles.z = imuzDraw1.Rad2Deg(theta3);
return servoAngles;

Schematics and circuit diagrams

  • To be uploaded later

CAD - Enclosures and custom parts

  • ALL 3D models can be found on Tinkercad by searching for "Murakami": Search | Tinkercad .
1 person found this helpful