Sir Mix-A-Bot

Project information

During the first quarter of my master's project one of the core classes I took was embedded systems. The purpose of the class was to teach students how to interface with different robots using the Robotic Operating System, also known as ROS. As the capstone project teams of 5 students were formed with the task of using a robotic arm to achieve any task they so desire. My team and I used the 7 DOF Franka Emika Panda arm to create a robotic bartender, Sir Mix-A-Bot.

The goal was to set up a table of ingredients for the robot and a beer tray in front of it. The robot would then be told using written or vocal commands a drink from its menu. Once the robot had between 1-4 drink orders it would begin to prepare the drinks using the ingredients available. The robot used ROS alongside the MoveIt Robotic library to control the movement of the arm to the desired locations. These locations were made visible using a combination of April Tags and computer vision which involved colour detection.

My role on the team was that of integrator, as well as being in charge of coding the movement of the arm. As such I learned and developed my abilities to merge and resolve github merge commits, as well as learning how to take multiple pieces and assemble them into a cohesive whole. As the person in charge of coding the ROS nodes for the arm I learned in depth about using the moveIt library, as well as how to best interface with its path planning algorithm since that was one of the biggest challenges. Due to spillage being a big problem with this project the arm had to be ensured to be fixed for certain joints. However, combining that aspect with the face that the robot determined an optimal trajectory to get to its objective meant it would choose motions that would lead to it locking.

This challange was overcome through 2 methods, splitting the problem into repeating states, and fixing in relation to 3d space certain required positions. The problem ended up being split into: grab, pour, move to drink, and place back situations. This meant that whenever the robot was called to get a drink it would repeat this pottential tasks in some combination. On top of doing so to streamline the process of getting a drink to the user, we were also able to include a break position. This position tasked the robot to going to a certain location so that it would reset its joints in a position that allowed for the arm to reach the next tasked position using less of its array of motion. By doing so we were able to secure that the path planner would no longer choose convoluted routes, and that the drink could reach the user faster.

For a more detailed look into a code I encourage you to visit the attached github repository.