(a) What design criteria must your project meet? What is the desired functionality?
The primary function we want to implement is that Baxter can play the ukulele. Our project must be able to hold and play chords to play a complete song.
(b) Describe the design you chose.
The tasks of playing a song are divided between our custom ukulele device, the UkƐ, which actuates to hold the chords of a song in sequence and Baxter, which strums the strings. Baxter communicates with the UkƐ so that after a new chord is held, Baxter responds by moving its arm and strumming the ukulele. After Baxter strums, the UkƐ responds by moving to the next chord, and this repeats until the completion of the song.
(c) What design choices did you make when you formulated your design? What trade-offs did you have to make?
We would have liked to have Baxter control every task typically required to play the ukulele, which includes holding the ukulele, holding chords, and strumming. We decided this would be too difficult to have Baxter do all at once, so we created the UkƐ in order to split up the process and simplify our project. Building a separate ukulele device required additional hardware, microcontrollers, and mechanical engineering, but separating the tasks was helpful because the actions of holding chords and strumming strings could be implemented independently. Then there was only an additional task at the end to integrate the devices so that Baxter and UkƐ could communicate with each other.
(d) How do these design choices impact how well the project meets design criteria that would be encountered in a real engineering application, such as robustness, durability, and efficiency?
Building the UkƐ separate from Baxter makes this project fairly robust because we can debug and iterate components independently from one another. When the UkƐ fails to play the correct chord it is a simple matter of disconnecting it from Baxter and targeting this bug on its own, and the same goes for when Baxter is unable to strum properly. It is helpful that we can isolate several sections of our pipeline, and this might even be handy if we want to use only a single component for another project, i.e. applying Baxter's strumming motion to another device.