Wearable robot based on STM32F7 and ST IMU sensors

Version 3

    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 .