We're freshmen at Brown with limited hacking experience, and the hacks we have done have been software ones. This time, we decided to try a hardware hack, and were inspired by the Janken robot, a rock-paper-scissors-playing robotic hand developed in Japan. The Janken essentially looks like a three-fingered hand: it uses a high-speed camera to recognize the plays its opponent (the human) is about to make and counters them 1 millisecond before the human completes their move. We aimed to adapt the premise of the Janken at low cost and without a high-speed camera, in a fraction of the time.
What it does
It plays rock-paper-scissors against you! Oh and it usually wins - challenge it ;)
How we built it
We used Autodesk Inventor to design the hand and then 3D-printed it. After prototyping some hinges we decided to build four fingers, which is an aesthetic improvement over the three-fingered Janken. The hand is made of PLA and printed using the provided MakerBot Replicator. Each finger consists of two joints, and the resting position of the hand is with all fingers extended, as a rubber band pulls a string that runs along the outer side of each finger. The fingers move by way of 9G servo motors, which similarly pull a string that runs along the length of the inner side of the fingers to contract them.
First, we had to figure out how to use the leap-motion, and then pass data from the sensor to the arduino. We accomplished this using a Java library and serial communication. The next and most crucial step was recognising what play the opponent was about to throw. Finally, we had to figure out how to calibrate the servos.
Challenges we ran into
- Recognising whether the player was playing rock, paper, or scissors in the fastest time possible: since the leap-motion tracks finger and hand positions, we had to test the response speed with several different position conditions. This was the most time-consuming step of our design process.
- Reducing lag between player movement detection and action
- Figuring out how to mount the servos on the hand
- Deciding which types of joints to use: with some help from mentor Ethan Mok, we sketched (and subsequently prototyped) various possible joint designs, taking into consideration print times, PLA expansion, ease of movement, the power the servo would need to exert in order to move them, etc.
- Predicting and accounting for 3D-printing times: during both the prototyping and final design phases, we had to pay particular attention to ensure that we used our limited time efficiently. We decided to print the hand as one piece instead of printing it one finger at a time; while this made the design process easier as we did not need to figure out how to connect the fingers, and could include grooves on the robot 'palm' for the servos to sit on, we ran the risk of having nothing to present if the 3D-print failed.
Accomplishments that we're proud of
Building a robotic hand! We adapted the core functionality of a robot that took a Japanese research team over three years to make in twenty-one hours. Additionally, one of the members of our group has no CS background, and this was his very first hackathon. Our proudest accomplishment, ultimately, is expanding our hacking skill set through this collaborative, immersive, iterative design process.
What we learned
- how to use a leap-motion
- making a leap-motion talk to an arduino
- servo control
- rapid prototyping
- moving a robotic hand using only rubber bands and 9G servos
What's next for RoboRPS
- Adding another degree of freedom by including another servo that can emulate wrist motions, and turning it into a crowd-pleaser by making it wave
- Adding an arm so it can dab
- Always winning
- A RoboRPS buddy for robot vs. robot matches?