├── .github └── workflows │ └── manual.yml ├── CODEOWNERS ├── LICENSE ├── README.md ├── doc ├── configure_via_anaconda.md └── linux_ros_anaconda_warning.md ├── environment.yml ├── jupyter_notebook_config.py ├── meta_windows_patch.yml └── run.sh /.github/workflows/manual.yml: -------------------------------------------------------------------------------- 1 | # Workflow to ensure whenever a Github PR is submitted, 2 | # a JIRA ticket gets created automatically. 3 | name: Manual Workflow 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on pull request events but only for the master branch 8 | pull_request_target: 9 | types: [opened, reopened] 10 | 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | 14 | jobs: 15 | test-transition-issue: 16 | name: Convert Github Issue to Jira Issue 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@master 21 | 22 | - name: Login 23 | uses: atlassian/gajira-login@master 24 | env: 25 | JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} 26 | JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} 27 | JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} 28 | 29 | - name: Create NEW JIRA ticket 30 | id: create 31 | uses: atlassian/gajira-create@master 32 | with: 33 | project: CONUPDATE 34 | issuetype: Task 35 | summary: | 36 | Github PR [Assign the ND component] | Repo: ${{ github.repository }} | PR# ${{github.event.number}} 37 | description: | 38 | Repo link: https://github.com/${{ github.repository }} 39 | PR no. ${{ github.event.pull_request.number }} 40 | PR title: ${{ github.event.pull_request.title }} 41 | PR description: ${{ github.event.pull_request.description }} 42 | In addition, please resolve other issues, if any. 43 | fields: '{"components": [{"name":"Github PR"}], "customfield_16449":"https://classroom.udacity.com/", "customfield_16450":"Resolve the PR", "labels": ["github"], "priority":{"id": "4"}}' 44 | 45 | - name: Log created issue 46 | run: echo "Issue ${{ steps.create.outputs.issue }} was created" 47 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Code Owners for Robotics Nanodegree Content 2 | # As of July, 7th 2017 3 | 4 | # Default Owner 5 | * @ryan-keenan 6 | 7 | # 1. Content Developer 8 | * @ryan-keenan 9 | 10 | # 2. Services Lead 11 | * mike.salem@udacity.com 12 | 13 | # 3. Program Lead 14 | * @cdlei 15 | 16 | # 4. Mike Wales 17 | * @walesmd 18 | 19 | * @udacity/active-public-content -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Udacity 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deprecated Repository 2 | This repository is deprecated. Currently enrolled learners, if any, can: 3 | - Utilize the https://knowledge.udacity.com/ forum to seek help on content-specific issues. 4 | - [Submit a support ticket](https://udacity.zendesk.com/hc/en-us/requests/new) if (learners are) blocked due to other reasons. 5 | 6 | 7 | [![Udacity - Robotics NanoDegree Program](https://s3-us-west-1.amazonaws.com/udacity-robotics/Extra+Images/RoboND_flag.png)](https://www.udacity.com/robotics) 8 | # RoboND Python Starter Kit 9 | 10 | Python 3 is used for the entirety of term 1. 11 | 12 | The recommended way to get up and running: 13 | 14 | ## [Anaconda Environment](doc/configure_via_anaconda.md) 15 | 16 | Get started [here](doc/configure_via_anaconda.md). More info [here](http://conda.pydata.org/docs/). 17 | 18 | Supported Sytems: Linux (CPU), Mac (CPU), Windows (CPU) 19 | -------------------------------------------------------------------------------- /doc/configure_via_anaconda.md: -------------------------------------------------------------------------------- 1 | # Configure and Manage Your Environment with Anaconda 2 | 3 | Per the Anaconda [docs](http://conda.pydata.org/docs): 4 | 5 | > Conda is an open source package management system and environment management system 6 | for installing multiple versions of software packages and their dependencies and 7 | switching easily between them. It works on Linux, OS X and Windows, and was created 8 | for Python programs but can package and distribute any software. 9 | 10 | ## Overview 11 | Using Anaconda consists of the following: 12 | 13 | 1. Install [`miniconda`](http://conda.pydata.org/miniconda.html) on your computer 14 | 2. Create a new `conda` [environment](http://conda.pydata.org/docs/using/envs.html) using this project 15 | 3. Each time you wish to work, activate your `conda` environment 16 | 17 | --- 18 | 19 | ## Installation 20 | 21 | **Download** the version of `miniconda` that matches your system. Make sure you download the version for Python 3.5. 22 | 23 | **NOTE**: There have been reports of issues creating an environment using miniconda `v4.3.13`. If it gives you issues try versions `4.3.11` or `4.2.12` from [here](https://repo.continuum.io/miniconda/). 24 | 25 | | | Linux | Mac | Windows | 26 | |--------|-------|-----|---------| 27 | | 64-bit | [64-bit (bash installer)][lin64] | [64-bit (bash installer)][mac64] | [64-bit (exe installer)][win64] 28 | | 32-bit | [32-bit (bash installer)][lin32] | | [32-bit (exe installer)][win32] 29 | 30 | [win64]: https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe 31 | [win32]: https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86.exe 32 | [mac64]: https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh 33 | [lin64]: https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh 34 | [lin32]: https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86.sh 35 | 36 | **Install** [miniconda](http://conda.pydata.org/miniconda.html) on your machine. Detailed instructions: 37 | 38 | - **Linux:** http://conda.pydata.org/docs/install/quick.html#linux-miniconda-install (Linux users please also see [this warning](https://github.com/udacity/RoboND-Python-StarterKit/blob/master/doc/linux_ros_anaconda_warning.md) about how to resolve potential conflicts between the different Python versions installed via Anaconda and ROS. 39 | - **Mac:** http://conda.pydata.org/docs/install/quick.html#os-x-miniconda-install (Mac users please see [this thread](https://github.com/jupyter/notebook/issues/2438) for possible issues with Jupyter if you have recently updated OSX) 40 | - **Windows:** http://conda.pydata.org/docs/install/quick.html#windows-miniconda-install 41 | 42 | **Setup** your `RoboND` environment. 43 | 44 | ```sh 45 | git clone https://github.com/udacity/RoboND-Python-StarterKit.git 46 | cd RoboND-Python-StarterKit 47 | ``` 48 | 49 | If you are on Windows, **rename** 50 | `meta_windows_patch.yml` to 51 | `meta.yml` 52 | 53 | **Create** RoboND. Running this command will create a new `conda` environment that is provisioned with all libraries you need to be successful in this program. 54 | **NOTE:** if you get an error when you try to run this command that `conda` doesn't exist, try closing and re-opening your terminal window. 55 | ``` 56 | conda env create -f environment.yml 57 | ``` 58 | **NOTE:** If the above command fails due to internet issues or timed out HTTP request then remove the partially built environment using the following command (then run the above `create` command again): 59 | ``` 60 | conda env remove -n RoboND 61 | conda env create -f environment.yml 62 | ``` 63 | **Verify** that the RoboND environment was created in your environments: 64 | 65 | ```sh 66 | conda info --envs 67 | ``` 68 | 69 | **Cleanup** downloaded libraries (remove tarballs, zip files, etc): 70 | 71 | ```sh 72 | conda clean -tp 73 | ``` 74 | 75 | ## Using Anaconda 76 | 77 | Now that you have created an environment, in order to use it, you will need to activate the environment. This must be done **each** time you begin a new working session i.e. open a new terminal window. 78 | 79 | **Activate** the `RoboND` environment: 80 | 81 | ### OS X and Linux 82 | ```sh 83 | $ source activate RoboND 84 | ``` 85 | 86 | ### Windows 87 | Depending on shell either: 88 | ```sh 89 | $ source activate RoboND 90 | ``` 91 | or 92 | 93 | ```sh 94 | $ activate RoboND 95 | ``` 96 | 97 | That's it. Now all of the `RoboND` libraries are available to you. 98 | 99 | ### However, If you are a Linux user with ROS installed (or planning to install ROS natively on your system) please see [this warning](https://github.com/udacity/RoboND-Python-StarterKit/blob/master/doc/linux_ros_anaconda_warning.md) about how to resolve potential conflicts between the different Python versions installed via Anaconda and ROS. 100 | To exit the environment when you have completed your work session, simply close the terminal window. 101 | 102 | ### Uninstalling 103 | If you ever want to delete or remove an environment 104 | 105 | To **delete/remove** the "RoboND" environment: 106 | ``` 107 | conda env remove -n RoboND 108 | ``` 109 | 110 | --- 111 | -------------------------------------------------------------------------------- /doc/linux_ros_anaconda_warning.md: -------------------------------------------------------------------------------- 1 | ### A Warning to Linux users who already have ROS installed: 2 | 3 | Upon completion of the Anaconda install, you should have a new Anaconda environment called `RoboND` with all the packages you need. However, if you have ROS installed on your Linux machine you will most likely run into a conflict between Python installations due to the `PYTHONPATH` variable being set in your `/opt/ros/kinetic/setup.bash` file which gets sourced in your `.bashrc` file. 4 | 5 | The hallmark of this conflict is getting an import error when you go to import packages that you just installed using Anaconda. To test whether you have this problem, first you fire up Python at the command line: 6 | 7 | ```sh 8 | $ python 9 | Python 3.5.2 |Anaconda custom (x86_64)| (default, Jul 2 2016, 17:52:12) 10 | [GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin 11 | Type "help", "copyright", "credits" or "license" for more information. 12 | >>> 13 | ``` 14 | Next you go to import a package (OpenCV or `cv2` in this case) and you get an `ImportError` like this (or similar): 15 | 16 | ``` 17 | >>> import cv2 18 | Traceback (most recent call last): 19 | File "", line 1, in 20 | ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type 21 | ``` 22 | 23 | The problem here is that Python is looking for a package in `/opt/ros/kinetic/lib/python2.7/dist-packages/` when it should be looking in the Anaconda installation directories. The reason for this is that with your ROS install, your `.bashrc` file contains the line `source /opt/ros/kinetic/setup.bash`, which sets your `PYTHONPATH` variable to the `/opt/ros/kinetic/...` location. 24 | 25 | The solution is to unset your `PYTHONPATH` variable before sourcing your Anaconda environment: 26 | 27 | ``` 28 | $ unset PYTHONPATH 29 | $ source activate RoboND 30 | ``` 31 | And it should work! But in this case, you'll need to remember to do this each time you want to use your Anaconda Python install. 32 | 33 | For a more permanent solution, you can add the `unset PYTHONPATH` line to your `.bashrc` file, but you need to make sure you drop it into the right location, after sourcing ROS. To do this, open your `.bashrc` file (should be located in your `~/` directory) and find the line that says `source /opt/ros/kinetic/setup.bash` and make this edit: 34 | 35 | ``` 36 | source /opt/ros/kinetic/setup.bash 37 | unset PYTHONPATH 38 | ``` 39 | 40 | See [this post](https://stackoverflow.com/questions/43019951/after-install-ros-kinetic-cannot-import-opencv) and [this post](https://stackoverflow.com/questions/17386880/does-anaconda-create-a-separate-pythonpath-variable-for-each-new-environment) for more information on the matter. -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: RoboND 2 | channels: 3 | - https://conda.anaconda.org/menpo 4 | - conda-forge 5 | dependencies: 6 | - python==3.5.2 7 | - numpy 8 | - sympy 9 | - matplotlib 10 | - jupyter 11 | - nb_conda 12 | - opencv3 13 | - pillow 14 | - scikit-learn 15 | - scikit-image 16 | - scipy 17 | - h5py 18 | - eventlet 19 | - flask-socketio 20 | - seaborn 21 | - pandas 22 | - ffmpeg 23 | - imageio=2.1.2 24 | - pip: 25 | - moviepy 26 | - tensorflow==1.2.1 27 | - socketIO-client 28 | - transforms3d 29 | - pyqtgraph 30 | - PyQt5 31 | -------------------------------------------------------------------------------- /jupyter_notebook_config.py: -------------------------------------------------------------------------------- 1 | import os 2 | from IPython.lib import passwd 3 | 4 | c.NotebookApp.ip = '*' 5 | c.NotebookApp.port = int(os.getenv('PORT', 8888)) 6 | c.NotebookApp.open_browser = False 7 | c.MultiKernelManager.default_kernel_name = 'python' 8 | 9 | # sets a password if PASSWORD is set in the environment 10 | if 'PASSWORD' in os.environ: 11 | c.NotebookApp.password = passwd(os.environ['PASSWORD']) 12 | del os.environ['PASSWORD'] 13 | -------------------------------------------------------------------------------- /meta_windows_patch.yml: -------------------------------------------------------------------------------- 1 | build: 2 | ignore_prefix_files: True 3 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | . activate RoboND 4 | if [ -z "$1" ] 5 | then 6 | jupyter notebook 7 | elif [ "$1" == *".ipynb"* ] 8 | then 9 | jupyter notebook "$1" 10 | else 11 | exec "$@" 12 | fi 13 | 14 | --------------------------------------------------------------------------------