Remembering FRC: The 2015 Season

A gif of the robot picking up boxes.
Gif of the robot picking up boxes.

“The FIRST Robotics Competition (FRC) is an international high school robotics competition. Each year, teams of high school students, coaches, and mentors work during a six-week period to build robots capable of competing in that year’s game that weigh up to 125 pounds (57 kg). Robots complete tasks such as scoring balls into goals, placing inner tubes onto racks, hanging on bars, and balancing robots on balance beams. The game, along with the required set of tasks, changes annually” (“FIRST Robotics Competition.” Wikipedia, Wikimedia Foundation, 14 May. 2020. https://en.wikipedia.org/wiki/FIRST_Robotics_Competition).

The Robot

The task for the robot that my team built in 2015 was to pick up various objects (primarily Round Trip Totes) and stack them to form towers.

The robot was made up of a four-wheeled chassis with mecanum wheels, an elevator driven by a chain and sprocket attached to a motor, and two fingers actuated on a rail by pneumatics.

Video of the robot picking up chairs.

Mecanum drive

Mecanum wheels are comprised of a set of small angled rollers to contact the ground. When multiple of these wheels are in contact with a surface, it is possible to drive them in a way to apply force in any direction.

A chassis of four mecanum wheels has the ability to move in any direction along a flat surface without turning.

Picture of the URANUS omni-directional mobile robot from Carnegie Mellon School of Computer Science, a robot with mecanum wheels.
Picture of the URANUS omni-directional mobile robot from Carnegie Mellon School of Computer Science, a robot with mecanum wheels.

To move to the right, the angled wheels on the right side must drive towards each other and the left wheels should drive away from each other.

To move to the left, the left wheels drive towards each other and the right wheels drive away from each other.

Gif comparing wheel movement to robot movement.

Centering on a game-piece

When the human operators were attempting to pick up a Round-Trip Tote, from here on referred to as a box, they would have to accurately line the robot up with it. There was a small margin of error, of several inches. This was difficult for our operators to manage. To assist them, I worked on a routine that the operators could trigger with the press a button to line the robot up with the box autonomously.

The robot had four proximity sensors placed in a line on the front of the chassis to detect how a box was positioned in front of the chassis. The sensors were placed such that the distance between the outer two sensors was greater than the width of the box. The two inner sensors were used to obtain the angle of the box relative to the robot.

The routine would compare the difference between proximity sensors to get the angle of the box relative to the robot and then turn the chassis to eliminate the relative angle. It could then use the mecanum chassis to line up with the box side-to-side. The robot was lined up with the box when it is not detected by either of the outer sensors.

Gif of the robot aligning with box.

Calibrating The Elevator

We had built two almost identical robots for practice. They ran the same code, and we wanted to keep it that way for simplicity. One issue was that the sensors we used to detect the position of the elevator had a differing range of values between robots.

To deal with this issue I created a calibration sequence in which I would manually place the elevator at specific heights and pressed a button at each height to record the sensor values. The calibration sequence stored this data in a file on the robot to persist between power cycles. The operating program would read that file on startup to determine the appropriate sensor range for the elevator in use.

Kim is a self-taught programmer in the Minnesota area. Kim currently works as a full-stack developer while working on various crafts. Kim always has time to make a couple of loaves of bread.