Team 3 - Skrub Wreckers

"Rek or get rekt. There is no try"

Team members

  • Lilly Chin - '17 (Team Mom)
  • Kevin Morrow - '18 (Mr. MechE)
  • Andrew Reilley - '19
  • Eric Wieser - CME (Mr. Stealy)
  • John Zhang - '19

Our Robot - Stac-Man

Required listening


Color thresholding visualizations


Our Mascot - Skrubby the Rum Tum Wrecker

oh god why DAT BOSS DOE



Mon. 1/4/16

  • Start prototyping Eric's arm + peg idea that came up with over break
  • More discussion about arms, funnels, silos and knock down ideas
  • Get familiarized with upcoming system and firmware

Tue. 1/5/16

  • Kinda stuck because donít have CAD design yet
  • Eric and John are modding kitbot so that we have something to print
  • At first try modding kitbot, but decide to CAD own chasis
  • Solder stuff onto Teensy - works
  • Arm CAD basically done - thanks John

Wed. 1/6/16

  • Kitbot assembled
  • Basic electronics wired up with switches - Teensy works!
  • kmorrow finishing arm CAD and starting hopper CAD
  • Andrew and Lilly fleshing out software framework for robot - finished basic drive
  • Went on r/circlejerk

Thu. 1/7/16

  • John and Andrew got color sensor and camera working and basic cube detection set up
  • Laser cut chasis!
  • Got tablet working
  • Prototyping arm cut short by no servo code in TAMProxy :(
  • Splitting silo CAD between Kevin and John
  • Spiffed up website

Fri. 1/8/16 - Design Review

  • Kind of a slow day
  • Eric got some more vision stuff done
  • More debates on how the silos should look - basic cardboard prototyping and CADing
  • Design Review revealed 1) issues when cube is near wall (adjusting funnel design) and 2) torque of servo (think OK on this)
  • Got camera working on tablet!
  • Almost have a program running on tablet - dependency hell :(
  • Lilly got us out of dependency hell and we have code running on the tablet!!!!

Sat. 1/9/16

  • Everyone's busy until the evening
  • Eric got basic encoders working
  • Lilly working on basic PID
  • Andrew working on computer vision
  • Got a servo powered up and are pretty happy with our prorotyping silo system.
  • Final CAD started on - earlier CADs had a lot of errors, so paying technical debt

Sun. 1/10/16

  • Andrew and Eric got framework for getting planes to tell red and green apart. Got numbers out. Lots of vision progress! Testbench helping out a lot
  • Encoder issue where once run continuously, clogs up the packet line. Lilly debugging. Rate limiting seems to help, but possibly issue with TAMProxy
  • CAD rebuild mostly finished - aiming to check out and laser cut tomorrow
  • Wired up gyro
  • Got the Golden Wheels in Mario Kart 8, finishing up the Gold Standard :D
  • Basic PID work done for position. Velocity reading seems to be off, partly because of the packet issue earlier.
  • Finished Pikmin 3!


Mon. 1/11/16

  • Race against time to see if we can finish CAD as soon as possible (ideally by 2 PM). Silos are done - need final team design review, T-nuts and electronics mounting
  • Mitchell suggested playing around with ratio of Sketch loops to Packet Controller loops to try to fix Encoder issue, so we'll try that
  • Eric tuned the RGB values more
  • Andrew started writing odometry code
  • Whiteboarded out electronics layout and committed to a set of sensors for now. Getting close to using all of the pins
  • Did not manage to finish CAD by today (design review laid out more issue), but definitely by tomorrow

Tue. 1/12/16

  • CAD constantly "almost done" :( - this should be the last time though, just need to make jesus nuts and tabs
  • Lilly starting work on Feedback Motor
  • Andrew finished up Odometry
  • CAD done but got rekt by laser cutter out of commission.
Goals for the next couple of days
  • Tonight - get robot cut and assemble and wire it up
  • Wednesday - drive in a straight line
  • Thursday - drive from block stack to block stack - no picking up yet
  • Friday - debug the above

Wed. 1/13/16

  • ROBOT PARTS CUT! Assembly time!
  • Eric continuing to tune vision values more
  • First assembly done! Came up with some problems, but otherwise good to go.
  • On the recommendation of Kevin Morrow, almost bought Mitchell Gu's literally favorite servo
  • Made the Donald Trump sandwich
  • Kevin and Lilly wired and mounted all of the power electronics for the drive, including switch plate. Haven't tested it due to late hour.
Assembly things to fix
  • Countersink nuts in front / glue the front plants together
  • Mounting holes for servos
  • Fix a couple of Jesus nuts
  • Electronic board mounting holes aren't good

Thu. 1/14/16

  • Andrew and Eric and John laid out Teensy board, the drive and one of the arms
  • Servo code for arm written and tested with limits set
    • (need to edit the backboard / funnel a bit though)
  • Switch plate is really sexily convenient
  • Erons and Kevin made a scrum board for hardware changes because they have no souls
  • Hooked up drive and added basic manual control. Works pretty great!
  • Tried to hook up second servo - seems to be a bit jankier than the first one. Moment of silence for Pin 10
  • Team finally realizes that Eric is British

Andrew: "Go eat your crisps!"

Eric: [munches potato chips sadly]

Fri. 1/15/16

  • IR sensors acquired
  • Kevin remounts gyro
  • Teensy breakout cold solder joints removed - jankiness eliminated
  • Andrew throws together some autonomy code
  • Eric gets screen -> 3d vision stuff going
  • Robot throws cubes around autonomously

Sat. 1/16 - Sun. 1/17/16

  • No work got done due to Hunt and other diversions


Mon. 1/18/16

  • Basic code to move a set distance and look for cubes written. Optimizations like moving camera acquisition to background thread made.
  • Practice field made and testing started. Tentatively does a decent job autonomously moving from stack to stack (although only based on timing)
  • Kevin is super punchy today and continues to remember that Eric is British
Software goals for the next couple of days
  • Deal with stacks of blocks autonomously
  • Odometry working
  • IR working with wall-following
  • PID set up on Teensy side
  • Eric eating before 9 PM

Tue. 1/19/16

  • Odometry working! Nifty visualization helps prove this out
  • Connection issues with power. We soldered a new Teensy board and tried different power buses, but found out that the issue is more that the white connectors are super dicey. Perhaps change to a different connector
  • IR sensor with moving average working. Distance conversion measured but not yet coded.
  • Homemade color sensor (LED + photoresist) soldered up but needs to be mounted and tested
  • CAD team working on final iteration of robot design - hooks, silos, etc.
  • CAD team is getting super invested into the plot of Persona 4

Wed. 1/20/16

  • Cliffhorse was demoed by Eric
  • Team reaches new level of "cooperation" with passive aggressive commit messages
  • Eric adjusts odometry balancing between gyro and encoder using algorithim from SUPER SECRET PAPER!!! :O :O :O
  • Wrote code to keep robot at specific angle - P control by it self looks pretty good, especially considering this is Python side. Robot really fights us!
  • Lilly made mini testing rig with broken Teensy and get IR distance conversion working
  • mitchgu is the true carry of our team and informed us of free pizza :3
  • Also we did team recon and we realized that we really stupidly over built our hinges. kmorrow permanently passed out though
  • Andrew making nice GUI in PyGame for us to help debug and not have a million windows up
IR Todo
  • See if ultrashort and long IR and break beam can be used at same time / nearby.
  • Ditto if two IR beams pointed at each other can mess each other up
  • Figure out mounting for IR to point near front. Inset into funnel? Use the existing tabs along the outside with a new mounting bracket?

Thu. 1/21/16

  • Fixed continuous mode in TAMProxy - this took most of the day
  • First stab at Roomba code
  • CAD almost done - aiming for cutting tomorrow

Fri. 1/22/16

  • Roomba code needs more sensors, so color sensor, break beam and playing with the IRs have been done
  • CAD team keeps passing in and out of consciousness but really trying hard to make it by the 10 PM deadline
  • Barely made it to the laser cutter - cut about half of our robot
  • Confirmed that r/circlejerk is no longer Guy Fieri themed
  • Assembling new pieces

"Wait a minute, I'm a moron" - Eric

Eric: "Hey Mr. MechE, can you do this?"

Kevin: "Don't call me Mr. MechE"

Eric: "Ok Mr. MechE"

Sat. 1/23/16

  • Finished lasercutting. Check out that sexy spread!
  • Lilly finished prototyping the break beam
  • Andrew got the mapper working
  • Fixed odometry by adding minus signs
  • The coach and the mascot had dinner at Arianna's house!
  • Got all electronics mounted on new base.
  • Mounted break beam

Sun. 1/24/16

  • Mounted IR sensors
  • Wrote tentative wall following code. Works decently well, although need more IR sensors
  • Tested new arm and found it jams a bit. Need to make a few more modifications
  • Got color sensor work!
  • Put ultrashort IR sensors on the sides to help out with wall following
  • Had robot autonomously going around and picking up cubes!


Mon. 1/25/16 - Practice Competition

  • Made mapper look more like Pacman
  • Mounted break beams
  • Put ultrashort IR sensor on the back - should be completely done with wiring
  • RIP Pin 14 for unknown reasons
  • Jury rigged all the code bits all around into one "coherent" program
  • Finished assembling all the hinges
  • Wrote basic wall bouncing code
  • Did a lot of concentrated random debugging
  • Color thresholds and IR thresholds change a lot from dank Destiny lighting to brightly lit competition lighting
  • Derped around during the competition but successfully stacked a 5 high monocolor stack (9 cube multicolor stack)
  • Our GUI is mad sexy

"Why the f*** am I so stupid??" - Kevin

"If the remark I made about being a moron goes on the blog, I think that quote should be up there too" - Eric

"That box is the funniest thing I've seen all IAP" - some other MASLAB team

Massive list of TODOs
  • Make our own bumps and deal with a non-flat field
  • Deal with hallways and internal walls?
  • Add time elapsed to GUI
  • Open door needs to make sure that there is enough space in front of the robot
  • Front IR vs. camera for cubes in front
  • Front IR for wall detection
  • Intelligent "searching for cubes" so that we don't turn 270 degrees to the right
  • Color sensor calibration :(
  • Improve ground clearence (grind / sand off an 1/8" off of the robot)
  • Save path for odometry
  • Use the map text file!!!
  • File center corner off of arm slot
  • Hack saw an inch off of the box
  • Test purple platform soon

Tue. 1/26/16

  • Moved from Destiny kitchen to the IDC because dat lighting doe
  • Made 6 stack successfully with 7 in possession
  • Andrew added a handy "sensor level" tab to our GUI
  • Eric rewrote our program, improving our async / locking multitasking so we don't have "yields" everywhere
  • Have ability to note where cube stacks are
  • Lilly wrote code to adress the opening door issue
  • RIP stack servo. RIP hinge in the process
  • Andrew wrote code to drive around and color calibrate ourselves - untested though
  • Kevin changed arm and fixed jamming problem
Another massive list of todos:
  • Front IR really needs to work
  • Mount ultrashort IR on the side for wall-following
    • Also helpful for "If see cube on the right, but also wall on the right, then wall follow, not go for the cube" (Ditto for turning)
  • Add PID for turning!
  • Make turning search speed faster
  • Make smart turning a thing
  • Need to test with island in the middle and all stacks on one side (wall boucning won't get us that)
  • Faster arm speeds
  • Make start button work
  • Swap for shorter arm
  • Faster forward speed
    • Have a odometry time out??
    • Especially, we don't handle internal corners well AT ALL
  • Double check clean up code (always running 360)
  • Back door jams on bumps right now

Wed. 1/27/16

  • Executive decision to not go for the purple platform, because don't have enough time to develop code for it and don't want to risk losing possession points
  • Redesigned and rebuilt large box to stay within perimeter
  • Keep burning out servos on the stack, so changing that into same latch mechanism as planned for dump
  • Ultrashort on side is not good enough to prevent side wall stuck. Since consistently sticking into one side, we're adding a stiff wire bumper + limit switches around the perimeter
  • Put camera and PID onto separate threads because putting them on thsame thread was interefering too much with each other
  • Knocking out a ton of stuff on the TODO lists
  • Made bumpers out of clotheshangers - works pretty well! Modified "avoid wall" code to keep this into account
  • Lilly wrote wall following code - untested
  • Found out people thought we lived in the basement of Random instead of Destiny kitchen :'(
  1. Fix break beams (shroud? calibration? etc.)
  2. Calibrate break beam and color sensor
  3. Test wall following / islands in the middle
  4. Add time elapsed to the GUI
  5. Double check if the flexible tab in the stack tower actually works
  6. Test the latch on the stack tower
  7. Deal with collisions in the front when we have a normal time out (A)
  8. Odometry Timeout (B)
  9. Intelligent turning with break beams
  10. Test the whole thing without excuses!!! (C)
  11. Do something different with current time outs

(A) Ex. if we have a timeout, check the front sensors if we're at a wall. If we are, then let's back up. Could use the camera for this

(B) (If we've sent some command to go for a while and haven't moved on ododmetry, then assume we're stuck and do something else) (This won't fix if we're slipping, but we did see a case where we were pinning a cube against the wall)

(C) Run end to end with no problems - from turning on the robot to opening the stack door. Always check: Hallways, islands, corners both external and internal

Thu. 1/28/16 - Day before the Competition

  • Painted the robot! wheee pacman
  • Andrew wrote simple program to plot and sample color and break beam values in order to better calibrate values
  • Calibrate camera values (because of the new yellow paint job)
  • Tested latch
  • Break beams really don't do well in the spot lights because emit a ton of IR
  • Decide to replace our break beams with ultrashort IR.
  • After burning out our 3rd silo door servo, replaced it with the extremely complex technology of the rubber band
  • Soldered up final changes to circuit board
  • Wheels keep falling off - we're really nervous about them
  • Able to deal with islands just fine. The bumps are not that great, but 26-100 doesn't have them
  • Restructured code again after realizing that the architecture is a bit off
  • Got wall bouncing working. Made a pathological field so it doesnt work super well though
  • Stayed up until 5 AM getting everything working X_X
  • Several Beantown runs and buying GIANT Reese's Cups from the gas station convenience store
  • Think that we're pretty good and prepared for tomorrow!

Andrew: "When its 5 AM the night before the competition, you don't make hardware changes"

Eric: "Kevin's making a hardware change as we speak..."


  • Got up bright and early after only 3 hours of sleep
  • Field is wide open so it looks like we'll be pretty good :3
  • Minor issues with flexing in one of the rounds
  • Bumper got jammed shut for half of the quarter finals

Final Notes and Suggestions

  • Be really open about giving up your ideas. Teams seemed to tend to latch onto things, but you should be able to give up an idea if it's not working
  • Think carefully about whether state machines are the right solution.
  • If your servos burn out twice, dont replace them again.
  • If you can have a passive mechanism, don't use an active mechanism
  • Just because you have a shiny 3D printer doesn't mean you have to use it
  • Prototype hardware early and often. Using our first day to make a little balsa wood arm definitely helped us go really fast early on
  • Use the logger module to debug stuff
  • Be a major developer of TAMProxy
  • Have spares of everything
  • Dont hestitate to use manual tools on your robot
  • Check clearances. Then check them again. Better yet, do it in the CAD and not after you made it
  • Buy a USB extension cable for tether testing
  • Use a stripboard, not a breadboard so that your wires don't go everywhere
  • Start early!!
  • Use numpy for vision processing. Don't use Python loops to go over every pixel
  • UPDATE YOUR JOURNAL -- I'm looking at you other teams... >:(
  • Don't write your vision in C++ if you dont know how to link it to your Python
  • Use version control (properly) to keep track of your software!
  • Collaborative CAD is not really a feature in Solidworks, so the best thing to do is to cram all of the CAD team into one room. We got most of our work done this way.

Parting Words

Kevin: "Accept that some things might be software problems"

Eric: "Fix them in hardware anyways"

John: "Get things prototyped really early. Have the whole team involved so that you can see the issues come up early and that software knows what they want to do"

Andrew: "Try to do something everyday. Even if you have something all day and can only be with the team for half an hour, come and work for a bit so that you dont fall behind"

Lilly: "Keep the big picture in mind. It's easy to get sidetracked or start digging into one problem and forgeting how it all fits together. Having one person making sure that the team is always focused is really helpful."

Coach Erons: "Sun Tzu said "Many calculations mean victory; few calculations mean no victory; then how much worse when there are no calculations? ""

Skrubby the Rum Tum Wrecker: "Win or lose, stay fabulous"

Anonymous: "Beat Mario Kart early so you have the rest of the month to work"

Anonymous: "Don't ask if your robot can fly. Apparently that's frowned upon???"

Anonymous: "Open Sesame?"

Anonymous: "Ohana means family."