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 19 (Friday) = Demonstrate ability for Robot to park correctly on candy dispenser mat using ARTag (Milestone 1 Description Below)
2. April 26 (Friday) = Demonstrate ability of Robot to navigate between dispensers and service stations using ARTags.
3. May 3 (Friday) = no class
4. May 6 (Monday) = CS189 Final Demonstration (9-12, B127)
5. May 8 (Wednesday) = SEAS Design Fair!
6. May 8 (Wednesday) or May 10 (Friday) = Paper, Video, and Code Due.
Figure 1: Candy Store Layout (Roughly. See Real Setup for final map)
Figure 2: Candy Dispenser Station (old drawing)
Milestone 1: Parking and Getting Candy. To get candy, we have built a dispenser that is activated by having the robot drive underneath it, triggering a motion detector sensor. Each dispenser location is marked by an ARtag so that your robot can orient itself relative to the dispenser. We also have Tupperware's to place on your robot, for catching the candy.
To correctly get candy without spilling, the robot should position itself in front of the dispenser, drive straight to get under the dispenser, wait for 5 seconds and then back out. Think of this as similar to making a self-charging robot that can drive onto its own charger -- orientation matters, so you can't do simple homing. Instead you need to come up with a strategy, where (1) the robot navigates from its current location to a point in front of the parking space, (2) then turns and drives straight under the dispenser to activate the motion sensor, (3) then waits 5 seconds until candy dispenses, (4) then backs out of the dispenser.
Your strategy will make use of ARtag information for relative positioning and simple path planning (like you did in Lab 4). We will test your robot by starting it in different positions relative to the dispenser, but no more than 3 body lengths away and with the ARTag is visible.
(Note that in the final testing your robot's laptop will be closed, and the Tupperware taped on top, but during debugging and testing you can place the Tupperware on the keyboard.)
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. Figure 1 gives an example layout --- the real layout will be set up in B127 and the dimensions are drawn on the whiteboard.
Your robot will start at a service station and take an order, then go get candy and bring it back, then wait for the next order. In more detail: (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 10 seconds until candy dispenses (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. Your robot can can use the ARtags to know where it is, and EKF when it can't see the ARTags, and you can pre-plan the paths between dispenser and stations and store it as a graph, or path plan in a different way. It is up to you to choose and implement something that works well in this 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.
Final Demonstration (May 6): Putting it all together, making it reliable and making it fun! Your final demonstration will be on May 6th. 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.
SEAS Design Fair (May 8, Optional): We have space at the SEAS Design Fair! Its optional but I am hoping that every group will be willing to present one of their problem sets or final project code pieces, e.g. you could demo your follower from Problem Set 3 or you could demo the Milestone 1 of the final project (we will have an enclosure and dispenser set up).
Final Paper, Video, and Code: This is due 2 days after the final demonstration or SEAS design fair if you participate (may 6 or may 10). 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. Note: For all parts of the paper, feel free to include actual code snippets or pseudocode or diagrams to illustrate your strategy.
(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 (1-2 pages): 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 (1-2 pages): Explain how you implemented the navigation between stations, 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 (.5 page): 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 (.5 page): 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.
(f) Ethics (1 page): You’re the founder of Fetch-Candy who has begun building candy stores. On the basis of our discussion of the values of work and of Rawls in the Embedded EthiCS module, please answer the following questions. (1 page total)
- What human jobs will be left at your candy stores? List between three and five. (One or two sentences)
For three values of work that we discussed in class: what are the inequalities between workers at your store in how much their work realizes each value? (3-4 sentences). As we discussed in class, this will involve a certain amount of empirical speculation. Since you are the owner of Fetch-Candy, you can determine some of these values, such as how much you pay your workers (for the value of income) or how many skills or how much social interaction each job involves (for the skill of developing one’s talent and community, respectively).
Pick what you take to be the most serious inequality. Is it justified by Rawls’ principle (i.e., does Rawls’ principle say that it’s acceptable)? If not, explain one change you could make to reduce the inequality, and why the change is a good one from the perspective of Rawls’ principle. (Rest of the page) Recall Rawls’ principle from class: All social goods should be distributed equally, unless an unequal distribution will help those who are worst off. Also recall that, as we talked about in class, we are applying the principle to a single context, that of the goods of work for employees at Fetch-Candy. Explain the principles/reasoning behind your answer; 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 (20 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 (15 points): Points will be assigned for well-written paper and use of interesting and well-thought out strategies (5), 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.