The Moose is my entry for Design Competition 2019. It is designed for configurability in mind. The base design starts with the layout of the battery and the motors to determine the land pattern of the robot. The base board uses a grid of 0.5 by 0.5 in holes designed for 4-40 screws on a piece of acrylic 7 in by 7 in. By using a grid pattern, it allows the components to be moved and secured in place.
Each layer can be added by using standoffs, and this provides additional room to mount additional components.


Grabbing Mechanism

The robot uses a rack and pinion to extend a block that has a piece of tape on the front. By extending the rack, the robot can grab a block, and by retracting the rack, the robot can release the block.


Moose utilizes both dead reckoning and vive location sensing to determine its location. While the vive is accurate, it is noisy to 0.1 in, and the projection of the vive location does not match the plane of the playing field. An attempt was made to use a linear and a quadratic fit, but both these methods failed to produce any usable data.

Therefore, in order to navigate, Moose uses dead reckoning to determine its location from its previous location. The dead reckoning is based on time which Moose is moving forwards or backwards. Orientation is based on the BNO055 sensor which is very reliable, therefore errors from dead reckoning only come from slipping or jerking of the robot. Errors also come when the robot moves in a skewed direction because the motors are not at the same speed. Over time, Moose’s actual location will deviate from the position displayed on the GUI.


In order to fix this, calibration points are set up at each junction of the playing field and they are represented as dots in a grid in the GUI. Moose’s position is represented as a blue dot on the GUI. This method of representation allows the relative direction of each point to Moose to be determined approximately. When Moose reaches a calibration point, the number which represents the calibration point can be pressed, and it will cause the x and y coordinates of Moose on the GUI to be set to that point. Although the projection of the vive sensor is not accurate, it is quite consistent, so we know that Moose is at the calibration point, even when the dead reckoning data appears otherwise.

Where MOOSE is on the playing field represented in the GUI above

This overcomes difficulties in using the vive sensor and dead reckoning for movement by leveraging the relative advantages that each offers, the former having consistent readings, and the latter providing good short range location sensing. This combined allows for a fairly reliable method of navigating blind.


The battery was not locked down, causing the robot to shake when it started and stopped because it was the heaviest part of the robot.

The extender should have been programmed to extend further out. This would have prevented the robot from going too close to the edge

A weight should not have been added to the front of the robot.