Project ARM



The goal of the project is to develop an android application that will monitor and track mobility parameters of arm movements, including range of motion and repetitions of prescribed movements. Update the wearable interface to protect components and allow the users to easily use the wearable interface.

=Problem Definition=

Individuals recovering from post-stroke arm impairments spend significantly more time conducting therapeutic exercise at home without therapist supervision than they spend doing supervised therapy in a clinical setting. It is difficult to quantify the amount and quality of arm usage that takes place between supervised therapy sessions, which would be useful to know both as an indicator of functional recovery, and also as a way to monitor activity level and its impact on motor recovery.

=Goals and Target Specifications=
 * Goal 1: Develop the wearable hardware to secure sensors to user
 * (high priority) Secure attachment to the user (minimal risk for misalignment with long-term use during ADL tasks)
 * (high priority) Easy to put on and take off (preferably with one hand)
 * Comfortable fit to user
 * Low profile
 * (low priority) Protect and strain-relief cabling (wired/wireless?)
 * (low priority) Protect electronics from damage (collisions, moisture)
 * Goal 2: Measure arm movement signals from the shoulder and elbow.
 * (high priority) shoulder elevation, horizontal abduction/extension, and internal/external rotation (must take into account torso orientation)
 * elbow flexion/extension
 * Goal 3: Store and compute meaningful metrics for remote and periodic activity monitoring
 * (high priority) range of motion
 * high priority) repetitions of range of motion exercises


 * Goal 4: Count occurrences (repetitions) of pre-recorded movements in the data (in real-time or in post-processing)
 * (high priority) Record two movements, and compute a % difference or % similarity score between them
 * (high priority) Locate and count number of recorded movements from a data set with movements having a desired range of % difference (or similarity).
 * Integrate the movement recognition and repetition counting process in the wearable prototype
 * (low priority) extend to allow multiple (up to 4) different pre-recorded movements that will be identified and counted


 * Goal 5: Display activity information to a screen
 * (high priority) range of motion
 * (high priority) number of repetitions of a desired movement range
 * Movement smoothness
 * Repetitions of a desired movement trajectory
 * PC and mobile device compatible
 * (low priority) real-time activity information

=Project Learning Examples=

Possible Algorithm Illustration


=Design Work Examples=

Data Collection



 * Data will be used in the assessment of how well a patient performed an exercise.
 * It will be collected from three different sensors in hardware.
 * Shoulder Sensor
 * Wrist Sensor
 * Reference Sensor
 * Data collection shall occur in cycles, with each sensor broadcasting its data at a time relative to the other sensors.
 * Example: Reference, Shoulder, Wrist, Reference, Shoulder… etc.
 * This means that each sensor will broadcast the same number of data points as the others.
 * Data points will be collected as quickly as possible from the hardware.
 * The data collected from each sensor will consist of the angles of rotation for three different axes, measured in degrees.
 * X axis data points will be collected
 * From the Shoulder Sensor
 * From the Wrist Sensor
 * From the Reference Sensor
 * Y axis data points will be collected
 * From the Shoulder Sensor
 * From the Wrist Sensor
 * From the Reference Sensor
 * Z axis data points will be collected
 * From the Shoulder Sensor
 * From the Wrist Sensor
 * From the Reference Sensor
 * This means that each data collection cycle will collect nine (9) different data points in total.
 * ‘Number Lines’ will be used in the analysis of the collected data
 * All ‘Number Lines’ shall contain the same number of points as all other ‘Number Lines’ used in the analysis of data from each exercise.
 * The data contained on each point on a ‘Number Line’ shall consist of averaged data points collected by the app.
 * Example: If there are thirty (30) data points cycles recorded by the hardware, and ten (10) points on the ‘Number Line,’ then each point on the ‘Number Line’ will contain the average of three (3) of those thirty (30) collected data points.
 * Example: (23.54 + 27.82 + 31.91) / 3 = 27.76
 * There shall be two different ‘Number Lines’ used for each axis of each sensor, meaning that a total of eighteen (18) ‘Number Lines’ will be used.
 * Baseline ‘Number Line’
 * This ‘Number Line’ will consist of pre-recorded values to which the values of the ‘collected values’ number line will be compared
 * The initial number of points on a baseline ‘Number Line’ shall be determined by two values
 * The ceiling of the range of values collected in the data set
 * Example: ceil(171.28 – 23.54) = ceil(147.74) => 148
 * The total number of data collection cycles
 * Example: sixteen (16) collection cycles => 16
 * The initial number of points on the ‘Number Line’ shall be calculated by taking the ceiling of the division of the larger value by the smaller.
 * Example: ceil(148 / 16) = ceil(9.25) => 10 points on the ‘Number Line’
 * The number of data points per point on the ‘Number Line’ shall be determined by taking the ceiling of the division of the larger value of the number of collection cycles and the number of points on the ‘Number Line’ by the smaller of those two values.
 * Example: ceil(16 / 10) = ceil(1.6) => 2 data points per ‘Number Line’ point
 * If there are any ‘unoccupied’ spots on the final baseline ‘Number Line’, these are discarded to obtain the final number of points.
 * Example: if there are ten (10) initial points on the number line, sixteen (16) data cycles recorded, and two (2) data points to be averaged per ‘Number Line’ point, then there are eight (8) final number line points as two (2) of the initial points would not be used.
 * 16 data cycles / 2 data points = 8 final points
 * 10 initial points – 8 final points = 2 unused points
 * Alternatively, if there are any data points more than the number of ‘Number Line’ points, these data points shall be divided by the number of data points per ‘Number Line’ point, the ceiling value taken, and that number of extra spots will be added to the final baseline ‘Number Line’ with the excess data points averaged together in the way suggested above.
 * Example: if there are three (3) extra data points to be added to an initial ten (10) point ‘Number Line,’ with two (2) data points per ‘Number Line’ point, then:
 * ceil(3 / 2) = ceil(1.5) => 2 additional points will be added to the final number line, so it will have a total of twelve (12) spots.
 * In this case then final point on the final baseline ‘Number Line’ would only have a single value assigned to it, instead of two (2).
 * Collected Value ‘Number Lines’
 * This ‘Number Line’ will consist of averaged data points that will be compared against those contained on the Baseline ‘Number Lines.’
 * The number of spots on each Collected Value ‘Number Line’ will be the same as the number of spots on the Baseline ‘Number Lines.’
 * The number of data points to be averaged for each spot on the Collected Value ‘Number Line’ will be calculated by taking the ceiling of the division of the larger value of the number of collected points and the number of spots on the Baseline ‘Number Line’ by the smaller of those two values. The remaining data points will be distributed evenly amongst the remaining spots on the ‘Number Line.’ If any spots on the ‘Number Line’ are empty, this empty spot will contain the value of the nearest occupied spot.
 * Example: ceil(14 data points / 8 spots) = ceil(1.75) => 2 data points per spot
 * This means the first seven (7) spots on the ‘Number Line’ will each get two (2) of the fourteen (14) data points, while the eighth spot will contain a value duplicate of the seventh spot.
 * If there are excess data points after the even distribution of data points to ‘Number Line’ spots, these data points are averaged along with those assigned to the final spot on the ‘Number Line.’
 * Example: if there are eight (8) spots, with two (2) data points per spot, but three (3) somehow remain, these three points will be averaged along with those in the eighth spot. This means that the eight spot will contain the average of five (5) data points, instead of two (2).
 * A percent error calculation will be made between each point on the Baseline ‘Number Line’ and the Collected Value ‘Number Line’ for each axis of each sensor that reports data to the app.
 * ( | Collected Value Average – Baseline | / Baseline ) * 100 % = Percent Error
 * As this error should be close to zero (0), subtract this value from 100 % to get the ‘Percent Correct’ value
 * The percent correct values for each spot on each ‘Number Line’ will be averaged
 * Example: for three (3) number line spots the values 25 %, 50 %, and 75 % were calculated. The average of these scores is:
 * (25 + 50 + 75) / 3 = 50 %
 * The averaged percent correct values of all eighteen ‘Number Lines’ will themselves be averaged.
 * This is the ‘final score’ that the user will get for completing the exercise.
 * Example: (80 + 20 + 30 + 75 + 35 + 90 + 95 + 45 + 25 + 15 + 85 + 70 + 40 + 50 + 95 + 45 + 20 + 10) / 18 = 51.38 %

=Final Product Examples=

Phone App
=Team Members=