Team: QRM, LamPi
Author: Robert Burke
The objective of sprint 1 was to implement a basic pan/tilt servo action controlled by the Raspberry Pi (RPI) and RPI camera, with Python programming language and OpenCv libraries installed on the RPI. This aim was to have a basic vision system detect a face from the camera feed and move the servos accordingly to track the face. Where audio would be used to mask the servo noise to improve user interaction.
Sprint 1’s objective were successfully completed, however various issues and/or areas of improvement were encountered while implementing the functionality of the system. Therefore the performance of the system was greatly affected.
- Servo motion proved to exhibit a lot of jitter or shake while being stationary or moving.
- Vision proved to be very demanding on processor and CPU.
- Audio worked well but requires refinement and improved trigger mechanism.
- Threads and IPC allowed concurrent execution of functions but again proved to be a demanding task for RPI.
These issues may be improved by breaking them down into their root causes and implementing fixes for each.
- Timing analysis of existing thread structure and IPC may allow for improvement in the execution of threads etc
- Replacing threads with processes has been highlighted as a possible improvement for such a system running on the Raspbian OS and Python language.
- Audio outputs trigger and volume could be controlled as a function of servo current draw through operation, as previously discussed within the team.
- Vision could be reduced to simple object tracking to eliminate inherent limitations introduced by face detection cascade classifier algorithms. Such as facial rotation limitations.
- Servo motion could be reduced to a single movement and various methods of control compared to determine best resulting motion.
This may be implemented by resorting to basic scripts again, and working with test cases while plotting all variables and waveforms to determine the source of the issues, such as oscillations, noise and control limitations etc
Also the inclusion of moving average filters and PID into these basic scripts and text cases, as well as the improved distribution of tasks within RPI cores as suggested by Michael, should allow for the implementation of an improved pan/tilt servo action demo before we commit to implementing a robotic lamp.
Project management reflection
No team manager was assigned at the beginning at the sprint, which proved a success as this allowed all team members to have an input and focus on the direction of the sprint. However Michael soon filled the position and must be acknowledge for the job he did. The direction and input given by the team leader and his experience in computing allowed for the timely execution of the various action items and provided a source of feedback for other team members.
The suggestion to use Google Drive as a storage, communication and collaboration platform for all project and team work proved to be invaluable to the success and completion of the project's first sprint. This allowed for files to be shared and modified by all users and for team meetings to be conducted online in a productive fashion.
I felt the team worked worked very well on all aspects of the project and all members contributed greatly. I completed my action items and tried to implement and collaborate on solutions for other action items that arose. However other project commitments reduced the time i could input to this project and identified the need for improved time allocation and project planning on my behalf. I also noticed room for improvement in action item delegation and weighting.
My thoughts on next sprint and teams
After reflecting on the past sprint i believe that for the next sprint the teams should remain as they were for sprint 1 in order to maintain the developments and learning of each team. Tasks within the teams should be switch such as people who previously worked on servos may now work on vision, audio or threads to allow for maximum team member input and learning outcomes.
Collaboration between all teams, for instance all team members working on servos, collaborating and meeting once a week, may result in development of more advanced functions etc
Therefore moving towards a lamp build should be postponed until all the functions critical to a robotic lamp have be improved and extended. Instead a similar but improved demo should be the main objective of sprint 2 with a basic lamp build coming later in the sprint.