0LAUK0 2018Q1 Group 2 - Programming overview
Jump to navigation
Jump to search
Notice
This page will face massive redesigns over the course of the day. Please ignore the 'old layout' section, as its contents will be integrated in the new sections
Processing
Arduino
Infrared distance sensors
Serial communication
Motor control (Hans's part)
References
list of references here, in alphabetical order
Old layout - will be deleted eventually
Processing code layout
User object has
- Average location (x,y,z detected by OpenCV and IR)
- Ideal location (x,y,z of center of screen)
- Max RSI preventive compliant posture (how extreme can the user posture be without breaking the RSI prevention rules)
- Time spent in current posture
- Pixel map of face at startup
- Precision measure of repeated observations of face pixel map.
Cameras have
- Conversion metrics to transform pixels into angles into meters
Arduino IR has
- Conversion metric to transform voltage into meters
At startup
- User's face will be around their ideal location, capture the pixel map of the face detected around this location
- Load equipment and user attributes mentioned above.
At a predefined interval - call openCV to detect faces
- If no face is detected, maintain the average face location calculated from previous face detections
- If one face is detected, compare to face pixel map
- If similarity is too low, maintain the average face location calculated from previous face detections
- If similarity is high, update the average face location
- If multiple faces are detected, compare detected faces to face pixel map
- If there is no match, maintain the average face location calculated from previous face detections.
- If there is one match, update average face location using this face.
- If there are multiple matches, choose faces closest to average face location and update average face location using this face.
- If the current location of the face is significantly different from the average face location:
- Start counting time that this new posture is held:
- If time is very low: it was a split movement, no long term change in posture -> ignore
- If time is long: it is a long term change in posture -> move monitor
- If detected as posture change:
- Face has moved up or down:
- Calculate delta_x, delta_y. give command to move monitor, when the monitor is in front of the user, calculate delta_z using the arduino IR. Give command to move monitor in z direction if delta_z > threshold
- Detected face width has changed: (user moved forward or backward)
- Calculate delta_z using the arduino IR. Give command to move monitor in z direction if delta_z > threshold
- Determine if new posture is RSI preventive compliant
- Face has moved up or down:
- Start counting time that this new posture is held:
Keep track of how long a posture is held
- If posture is RSI prevention compliant: held for too long, notify user to move
- If posture is not RSI prevention compliant: use a much shorter time threshold, notify user sooner