Day 1: Mon, Jan 6th
Team Roles: MechE - Vincent, Kath, Melody
Coding - Angel, Matt
For our first day, we built the Kit Bot out of the parts given in the lab so that our coders could begin playing with the software.
Our team started meeting over winter break to get a head start because most of us have other IAP obligations (mainly, UPOP and UROPs). We started bandying ideas around after looking through past wiki's, and CADed half of the robot. We ordered some supplies over break (and asked Ariel a lot of questions), but are still missing some.
Currently, we plan to finish CADing today. We also need to get MDF for the body of our robot ASAP, once we find a way to get to Home Depot...
Day 2: Tues, Jan 7th
When working on getting the Kit Bot to move today, we discovered that the set screw in the Kit Bot's hub was loosened. Unfortunately, the wiring was reversed so the bot drove the other way from intended.
Unfortunately, we haven't yet finished CADing our robot, but we're hoping to be able to start prototyping parts tomorrow if supplies come in :) (Namely, the rubber band roller, ramp, and anything else we have time for.)
Melody and Kath attended the SolidWorks tutorial, while Vincent got trained in laser cutting. We've signed up to get further shop and laser cutter-trained tomorrow.
Later in the night, we got the color sensor to work with the Arduino. However, we ran into problems using the Maple for the color sensor since the method pulseIn was implemented for the Arudino, but not the Maple.
In the meanwhile, the tablet got flung a couple of times since there were issues with the motor controller...
Day 3: Wed, Jan 8th
Now that both Melody and Kath finished their 2.670 shop training course, the whole team could attend the morning's lectures on the physics of the robot and PID.
Angel continued working on getting the Kit Bot to be fully functional - we replaced the faulty motor controller and things worked out a lot better.
Melody and Kath got shop and laser-cutter trained at the IDC (thanks to Charles!) so that we can finally start cutting things down to the right sizes we want.
We prototyped a conveyor belt mechanism to transport the balls up, but without extra parts that we didn't want to deal with, we realized that it wouldn't be strong enough to hold up the balls. Therefore, we decided to make a screw after all, which we had initially ruled out - over the weekend, perhaps?
On the bright side, we laser-cut the parts needed for the rubber band roller and turned a rod down to the right size to start prototyping the rubber band roller tomorrow.
Our Kit Bot can now successfully distinguish between whether a ball is red or green and start to drive towards it!
Day 4: Thurs, Jan 9th
On the software side, we worked on tracking the ball better and getting the gyro to work, as well as edge detection of the walls.
In other news, we got the rubber band roller to work! We had to make a few simple modifications to our original design in order for the ball to never get stuck, but it seems to work great now. (knock on wood)
We've also spent a good chunk of the day creating drawings getting ready to do a next round of laser cutting and mechanism prototyping. Because the lab isn't stocked with angle brackets, we made our own.
We laser cut our hopper up top. Like our rubber band roller, we had to make a few simple modifications to our original design to prevent the balls from being stuck.
Day 5: Fri, Jan 10th
Almost the end of the first week! We worked on prototyping a screw, and plan to finish prototyping our claw by the end of today. To that end, we worked on making the relevant part of the energy silo so that we could actually test it while the organizers start making the rest of the field pieces.
Day 6: Sat, Jan 11th
Lab wasn't open today, but we planed ahead and brought back a bunch of material to our dorm to keep working in the evening in our awesome Maker Space. During the day, we bought extra supplies from Home Depot (such as MDF, sandpaper) thanks to a ride from a friend. We added supports to our Archimedes screw.
Day 7: Sun, Jan 12th
The MASLAB organizers opened the lab today at 2PM (thank you!), so we went in to keep tweaking our mechanism prototypes. Sadly, we ran into a lot of problems with our screw in the afternoon/evening. Whenever we fixed one problem, another cropped up, leaving us no choice but to resort to lots and lots of duct tape and even more bandsawing. Finally, we got our prototype to work (with the ball exiting on the correct side), so we finished up the night by CADing in our changes to laser cut tomorrow.
In addition, we improved our claw by changing a couple of things from our first very rough iteration.
We left lab a bit earlier than usual today because three of our five team members (all of them MechE) have UPOP from 9-5PM tomorrow. However, the coders will still be in lab tomorrow, and the MechE's will join as soon as possible!
Ideally, we will be able to finish prototyping all of our mechanisms either tomorrow or Tuesday, so that we can start building our robot to finish a first iteration by the end of this week. Ambitious, perhaps, but it's better to set higher goals and not reach them than to not set goals at all.
Day 8: Mon, Jan 13th
At first, we tried to write our own Firmware and got some of it working, but then we decided to try using their libraries again. We didn't get Firmware working until really late today (around 5AM...), but then we worked on writing some of the code for the in-lab Olypmics checkoffs.
We made a holder for the ultrasonic, and finalized the CAD for the rubber band roller. We laser-cutted the screw changes we made yesterday (flap) and verified that it worked.
Day 9: Tues, Jan 14th
On the coding side, we got four out of the five Olympics checkoffs: moving five feet forward, orienting towards green and red balls, moving in a square, and stopping one foot from a wall!
We started on testing the ramp, but decided to finish tomorrow and wire the rubber band roller to run.
We're still working on finishing the CADing of the robot, taking into account all of the changes that we have made to the mechanisms.
Day 10: Wed, Jan 15th
In a familiar theme, we're still working on CADing our robot. Our plan is to be able to basically build our final robot once we're done with the CAD because we've already prototyped all the mechanisms. The only one that needs a lot more work than others is the energy silo.
On the software side, we continued to try coding wall-following, but are having issues, particularly with the ultrasonic sensors. They keep on disconnecting or failing to update so it is almost impossible to test our wall following algorithm or use the sensors at all.
Day 11: Thurs, Jan 16th
Second to last day of UPOP! Because the mock competition is tomorrow, we worked really hard to try and finish as much of the first two layers as possible (to at least be able to collect balls). We got to finalizing the CAD for the first two layers for our first full robot prototype and laser-cutting the parts out. However, when we started assembling in real life and not in SolidWorks, we noticed a few errors - i.e. the holes in the angle brackets weren't necessarily the same distance apart from the corner!
These were quickly fixed, but there wasn't enough time to finish wiring all of the electronics before it was way too late since we had to get up at 8AM tomorrow again...
Day 12: Fri, Jan 17th
LAST DAY OF UPOP!!! Sadly, we didn't end up being able to finish getting a driving robot by the time the mock competition ended today. We finished UPOP early today and got to the IDC at around 3:30PM or so. Even though we immediately started work on getting the rubber band roller assembled onto our ProtoBot, it took a bit longer than expected because of having to turn down the rod, etc. Instead of our original method of double-hubbing the motor to the rod, we followed Alex's advice and just used a lathe to drill a hole in the rod face-on, and then on the side with the drill press to make a threaded hole for a set screw.
Looking back, UPOP really took a lot out of our team this week. Three of us (Melody, Kath, and Vincent) did UPOP - aka the whole MechE part of the team. Our progress slowed considerably starting on Monday because UPOP was from 9AM-5PM everyday. This meant that we were exhausted by the time we returned to the lab shortly after dinner. The continual cycle of having to wake up early, actively participate in UPOP during the day, and stay late for MASLAB took its toll. We had tried to help mitigate this a bit by starting over winter break, but we're still not exactly where we want to be at this point in the competition.
Coding-wise, one of our two coders got pink eye and the other couldn't code in the interim that we took apart KitBot and were working on ProtoBot. The ultrasonic sensors are proving to be quite troublesome as they randomly output bad data or seem to make the Maple crash. We think around 50 man hours were wasted debugging the ultrasonics. Furthermore, at around 5AM, the Maple died so no code testing will be able to be done until we get a new one on Sunday. We did however, figure out how to use the relay, which will save us one motor controller as one of our motors does not need speed or direction control. We also started to tame the rat's nest of wires overpowering our robot.
Day 13: Sat, Jan 18th
Continuing a trend, lab wasn't open on Sat (today) so we brought back material to make a screw. (Last Saturday, we only made a prototype screw half the height of the actual one.) We measured out the length of wire, bent it, set the correct spacing, and added supports. The adhesive smelled extremely bad, as usual...but we finished!
Unfortunately, THE MAPLE BURNT OUT early Saturday morning (or late Friday night), so no progress on the coding side got done.
Day 14: Sun, Jan 19th
Lab opened at 3PM today, so we came in and started laser-cutting the supporting parts of our screw once we clarified some dimensions in the CAD. Since the lab ran out of Maple's, minimal progress on the code was made. We attempted to write our own code to test wall following using an Arduino Uno, but various issues such as the Uno only having 2 interrupt pins prevented us from making much progress. We tested out infrared sensors as potential alternatives to the ultrasonics, which kept giving garbage data or crashing the Maple randomly.
However, the ranges provided by the infrared were not what we needed, as we need to be able to measure distances accurately within a foot. We found out that the ultrasonic sensors that we had should not be powered through all the pins at once. According to the datasheet, we were to connect the ground before the power, which completely befuddled us. We decided that we would use a relay to provide power after the ground was connected. Then, we sent an email to all of the MASLAB teams asking to borrow a Maple from anyone who had an extra.
Fortunately, Team 13 (shout-out to Felix!!!) lent us one, earning our eternal gratitude. A few other people also responded offering to help, for which we are extremely grateful. Thanks for showing that MIT isn't cut-throat, even in intense competitions like MASLAB! :)
Day 15: Mon, Jan 20th
During the day, we continued to CAD, getting ready to laser-cut a more finalized body tomorrow.
For dinner, the team went out to Chinatown for a member's birthday - thanks guys! :)
After getting back, we - you guessed it - continued CADing at night. On a positive note, the member with pinkeye seems to have recovered!
Day 16: Tues, Jan 21st
Today, we almost finished all the electrical wiring and soldering so that the coders could start trying to drive the robot tomorrow and test their hundreds of lines of untested code.
We also worked more on our top layer - so close to being able to laser-cut it out!
After much deliberation, we've decided not to go for the energy silo and instead use the space on the second layer for a low-scoring mechanism. At the start of MASLAB, we thought the energy silo was a red herring but decided to try and design something anyway. Although it kinda worked, we think that being able to score both high and low in the reactors is a bigger priority right now.
Day 17: Wed, Jan 22nd
The coders were able to start driving the robot late today, hooray! Unfortunately, after days and days of trying to get the ultrasonics to work, we've given up on their reliability...
On the MechE side, we built another Archimedes screw (pretty much our final one, will be used in Mock 2 on Friday) and got half of the low-scoring mechanism done. After laser-cutting the top layer, we realized that we had made a huge mistake - we couldn't actually assemble the top layer onto our robot because it was supposed to fit under two tabs that stuck out of our screw side walls (which looked fine in the CAD, but not okay in real life).
For now, we just dremeled the space out enough that it can fit under, and use the angle brackets to support the layer, as originally planned.
We have a lot to do tomorrow to get ready for the second mock competition!
Day 18: Thurs, Jan 23rd
WE SUCCEEDED IN ASSEMBLING THE PROTOTYPE BOT! We tweaked many, many things to get to that point. It's still not perfect, but that's why it's a prototype. First, we tested the rubber band roller and fixed the support ramp (by making a whole new one) so that it now almost always rolls into the screw perfectly. Then, we found several points where the ball got stuck in our new screw (mainly the top), so we lowered our rod support where the ball exited and it worked a lot better. We also extended our flaps that guide the exiting ball.
We finished the lower scoring mechanism, after much tweaking with angle (to prevent conflicting with the camera on the second layer and the ramp on the underside of our third layer) and hole positioning. We also assembled the whole top layer after changing the size of the Pacman and moving the guiding walls! However, there are stll a couple more things to work out with the top layer because it needs to combine seamlessly with our lower scoring mechanism on the second layer.
We didn't leave much time for the coders to work with our final robot, but they were able to work with a two-layer robot in the meantime.
Day 19: Fri, Jan 24th
In the mock competition, we managed to pick up two balls, but our code is far from done. The height of the robot off the ground in real life was slightly off from our initial calculations, so we may be changing our rubber band roller walls a bit. A lot of teams didn't pick up balls / weren't able to finish a driving robot in time...we're all really time-crunched.
The sponsor dinner is tonight! :)
Day 20: Sat, Jan 25th
After a late night for the mock competition, we took a little bit of a break today. The MechE's CADed in the evening and figured out how to fix our top layer ramp problem! Yay for maths - we just changed the pivot point so that the ball will now always go into either the high-scoring ramp or the low-scoring ramp based on what we want it to do (instead of getting stuck like before).
Day 21: Sun, Jan 26th
We went into lab to implement the changes we made to the ramp, and it worked! Coders continued to work on wall-following and debugging the numerous hardware issues (gyro, ultrasonics).
Day 22: Mon, Jan 27th
We actually finally, finally finished building our robot today! We had to re-laser-cut our first two layers because of some pretty significant changes (like changing the way the tablet was mounted and different ultrasonic positions), so much of the time went towards disassembly of our ProtoBot and assembly of our final robot. The last things the MechE's need to do is use an Arduino to control the servos up top for ball scoring.
Building our robot took much, much longer than expected, which meant that the coders only got the robot for half of the day today. However, the MechE's stayed late to try and finish everything so that the coders could get at least three full days to do as much testing as possible.
We think the competition will be decided not by whose mechanical design is best, but whose team is able to finish coding in time...
Day 23: Tues, Jan 28th
We found out that we can't use a second webcam we bought as a color sensor because there's not enough bandwidth on one USB root hub. That means that we are currently without a way to sort balls. For the seeding competition tomorrow, we'll just aim to pick up as many balls as possible and store them at the top. We researched alternatives and considered buying an actual color sensor, but ruled that option out because 1-day shipping for one would be too expensive. For now, we're thinking of just color-sensing at the bottom when we intake balls and then using a short IR sensor to determine if a ball has reached the top.
We also ran into problems with our rubber band roller motor interfering with our ultrasonics performance. When we ran the white Pololu 120:1 motor, the ultrasonics gave garbage data. Replacing it with the yellow Pololu 180:1 motor also didn't do anything, and neither did strategically placing magic metal (aka bendable aluminum) pieces to try and block any interference or adding larger filter capacitors to the power rails of the ultrasonics or the motor or running the motor from a separate power source. Finally, we decided to try the metal Pololu 29:1 motor and modify our rubber band roller walls to hold it in place. Unfortunately, that did not help. Thankfully, Erick went through the same problems and told us that he fixed the issues by powering motors all through the Cytron motor controllers. This seemed to mostly work, but the ultrasonic sensors still seemed to die after a minute of operation or so. However, it took up a lot of time to get to that point. Since we only had 3 Cytron motor controllers and were using two of the motor controllers for the drive system, we ran the Archimedes screw and the intake roller on the same motor controller.
After finishing this around 8AM (technically on the 29th), we began to work on getting together as much functionality of the robot as possible to maximize our performance.
We can kind of align with reactors, but we aren't planning on scoring on them for the seeding and instead focus on collecting as many balls as possible.
Day 24: Wed, Jan 29th
Seeding day! We quickly put in a few lines of code to communicate with BotClient, and scored 15 points our first time (2 red balls and 3 green balls = 12 pts + 3 pts). Unfortunately, we had collected a ball that then promptly fell out at the top because a part wasn't at the correct angle. Not completely satisfied, we tweaked the code a bit (and made sure the part was at the correct angle) before trying again - we scored 20 points this time (3 red balls and 2 green balls)!
There was a team which could actually score in reactors (kudos to them), so they got 30 points. A team that went after us picked up a few more balls and got 23 points, so we are currently seeded third? (Very possibly fourth if a team did better after we left.) We won't be getting a bye because only the top two teams get bye's, but we are overall quite happy with how we did. There's a lot more room for the code (and thus our score) to grow, so these are far from final! Of course, the same can be said for the other teams.
After the seeding, our coders quickly went to sleep as they just pulled together a 30 hour coding session. Little did they know that as soon as they woke up from their 8 hour nap, they would be going through another 30 hour coding session...
Day 25: Thur, Jan 30th
Today is D-Day as deemed by our coders. Beginning at a bright and early 4AM, they began with focusing on getting reactor alignment working well. Angel got that working while Vincent and Matthew worked on getting general navigation and ball collecting perfected by tuning the PID.
Things seemed to be going pretty poorly a couple hours before midnight, so Melody and Kath made an emergency trip to Radio Shack to get limit switches in case we had to implement them to prevent the continuous crashes that were plaguing our robot's wall following. Thankfully, this problem seemed to be avoided with some additional tuning.
In the final hour before impound, the coders got the reactor scoring reasonably integrated with ball collection and wall following. However, they were unable to implement scoring over the yellow wall as it seemed to sometimes detect blue walls as yellow walls.
At the very last minute before impound, disaster struck again. The USB connector on the Maple had two of its pins disconnected from the Maple! Thankfully, we were able to get a replacement Maple from the staffbot. At this point, we have experience hardware issues with every piece of electronics on our robot...
Day 26: Fri, Jan 31st
Competition day! We were very lucky to get a nice seeding. Unfortunately, our reactor scoring seemed to be misbehaving in the new lighting conditions. At the very least, our ball collection and wall following seemed to work well and eventually, we ended up in the finals! We decided to take a risk and implement aggressive reactor scoring as the team we were facing were scoring too many points for us to match by solely collecting balls. This turned out to be a mistake, as our robot ended up not doing much at all. Nevertheless...
Given all the hardware troubles we dealt with all month, we were extremely pleased with the results. We all learned a lot and had a blast at the same time.
We would like to thank all the other teams for helping make the competition a blast.
We would like to thank the staff for putting in so much hard work to put together MASLAB and give us a fun and great learning experience.