Background & Overview
As part of the UBC Bionics Design Team, I contributed to the development of embedded systems for our bionic prosthetic arm. My work focused on EMG signal collection, processing, and integration into the main control architecture. This involved reworking the EMG pipeline, moving away from a Python-based approach, and ensuring it could run efficiently on embedded hardware such as the Raspberry Pi Pico.
1.0 Project Objectives
- Rework the EMG collection and processing pipeline into the Rust-based control application.
- Develop more robust signal cleaning and thresholding to handle noise and artifacts.
- Redesign the control architecture to eliminate reliance on Python and run fully on embedded Rust systems.
2.0 Methodology
2.1 EMG Collection and Processing
Originally, EMG signals were collected and thresholded using a separate Python application. This provided only basic detection of "grip" signals and was highly susceptible to noise. To improve robustness, I integrated EMG data collection and processing directly into our Rust-based control program (GPM). This included implementing filtering, thresholding logic, and safeguards against artifacts caused by motion or electrode noise.
2.2 Control Module Redesign
The original control architecture used an event-driven Rust engine (GPM) but still relied on a Python module to interpret EMG signals. While this worked on a Raspberry Pi 4, it was unsuitable for our goal of miniaturization onto a Raspberry Pi Pico. I refactored the architecture so GPM directly collected and processed EMG signals without external dependencies. This streamlined the system, reduced computational overhead, and enabled embedding all electronics within the prosthetic arm.
Initially, the team had planned to include computer vision and machine learning modules for EMG analysis. However, testing showed that running both analytics and GPM on the Pi Pico caused severe performance drops. Removing the analytics module improved responsiveness and reliability.
3.0 Results
- Improved Signal Processing: Filtering and thresholding reduced false activations from noise and motion artifacts.
- Embedded Integration: Eliminating Python enabled the system to run fully on the Raspberry Pi Pico.
- Control Reliability: Event-driven architecture improved task delegation and response times.
4.0 Conclusion
By restructuring the EMG pipeline and control module architecture, the system became more efficient, resilient, and fully embedded. These improvements advance the UBC Bionics project by enabling a more compact and robust control system for the prosthetic arm.