Around 2.2 billion people worldwide are struggling with some degree of visual impairment. This condition can deteriorate the quality of life to some extent. Mainly, it affects the ability to move due to the risk of losing body control caused by a lack of spatial information. This detriment leads to other damaging factors, such as social isolation and depression.
Different organizations have created programs to implement recreational activities, such as dancing and exercising, in squares and public parks. Their mission is to develop communities that can tackle social and health problems. These programs can open opportunities for visually impaired people to be integrated by providing spaces without discrimination and emotionally supportive networks. In most programs, the performed activities require participants to mimic the movements of an instructor, a situation that is complex for visually impaired people. Although instruments such as guide sticks exist to help them get spatial information, they cannot be included in activities like dancing or exercising.
This project aims to develop a prototype for outdoor community activities capable of detecting arm postures with a camera and activating vibro-motors to guide visually impaired people in accomplishing specific movements.
Design Posture Recognition SystemThe combination of computer vision and artificial intelligence algorithms have allowed tiny electronics devices, such as embedded devices, to detect, infer or predict behaviors. These capabilities arise from a series of techniques that use large computational extensive intelligence models to transfer the "knowledge" to small devices. This transfer reduces the performance of the inference, but increases the number of applications of such models.
This project used a large computational extensive intelligence model from Ultralytics (YOLOv8) to train a Grove Vision AI v2 module to detect keypoints of the Human Body in motion. It utilized the information provided by Seeed Studio on the following web page (YOLOV8 wiki) to get the YOLO v8 model and adapt it to the Grove module using Google Colabs. Once the model was compressed by TensorFlow lite, it was deployed using the tool SenseCraft by SeeedStudios, depicted on Image 1.
From the image, it can be noticed that the keypoints (kp) are joined by lines of different colors for illustrative purposes. These kp were processed on a ESP32 module (XIAO ESP32S3). Thus, the ESP32S3 extracted the kp from Grove Module using the library SSCMA for Arduino Platform. According to the information provided by Ultralytics the arms occupied the positions on the array of keypoints as follows.
- 5: Shoulder Left
- 6: Shoulder Right
- 7: Elbow Left
- 8: Elbow Right
- 9: Wrist Left
- 10: Wrist Right
The kp were processed to determine the arms postures by analyzing the kinematic chain from shoulders to wrists of both arms. This analysis consisted of decomposing each individual chain, depicted on the Image 2. Then, it was calculated the distances between shoulders-elbows and shoulders-wrists and angles between these body sections. This decomposition was performed by setting origin-framework to the shoulders and calculated all values against Elbows and Wrists points with each independent arm, as observed in the Image 3.
The values calculated were analyzed to get the footprint of movements in order to classify them. This project centered the analysis on four possible movements (postures) with one standby position (Idle), observed on Image 4. The perspective to determine the name of the arms was the point of view of the executor of the movement.
In order to find the characteristics that the four movements comprises, it was conducted an experiment where angles and distances were captured by module Grove and ESP32S3. The both components (EyeNode) were set 2 meters apart from the target (person who performed the movement) and 1 meter from ground. Besides, the EyeNode was mounted on a tripod inside a cage, observed in the Image 5.
The Eyenode was designed to allow the components to be battery powered using the ESP32S3 builtin circuits; the schematics of the EyeNode are attached. Additionally, It was programmed for the experiment to initiate capturing the information after 3 minutes passed after initialization. Then, values were sent to the computer to be analyzed statistically by Bluetooth Low Energy (BLE). The EyeNode was configured as a server, and it was programmed XIAO ESP32C3 module to function as a testNode (BLE client) to receive the data.
The information obtained by the experiment was condensed in the following tables where it is observed the average, the minimum value, maximum value, the standard deviation and the range.
From tables, it can be observed that there is variability in the angles for all the Postures/Stages selected that the postures can be classified. For instance, right arm shoulder-wrist angle is different at any posture at idle the range starts on 95° to 101°, at Up Horizontal starts on 162° to 170°, and at Up Vertical starts on -119° to -102°. Additionally, it is noticed the model struggles with segments regarding left arms. The values of this segment had bigger values for the standard deviation, which indicates a bigger dispersion of data. However, the ranges are well defined and do not overlap so that postures can be differentiated.
The ranges from tables were used to classified the postures on Image 4 by creating a state machine that depended on the angles ratter than distances. Finally, the EyeNode was programmed with the this state machine and BLE capabilities. Thus, the EyeNode would send information to the haptic devices to alert the visually impaired people which movement needs to be performed. To test it, an experiment was developed and conducted with a testingNode (BLE Client) to receive the posture observed through the EyeNode.
The code that EyeNode used is depicted in the section below. For this project, a tiny Log library was developed for debugging purposes (attached at the bottom). Besides, It was added an open source library for controlling the BLE module integrated in ESP32 chips.
Design Haptic FeedbackHaptics is a series of techniques which aims to stimulate the sense of touch by simulating a motor feedback. This feedback serves to guide people to perform activities or as an indicator that an activity was performed correctly; like when an icon on a touchscreen is selected and the device vibrates to inform the correct selection. Since haptic feedback helps to alert people about a situation, it can be used to guide visually impaired people who rely on touch and sound senses.
This project uses haptic feedback to indicate to visually impaired people the movement they need to execute with their arms to participate in outdoor community activities such as exercising or dancing. Thus, bracelets were developed to have vibro-motors attached and bring feedback to the wrist as indicators of movement.
The bracelets were designed based on the XIAO ESP32C3 module which would activate the vibro motors based on the receiving information from the EyeNode. Additionally, Inertial Measurement Unit MPU6050 was added to close the control loop of arms. The sensor provided spatial information about the movement, and the devices are battery powered. In the Image 6, it is observed the bracelet electronic prototype, where the battery is located under the MPU.
The MPU provides acceleration and gyroscoping information. This information can be used to classify movement more than detect the accurate position of the sensor. Considering that the arms are fixed kinematics chains, it is possible to use the same methodology as EyeNode to get values of angles that were reached with the postures. In order to get the sensor data related to angles, it was conducted an experiment where bracelet circuits were mounted on a structure to be attached to arms (see Image 7) to get values of angles (Pitch, Yaw, and Roll) characteristics of the postures on Image 4.
For the experiment, the bracelets were programmed to reset the offsets to have a local framework set on the MPU start position. This constrained the measurements and reduced the complexity of calculating the angles against an absolute framework. The information obtained by bracelets was sent to a testingNode through BLE for its statistical analysis. In the following tables a summary of the data obtained is shown.
As well as the data obtained in the experiment with the EyeNode, the angles varied on a range that could be clustered. Such a situation allowed postures classification; being the Yaw angle the most relevant. This angle is obtained by a rotation around the Y axis. According to the MPU indication and the configuration of the bracelet, the Y axis is perpendicular to the image shown on Image 8. Therefore, the Yaw angle had a strong relation to the desired postures on Image 4 so that it was utilized to classify the postures, using the ranges from Tables 7-12.
In order to create the haptic feedback, four vibro-motors were utilized per wrist. Each motor was controlled by a transistor BJT (BC547), using the configuration on Image 9. Since the objective was to activate feedback until a person reaches the desired posture.
The vibro-motors were located at four directions around wrist in a soft estructure ( haptic feedback wrist belt) as shown in Image 10. They were named according to their position using the anatomical convention.
- Dorsal - Outer Motors (OM)
- Radial - Front Motors (FM)
- Palmar- Inner Motor (IM)
- Ulnar - Back Motor (BM)
The Image 11 shows how both bracelets were attached to the arms with the haptic feedback wrist belt.
Finally, the bracelets were programmed as BLE clients to receive the inference from EyeNode with respect to which pose needs to be addressed. This information activates one motor at a time from haptic feedback wrist belt to indicate user to move the arms until reaching the desired posture. In order to test it, it was conducted an experiment with a testingNode as a Server which would transmit randomly postures to bracelets. This experiment was conducted with one bracelet at the time.
The activation sequence of the bracelets started with a routine that trained the user how the feedback was feeling to be ready to play. During this sequence the bracelets were running a background process of calibrating the sensor and initiating the communication with the server.
ResultsIn the following short videos, it is observed the fucntionality of EyeNode and the Bracelets.
Special thanksThis project was possible due to the support of BUILD2GHETER 2.0 Admins and all sponsors that provided Hardware modules. Additonally, I will give a big thanks to all people form ETH Zurich that brought me feedback to complete this project succesfully
Comments