Cithara plays the guitar using its robotic arm and slider which together pluck strings and press down on frets.
We designed it to be compatible with all guitars after calibration and require no physical modifications to the guitar whatsoever. Most songs can be “played” by Cithara as it automatically converts supplied guitar tabs into a stream of time-indexed navigation points. A lot of similar systems exist but they require music to be hard-coded, guitars to be purpose-built or do not play like a normal person does. Cithara plucks each string like a human player.
I started working on Cithara after spending a few months developing my own robotic arm. After building one, I looked for an unexplored application for it and then decided to tackle the problem of how to play a guitar using a robotic arm. The initial robotic arm I built was 3D-printed out of ABS with very low end servos at each one of its joints, along with a clamp at the end of the arm. It operates on a quasi open-loop method. This means that although the overall system does not truly know if it is acting properly but yet individual components of the system are fully aware of what they are doing and try to compensate if they are off. (i.e. we do not know if the song is playing but the servos know they are moving to the correct positions, therefore we must be playing the song) After demonstrating Cithara, we won 1st Place in the 2015 Boston University Imagineering Competition.
Everything starts by converting plain text guitar tabs that can be acquired online into a single dimensional array of strings and frets ordered in the sequence they are played. I wrote functions in both Python and C to accomplish this. This conversion requires a lot of system memory for a device like Arduino Uno as it involves a lot of strings and arrays that change on runtime. (Converting music to a machine-readable instruction set is not an easy task..) If memory is an issue, tabs can be converted using the Python functions on a computer and then uploaded onto Cithara. If memory is not an issue, C functions will take care of the conversion and all you need to do is copy/paste the tabs.
Converted tabs are then computed in realtime into a set of navigation points in Cartesian space. The navigation points are determined smartly to account for slack in the system so that the arm moves smoothly and as quickly as possible. These navigation points are converted into 3 angles which correspond to the arm angles of the base, shoulder and elbow joints.
Along with my teammate Evan Lowell, we rebuilt the robotic arm using metal components and phased out my original 3D-printed ABS parts. As the arm got heavier and bigger, the control problem also got harder. When the arm is short and light, servos do a fairly good job of keeping the arm in place accurately. As it gets heavier, servos start to have issues responding in a timely fashion. As it gets bigger, bias uncertainty of your control mechanism grows rapidly at farther distances from the origin. We solved these issues by utilizing smart navigation paths and good design decisions as mentioned above.
Over time, we kept making revisions. Originally we were using a pulley system with double-servos to actuate the slide that presses down on frets. It was a horrible but necessary way to do what was needed to be done for the given resources at the time. We replaced that entire system with a pinion & rack system with a stepper for simplified controls and increased repeatability. A support was also added between two sides of the Cithara’s robotic arm along with replacement of single servo per joint with double servos per joint. We also made the decision to drop the adjustable clamp with a clamp we specifically designed and 3D-printed to hold picks in place.
We both learned a lot merging music with elements of computer, electrical and mechanical engineering. In future, we are planning to completely phase out the slide mechanism with another robotic arm that presses down on the frets just like a human player does.
Thank you Tony Tang for your help with the initial robotic arm design and thank you Evan Lowell for always being a good teammate!