Project 1: Wall Following

Due October 6th, 2023 at 11:59 PM.

For complete instructions about the project, see the Project 1 description on the main HelloRob website.

This project will be done in teams of two. The instructors will assign teammates.

Table of Contents

  1. Getting the Code
  2. Submitting your assignment
  3. Project Website
  4. Grading Breakdown

Getting the Code

One repository per team will be created for this project. Both teammates will have access to the repository and will be able to view it and make changes. Both teammates will share ownership of the code and receive credit for writing the code through the license file.

The invite link to accept the assignment on Github Classroom can be found on Slack.

The first teammate to accept will need to create a new team. The team must be named P1 F23 Team ##. Replace ## with the team number assigned to you (for example, P1 F23 Team 01, P1 F23 Team 11, etc.). The next teammate should join the team from the list of existing teams.

Create a Team for the GitHub Classroom assignment.

Submitting your assignment

Your submission for this assignment should include your code and a website portfolio of your project. The website should feature video demonstrations of your robot completing each of the two parts of this assignment and a brief discussion. The link to your website should be placed in the README of your GitHub repository. For details about what should be on the website, see Project Website. You should make one submission for your team. Teammates will be graded together. Your most recently pushed commit will be graded. You should push your code to the repository.

Modify the LICENSE.txt file to include the names of all teammates. Make sure the change is committed to your repository.

  • P1.0 (1 point): In the file LICENSE.txt, replace <COPYRIGHT HOLDER> with the names of all teammates, separated by commas. Replace <YEAR> with the current year.

Project Website

Create a website to demonstrate your implementation of the wall follower. The easiest method to create a website is to use Google Sites. You can instead create a project page on a GitHub repository, or use your favorite method to create a website. Note that if you chose to use GitHub pages, you will need to create a separate, public repository. Include at least one video demo of your wall follower as well as a brief summary and discussion of your algorithm. Add the link to your project page to the README.md file in the root of your repository and push it to GitHub.

Note: To include the video on the webpage, consider uploading your video to YouTube. Alternatively, you can upload your video to Google Drive (you have unlimited storage through your UM account). If you do this, make sure the link is accessible to the instructors when they access the web page.

Include a discussion section on the web page, where you discuss the following:

  1. Your choice of control algorithm (bang-bang or P-control)
  2. The strengths and limitations of the algorithm
  3. How you might improve the algorithm (include at least one idea)

Include images or videos whenever possible to illustrate your points. Keep the discussion brief: it should be no longer than a few sentences.

  • P1.2.4 (3 points): Create a web page for your wall follower project including at least one video demonstration and a discussion. Add a link to the website to the README.md file in your repository.

Grading Breakdown

Grades will be assigned as follows.

  • P1.0 (1 point): In the file LICENSE.txt, replace <COPYRIGHT HOLDER> with the names of all teammates, separated by commas. Replace <YEAR> with the current year.
  • P1.1 (2 points) DEMO: Demonstrate your robot driving in a square three times to a member of the course staff. You should write your code in the file drive_square.cpp. Commit and push your changes to GitHub.
  • P1.2.1 (2 points): In the file src/common/utils.cpp, complete the function findMinDist() so that it finds the minimum length ray in the given scan. Return the index of this ray.
  • P1.2.2 (2 points): In the file src/common/utils.cpp, complete the function crossProduct() to find the cross product between two vectors.
  • P1.2.3 (5 points) DEMO: In the file wall_follower.cpp, write a program that follows a wall using the procedure outlined above. You will need to use your functions findMinDist() and crossProduct(). For full points, your robot will need to successfully complete 2 laps around the course defined by the course staff.
  • P1.2.4 (3 points): Create a web page for your wall follower project including at least one video demonstration and a discussion. Add a link to the website to the README.md file in your repository.