We wanted a Sawyer arm that, given a Rubik's cube, can:
detect all 54 cells of the cube using computer vision
plan for a sequence of moves to solve the cube, and
execute these moves robustly
Vision: We use a webcam to get an image of one face of the cube. We developed a vision pipeline to recognize the color of each cell. The Sawyer arm then shows a different side of the cube to the webcam, and the whole process is repeated for all 6 faces.
Control and planning: Given a configuration of the Rubik's cube, the algorithm first constructs a virtual copy of the cube, then runs the classic Rubik's cube solving algorithm (Kociemba) to get a sequence of faces to turn at each step. Our planning algorithm then converts these instructions to a sequence of motions for the robot to perform. We then use feed-forward control to move the robot to desired locations.
Hardware: We designed a cube holder that 1) holds the cube in place as the robot re-orients the cube, and 2) facilitates Sawyer to turn the downward-facing layer of the cube if Sawyer grasps the top two layers.
Originally we wanted to design a custom gripper for holding the Rubik's cube, and two separate hardware pieces for holding the Rubik's cube and for turning the Rubik's cube, respectively. However, after initial experimentation, we realized that the Sawyer has limited reachable spaces and control can be unstable with complicated moves (ex. robot randomly swinging around). Thus, we opted to minimize the number of types of moves the robot can make, and used one holder for both holding in place and turning. We also simplified control so that only two motion primitives are required for the robot to solve the Rubik's cube: turning the cube and rolling the cube (more details in the next section). By doing this the control will be less prone to errors but the overall cube will take longer to solve.
For the gripper, we chose to retain the default gripper that was provided (parallel gripper with rubber), since we realized the rubber part is crucial for creating enough friction to maintain a grasp of the cube during transportation.
Our system is highly robust since we are only relying on a few motion primitives to interact with the cube. However, we lose some efficiency since now the robot needs to make more moves to move a certain face. In addition, while retaining the default gripper increases the robustness of maintaining grasp of the cube, we could have potentially used a custom-designed gripper to further increase the efficiency of the solving process.