The goal of this challenge was to create a robot that can pick up and deliver "grocery bags" of 100g each to three separate destinations along lines of tape. Two of the bags were collected from set locations, and one was placed randomly away from the navigation tape. Using the Pololu Romi chassis and 3D printed parts provided, we wrote a program with Arduino C to navigate with reflectance and ultrasonic sensors and collect "bags".
My main contribution to the team was designing and writing the state machine used to control the actions of the Romi. A state machine is an efficient way to separate various actions the robot needs to perform under certain circumstances, without requiring a list of consecutive tasks or a timer. Our state machine called various functions we wrote for line following, turning, and moving the servo to set positions as the Romi moved through the course.
The state diagram for controlling our robot
A free body diagram I drew of our robot lifting a "bag"
While the focus of the project was primarily software, we did get to choose the configuration of our lifting arm. In order to determine how much to leave sticking out, we set up a statics problem to solve for the torque on the servo horn and make sure we wouldn't burn it out. We ended up using a counterweight (a waterbottle filled with screws) in order to decrease the torque on the servo while raising the bags.