Your Goal: Welcome to the latest in Automated StoreFronts: FETCH-Candy! A candy store, where robots fetch you candies of your choice from dispensers and bring them to you. A robot greets you at the service station where you place your order, then it goes to the dispenser with the candy you chose, activates the dispenser, and brings the candy back to the service station for you to pick up. Many robots work at once, whizzing about, but never getting in each other's way, even taking turns at busy dispensers. Always polite and always chatty, they make sure you love the fetch candy experience! Inspired by FETCH Robotics!
Start your repository
1. April 13 (Friday) = Demonstrate ability for Robot to park correctly on candy dispenser mat using ARTag.
2. April 20 (Friday) = Demonstrate ability of Robot to navigate between dispensers and service stations using ARTags.
3. April 27 (Friday) = no class
4. April 30 (Monday) = Final Demonstration (1pm)
5. May 2 (Wednesday) = Paper, Video, and Code Due.
Figure 1: Candy Store Layout (Roughly. See Real Setup for final map)
Figure 2: Candy Dispenser Station
Milestone 1: Getting Candy. To get candy, we will build a dispenser that is activated by having the robot drive onto a mat with physical switches where the wheels must be placed. The dispenser location will be marked by an ARtag so that your robot can orient itself and drive onto the mat switches (see Figure 2). Think of this as being similar to having a robot drive onto its own charger for self-charging -- orientation matters, so you can't do simple homing. Instead you need to come up with a strategy, where the robot navigates from its current location to a point in front of the mat, then turns and drives straight onto the mat to activate the switches; your strategy will most likely make use of EKF, waypoint navigation, and AR tag position/homing.
Milestone 2: Navigating. In order to serve a customer, the robot must be able to navigate between a given service station (marked by an ARtag) and any of the given dispensers (marked by ARtags). We will give you a basic layout with the dimensions of the store, the service stations, the dispenser locations, and their ARtag IDs. Note that not all dispenser locations are directly visible from the service stations; there is one "wall" in the store. See Figure 2 for the layout.
Your robot needs to be able to navigate from a given service station to every dispenser tag and back. In the end the behavior should be something like this: (a) Start up the robot facing a service station ARtag; the robot should memorize that tagID as its service station. (b) Use ssh to give the robot a dispenser ID (c) the robot should go to that dispenser, park for 30 seconds (d) then come back to its service station and wait for the next order. There are many possible strategies you can use, both so that your robot knows where it is and knows how to get from one place to another. It is up to you to choose and implement one that works well in this given setting.
Milestone 3: Working together. There are three service stations, and at each service station a robot can be assigned. Therefore there will be at most 3 robots moving about at once. For this to work, firstly robots must not bump into each other while navigating in the open space. Secondly, if a dispenser is busy (there is a robot currently in it) then you must wait for your turn. There also might be people (us/you) walking in the store area during debugging and filming; the robot should be able to gracefully deal with that. Optional: You can add features to your robot, for example a speaker so that it talks to the customer. But most importantly, it should do the full task reliably. A simple ssh code interface is sufficient.
Final Demonstration: Putting it all together, making it reliable and making it fun! Your final demonstration will be on April 30th, starting at 1pm until 4pm. See Piazza for the team schedule. We will invite customers and have at most three robots operating at a time. Tests will include: (a) Your robot alone, moving from a given station to several dispensers and (b) Your robot with another robot, moving to different dispensers without colliding or getting stuck, and taking turns at the same dispenser.
Final Paper, Video, and Code: This is due 2 days after the final demonstration. For both your final paper and final video, it is important to explicitly explain your strategy for each of the milestones.
For your Final Paper (pdf please), you should have the following sections
(a) Summary (1 page): Explain the goal of the final project, a short summary of your overall strategy, and your assessment of your success/limitations
(b) Milestone 1 Strategy: Explain how you implemented parking into the dispensers using ARTags, e.g. how you dealt with differing coordinate frames and geometry and planning the path when the ARtag is not visible. Also how well did your strategy work, and what problems/limitations did you face.
(c) Milestone 2 Strategy: How you implemented the navigation between station, e.g. how did you encode the map, how was the path computed to get to a dispensers and to get back to the station. How well did your strategy work during testing and were there any particularly tricky cases.
(d) Milestone 3 Strategy: How did you implement collision avoidance (e.g. did you have a different strategy during parking vs navigation) and how did you deal with busy dispensers.
(e) Final Demonstration Assessment: How did your robot perform during the final demonstration, what went well, what went less well, and how did the behavior differ/confirm your expectations. What would you change or work further on if you were implementing this for a more extended use. Note: For all parts of the paper, feel free to include actual code snippets or pseudocode or diagrams to illustrate your strategy
(f) Ethics (1 page): Assuming that your candy store automation results in many jobs in this domain going away (e.g. monitoring/loading dispensers, fetching candy, maintaining store), what do you think is an appropriate action for society (or you as founder) to take: e.g. (1) Offer people job retraining? (2) institute a universal basic income? (c) Redistribute wealth so that too much capital doesn't become concentrated among the candy store shareholders (d) Something else. Given Kate's description of values that people derive from jobs, what values does your solution provide/not-provide. Explain the principles/reasoning behind your choice; we are looking for thoughtful replies rather than perfect solutions.
For your Final Video, you should include clips demonstrating each part of the system: Milestone 1 (e.g. parking from a couple different angles), Milestone 2 (navigating from a single station to a couple of dispensers), Milestone3/Final demonstration (your robot working with other robots). You can narrate in the video what is going on, or just use title slides to mark the different sections. Make a nice video! You won't regret it. It'll always be part of portfolio of work for you to show at interviews or on your webpage. We will use the video to assess your performance in addition to the final demonstration, in case unexpected things happen at the actual test.
Grading Scheme: (35 points)
Final demonstration (15 points): Points will be assigned based on the performance (reliability and accuracy) of fetching candy, starting from different stations and going to different dispensers, dealing with other robots, and of course catching the candy! We will first test the robot alone to determine how well it does on milestones 1 and 2, and then test multiple robots to see milestone 3.
Final paper/video and code (20 points): Points will be assigned for well-written paper and use of interesting and well-thought out strategies (10 total), nice video (5), and good code (5). Make sure your paper is well written so that we fully understand your strategies and outcomes. Also, make sure your code is commented enough for the TFs to follow how all the parts are integrated together. Upload your paper (PDF please) and video as part of your repository; if video is too large then upload to youtube and include a link in your paper.