Table of Contents |
---|
Overview
Before embarking on this subteam bootcamp, please ensure you’ve completed these instructions: Bootcamper Onboarding.
This bootcamp is in effect starting 2023-09-06 . If you are doing the Autonomy bootcamp, you are at the right place!
...
Create a post in the #auto-bootcamps forum to get started! You can ask for help there and notify the Autonomy bootcamp reviewers when you are done.
Setup
Dear WARG Bootcamper,
Congratulations and welcome to the AutoBots family! We're excited to have you on the team. I'll be sending you our onboarding documents soon, please feel free to get a head start on that.
Yours sincerely,
Jane Doe
VP of Human Resources
AutoBots
Git and GitHub
“I’m still waiting for QA to give me back my code [on the USB stick].” - Overheard at the water cooler
Include Page | ||||
---|---|---|---|---|
|
Forking
Create a personal copy of the repository by forking it.
If you haven’t already, create an account on GitHub. You can use either your UW email or something else. Otherwise, log in with the GitHub account you would like to use with WARG.
Click on the Fork button (towards the top right, above the About section).
Click on the green Create fork button.
GitHub redirects you to your own copy of the repository.
Git setup (General for all autonomy projects)
Include Page | ||||
---|---|---|---|---|
|
Cloning the repository
Go to GitHub and navigate to your copy of the repository, under your account. Do not go to WARG’s copy of the repository!
Include Page | ||||
---|---|---|---|---|
|
Python and virtual environment
“It’s fine, it works on my machine.” - Overheard in the software development cubicle farm
...
Include Page | ||||
---|---|---|---|---|
|
Activate the Python virtual environment
Include Page | ||||
---|---|---|---|---|
|
Install packages
Open
requirements.txt
MacOS: Remove
+cu117
from bothtorch
andtorchvision
the line containing--extra-index-url [link]
Windows and Linux:
If you have a CUDA capable GPU but don’t want to use it for some reason, change
+cu117
to+cpu
for bothtorch
andtorchvision
remove the line containing--extra-index-url [link]
If you don’t have a CUDA capable GPU, don’t change anything.
If you haven’t already, activate the virtual environment.
Download and install required packages:
pip install -r requirements.txt
This will install in your virtual environment under
venv
. The rest of your system is unaffected.
Done!
Directory
“I keep all my files in the recycle bin because they’re easier to get to.” - Overheard near the Director of Finance’s office
...
Do not import any additional libraries. The bootcamp is completable as is.
Development
“If it compiles, then it works, right?” - Top 10 moments before disaster
...
If you haven’t already, activate the virtual environment:
Windows command prompt:
venv\Scripts\activate.bat
Windows Powershell:
.\venv\Scripts\Activate.ps1
Linux and MacOS:
source venv/bin/activate
You should now see
(venv)
in the prompt line.Code away! Run .
Follow the instructions in the tasks below.
Code away! Run the tests! Please try to follow our style guide: Python Style Convention
Ask questions if you need help!
Make
Check which files have changed:
git status
Run: git sure the linter and formatter pass:
Running Black is sufficient for it to pass:
black .
Flake8 outputting nothing is a pass:
flake8 .
Pylint outputting a code rating of 10.00/10 is a pass (9.99/10 is not passing):
pylint modules
Make a commit:
Check which files have changed:
git status
Run:
git add [files you changed]
, where[files you changed]
are the files you want to add to the commit.Use
git add .
if you want to add all of them (the dot means wildcard in Git).
Run:
git commit -m "Your commit message"
When you’re ready to push your latest commits to GitHub:
git push
No harm in doing this after every commit.
When you’re done, make sure to either close the terminal or run:
Windows command prompt:
venv\Scripts\deactivate.bat
Everything else:
deactivate
This is important to avoid going to a different project and then accidentally polluting your current project’s virtual environment.
Optionally, you can also create new branches for yourself if you want to be more organized. You can search for git branch information online.
Windows Subsystem for Linux (WSL)
We do not recommend using WSL at this time because of several environment issues. You are free to make the attempt if you’re willing to encounter them (and if you solve them, please tell us). All Autonomy projects are currently cross platform so using Windows is perfectly fine.
...
This may not be necessary depending on whether you have WSLg already.
Submission and pull request
“LGTM” - Every pull request ever.
LGTM is an initialism for Looks Good To Me.
...
Navigate to WARG’s copy of the repository: https://github.com/UWARG/autonomy-bootcamp-2023
At the top, click Pull requests.
To the right, click the green New pull request button.
Under Compare changes, click the “compare across forks” link.
The 3rd from the left: Click the head repository dropdown and select your repository (you can search for your username).
The 4th from the left: Click the compare dropdown and select the branch you want to submit.
Do not open more than 1 pull request! The branch you select should contain (or eventually contain) all tasks which will be reviewed.
Once you have an open PR, you can keep updating the same branch as you get feedback. You do not need to open another PR.
Click on the green Create pull request button.
Once you have an open PR and are ready for review, go to your Discord bootcamp thread and send this message:
@Autonomy Lead My PR for the @AUTO-Bootcamp Reviewer My bootcamp is ready for review: [link to your PR on GitHub]
.The
@Autonomy Lead
ping is bright pink.The Autonomy Leads and/or bootcamp maintainers Autonomy bootcamp reviewers will review your PR (a message will be sent on Discord, and the comments will be on GitHub).
Read the feedback and go back to development. If any of the feedback is unclear or confusing, don’t hesitate to ask for clarification (make sure to send a message on Discord as well for visibility (e.g.
I asked some questions as replies on GitHub
).Please do not click on Resolve conversation for any of the comments that the reviewers may leave! It causes confusion for the reviewers since they use the resolved/unresolved state to confirm that the code meets the quality to their satisfaction. Instead, you can use a reaction or reply to the comment for your own tracking purposes.
If you are ready for another review, repeat step 8 (you do not need to open a new PR).
Once your review is fully complete and you’re done with the bootcamp, please follow the steps in New Member Onboarding to onboard to the team.
Tasks
Hi WARG Bootcamper,
Welcome to the team. I've taken the liberty of compiling some starter tasks to get you up to speed. They should be pretty easy to complete. Feel free to reach out if you have any questions.
Brian J. Smith, Ph.D.
Senior Manager, Software Development
AutoBots
...
Info |
---|
What’s wrong with exceptions? Exceptions are computationally expensive to catch, which is why the Autonomy coding style often uses result booleans and/or default values instead. While the Autonomy bootcamp program will not crash if your code raises an exception, it will cause an early (graceful) exit. Additionally, exceptions are difficult to reason about. An exception bypasses the call stack, making it difficult to determine where and why it is originally thrown (especially if caught and rethrown). |
Task 1: Implementing ML inference
SOFTDEV-804072
Migrate Landing Pad Detection to Ultralytics
Assignee: WARG Bootcamper
Reporter: Sangeeta Singh
Last updated: 2004-09-06
Start using the Ultralyics YOLOv8 library for model inference
See [2002 Annual Architecture Design Document]
...
From the repository root, try running pytest modules/bootcamp/tests/test_detect_landing_pad.py
. pylint modules
. You will notice that all the unit tests fail, because of the raised NotImplementedError
exception.
Info |
---|
What are unit tests? Unit tests are used to test individual components of a system independently. This makes debugging much easier and faster by quickly narrowing the scope of problems that will develop from a system's increasing scope and complexity. There are many unit test frameworks out there; the most popular are Google Test (for C++) and Pytest (for Python). Autonomy uses Pytest, which you can see in |
Your task is to implement the code in run()
to correctly identify landing pads. You can remove or comment out the NotImplementedError
line.
Once your code is correctly implemented, all tests should pass.
...
there are no issues and the code is rated 10.00/10 . Remove the Pylint ignore near the top of the file and run the command again. You will notice that the linter now reports several issues.
Info |
---|
What is a linter? Linters and formatters are tools that enforce a specific coding style. While there are several permutations of source code that result in the same program, standardization of the coding style is important for readability. Readability is important for collaboration, because others (including your future self) will be reading your code. However, linters and formatters are not magic; it is still possible to write bad code that follows the coding style. |
From the repository root, try running pytest modules/bootcamp/tests/test_detect_landing_pad.py
. You will notice that some of the unit tests fail.
Info |
---|
What are unit tests? Unit tests are used to test individual components of a system independently. This makes debugging much easier and faster by quickly narrowing the scope of problems that will develop from a system's increasing scope and complexity. There are many unit test frameworks out there; the most popular are Google Test (for C++) and Pytest (for Python). Autonomy uses Pytest, which you can see in |
Your task is to implement the code in run()
to correctly identify landing pads.
Once your code is correctly implemented, all tests should pass.
Info |
---|
Machine learning uses a LOT of memory (approximately 3-4GB of RAM). Make sure your computer has enough to spare. |
The linters and formatters should also pass.
Name | Command | Description | Passing criteria |
---|---|---|---|
Black |
| Black is a formatter that edits the code layout (e.g. indentation, multiline). | Running Black is sufficient for it to pass. |
Flake8 |
| Flake8 is a linter that reports whether function and methods are correctly type annotated. | Flake8 outputting nothing is a pass. |
Pylint |
| Pylint is a general linter. | Pylint outputting a code rating of 10.00/10 is a pass. It must be exactly 10.00 , so 9.99/10 is not passing. |
Info |
---|
I don’t know what to do! I have no idea what’s going on! When you get stuck, the first thing to do is to find documentation and examples. Then, experiment! Use the debugger and print statements to figure out what’s going on. If you’re still stuck, then reach out for help, bringing the information of what you tried and what worked/didn’t work. Independence and problem solving skills are important for the Autonomy subteam, as members are students volunteering their limited time, and often themselves don’t know either. That being said, we don’t expect you to know everything about the system from day 1, so asking questions is expected. |
...
Note |
---|
Hints:
|
Task 2: Running the simulator
Hey WARG Bootcamper,
I heard you just joined the team, welcome! I can give you a tour of the office. You should definitely check out the flight simulator, it’s pretty cool!
-Tajel
...
Note |
---|
Hints:
|
Task 3: Making the drone move to and land at a waypoint
SOFTDEV-377040
Command Drone to Travel and Land at Designated Waypoint
Assignee: WARG Bootcamper
Reporter: Patrick Khumalo
Last updated: 2001-01-15
Command the drone to move to the waypoint, and then execute landing procedure
See [Drone Expected Behaviour Document 1997]
...
Your task is to implement the code in __init__()
and run()
to travel to and land at the designated waypoint . You can remove or comment out the NotImplementedError
lineif the drone is within self.acceptance_radius
.
Once your code is implemented, the simulator should exit after the drone lands, which should occur within 60 seconds of start. The difference between the coordinates of the drone position and waypoint under the text file in log/
should be less than 0.1 . You can also confirm with the screenshot.
The linters and formatters should also pass.
Note |
---|
Hints:
|
Note |
---|
Bonus:
|
Task 4: Putting it all together
SOFTDEV-69716810
Integrate waypoint travel and local landing pad
Assignee: WARG Bootcamper
Reporter: Michael Slackenerny
Last updated: 2077-04-20
Drone travels to waypoint then closest landing pad then lands
See [Drone Expected Behaviour Document 1997]
...
Once your code is implemented, the simulator should exit after the drone lands, which should occur within 60 seconds of start. The difference between the coordinates of the drone position and the landing pad under the text file in log/
should be less than 0.1 . You can also confirm with the screenshot.
The linters and formatters should also pass.
Note |
---|
Hints:
|
...