I design, CAD, prototype, and test hardware. Projects below, resume to the right.
At the end of the first semester of my junior year, my group was tasked with designing, building, and coding a LEGO Mindstorms robot that could complete a wide variety of missions on the surface of mars (two plywood sheets at different heights connected via ramp). We were given two weeks to complete this project before our performance date during our semester exam.
Initially, looking through the different missions, we realized that our robot had to have several qualities in order to be successful: first, our robot must be able to make accurate, consistent turns in order to stay on course. Secondly, our robot must be able to climb up an approximately 30° incline without slipping. Finally, our robot must be able to sense the environment around it in order to gauge what it should do next. First, we tackled the incline. Initial tests of just front or rear-wheel drive proved unsuccessful; however, when we switched to all-wheel drive, not only was our robot able to easily climb the incline, it could also make more accurate turns. Along with the all-wheel drive chassis, we also had to incorporate a variety of sensors and extra motors to accomplish different missions. We included a color sensor (for reading when our robot passed over certain lines), a gyroscopic sensor (for turning to certain angles), a touch sensor (to read when our robot was close to an object/wall, and a medium motor (to drop a ball for one of the missions). (Component overview can be found at the bottom)
As can be seen above, our code was extensive. We took a systematic, grid-like approach to coding our robot, coding it to always travel parallel to the board and always at low speeds (except for the inclines). This approach worked out very well for us and allowed our robot to traverse the entire board and accumulate 45 of the 40 mission points required without any human input. However, for our final run, we split our code in half as a precautionary measure in case things went wrong. Our code mostly consisted of minute motor movements followed by large motor movements enclosed in a loop that would end a criteria was met, ex. the color sensor sensed yellow or the gyroscopic sensor reached an angle of 180°. (Note that the code for playing "Jingle Bells" while resting is not included in the screenshot above as it would double the length of our code)
Over our testing and development period, many flaws were found and addressed in the design and code of our robot. One of these more major changes was changing our ball dropping mechanism from a spoon-shaped catapult to a more reliable mechanism where the ball was released and rolled down rails into its target. Along with that, for a period of time, our robot also was unable to go over a small bump on one of the ramps due to the color sensor's proximity to the ground. We were faced with the decision of raising the color sensor higher off the ground and losing accuracy or finding another way to scale that ramp. Eventually, via strategic electrical tape placement, our color sensor was tipped forward enough that our robot could make it over the bump and climb the ramp.
Our robot performed exceedingly well during our semester exam. We were able to score 45 points by touching and activating the communications array (10), placing the fuel core in the reactor (10), waiting in the drill zone for 5 seconds (5), descending and ascending from the dry river bed (10), driving up the ramp and touching the plateau (5), and moving one of the sample containers from its original position (5). Aside from the start, our robot only required human input once and even then, we did not have to change or run any new code. We were simply able to press run on the second half of our code and our robot completed the course. To watch our robot semester exam performance video, please visit tinyurl.com/MarsRoverProject.
Mindstorms Brick-- rover controller, powered and communicated with all sensors and motors
2x Large Motors-- powered the all-wheel drive for the left and right gear trains
Medium Motor-- powered a stopper keeping our ball from rolling out too early
Gyroscopic Sensor-- measured angles, used when turning
Color Sensor-- measured color of surface, used for reading when the robot passed over certain lines
Touch Sensor-- measured the state of push probe used to determine if our robot was up against a wall
Ball Dropper-- held the ball via a medium motor and when instructed to would release the ball to roll down rails at target