├── .gitignore ├── Gemfile ├── Gemfile.lock ├── Guardfile ├── Makefile ├── README.md ├── S26_sorter_learning.ipynb ├── S64_driving_perception.ipynb ├── _bibliography └── references.bib ├── _build ├── .doctrees │ ├── README.doctree │ ├── _site │ │ ├── README.doctree │ │ ├── content │ │ │ ├── 01 │ │ │ │ ├── 1-Bayes-nets.doctree │ │ │ │ ├── Agents.doctree │ │ │ │ └── Planning.doctree │ │ │ ├── 02 │ │ │ │ ├── DiffDrive.doctree │ │ │ │ ├── Geometry.doctree │ │ │ │ └── Kinematics.doctree │ │ │ ├── 03 │ │ │ │ └── PlanarArm.doctree │ │ │ ├── 04 │ │ │ │ └── DuckieBot3.doctree │ │ │ ├── 05 │ │ │ │ └── SelfDrivingCar.doctree │ │ │ ├── 06 │ │ │ │ └── DuckieBot4.doctree │ │ │ ├── 07 │ │ │ │ └── DuckieBot5.doctree │ │ │ ├── LICENSE.doctree │ │ │ └── intro.doctree │ │ └── jupyter_execute │ │ │ └── content │ │ │ ├── 01 │ │ │ ├── Agents.doctree │ │ │ └── Planning.doctree │ │ │ ├── 02 │ │ │ ├── DiffDrive.doctree │ │ │ ├── Geometry.doctree │ │ │ └── Kinematics.doctree │ │ │ ├── 03 │ │ │ └── PlanarArm.doctree │ │ │ ├── 04 │ │ │ └── DuckieBot3.doctree │ │ │ ├── 05 │ │ │ └── SelfDrivingCar.doctree │ │ │ ├── 06 │ │ │ └── DuckieBot4.doctree │ │ │ ├── 07 │ │ │ └── DuckieBot5.doctree │ │ │ └── intro.doctree │ ├── content │ │ ├── 01 │ │ │ ├── 1-Bayes-nets.doctree │ │ │ ├── Agents.doctree │ │ │ └── Planning.doctree │ │ ├── 02 │ │ │ ├── DiffDrive.doctree │ │ │ ├── Geometry.doctree │ │ │ └── Kinematics.doctree │ │ ├── 03 │ │ │ └── PlanarArm.doctree │ │ ├── 04 │ │ │ └── DuckieBot3.doctree │ │ ├── 05 │ │ │ └── SelfDrivingCar.doctree │ │ ├── 06 │ │ │ └── DuckieBot4.doctree │ │ ├── 07 │ │ │ └── DuckieBot5.doctree │ │ ├── LICENSE.doctree │ │ └── intro.doctree │ ├── environment.pickle │ └── glue_cache.json ├── html │ ├── .buildinfo │ ├── README.html │ ├── _images │ │ ├── BN-BN.png │ │ ├── BN-BN1.png │ │ ├── BN-Simulation.png │ │ ├── BN-Simulation1.png │ │ ├── BN-X.png │ │ ├── BN-X1.png │ │ ├── BN-jointXY.png │ │ ├── BN-jointXY1.png │ │ ├── BN-topological-sort.png │ │ ├── BN-topological-sort1.png │ │ ├── Geometry_10_0.png │ │ └── Geometry_10_01.png │ ├── _site │ │ ├── README.html │ │ ├── content │ │ │ ├── 01 │ │ │ │ ├── 1-Bayes-nets.html │ │ │ │ ├── Agents.html │ │ │ │ └── Planning.html │ │ │ ├── 02 │ │ │ │ ├── DiffDrive.html │ │ │ │ ├── Geometry.html │ │ │ │ └── Kinematics.html │ │ │ ├── 03 │ │ │ │ └── PlanarArm.html │ │ │ ├── 04 │ │ │ │ └── DuckieBot3.html │ │ │ ├── 05 │ │ │ │ └── SelfDrivingCar.html │ │ │ ├── 06 │ │ │ │ └── DuckieBot4.html │ │ │ ├── 07 │ │ │ │ └── DuckieBot5.html │ │ │ ├── LICENSE.html │ │ │ └── intro.html │ │ └── jupyter_execute │ │ │ └── content │ │ │ ├── 01 │ │ │ ├── Agents.html │ │ │ └── Planning.html │ │ │ ├── 02 │ │ │ ├── DiffDrive.html │ │ │ ├── Geometry.html │ │ │ └── Kinematics.html │ │ │ ├── 03 │ │ │ └── PlanarArm.html │ │ │ ├── 04 │ │ │ └── DuckieBot3.html │ │ │ ├── 05 │ │ │ └── SelfDrivingCar.html │ │ │ ├── 06 │ │ │ └── DuckieBot4.html │ │ │ ├── 07 │ │ │ └── DuckieBot5.html │ │ │ └── intro.html │ ├── _sources │ │ ├── README.md │ │ ├── _site │ │ │ ├── README.md │ │ │ ├── content │ │ │ │ ├── 01 │ │ │ │ │ ├── 1-Bayes-nets.md │ │ │ │ │ ├── Agents.ipynb │ │ │ │ │ └── Planning.ipynb │ │ │ │ ├── 02 │ │ │ │ │ ├── DiffDrive.ipynb │ │ │ │ │ ├── Geometry.ipynb │ │ │ │ │ └── Kinematics.ipynb │ │ │ │ ├── 03 │ │ │ │ │ └── PlanarArm.ipynb │ │ │ │ ├── 04 │ │ │ │ │ └── DuckieBot3.ipynb │ │ │ │ ├── 05 │ │ │ │ │ └── SelfDrivingCar.ipynb │ │ │ │ ├── 06 │ │ │ │ │ └── DuckieBot4.ipynb │ │ │ │ ├── 07 │ │ │ │ │ └── DuckieBot5.ipynb │ │ │ │ ├── LICENSE.md │ │ │ │ └── intro.ipynb │ │ │ └── jupyter_execute │ │ │ │ └── content │ │ │ │ ├── 01 │ │ │ │ ├── Agents.ipynb │ │ │ │ └── Planning.ipynb │ │ │ │ ├── 02 │ │ │ │ ├── DiffDrive.ipynb │ │ │ │ ├── Geometry.ipynb │ │ │ │ └── Kinematics.ipynb │ │ │ │ ├── 03 │ │ │ │ └── PlanarArm.ipynb │ │ │ │ ├── 04 │ │ │ │ └── DuckieBot3.ipynb │ │ │ │ ├── 05 │ │ │ │ └── SelfDrivingCar.ipynb │ │ │ │ ├── 06 │ │ │ │ └── DuckieBot4.ipynb │ │ │ │ ├── 07 │ │ │ │ └── DuckieBot5.ipynb │ │ │ │ └── intro.ipynb │ │ └── content │ │ │ ├── 01 │ │ │ ├── 1-Bayes-nets.md │ │ │ ├── Agents.ipynb │ │ │ └── Planning.ipynb │ │ │ ├── 02 │ │ │ ├── DiffDrive.ipynb │ │ │ ├── Geometry.ipynb │ │ │ └── Kinematics.ipynb │ │ │ ├── 03 │ │ │ └── PlanarArm.ipynb │ │ │ ├── 04 │ │ │ └── DuckieBot3.ipynb │ │ │ ├── 05 │ │ │ └── SelfDrivingCar.ipynb │ │ │ ├── 06 │ │ │ └── DuckieBot4.ipynb │ │ │ ├── 07 │ │ │ └── DuckieBot5.ipynb │ │ │ ├── LICENSE.md │ │ │ └── intro.ipynb │ ├── _static │ │ ├── basic.css │ │ ├── clipboard.min.js │ │ ├── copy-button.svg │ │ ├── copybutton.css │ │ ├── copybutton.js │ │ ├── copybutton_funcs.js │ │ ├── css │ │ │ └── index.css │ │ ├── doctools.js │ │ ├── documentation_options.js │ │ ├── file.png │ │ ├── images │ │ │ ├── logo_binder.svg │ │ │ ├── logo_colab.png │ │ │ └── logo_jupyterhub.svg │ │ ├── jquery-3.5.1.js │ │ ├── jquery.js │ │ ├── js │ │ │ └── index.js │ │ ├── language_data.js │ │ ├── minus.png │ │ ├── mystnb.css │ │ ├── panels-bootstrap.min.css │ │ ├── plus.png │ │ ├── pygments.css │ │ ├── searchtools.js │ │ ├── sphinx-book-theme.css │ │ ├── sphinx-book-theme.js │ │ ├── sphinx-dropdown.css │ │ ├── sphinx-thebe.css │ │ ├── sphinx-thebe.js │ │ ├── togglebutton.css │ │ ├── togglebutton.js │ │ ├── underscore-1.3.1.js │ │ └── underscore.js │ ├── content │ │ ├── 01 │ │ │ ├── 1-Bayes-nets.html │ │ │ ├── Agents.html │ │ │ └── Planning.html │ │ ├── 02 │ │ │ ├── DiffDrive.html │ │ │ ├── Geometry.html │ │ │ └── Kinematics.html │ │ ├── 03 │ │ │ └── PlanarArm.html │ │ ├── 04 │ │ │ └── DuckieBot3.html │ │ ├── 05 │ │ │ └── SelfDrivingCar.html │ │ ├── 06 │ │ │ └── DuckieBot4.html │ │ ├── 07 │ │ │ └── DuckieBot5.html │ │ ├── LICENSE.html │ │ └── intro.html │ ├── genindex.html │ ├── index.html │ ├── objects.inv │ ├── search.html │ └── searchindex.js └── jupyter_execute │ ├── _site │ ├── content │ │ ├── 01 │ │ │ ├── Agents.ipynb │ │ │ ├── Agents.txt │ │ │ ├── Planning.ipynb │ │ │ └── Planning.txt │ │ ├── 02 │ │ │ ├── DiffDrive.ipynb │ │ │ ├── DiffDrive.txt │ │ │ ├── Geometry.ipynb │ │ │ ├── Geometry.py │ │ │ ├── Geometry_10_0.png │ │ │ ├── Kinematics.ipynb │ │ │ └── Kinematics.txt │ │ ├── 03 │ │ │ ├── PlanarArm.ipynb │ │ │ └── PlanarArm.txt │ │ ├── 04 │ │ │ ├── DuckieBot3.ipynb │ │ │ └── DuckieBot3.txt │ │ ├── 05 │ │ │ ├── SelfDrivingCar.ipynb │ │ │ └── SelfDrivingCar.txt │ │ ├── 06 │ │ │ ├── DuckieBot4.ipynb │ │ │ └── DuckieBot4.txt │ │ ├── 07 │ │ │ ├── DuckieBot5.ipynb │ │ │ └── DuckieBot5.txt │ │ ├── intro.ipynb │ │ └── intro.py │ └── jupyter_execute │ │ └── content │ │ ├── 01 │ │ ├── Agents.ipynb │ │ ├── Agents.txt │ │ ├── Planning.ipynb │ │ └── Planning.txt │ │ ├── 02 │ │ ├── DiffDrive.ipynb │ │ ├── DiffDrive.txt │ │ ├── Geometry.ipynb │ │ ├── Geometry.py │ │ ├── Geometry_10_0.png │ │ ├── Kinematics.ipynb │ │ └── Kinematics.txt │ │ ├── 03 │ │ ├── PlanarArm.ipynb │ │ └── PlanarArm.txt │ │ ├── 04 │ │ ├── DuckieBot3.ipynb │ │ └── DuckieBot3.txt │ │ ├── 05 │ │ ├── SelfDrivingCar.ipynb │ │ └── SelfDrivingCar.txt │ │ ├── 06 │ │ ├── DuckieBot4.ipynb │ │ └── DuckieBot4.txt │ │ ├── 07 │ │ ├── DuckieBot5.ipynb │ │ └── DuckieBot5.txt │ │ ├── intro.ipynb │ │ └── intro.py │ └── content │ ├── 01 │ ├── Agents.ipynb │ ├── Agents.txt │ ├── Planning.ipynb │ └── Planning.txt │ ├── 02 │ ├── DiffDrive.ipynb │ ├── DiffDrive.txt │ ├── Geometry.ipynb │ ├── Geometry.py │ ├── Geometry_10_0.png │ ├── Kinematics.ipynb │ └── Kinematics.txt │ ├── 03 │ ├── PlanarArm.ipynb │ └── PlanarArm.txt │ ├── 04 │ ├── DuckieBot3.ipynb │ └── DuckieBot3.txt │ ├── 05 │ ├── SelfDrivingCar.ipynb │ └── SelfDrivingCar.txt │ ├── 06 │ ├── DuckieBot4.ipynb │ └── DuckieBot4.txt │ ├── 07 │ ├── DuckieBot5.ipynb │ └── DuckieBot5.txt │ ├── intro.ipynb │ └── intro.py ├── _config.yml ├── _data └── toc.yml ├── _includes ├── buttons.html ├── buttons │ ├── binder.html │ ├── colab.html │ ├── download.html │ ├── jupyterhub.html │ ├── nbinteract.html │ └── thebelab.html ├── css_entry.scss ├── fb_tags.html ├── footer.html ├── google_analytics.html ├── head.html ├── js │ ├── interact-update.html │ ├── nbinteract.html │ ├── print.html │ ├── thebelab-cell-button.html │ └── thebelab.html ├── mathjax.html ├── metadata.json ├── page-nav.html ├── search │ └── lunr │ │ ├── lunr-en.js │ │ └── lunr-store.js ├── sidebar.html └── topbar.html ├── _layouts └── default.html ├── _sass ├── components │ ├── _components.book__layout.scss │ ├── _components.book__topbar.scss │ ├── _components.interact-button.scss │ ├── _components.page__footer.scss │ ├── _components.page__nav.scss │ ├── _components.page__onthispage.scss │ ├── _components.search.scss │ └── _components.thebelab.scss ├── hamburgers │ ├── _base.scss │ ├── hamburgers.scss │ └── types │ │ └── _arrowalt.scss ├── main.scss ├── objects │ └── _objects.thebelab-in-cell-button.scss └── page │ ├── components │ ├── _components.hidecells.scss │ ├── _components.page.scss │ └── _components.sidebar-right.scss │ ├── elements │ ├── _elements.links.scss │ ├── _elements.syntax-highlighting.scss │ ├── _elements.tables.scss │ ├── _elements.typography.scss │ └── _elements.variables.scss │ ├── generic │ └── _generic.phone-scrolling.scss │ ├── inuitcss │ ├── elements │ │ ├── _elements.headings.scss │ │ ├── _elements.images.scss │ │ ├── _elements.page.scss │ │ └── _elements.tables.scss │ ├── generic │ │ ├── _generic.box-sizing.scss │ │ ├── _generic.normalize.scss │ │ ├── _generic.reset.scss │ │ └── _generic.shared.scss │ ├── objects │ │ ├── _objects.block.scss │ │ ├── _objects.box.scss │ │ ├── _objects.crop.scss │ │ ├── _objects.flag.scss │ │ ├── _objects.layout.scss │ │ ├── _objects.list-bare.scss │ │ ├── _objects.list-inline.scss │ │ ├── _objects.media.scss │ │ ├── _objects.pack.scss │ │ ├── _objects.ratio.scss │ │ ├── _objects.table.scss │ │ └── _objects.wrapper.scss │ ├── settings │ │ ├── _example.settings.config.scss │ │ ├── _example.settings.global.scss │ │ └── _settings.core.scss │ ├── tools │ │ ├── _tools.clearfix.scss │ │ ├── _tools.font-size.scss │ │ ├── _tools.hidden.scss │ │ └── _tools.mq.scss │ └── utilities │ │ ├── _utilities.clearfix.scss │ │ ├── _utilities.headings.scss │ │ ├── _utilities.hide.scss │ │ ├── _utilities.print.scss │ │ ├── _utilities.responsive-spacings.scss │ │ ├── _utilities.spacings.scss │ │ └── _utilities.widths.scss │ ├── main.scss │ ├── objects │ ├── _objects.copy-button.scss │ └── _objects.tooltip.scss │ └── settings │ └── settings.global.scss ├── _toc.yml ├── assets ├── css │ └── styles.scss ├── custom │ ├── custom.css │ └── custom.js ├── html │ ├── index.html │ └── search_form.html ├── images │ ├── download-solid.svg │ ├── edit-button.svg │ ├── list-solid.svg │ ├── logo_binder.svg │ ├── logo_jupyterhub.svg │ └── search-solid.svg └── js │ ├── page │ ├── anchors.js │ ├── copy-button.js │ ├── documentSelectors.js │ ├── dom-update.js │ ├── hide-cell.js │ └── tocbot.js │ └── scripts.js ├── content ├── 01 │ ├── 1-Bayes-nets.md │ ├── Agents.ipynb │ ├── Figures │ │ ├── BN-BN.png │ │ ├── BN-Simulation.png │ │ ├── BN-X.png │ │ ├── BN-jointXY.png │ │ └── BN-topological-sort.png │ └── Planning.ipynb ├── 02 │ ├── DiffDrive.ipynb │ ├── Geometry.ipynb │ └── Kinematics.ipynb ├── 03 │ └── PlanarArm.ipynb ├── 04 │ └── DuckieBot3.ipynb ├── 05 │ └── SelfDrivingCar.ipynb ├── 06 │ └── DuckieBot4.ipynb ├── 07 │ └── DuckieBot5.ipynb ├── LICENSE.md ├── images │ ├── C-3PO_droid.png │ ├── logo │ │ ├── download.svg │ │ ├── edit-button.svg │ │ ├── favicon.ico │ │ ├── jupyter.png │ │ ├── logo.png │ │ └── logo.psd │ ├── monty_hall_goat.png │ ├── netlify-build.png │ ├── netlify-cd.png │ ├── netlify-domain.png │ ├── snow_map.jpg │ ├── snow_map2.jpg │ ├── tags_jupyterlab.png │ └── tags_notebook.png └── intro.ipynb ├── requirements.txt ├── runtime.txt └── scripts └── clean.py /.gitignore: -------------------------------------------------------------------------------- 1 | .gitignore~ 2 | _site/* 3 | 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | MANIFEST 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | 53 | # Translations 54 | *.mo 55 | *.pot 56 | 57 | # Django stuff: 58 | *.log 59 | local_settings.py 60 | db.sqlite3 61 | 62 | # Flask stuff: 63 | instance/ 64 | .webassets-cache 65 | 66 | # Scrapy stuff: 67 | .scrapy 68 | 69 | # Sphinx documentation 70 | docs/_build/ 71 | 72 | # PyBuilder 73 | target/ 74 | 75 | # Jupyter Notebook 76 | .ipynb_checkpoints 77 | 78 | # pyenv 79 | .python-version 80 | 81 | # celery beat schedule file 82 | celerybeat-schedule 83 | 84 | # SageMath parsed files 85 | *.sage.py 86 | 87 | # Environments 88 | .env 89 | .venv 90 | env/ 91 | venv/ 92 | ENV/ 93 | env.bak/ 94 | venv.bak/ 95 | 96 | # Spyder project settings 97 | .spyderproject 98 | .spyproject 99 | 100 | # Rope project settings 101 | .ropeproject 102 | 103 | # mkdocs documentation 104 | /site 105 | 106 | # mypy 107 | .mypy_cache/ 108 | 109 | # sass 110 | .sass-cache/ 111 | content/.DS_Store 112 | content/01/.DS_Store 113 | content/01/Figures/.DS_Store 114 | .DS_Store 115 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :jekyll_plugins do 4 | gem 'github-pages' 5 | gem 'jekyll-feed', '~> 0.6' 6 | 7 | # Textbook plugins 8 | gem 'jekyll-redirect-from' 9 | gem 'jekyll-scholar' 10 | end 11 | 12 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem 13 | gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 14 | 15 | # Performance-booster for watching directories on Windows 16 | gem 'wdm', '~> 0.1.0' if Gem.win_platform? 17 | 18 | # Development tools 19 | gem 'guard', '~> 2.14.2' 20 | gem 'guard-jekyll-plus', '~> 2.0.2' 21 | gem 'guard-livereload', '~> 2.5.2' 22 | -------------------------------------------------------------------------------- /Guardfile: -------------------------------------------------------------------------------- 1 | guard 'jekyll-plus', serve: true do 2 | watch /.*/ 3 | ignore /^_site/ 4 | end 5 | 6 | guard 'livereload' do 7 | watch /.*/ 8 | end 9 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: help book clean serve 2 | 3 | help: 4 | @echo "Please use 'make ' where is one of:" 5 | @echo " install to install the necessary dependencies for jupyter-book to build" 6 | @echo " book to convert the content/ folder into Jekyll markdown in _build/" 7 | @echo " clean to clean out site build files" 8 | @echo " runall to run all notebooks in-place, capturing outputs with the notebook" 9 | @echo " serve to serve the repository locally with Jekyll" 10 | @echo " build to build the site HTML and store in _site/" 11 | @echo " site to build the site HTML, store in _site/, and serve with Jekyll" 12 | 13 | 14 | install: 15 | # Check to see whether bundler is already installed. If not, install it. 16 | if [ hash bundler 2>/dev/null ]; then \ 17 | gem install bundler;\ 18 | fi 19 | bundle install 20 | 21 | book: 22 | jupyter-book build ./ 23 | 24 | runall: 25 | jupyter-book run ./content 26 | 27 | clean: 28 | python scripts/clean.py 29 | 30 | serve: 31 | bundle exec guard 32 | 33 | build: 34 | jupyter-book build ./ 35 | # --overwrite 36 | 37 | site: build 38 | bundle exec jekyll build 39 | touch _site/.nojekyll 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # robotics 2 | A jupyter book draft about robotics and factor graphs 3 | 4 | This repository now has been superseded by https://github.com/gtbook/robotics 5 | 6 | Book is live at https://roboticsbook.org 7 | -------------------------------------------------------------------------------- /_build/.doctrees/README.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/README.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/README.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/README.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/01/1-Bayes-nets.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/01/1-Bayes-nets.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/01/Agents.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/01/Agents.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/01/Planning.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/01/Planning.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/02/DiffDrive.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/02/DiffDrive.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/02/Geometry.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/02/Geometry.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/02/Kinematics.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/02/Kinematics.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/03/PlanarArm.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/03/PlanarArm.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/04/DuckieBot3.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/04/DuckieBot3.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/05/SelfDrivingCar.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/05/SelfDrivingCar.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/06/DuckieBot4.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/06/DuckieBot4.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/07/DuckieBot5.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/07/DuckieBot5.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/LICENSE.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/LICENSE.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/content/intro.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/content/intro.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/01/Agents.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/01/Agents.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/01/Planning.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/01/Planning.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/02/DiffDrive.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/02/DiffDrive.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/02/Geometry.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/02/Geometry.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/02/Kinematics.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/02/Kinematics.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/03/PlanarArm.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/03/PlanarArm.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/04/DuckieBot3.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/04/DuckieBot3.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/05/SelfDrivingCar.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/05/SelfDrivingCar.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/06/DuckieBot4.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/06/DuckieBot4.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/07/DuckieBot5.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/07/DuckieBot5.doctree -------------------------------------------------------------------------------- /_build/.doctrees/_site/jupyter_execute/content/intro.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/_site/jupyter_execute/content/intro.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/01/1-Bayes-nets.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/01/1-Bayes-nets.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/01/Agents.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/01/Agents.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/01/Planning.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/01/Planning.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/02/DiffDrive.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/02/DiffDrive.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/02/Geometry.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/02/Geometry.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/02/Kinematics.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/02/Kinematics.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/03/PlanarArm.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/03/PlanarArm.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/04/DuckieBot3.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/04/DuckieBot3.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/05/SelfDrivingCar.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/05/SelfDrivingCar.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/06/DuckieBot4.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/06/DuckieBot4.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/07/DuckieBot5.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/07/DuckieBot5.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/LICENSE.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/LICENSE.doctree -------------------------------------------------------------------------------- /_build/.doctrees/content/intro.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/content/intro.doctree -------------------------------------------------------------------------------- /_build/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/.doctrees/environment.pickle -------------------------------------------------------------------------------- /_build/.doctrees/glue_cache.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /_build/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: deb7e62fc90c14163a097ace8d597b5d 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /_build/html/_images/BN-BN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-BN.png -------------------------------------------------------------------------------- /_build/html/_images/BN-BN1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-BN1.png -------------------------------------------------------------------------------- /_build/html/_images/BN-Simulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-Simulation.png -------------------------------------------------------------------------------- /_build/html/_images/BN-Simulation1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-Simulation1.png -------------------------------------------------------------------------------- /_build/html/_images/BN-X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-X.png -------------------------------------------------------------------------------- /_build/html/_images/BN-X1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-X1.png -------------------------------------------------------------------------------- /_build/html/_images/BN-jointXY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-jointXY.png -------------------------------------------------------------------------------- /_build/html/_images/BN-jointXY1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-jointXY1.png -------------------------------------------------------------------------------- /_build/html/_images/BN-topological-sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-topological-sort.png -------------------------------------------------------------------------------- /_build/html/_images/BN-topological-sort1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/BN-topological-sort1.png -------------------------------------------------------------------------------- /_build/html/_images/Geometry_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/Geometry_10_0.png -------------------------------------------------------------------------------- /_build/html/_images/Geometry_10_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_images/Geometry_10_01.png -------------------------------------------------------------------------------- /_build/html/_sources/README.md: -------------------------------------------------------------------------------- 1 | # robotics 2 | A jupyter book draft about robotics and factor graphs 3 | 4 | Book is live at https://dellaert.github.io/robotics/intro.html 5 | 6 | Organization: 7 | - see [jupyter-book doc](https://jupyterbook.org/guide/01-5_tour.html) 8 | - book content is in content subdirectory as markdown or ipython notebooks 9 | - organized by *part*: 01...07 10 | - ipython notebooks can have markdown and code 11 | - the table of contents decides what is included and is in _data/toc.yml 12 | 13 | To create a new section: 14 | - create a markdown or ipython notebook 15 | - add entry to toc.yml 16 | 17 | Converting from overleaf lyx/latex 18 | - convert to latex 19 | - read [pandoc docs](https://pandoc.org/getting-started.html) 20 | - `pandoc --wrap=none -f latex -t markdown file.tex > file.md` 21 | 22 | To preview on a local machine: 23 | - `pip install jupyter-book` 24 | - `cd robotics` 25 | - `jupyter-book build . ` 26 | - `make serve` 27 | 28 | -------------------------------------------------------------------------------- /_build/html/_sources/_site/README.md: -------------------------------------------------------------------------------- 1 | # robotics 2 | A jupyter book draft about robotics and factor graphs 3 | 4 | Book is live at https://dellaert.github.io/robotics/intro.html 5 | 6 | Organization: 7 | - see [jupyter-book doc](https://jupyterbook.org/guide/01-5_tour.html) 8 | - book content is in content subdirectory as markdown or ipython notebooks 9 | - organized by *part*: 01...07 10 | - ipython notebooks can have markdown and code 11 | - the table of contents decides what is included and is in _data/toc.yml 12 | 13 | To create a new section: 14 | - create a markdown or ipython notebook 15 | - add entry to toc.yml 16 | 17 | Converting from overleaf lyx/latex 18 | - convert to latex 19 | - read [pandoc docs](https://pandoc.org/getting-started.html) 20 | - `pandoc --wrap=none -f latex -t markdown file.tex > file.md` 21 | 22 | To preview on a local machine: 23 | - `pip install jupyter-book` 24 | - `cd robotics` 25 | - `jupyter-book build . ` 26 | - `make serve` 27 | 28 | -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/01/Agents.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "02-DuckieBot2.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "colab_type": "text", 19 | "id": "dhzCZ0I5GY3q" 20 | }, 21 | "source": [ 22 | "# Agents\n", 23 | "* Robot: simulated\n", 24 | "* Sensor: noisy state\n", 25 | "* Think: plan, Markov localization, RL\n", 26 | "* Act: Discrete\n", 27 | "* Topics needed: RL graphs & KF\n", 28 | "* Factor graph concepts: planning, markov localization\n" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": { 34 | "id": "8-X8s5UZaZc2", 35 | "colab_type": "text" 36 | }, 37 | "source": [ 38 | "## Discrete States and Actions" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": { 44 | "id": "x1QDeESJaZc3", 45 | "colab_type": "text" 46 | }, 47 | "source": [ 48 | "## Classical Planning" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": { 54 | "colab_type": "text", 55 | "id": "4qUYcGjLGTaQ" 56 | }, 57 | "source": [ 58 | "## MDP\n", 59 | "A Markov decision process (MDP) has states $x$ and actions $a$..." 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "K5BtAxD9G2Au" 67 | }, 68 | "source": [ 69 | "## Reinforcement Learning " 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/01/Planning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "01-DuckieBot1.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "colab_type": "text", 19 | "id": "4qUYcGjLGTaQ" 20 | }, 21 | "source": [ 22 | "## Planning" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": { 28 | "colab_type": "text", 29 | "id": "nJHe8-v9A9wF" 30 | }, 31 | "source": [ 32 | "An outline:\n", 33 | "\n", 34 | "* States and actions in a discretized 2D world\n", 35 | "* Naive policies\n", 36 | "* Optimal policies and Dijkstra\n", 37 | "* Optimal trajectories and Graph Search\n", 38 | "* Finite horizon planning\n", 39 | "\n" 40 | ] 41 | } 42 | ] 43 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/02/Kinematics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "01-DuckieBot1.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "4qUYcGjLGTaQ" 21 | }, 22 | "source": [ 23 | "## DD kinematics" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": { 29 | "colab_type": "text", 30 | "id": "nJHe8-v9A9wF" 31 | }, 32 | "source": [ 33 | "Let's define wheel speeds $\\varphi_L$ and $\\varphi_R$." 34 | ] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/04/DuckieBot3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "04-DuckieBot3.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "colab_type": "text", 21 | "id": "dhzCZ0I5GY3q" 22 | }, 23 | "source": [ 24 | "# DuckieBot III\n", 25 | "* Robot: DuckieBot\n", 26 | "* Sensor: camera\n", 27 | "* Think: localize\n", 28 | "* Act: DD\n", 29 | "* Topics needed: control & visual servoing, vision, visual odometry\n", 30 | "* Factor graph concepts: Jacobians of visual observations, VO\n" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": { 36 | "colab_type": "text", 37 | "id": "4qUYcGjLGTaQ" 38 | }, 39 | "source": [ 40 | "## Camera Geometry" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": { 46 | "colab_type": "text", 47 | "id": "K5BtAxD9G2Au" 48 | }, 49 | "source": [ 50 | "## Visual Servoing and Visual Odometry" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": { 56 | "colab_type": "text", 57 | "id": "yY0_0M00IXYt" 58 | }, 59 | "source": [ 60 | "## Jacobians of Visual Observations" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": { 66 | "colab_type": "text", 67 | "id": "5SjqkwjRIUA4" 68 | }, 69 | "source": [ 70 | "## Con" 71 | ] 72 | } 73 | ] 74 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/05/SelfDrivingCar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "05-SelfDrivingCar.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "dhzCZ0I5GY3q" 21 | }, 22 | "source": [ 23 | "# Self Driving Car\n", 24 | "* Robot: Self-driving Car\n", 25 | "* Sensor: LIDAR\n", 26 | "* Think: plan routes, mapping\n", 27 | "* Act: continuous, acceleration, steering wheel\n", 28 | "* Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A*\n", 29 | "* Factor graph concepts: poseSLAM\n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "colab_type": "text", 36 | "id": "4qUYcGjLGTaQ" 37 | }, 38 | "source": [ 39 | "## Car Kinematics" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "colab_type": "text", 46 | "id": "K5BtAxD9G2Au" 47 | }, 48 | "source": [ 49 | "## Point Cloud Alignment" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "colab_type": "text", 56 | "id": "yY0_0M00IXYt" 57 | }, 58 | "source": [ 59 | "## Dense Mapping" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "5SjqkwjRIUA4" 67 | }, 68 | "source": [ 69 | "## A* Path Planning" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": { 75 | "colab_type": "text", 76 | "id": "-t77cFaTrBcL" 77 | }, 78 | "source": [ 79 | "## poseSLAM" 80 | ] 81 | } 82 | ] 83 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/06/DuckieBot4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "06-DuckieBot4.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "dhzCZ0I5GY3q" 21 | }, 22 | "source": [ 23 | "# DuckieBot IV\n", 24 | "* Robot: DuckieBot\n", 25 | "* Sensor: camera\n", 26 | "* Think: mapping\n", 27 | "* Act: DD\n", 28 | "* Topics needed: sparse mapping, sparse linear algebra\n", 29 | "* Factor graph concepts: bundle adjustment/SAM with landmarks\n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "colab_type": "text", 36 | "id": "4qUYcGjLGTaQ" 37 | }, 38 | "source": [ 39 | "## Sparse Linear Algebra" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "colab_type": "text", 46 | "id": "K5BtAxD9G2Au" 47 | }, 48 | "source": [ 49 | "## Sparse Mapping" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "colab_type": "text", 56 | "id": "yY0_0M00IXYt" 57 | }, 58 | "source": [ 59 | "## Bundle Adjustment" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "5SjqkwjRIUA4" 67 | }, 68 | "source": [ 69 | "## Policy Gradient" 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/07/DuckieBot5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "07-DuckieBot5.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "dhzCZ0I5GY3q" 21 | }, 22 | "source": [ 23 | "# DuckieBot V\n", 24 | "* Robot: DuckieBot\n", 25 | "* Sensor: camera\n", 26 | "* Think: localize\n", 27 | "* Act: DD\n", 28 | "* Topics needed: Machine learning (maybe deep), CNNs\n", 29 | "* Factor graph concepts: \n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "colab_type": "text", 36 | "id": "4qUYcGjLGTaQ" 37 | }, 38 | "source": [ 39 | "## Machine Learning" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "colab_type": "text", 46 | "id": "K5BtAxD9G2Au" 47 | }, 48 | "source": [ 49 | "## Deep Learning, CNN" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "colab_type": "text", 56 | "id": "yY0_0M00IXYt" 57 | }, 58 | "source": [ 59 | "## Objec" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "5SjqkwjRIUA4" 67 | }, 68 | "source": [ 69 | "## Policy Gradient" 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/content/LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | License/Copyright 3 | ================= 4 | 5 | Copyright (c) 2019-2020 Frank Dellaert and Seth Hutchinson 6 | All rights reserved 7 | 8 | You are free to peruse the source and the rendered book, on github and on the generated website, but not copy it or distribute it in any way, commercial or otherwise. 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/01/Agents.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Agents\n", 11 | "* Robot: simulated\n", 12 | "* Sensor: noisy state\n", 13 | "* Think: plan, Markov localization, RL\n", 14 | "* Act: Discrete\n", 15 | "* Topics needed: RL graphs & KF\n", 16 | "* Factor graph concepts: planning, markov localization\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "8-X8s5UZaZc2" 24 | }, 25 | "source": [ 26 | "## Discrete States and Actions" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "x1QDeESJaZc3" 34 | }, 35 | "source": [ 36 | "## Classical Planning" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "4qUYcGjLGTaQ" 44 | }, 45 | "source": [ 46 | "## MDP\n", 47 | "A Markov decision process (MDP) has states $x$ and actions $a$..." 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "colab_type": "text", 54 | "id": "K5BtAxD9G2Au" 55 | }, 56 | "source": [ 57 | "## Reinforcement Learning " 58 | ] 59 | } 60 | ], 61 | "metadata": { 62 | "colab": { 63 | "name": "02-DuckieBot2.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/01/Planning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## Planning" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "An outline:\n", 21 | "\n", 22 | "* States and actions in a discretized 2D world\n", 23 | "* Naive policies\n", 24 | "* Optimal policies and Dijkstra\n", 25 | "* Optimal trajectories and Graph Search\n", 26 | "* Finite horizon planning\n", 27 | "\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "\n", 35 | "```{toctree}\n", 36 | ":hidden:\n", 37 | ":titlesonly:\n", 38 | "\n", 39 | "\n", 40 | "Agents\n", 41 | "1-Bayes-nets\n", 42 | "```\n" 43 | ] 44 | } 45 | ], 46 | "metadata": { 47 | "colab": { 48 | "name": "01-DuckieBot1.ipynb", 49 | "provenance": [] 50 | }, 51 | "kernelspec": { 52 | "display_name": "Python 3", 53 | "name": "python3" 54 | } 55 | }, 56 | "nbformat": 4, 57 | "nbformat_minor": 0 58 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/02/Kinematics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## DD kinematics" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "Let's define wheel speeds $\\varphi_L$ and $\\varphi_R$." 21 | ] 22 | } 23 | ], 24 | "metadata": { 25 | "colab": { 26 | "include_colab_link": true, 27 | "name": "01-DuckieBot1.ipynb", 28 | "provenance": [] 29 | }, 30 | "kernelspec": { 31 | "display_name": "Python 3", 32 | "name": "python3" 33 | } 34 | }, 35 | "nbformat": 4, 36 | "nbformat_minor": 0 37 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/04/DuckieBot3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot III\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: control & visual servoing, vision, visual odometry\n", 16 | "* Factor graph concepts: Jacobians of visual observations, VO\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Camera Geometry" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Visual Servoing and Visual Odometry" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Jacobians of Visual Observations" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Con" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "collapsed_sections": [], 63 | "include_colab_link": true, 64 | "name": "04-DuckieBot3.ipynb", 65 | "provenance": [] 66 | }, 67 | "kernelspec": { 68 | "display_name": "Python 3", 69 | "name": "python3" 70 | } 71 | }, 72 | "nbformat": 4, 73 | "nbformat_minor": 0 74 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/05/SelfDrivingCar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Self Driving Car\n", 11 | "* Robot: Self-driving Car\n", 12 | "* Sensor: LIDAR\n", 13 | "* Think: plan routes, mapping\n", 14 | "* Act: continuous, acceleration, steering wheel\n", 15 | "* Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A*\n", 16 | "* Factor graph concepts: poseSLAM\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Car Kinematics" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Point Cloud Alignment" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Dense Mapping" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## A* Path Planning" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "colab_type": "text", 63 | "id": "-t77cFaTrBcL" 64 | }, 65 | "source": [ 66 | "## poseSLAM" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "colab": { 72 | "include_colab_link": true, 73 | "name": "05-SelfDrivingCar.ipynb", 74 | "provenance": [] 75 | }, 76 | "kernelspec": { 77 | "display_name": "Python 3", 78 | "name": "python3" 79 | } 80 | }, 81 | "nbformat": 4, 82 | "nbformat_minor": 0 83 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/06/DuckieBot4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot IV\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: mapping\n", 14 | "* Act: DD\n", 15 | "* Topics needed: sparse mapping, sparse linear algebra\n", 16 | "* Factor graph concepts: bundle adjustment/SAM with landmarks\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Sparse Linear Algebra" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Sparse Mapping" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Bundle Adjustment" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "06-DuckieBot4.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/_site/jupyter_execute/content/07/DuckieBot5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot V\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: Machine learning (maybe deep), CNNs\n", 16 | "* Factor graph concepts: \n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Machine Learning" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Deep Learning, CNN" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Objec" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "07-DuckieBot5.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/01/Agents.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "02-DuckieBot2.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "colab_type": "text", 19 | "id": "dhzCZ0I5GY3q" 20 | }, 21 | "source": [ 22 | "# Agents\n", 23 | "* Robot: simulated\n", 24 | "* Sensor: noisy state\n", 25 | "* Think: plan, Markov localization, RL\n", 26 | "* Act: Discrete\n", 27 | "* Topics needed: RL graphs & KF\n", 28 | "* Factor graph concepts: planning, markov localization\n" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": { 34 | "id": "8-X8s5UZaZc2", 35 | "colab_type": "text" 36 | }, 37 | "source": [ 38 | "## Discrete States and Actions" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": { 44 | "id": "x1QDeESJaZc3", 45 | "colab_type": "text" 46 | }, 47 | "source": [ 48 | "## Classical Planning" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": { 54 | "colab_type": "text", 55 | "id": "4qUYcGjLGTaQ" 56 | }, 57 | "source": [ 58 | "## MDP\n", 59 | "A Markov decision process (MDP) has states $x$ and actions $a$..." 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "K5BtAxD9G2Au" 67 | }, 68 | "source": [ 69 | "## Reinforcement Learning " 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/01/Planning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "01-DuckieBot1.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "markdown", 17 | "metadata": { 18 | "colab_type": "text", 19 | "id": "4qUYcGjLGTaQ" 20 | }, 21 | "source": [ 22 | "## Planning" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": { 28 | "colab_type": "text", 29 | "id": "nJHe8-v9A9wF" 30 | }, 31 | "source": [ 32 | "An outline:\n", 33 | "\n", 34 | "* States and actions in a discretized 2D world\n", 35 | "* Naive policies\n", 36 | "* Optimal policies and Dijkstra\n", 37 | "* Optimal trajectories and Graph Search\n", 38 | "* Finite horizon planning\n", 39 | "\n" 40 | ] 41 | } 42 | ] 43 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/02/Kinematics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "01-DuckieBot1.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "4qUYcGjLGTaQ" 21 | }, 22 | "source": [ 23 | "## DD kinematics" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": { 29 | "colab_type": "text", 30 | "id": "nJHe8-v9A9wF" 31 | }, 32 | "source": [ 33 | "Let's define wheel speeds $\\varphi_L$ and $\\varphi_R$." 34 | ] 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/04/DuckieBot3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "04-DuckieBot3.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "metadata": { 20 | "colab_type": "text", 21 | "id": "dhzCZ0I5GY3q" 22 | }, 23 | "source": [ 24 | "# DuckieBot III\n", 25 | "* Robot: DuckieBot\n", 26 | "* Sensor: camera\n", 27 | "* Think: localize\n", 28 | "* Act: DD\n", 29 | "* Topics needed: control & visual servoing, vision, visual odometry\n", 30 | "* Factor graph concepts: Jacobians of visual observations, VO\n" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": { 36 | "colab_type": "text", 37 | "id": "4qUYcGjLGTaQ" 38 | }, 39 | "source": [ 40 | "## Camera Geometry" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": { 46 | "colab_type": "text", 47 | "id": "K5BtAxD9G2Au" 48 | }, 49 | "source": [ 50 | "## Visual Servoing and Visual Odometry" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": { 56 | "colab_type": "text", 57 | "id": "yY0_0M00IXYt" 58 | }, 59 | "source": [ 60 | "## Jacobians of Visual Observations" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": { 66 | "colab_type": "text", 67 | "id": "5SjqkwjRIUA4" 68 | }, 69 | "source": [ 70 | "## Con" 71 | ] 72 | } 73 | ] 74 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/05/SelfDrivingCar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "05-SelfDrivingCar.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "dhzCZ0I5GY3q" 21 | }, 22 | "source": [ 23 | "# Self Driving Car\n", 24 | "* Robot: Self-driving Car\n", 25 | "* Sensor: LIDAR\n", 26 | "* Think: plan routes, mapping\n", 27 | "* Act: continuous, acceleration, steering wheel\n", 28 | "* Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A*\n", 29 | "* Factor graph concepts: poseSLAM\n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "colab_type": "text", 36 | "id": "4qUYcGjLGTaQ" 37 | }, 38 | "source": [ 39 | "## Car Kinematics" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "colab_type": "text", 46 | "id": "K5BtAxD9G2Au" 47 | }, 48 | "source": [ 49 | "## Point Cloud Alignment" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "colab_type": "text", 56 | "id": "yY0_0M00IXYt" 57 | }, 58 | "source": [ 59 | "## Dense Mapping" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "5SjqkwjRIUA4" 67 | }, 68 | "source": [ 69 | "## A* Path Planning" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": { 75 | "colab_type": "text", 76 | "id": "-t77cFaTrBcL" 77 | }, 78 | "source": [ 79 | "## poseSLAM" 80 | ] 81 | } 82 | ] 83 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/06/DuckieBot4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "06-DuckieBot4.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "dhzCZ0I5GY3q" 21 | }, 22 | "source": [ 23 | "# DuckieBot IV\n", 24 | "* Robot: DuckieBot\n", 25 | "* Sensor: camera\n", 26 | "* Think: mapping\n", 27 | "* Act: DD\n", 28 | "* Topics needed: sparse mapping, sparse linear algebra\n", 29 | "* Factor graph concepts: bundle adjustment/SAM with landmarks\n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "colab_type": "text", 36 | "id": "4qUYcGjLGTaQ" 37 | }, 38 | "source": [ 39 | "## Sparse Linear Algebra" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "colab_type": "text", 46 | "id": "K5BtAxD9G2Au" 47 | }, 48 | "source": [ 49 | "## Sparse Mapping" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "colab_type": "text", 56 | "id": "yY0_0M00IXYt" 57 | }, 58 | "source": [ 59 | "## Bundle Adjustment" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "5SjqkwjRIUA4" 67 | }, 68 | "source": [ 69 | "## Policy Gradient" 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/07/DuckieBot5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "07-DuckieBot5.ipynb", 7 | "provenance": [], 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "markdown", 18 | "metadata": { 19 | "colab_type": "text", 20 | "id": "dhzCZ0I5GY3q" 21 | }, 22 | "source": [ 23 | "# DuckieBot V\n", 24 | "* Robot: DuckieBot\n", 25 | "* Sensor: camera\n", 26 | "* Think: localize\n", 27 | "* Act: DD\n", 28 | "* Topics needed: Machine learning (maybe deep), CNNs\n", 29 | "* Factor graph concepts: \n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "colab_type": "text", 36 | "id": "4qUYcGjLGTaQ" 37 | }, 38 | "source": [ 39 | "## Machine Learning" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": { 45 | "colab_type": "text", 46 | "id": "K5BtAxD9G2Au" 47 | }, 48 | "source": [ 49 | "## Deep Learning, CNN" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "colab_type": "text", 56 | "id": "yY0_0M00IXYt" 57 | }, 58 | "source": [ 59 | "## Objec" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": { 65 | "colab_type": "text", 66 | "id": "5SjqkwjRIUA4" 67 | }, 68 | "source": [ 69 | "## Policy Gradient" 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /_build/html/_sources/content/LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | License/Copyright 3 | ================= 4 | 5 | Copyright (c) 2019-2020 Frank Dellaert and Seth Hutchinson 6 | All rights reserved 7 | 8 | You are free to peruse the source and the rendered book, on github and on the generated website, but not copy it or distribute it in any way, commercial or otherwise. 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /_build/html/_static/copy-button.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_build/html/_static/copybutton.css: -------------------------------------------------------------------------------- 1 | /* Copy buttons */ 2 | a.copybtn { 3 | position: absolute; 4 | top: .2em; 5 | right: .2em; 6 | width: 1em; 7 | height: 1em; 8 | opacity: .3; 9 | transition: opacity 0.5s; 10 | border: none; 11 | user-select: none; 12 | } 13 | 14 | div.highlight { 15 | position: relative; 16 | } 17 | 18 | a.copybtn > img { 19 | vertical-align: top; 20 | margin: 0; 21 | top: 0; 22 | left: 0; 23 | position: absolute; 24 | } 25 | 26 | .highlight:hover .copybtn { 27 | opacity: 1; 28 | } 29 | 30 | /** 31 | * A minimal CSS-only tooltip copied from: 32 | * https://codepen.io/mildrenben/pen/rVBrpK 33 | * 34 | * To use, write HTML like the following: 35 | * 36 | *

Short

37 | */ 38 | .o-tooltip--left { 39 | position: relative; 40 | } 41 | 42 | .o-tooltip--left:after { 43 | opacity: 0; 44 | visibility: hidden; 45 | position: absolute; 46 | content: attr(data-tooltip); 47 | padding: 2px; 48 | top: 0; 49 | left: -.2em; 50 | background: grey; 51 | font-size: 1rem; 52 | color: white; 53 | white-space: nowrap; 54 | z-index: 2; 55 | border-radius: 2px; 56 | transform: translateX(-102%) translateY(0); 57 | transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); 58 | } 59 | 60 | .o-tooltip--left:hover:after { 61 | display: block; 62 | opacity: 1; 63 | visibility: visible; 64 | transform: translateX(-100%) translateY(0); 65 | transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); 66 | transition-delay: .5s; 67 | } 68 | -------------------------------------------------------------------------------- /_build/html/_static/copybutton_funcs.js: -------------------------------------------------------------------------------- 1 | function escapeRegExp(string) { 2 | return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string 3 | } 4 | 5 | // Callback when a copy button is clicked. Will be passed the node that was clicked 6 | // should then grab the text and replace pieces of text that shouldn't be used in output 7 | export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true) { 8 | 9 | var regexp; 10 | var match; 11 | 12 | // create regexp to capture prompt and remaining line 13 | if (isRegexp) { 14 | regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') 15 | } else { 16 | regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') 17 | } 18 | 19 | const outputLines = []; 20 | var promptFound = false; 21 | for (const line of textContent.split('\n')) { 22 | match = line.match(regexp) 23 | if (match) { 24 | promptFound = true 25 | if (removePrompts) { 26 | outputLines.push(match[2]) 27 | } else { 28 | outputLines.push(line) 29 | } 30 | } else { 31 | if (!onlyCopyPromptLines) { 32 | outputLines.push(line) 33 | } 34 | } 35 | } 36 | 37 | // If no lines with the prompt were found then just use original lines 38 | if (promptFound) { 39 | textContent = outputLines.join('\n'); 40 | } 41 | 42 | // Remove a trailing newline to avoid auto-running when pasting 43 | if (textContent.endsWith("\n")) { 44 | textContent = textContent.slice(0, -1) 45 | } 46 | return textContent 47 | } 48 | -------------------------------------------------------------------------------- /_build/html/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '', 4 | LANGUAGE: 'None', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '', 11 | NAVIGATION_WITH_KEYS: true 12 | }; -------------------------------------------------------------------------------- /_build/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_static/file.png -------------------------------------------------------------------------------- /_build/html/_static/images/logo_binder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | logo 11 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /_build/html/_static/images/logo_colab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_static/images/logo_colab.png -------------------------------------------------------------------------------- /_build/html/_static/images/logo_jupyterhub.svg: -------------------------------------------------------------------------------- 1 | logo_jupyterhubHub 2 | -------------------------------------------------------------------------------- /_build/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_static/minus.png -------------------------------------------------------------------------------- /_build/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/_static/plus.png -------------------------------------------------------------------------------- /_build/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /_build/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/html/objects.inv -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/01/Agents.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Agents\n", 11 | "* Robot: simulated\n", 12 | "* Sensor: noisy state\n", 13 | "* Think: plan, Markov localization, RL\n", 14 | "* Act: Discrete\n", 15 | "* Topics needed: RL graphs & KF\n", 16 | "* Factor graph concepts: planning, markov localization\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "8-X8s5UZaZc2" 24 | }, 25 | "source": [ 26 | "## Discrete States and Actions" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "x1QDeESJaZc3" 34 | }, 35 | "source": [ 36 | "## Classical Planning" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "4qUYcGjLGTaQ" 44 | }, 45 | "source": [ 46 | "## MDP\n", 47 | "A Markov decision process (MDP) has states $x$ and actions $a$..." 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "colab_type": "text", 54 | "id": "K5BtAxD9G2Au" 55 | }, 56 | "source": [ 57 | "## Reinforcement Learning " 58 | ] 59 | } 60 | ], 61 | "metadata": { 62 | "colab": { 63 | "name": "02-DuckieBot2.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/01/Agents.txt: -------------------------------------------------------------------------------- 1 | # Agents 2 | * Robot: simulated 3 | * Sensor: noisy state 4 | * Think: plan, Markov localization, RL 5 | * Act: Discrete 6 | * Topics needed: RL graphs & KF 7 | * Factor graph concepts: planning, markov localization 8 | 9 | 10 | ## Discrete States and Actions 11 | 12 | ## Classical Planning 13 | 14 | ## MDP 15 | A Markov decision process (MDP) has states $x$ and actions $a$... 16 | 17 | ## Reinforcement Learning -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/01/Planning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## Planning" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "An outline:\n", 21 | "\n", 22 | "* States and actions in a discretized 2D world\n", 23 | "* Naive policies\n", 24 | "* Optimal policies and Dijkstra\n", 25 | "* Optimal trajectories and Graph Search\n", 26 | "* Finite horizon planning\n", 27 | "\n" 28 | ] 29 | } 30 | ], 31 | "metadata": { 32 | "colab": { 33 | "name": "01-DuckieBot1.ipynb", 34 | "provenance": [] 35 | }, 36 | "kernelspec": { 37 | "display_name": "Python 3", 38 | "name": "python3" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 0 43 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/01/Planning.txt: -------------------------------------------------------------------------------- 1 | ## Planning 2 | 3 | An outline: 4 | 5 | * States and actions in a discretized 2D world 6 | * Naive policies 7 | * Optimal policies and Dijkstra 8 | * Optimal trajectories and Graph Search 9 | * Finite horizon planning 10 | 11 | -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/02/DiffDrive.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# A differential drive robot\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: wheel encoder\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: DD kinematics, sensor fusion, localization (MCL), factor graphs & KF\n", 16 | "* Factor graph concepts: Kalman filter\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Differential Drive kinematics\n", 27 | "In the [kinematics](Kinematics) section." 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": { 33 | "colab_type": "text", 34 | "id": "K5BtAxD9G2Au" 35 | }, 36 | "source": [ 37 | "## Sensor Fusion " 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": { 43 | "colab_type": "text", 44 | "id": "Ur-GxCmIHYBF" 45 | }, 46 | "source": [ 47 | "## Factor Graphs" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "colab_type": "text", 54 | "id": "cMGG4c19HDSS" 55 | }, 56 | "source": [ 57 | "## Localization" 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": { 63 | "colab_type": "text", 64 | "id": "Cve8ELMsHPB5" 65 | }, 66 | "source": [ 67 | "## The Kalman Filter" 68 | ] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": { 73 | "colab_type": "text", 74 | "id": "tP3nTDmWHGqR" 75 | }, 76 | "source": [ 77 | "## Monte Carlo Localization" 78 | ] 79 | } 80 | ], 81 | "metadata": { 82 | "colab": { 83 | "name": "01-DuckieBot1.ipynb", 84 | "provenance": [] 85 | }, 86 | "kernelspec": { 87 | "display_name": "Python 3", 88 | "name": "python3" 89 | } 90 | }, 91 | "nbformat": 4, 92 | "nbformat_minor": 0 93 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/02/DiffDrive.txt: -------------------------------------------------------------------------------- 1 | # A differential drive robot 2 | * Robot: DuckieBot 3 | * Sensor: wheel encoder 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: DD kinematics, sensor fusion, localization (MCL), factor graphs & KF 7 | * Factor graph concepts: Kalman filter 8 | 9 | 10 | ## Differential Drive kinematics 11 | In the [kinematics](Kinematics) section. 12 | 13 | ## Sensor Fusion 14 | 15 | ## Factor Graphs 16 | 17 | ## Localization 18 | 19 | ## The Kalman Filter 20 | 21 | ## Monte Carlo Localization -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/02/Geometry_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/jupyter_execute/_site/content/02/Geometry_10_0.png -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/02/Kinematics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## DD kinematics" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "Let's define wheel speeds $\\varphi_L$ and $\\varphi_R$." 21 | ] 22 | } 23 | ], 24 | "metadata": { 25 | "colab": { 26 | "include_colab_link": true, 27 | "name": "01-DuckieBot1.ipynb", 28 | "provenance": [] 29 | }, 30 | "kernelspec": { 31 | "display_name": "Python 3", 32 | "name": "python3" 33 | } 34 | }, 35 | "nbformat": 4, 36 | "nbformat_minor": 0 37 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/02/Kinematics.txt: -------------------------------------------------------------------------------- 1 | ## DD kinematics 2 | 3 | Let's define wheel speeds $\varphi_L$ and $\varphi_R$. -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/03/PlanarArm.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Planar Arms\n", 11 | "* Robot: Planar arms\n", 12 | "* Sensor: joint encoders\n", 13 | "* Think: motion planning\n", 14 | "* Act: control joint angles \n", 15 | "* Topics needed: manipulator kinematics, control, motion planning, optimal control and trajectory optimization, RRT\n", 16 | "* Factor graph concepts: smoothing w GTSAM, between factors, goal factor, obstacle factors (after RRT) $n_s$ is the sample, $n_{new}$ is the new node, etc.\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Manipulator Kinematics" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Control " 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Motion Planner" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Optimal Control" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "colab_type": "text", 63 | "id": "8Rto-y6hjuI2" 64 | }, 65 | "source": [ 66 | "## Trajectory Optimization" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": { 72 | "colab_type": "text", 73 | "id": "H6m1_DP9jwlP" 74 | }, 75 | "source": [ 76 | "## RRTs" 77 | ] 78 | } 79 | ], 80 | "metadata": { 81 | "colab": { 82 | "name": "03-PlanarArm.ipynb", 83 | "provenance": [] 84 | }, 85 | "kernelspec": { 86 | "display_name": "Python 3", 87 | "name": "python3" 88 | } 89 | }, 90 | "nbformat": 4, 91 | "nbformat_minor": 0 92 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/03/PlanarArm.txt: -------------------------------------------------------------------------------- 1 | # Planar Arms 2 | * Robot: Planar arms 3 | * Sensor: joint encoders 4 | * Think: motion planning 5 | * Act: control joint angles 6 | * Topics needed: manipulator kinematics, control, motion planning, optimal control and trajectory optimization, RRT 7 | * Factor graph concepts: smoothing w GTSAM, between factors, goal factor, obstacle factors (after RRT) $n_s$ is the sample, $n_{new}$ is the new node, etc. 8 | 9 | 10 | ## Manipulator Kinematics 11 | 12 | ## Control 13 | 14 | ## Motion Planner 15 | 16 | ## Optimal Control 17 | 18 | ## Trajectory Optimization 19 | 20 | ## RRTs -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/04/DuckieBot3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot III\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: control & visual servoing, vision, visual odometry\n", 16 | "* Factor graph concepts: Jacobians of visual observations, VO\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Camera Geometry" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Visual Servoing and Visual Odometry" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Jacobians of Visual Observations" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Con" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "collapsed_sections": [], 63 | "include_colab_link": true, 64 | "name": "04-DuckieBot3.ipynb", 65 | "provenance": [] 66 | }, 67 | "kernelspec": { 68 | "display_name": "Python 3", 69 | "name": "python3" 70 | } 71 | }, 72 | "nbformat": 4, 73 | "nbformat_minor": 0 74 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/04/DuckieBot3.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot III 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: control & visual servoing, vision, visual odometry 7 | * Factor graph concepts: Jacobians of visual observations, VO 8 | 9 | 10 | ## Camera Geometry 11 | 12 | ## Visual Servoing and Visual Odometry 13 | 14 | ## Jacobians of Visual Observations 15 | 16 | ## Con -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/05/SelfDrivingCar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Self Driving Car\n", 11 | "* Robot: Self-driving Car\n", 12 | "* Sensor: LIDAR\n", 13 | "* Think: plan routes, mapping\n", 14 | "* Act: continuous, acceleration, steering wheel\n", 15 | "* Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A*\n", 16 | "* Factor graph concepts: poseSLAM\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Car Kinematics" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Point Cloud Alignment" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Dense Mapping" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## A* Path Planning" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "colab_type": "text", 63 | "id": "-t77cFaTrBcL" 64 | }, 65 | "source": [ 66 | "## poseSLAM" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "colab": { 72 | "include_colab_link": true, 73 | "name": "05-SelfDrivingCar.ipynb", 74 | "provenance": [] 75 | }, 76 | "kernelspec": { 77 | "display_name": "Python 3", 78 | "name": "python3" 79 | } 80 | }, 81 | "nbformat": 4, 82 | "nbformat_minor": 0 83 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/05/SelfDrivingCar.txt: -------------------------------------------------------------------------------- 1 | # Self Driving Car 2 | * Robot: Self-driving Car 3 | * Sensor: LIDAR 4 | * Think: plan routes, mapping 5 | * Act: continuous, acceleration, steering wheel 6 | * Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A* 7 | * Factor graph concepts: poseSLAM 8 | 9 | 10 | ## Car Kinematics 11 | 12 | ## Point Cloud Alignment 13 | 14 | ## Dense Mapping 15 | 16 | ## A* Path Planning 17 | 18 | ## poseSLAM -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/06/DuckieBot4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot IV\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: mapping\n", 14 | "* Act: DD\n", 15 | "* Topics needed: sparse mapping, sparse linear algebra\n", 16 | "* Factor graph concepts: bundle adjustment/SAM with landmarks\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Sparse Linear Algebra" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Sparse Mapping" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Bundle Adjustment" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "06-DuckieBot4.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/06/DuckieBot4.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot IV 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: mapping 5 | * Act: DD 6 | * Topics needed: sparse mapping, sparse linear algebra 7 | * Factor graph concepts: bundle adjustment/SAM with landmarks 8 | 9 | 10 | ## Sparse Linear Algebra 11 | 12 | ## Sparse Mapping 13 | 14 | ## Bundle Adjustment 15 | 16 | ## Policy Gradient -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/07/DuckieBot5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot V\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: Machine learning (maybe deep), CNNs\n", 16 | "* Factor graph concepts: \n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Machine Learning" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Deep Learning, CNN" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Objec" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "07-DuckieBot5.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/07/DuckieBot5.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot V 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: Machine learning (maybe deep), CNNs 7 | * Factor graph concepts: 8 | 9 | 10 | ## Machine Learning 11 | 12 | ## Deep Learning, CNN 13 | 14 | ## Objec 15 | 16 | ## Policy Gradient -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/content/intro.py: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | There are 7 chapters in this book, where we discuss the sense-think-act cycle for increasingly complex robots: 4 | 5 | 1. [Agents](01/Agents): in this chapter we discuss the sense-think-act in a simple simulated agent environment, and discuss classical planning, discret state estimation, and reinforcement learning. 6 | 7 | 2. [A Differential Drive Robot](02/DiffDrive): the DuckieBot robot is a simple, differential drive robot, and in this chapter we only discuss simple wheel encoder sensors. This nevertheless allows us to think about where we are and where we want to go, using simple differential steering as the action. 8 | 9 | 3. [Planar Manipulators](03/PlanarArm): besides mobile robots, mobile manipulators are another important topic in robotics. In this chapter we discuss *planar* arms, with simple joint angle sensors and torques applied at the joints for action. 10 | 11 | 4. [Vision for Robots](04/DuckieBot3): in this chapter we introduce *vision* as one of the most important sensors in robotics. 12 | 13 | 5. [Self-driving Cars](05/SelfDrivingCar): in autonomous vehicles an expensive, yet frequently used sensor is a *LIDAR*. This allows us to do dense mapping, and planning in those maps. 14 | 15 | 6. [Visual SLAM](06/DuckieBot4): cameras are more suited to sparse point-cloud mapping, for which the geometry and math is a bit more involved. We discuss bundle adjustment and the sparse linear algebra topics needed for computational efficiency. 16 | 17 | 7. [Deep Learning](07/DuckieBot5): finally, in this last chapter we touch upon topics in deep learning, which has profoundly changed perception and planning in robotics. 18 | 19 | -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/01/Agents.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Agents\n", 11 | "* Robot: simulated\n", 12 | "* Sensor: noisy state\n", 13 | "* Think: plan, Markov localization, RL\n", 14 | "* Act: Discrete\n", 15 | "* Topics needed: RL graphs & KF\n", 16 | "* Factor graph concepts: planning, markov localization\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "8-X8s5UZaZc2" 24 | }, 25 | "source": [ 26 | "## Discrete States and Actions" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "x1QDeESJaZc3" 34 | }, 35 | "source": [ 36 | "## Classical Planning" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "4qUYcGjLGTaQ" 44 | }, 45 | "source": [ 46 | "## MDP\n", 47 | "A Markov decision process (MDP) has states $x$ and actions $a$..." 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "colab_type": "text", 54 | "id": "K5BtAxD9G2Au" 55 | }, 56 | "source": [ 57 | "## Reinforcement Learning " 58 | ] 59 | } 60 | ], 61 | "metadata": { 62 | "colab": { 63 | "name": "02-DuckieBot2.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/01/Agents.txt: -------------------------------------------------------------------------------- 1 | # Agents 2 | * Robot: simulated 3 | * Sensor: noisy state 4 | * Think: plan, Markov localization, RL 5 | * Act: Discrete 6 | * Topics needed: RL graphs & KF 7 | * Factor graph concepts: planning, markov localization 8 | 9 | 10 | ## Discrete States and Actions 11 | 12 | ## Classical Planning 13 | 14 | ## MDP 15 | A Markov decision process (MDP) has states $x$ and actions $a$... 16 | 17 | ## Reinforcement Learning -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/01/Planning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## Planning" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "An outline:\n", 21 | "\n", 22 | "* States and actions in a discretized 2D world\n", 23 | "* Naive policies\n", 24 | "* Optimal policies and Dijkstra\n", 25 | "* Optimal trajectories and Graph Search\n", 26 | "* Finite horizon planning\n", 27 | "\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "\n", 35 | "```{toctree}\n", 36 | ":hidden:\n", 37 | ":titlesonly:\n", 38 | "\n", 39 | "\n", 40 | "Agents\n", 41 | "1-Bayes-nets\n", 42 | "```\n" 43 | ] 44 | } 45 | ], 46 | "metadata": { 47 | "colab": { 48 | "name": "01-DuckieBot1.ipynb", 49 | "provenance": [] 50 | }, 51 | "kernelspec": { 52 | "display_name": "Python 3", 53 | "name": "python3" 54 | } 55 | }, 56 | "nbformat": 4, 57 | "nbformat_minor": 0 58 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/01/Planning.txt: -------------------------------------------------------------------------------- 1 | ## Planning 2 | 3 | An outline: 4 | 5 | * States and actions in a discretized 2D world 6 | * Naive policies 7 | * Optimal policies and Dijkstra 8 | * Optimal trajectories and Graph Search 9 | * Finite horizon planning 10 | 11 | 12 | 13 | 14 | ```{toctree} 15 | :hidden: 16 | :titlesonly: 17 | 18 | 19 | Agents 20 | 1-Bayes-nets 21 | ``` 22 | -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/02/DiffDrive.txt: -------------------------------------------------------------------------------- 1 | # A differential drive robot 2 | * Robot: DuckieBot 3 | * Sensor: wheel encoder 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: DD kinematics, sensor fusion, localization (MCL), factor graphs & KF 7 | * Factor graph concepts: Kalman filter 8 | 9 | 10 | ## Differential Drive kinematics 11 | In the [kinematics](Kinematics) section. 12 | 13 | ## Sensor Fusion 14 | 15 | ## Factor Graphs 16 | 17 | ## Localization 18 | 19 | ## The Kalman Filter 20 | 21 | ## Monte Carlo Localization 22 | 23 | 24 | ```{toctree} 25 | :hidden: 26 | :titlesonly: 27 | 28 | 29 | Kinematics 30 | Geometry 31 | ``` 32 | -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/02/Geometry_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/jupyter_execute/_site/jupyter_execute/content/02/Geometry_10_0.png -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/02/Kinematics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## DD kinematics" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "Let's define wheel speeds $\\varphi_L$ and $\\varphi_R$." 21 | ] 22 | } 23 | ], 24 | "metadata": { 25 | "colab": { 26 | "include_colab_link": true, 27 | "name": "01-DuckieBot1.ipynb", 28 | "provenance": [] 29 | }, 30 | "kernelspec": { 31 | "display_name": "Python 3", 32 | "name": "python3" 33 | } 34 | }, 35 | "nbformat": 4, 36 | "nbformat_minor": 0 37 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/02/Kinematics.txt: -------------------------------------------------------------------------------- 1 | ## DD kinematics 2 | 3 | Let's define wheel speeds $\varphi_L$ and $\varphi_R$. -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/03/PlanarArm.txt: -------------------------------------------------------------------------------- 1 | # Planar Arms 2 | * Robot: Planar arms 3 | * Sensor: joint encoders 4 | * Think: motion planning 5 | * Act: control joint angles 6 | * Topics needed: manipulator kinematics, control, motion planning, optimal control and trajectory optimization, RRT 7 | * Factor graph concepts: smoothing w GTSAM, between factors, goal factor, obstacle factors (after RRT) $n_s$ is the sample, $n_{new}$ is the new node, etc. 8 | 9 | 10 | ## Manipulator Kinematics 11 | 12 | ## Control 13 | 14 | ## Motion Planner 15 | 16 | ## Optimal Control 17 | 18 | ## Trajectory Optimization 19 | 20 | ## RRTs -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/04/DuckieBot3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot III\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: control & visual servoing, vision, visual odometry\n", 16 | "* Factor graph concepts: Jacobians of visual observations, VO\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Camera Geometry" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Visual Servoing and Visual Odometry" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Jacobians of Visual Observations" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Con" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "collapsed_sections": [], 63 | "include_colab_link": true, 64 | "name": "04-DuckieBot3.ipynb", 65 | "provenance": [] 66 | }, 67 | "kernelspec": { 68 | "display_name": "Python 3", 69 | "name": "python3" 70 | } 71 | }, 72 | "nbformat": 4, 73 | "nbformat_minor": 0 74 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/04/DuckieBot3.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot III 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: control & visual servoing, vision, visual odometry 7 | * Factor graph concepts: Jacobians of visual observations, VO 8 | 9 | 10 | ## Camera Geometry 11 | 12 | ## Visual Servoing and Visual Odometry 13 | 14 | ## Jacobians of Visual Observations 15 | 16 | ## Con -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/05/SelfDrivingCar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Self Driving Car\n", 11 | "* Robot: Self-driving Car\n", 12 | "* Sensor: LIDAR\n", 13 | "* Think: plan routes, mapping\n", 14 | "* Act: continuous, acceleration, steering wheel\n", 15 | "* Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A*\n", 16 | "* Factor graph concepts: poseSLAM\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Car Kinematics" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Point Cloud Alignment" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Dense Mapping" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## A* Path Planning" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "colab_type": "text", 63 | "id": "-t77cFaTrBcL" 64 | }, 65 | "source": [ 66 | "## poseSLAM" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "colab": { 72 | "include_colab_link": true, 73 | "name": "05-SelfDrivingCar.ipynb", 74 | "provenance": [] 75 | }, 76 | "kernelspec": { 77 | "display_name": "Python 3", 78 | "name": "python3" 79 | } 80 | }, 81 | "nbformat": 4, 82 | "nbformat_minor": 0 83 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/05/SelfDrivingCar.txt: -------------------------------------------------------------------------------- 1 | # Self Driving Car 2 | * Robot: Self-driving Car 3 | * Sensor: LIDAR 4 | * Think: plan routes, mapping 5 | * Act: continuous, acceleration, steering wheel 6 | * Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A* 7 | * Factor graph concepts: poseSLAM 8 | 9 | 10 | ## Car Kinematics 11 | 12 | ## Point Cloud Alignment 13 | 14 | ## Dense Mapping 15 | 16 | ## A* Path Planning 17 | 18 | ## poseSLAM -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/06/DuckieBot4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot IV\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: mapping\n", 14 | "* Act: DD\n", 15 | "* Topics needed: sparse mapping, sparse linear algebra\n", 16 | "* Factor graph concepts: bundle adjustment/SAM with landmarks\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Sparse Linear Algebra" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Sparse Mapping" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Bundle Adjustment" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "06-DuckieBot4.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/06/DuckieBot4.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot IV 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: mapping 5 | * Act: DD 6 | * Topics needed: sparse mapping, sparse linear algebra 7 | * Factor graph concepts: bundle adjustment/SAM with landmarks 8 | 9 | 10 | ## Sparse Linear Algebra 11 | 12 | ## Sparse Mapping 13 | 14 | ## Bundle Adjustment 15 | 16 | ## Policy Gradient -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/07/DuckieBot5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot V\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: Machine learning (maybe deep), CNNs\n", 16 | "* Factor graph concepts: \n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Machine Learning" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Deep Learning, CNN" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Objec" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "07-DuckieBot5.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/07/DuckieBot5.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot V 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: Machine learning (maybe deep), CNNs 7 | * Factor graph concepts: 8 | 9 | 10 | ## Machine Learning 11 | 12 | ## Deep Learning, CNN 13 | 14 | ## Objec 15 | 16 | ## Policy Gradient -------------------------------------------------------------------------------- /_build/jupyter_execute/_site/jupyter_execute/content/intro.py: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | There are 7 chapters in this book, where we discuss the sense-think-act cycle for increasingly complex robots: 4 | 5 | 1. [Agents](01/Agents): in this chapter we discuss the sense-think-act in a simple simulated agent environment, and discuss classical planning, discret state estimation, and reinforcement learning. 6 | 7 | 2. [A Differential Drive Robot](02/DiffDrive): the DuckieBot robot is a simple, differential drive robot, and in this chapter we only discuss simple wheel encoder sensors. This nevertheless allows us to think about where we are and where we want to go, using simple differential steering as the action. 8 | 9 | 3. [Planar Manipulators](03/PlanarArm): besides mobile robots, mobile manipulators are another important topic in robotics. In this chapter we discuss *planar* arms, with simple joint angle sensors and torques applied at the joints for action. 10 | 11 | 4. [Vision for Robots](04/DuckieBot3): in this chapter we introduce *vision* as one of the most important sensors in robotics. 12 | 13 | 5. [Self-driving Cars](05/SelfDrivingCar): in autonomous vehicles an expensive, yet frequently used sensor is a *LIDAR*. This allows us to do dense mapping, and planning in those maps. 14 | 15 | 6. [Visual SLAM](06/DuckieBot4): cameras are more suited to sparse point-cloud mapping, for which the geometry and math is a bit more involved. We discuss bundle adjustment and the sparse linear algebra topics needed for computational efficiency. 16 | 17 | 7. [Deep Learning](07/DuckieBot5): finally, in this last chapter we touch upon topics in deep learning, which has profoundly changed perception and planning in robotics. 18 | 19 | -------------------------------------------------------------------------------- /_build/jupyter_execute/content/01/Agents.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Agents\n", 11 | "* Robot: simulated\n", 12 | "* Sensor: noisy state\n", 13 | "* Think: plan, Markov localization, RL\n", 14 | "* Act: Discrete\n", 15 | "* Topics needed: RL graphs & KF\n", 16 | "* Factor graph concepts: planning, markov localization\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "8-X8s5UZaZc2" 24 | }, 25 | "source": [ 26 | "## Discrete States and Actions" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "x1QDeESJaZc3" 34 | }, 35 | "source": [ 36 | "## Classical Planning" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "4qUYcGjLGTaQ" 44 | }, 45 | "source": [ 46 | "## MDP\n", 47 | "A Markov decision process (MDP) has states $x$ and actions $a$..." 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": { 53 | "colab_type": "text", 54 | "id": "K5BtAxD9G2Au" 55 | }, 56 | "source": [ 57 | "## Reinforcement Learning " 58 | ] 59 | } 60 | ], 61 | "metadata": { 62 | "colab": { 63 | "name": "02-DuckieBot2.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/01/Agents.txt: -------------------------------------------------------------------------------- 1 | # Agents 2 | * Robot: simulated 3 | * Sensor: noisy state 4 | * Think: plan, Markov localization, RL 5 | * Act: Discrete 6 | * Topics needed: RL graphs & KF 7 | * Factor graph concepts: planning, markov localization 8 | 9 | 10 | ## Discrete States and Actions 11 | 12 | ## Classical Planning 13 | 14 | ## MDP 15 | A Markov decision process (MDP) has states $x$ and actions $a$... 16 | 17 | ## Reinforcement Learning -------------------------------------------------------------------------------- /_build/jupyter_execute/content/01/Planning.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## Planning" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "An outline:\n", 21 | "\n", 22 | "* States and actions in a discretized 2D world\n", 23 | "* Naive policies\n", 24 | "* Optimal policies and Dijkstra\n", 25 | "* Optimal trajectories and Graph Search\n", 26 | "* Finite horizon planning\n", 27 | "\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "\n", 35 | "```{toctree}\n", 36 | ":hidden:\n", 37 | ":titlesonly:\n", 38 | "\n", 39 | "\n", 40 | "Agents\n", 41 | "1-Bayes-nets\n", 42 | "```\n" 43 | ] 44 | } 45 | ], 46 | "metadata": { 47 | "colab": { 48 | "name": "01-DuckieBot1.ipynb", 49 | "provenance": [] 50 | }, 51 | "kernelspec": { 52 | "display_name": "Python 3", 53 | "name": "python3" 54 | } 55 | }, 56 | "nbformat": 4, 57 | "nbformat_minor": 0 58 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/01/Planning.txt: -------------------------------------------------------------------------------- 1 | ## Planning 2 | 3 | An outline: 4 | 5 | * States and actions in a discretized 2D world 6 | * Naive policies 7 | * Optimal policies and Dijkstra 8 | * Optimal trajectories and Graph Search 9 | * Finite horizon planning 10 | 11 | 12 | 13 | 14 | ```{toctree} 15 | :hidden: 16 | :titlesonly: 17 | 18 | 19 | Agents 20 | 1-Bayes-nets 21 | ``` 22 | -------------------------------------------------------------------------------- /_build/jupyter_execute/content/02/DiffDrive.txt: -------------------------------------------------------------------------------- 1 | # A differential drive robot 2 | * Robot: DuckieBot 3 | * Sensor: wheel encoder 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: DD kinematics, sensor fusion, localization (MCL), factor graphs & KF 7 | * Factor graph concepts: Kalman filter 8 | 9 | 10 | ## Differential Drive kinematics 11 | In the [kinematics](Kinematics) section. 12 | 13 | ## Sensor Fusion 14 | 15 | ## Factor Graphs 16 | 17 | ## Localization 18 | 19 | ## The Kalman Filter 20 | 21 | ## Monte Carlo Localization 22 | 23 | 24 | ```{toctree} 25 | :hidden: 26 | :titlesonly: 27 | 28 | 29 | Kinematics 30 | Geometry 31 | ``` 32 | -------------------------------------------------------------------------------- /_build/jupyter_execute/content/02/Geometry_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dellaert/robotics/47f5123f42f40b65d147fcb41c99ab4db945218f/_build/jupyter_execute/content/02/Geometry_10_0.png -------------------------------------------------------------------------------- /_build/jupyter_execute/content/02/Kinematics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "4qUYcGjLGTaQ" 8 | }, 9 | "source": [ 10 | "## DD kinematics" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "colab_type": "text", 17 | "id": "nJHe8-v9A9wF" 18 | }, 19 | "source": [ 20 | "Let's define wheel speeds $\\varphi_L$ and $\\varphi_R$." 21 | ] 22 | } 23 | ], 24 | "metadata": { 25 | "colab": { 26 | "include_colab_link": true, 27 | "name": "01-DuckieBot1.ipynb", 28 | "provenance": [] 29 | }, 30 | "kernelspec": { 31 | "display_name": "Python 3", 32 | "name": "python3" 33 | } 34 | }, 35 | "nbformat": 4, 36 | "nbformat_minor": 0 37 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/02/Kinematics.txt: -------------------------------------------------------------------------------- 1 | ## DD kinematics 2 | 3 | Let's define wheel speeds $\varphi_L$ and $\varphi_R$. -------------------------------------------------------------------------------- /_build/jupyter_execute/content/03/PlanarArm.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Planar Arms\n", 11 | "* Robot: Planar arms\n", 12 | "* Sensor: joint encoders\n", 13 | "* Think: motion planning\n", 14 | "* Act: control joint angles \n", 15 | "* Topics needed: manipulator kinematics, control, motion planning, optimal control and trajectory optimization, RRT\n", 16 | "* Factor graph concepts: smoothing w GTSAM, between factors, goal factor, obstacle factors (after RRT) $n_s$ is the sample, $n_{new}$ is the new node, etc.\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Manipulator Kinematics" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Control " 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Motion Planner" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Optimal Control" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "colab_type": "text", 63 | "id": "8Rto-y6hjuI2" 64 | }, 65 | "source": [ 66 | "## Trajectory Optimization" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": { 72 | "colab_type": "text", 73 | "id": "H6m1_DP9jwlP" 74 | }, 75 | "source": [ 76 | "## RRTs" 77 | ] 78 | } 79 | ], 80 | "metadata": { 81 | "colab": { 82 | "name": "03-PlanarArm.ipynb", 83 | "provenance": [] 84 | }, 85 | "kernelspec": { 86 | "display_name": "Python 3", 87 | "name": "python3" 88 | } 89 | }, 90 | "nbformat": 4, 91 | "nbformat_minor": 0 92 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/03/PlanarArm.txt: -------------------------------------------------------------------------------- 1 | # Planar Arms 2 | * Robot: Planar arms 3 | * Sensor: joint encoders 4 | * Think: motion planning 5 | * Act: control joint angles 6 | * Topics needed: manipulator kinematics, control, motion planning, optimal control and trajectory optimization, RRT 7 | * Factor graph concepts: smoothing w GTSAM, between factors, goal factor, obstacle factors (after RRT) $n_s$ is the sample, $n_{new}$ is the new node, etc. 8 | 9 | 10 | ## Manipulator Kinematics 11 | 12 | ## Control 13 | 14 | ## Motion Planner 15 | 16 | ## Optimal Control 17 | 18 | ## Trajectory Optimization 19 | 20 | ## RRTs -------------------------------------------------------------------------------- /_build/jupyter_execute/content/04/DuckieBot3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot III\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: control & visual servoing, vision, visual odometry\n", 16 | "* Factor graph concepts: Jacobians of visual observations, VO\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Camera Geometry" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Visual Servoing and Visual Odometry" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Jacobians of Visual Observations" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Con" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "collapsed_sections": [], 63 | "include_colab_link": true, 64 | "name": "04-DuckieBot3.ipynb", 65 | "provenance": [] 66 | }, 67 | "kernelspec": { 68 | "display_name": "Python 3", 69 | "name": "python3" 70 | } 71 | }, 72 | "nbformat": 4, 73 | "nbformat_minor": 0 74 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/04/DuckieBot3.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot III 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: control & visual servoing, vision, visual odometry 7 | * Factor graph concepts: Jacobians of visual observations, VO 8 | 9 | 10 | ## Camera Geometry 11 | 12 | ## Visual Servoing and Visual Odometry 13 | 14 | ## Jacobians of Visual Observations 15 | 16 | ## Con -------------------------------------------------------------------------------- /_build/jupyter_execute/content/05/SelfDrivingCar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# Self Driving Car\n", 11 | "* Robot: Self-driving Car\n", 12 | "* Sensor: LIDAR\n", 13 | "* Think: plan routes, mapping\n", 14 | "* Act: continuous, acceleration, steering wheel\n", 15 | "* Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A*\n", 16 | "* Factor graph concepts: poseSLAM\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Car Kinematics" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Point Cloud Alignment" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Dense Mapping" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## A* Path Planning" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": { 62 | "colab_type": "text", 63 | "id": "-t77cFaTrBcL" 64 | }, 65 | "source": [ 66 | "## poseSLAM" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "colab": { 72 | "include_colab_link": true, 73 | "name": "05-SelfDrivingCar.ipynb", 74 | "provenance": [] 75 | }, 76 | "kernelspec": { 77 | "display_name": "Python 3", 78 | "name": "python3" 79 | } 80 | }, 81 | "nbformat": 4, 82 | "nbformat_minor": 0 83 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/05/SelfDrivingCar.txt: -------------------------------------------------------------------------------- 1 | # Self Driving Car 2 | * Robot: Self-driving Car 3 | * Sensor: LIDAR 4 | * Think: plan routes, mapping 5 | * Act: continuous, acceleration, steering wheel 6 | * Topics needed: car kinematics (Ackerman steering), ICP, dense mapping, A* 7 | * Factor graph concepts: poseSLAM 8 | 9 | 10 | ## Car Kinematics 11 | 12 | ## Point Cloud Alignment 13 | 14 | ## Dense Mapping 15 | 16 | ## A* Path Planning 17 | 18 | ## poseSLAM -------------------------------------------------------------------------------- /_build/jupyter_execute/content/06/DuckieBot4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot IV\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: mapping\n", 14 | "* Act: DD\n", 15 | "* Topics needed: sparse mapping, sparse linear algebra\n", 16 | "* Factor graph concepts: bundle adjustment/SAM with landmarks\n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Sparse Linear Algebra" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Sparse Mapping" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Bundle Adjustment" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "06-DuckieBot4.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/06/DuckieBot4.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot IV 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: mapping 5 | * Act: DD 6 | * Topics needed: sparse mapping, sparse linear algebra 7 | * Factor graph concepts: bundle adjustment/SAM with landmarks 8 | 9 | 10 | ## Sparse Linear Algebra 11 | 12 | ## Sparse Mapping 13 | 14 | ## Bundle Adjustment 15 | 16 | ## Policy Gradient -------------------------------------------------------------------------------- /_build/jupyter_execute/content/07/DuckieBot5.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "colab_type": "text", 7 | "id": "dhzCZ0I5GY3q" 8 | }, 9 | "source": [ 10 | "# DuckieBot V\n", 11 | "* Robot: DuckieBot\n", 12 | "* Sensor: camera\n", 13 | "* Think: localize\n", 14 | "* Act: DD\n", 15 | "* Topics needed: Machine learning (maybe deep), CNNs\n", 16 | "* Factor graph concepts: \n" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "colab_type": "text", 23 | "id": "4qUYcGjLGTaQ" 24 | }, 25 | "source": [ 26 | "## Machine Learning" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": { 32 | "colab_type": "text", 33 | "id": "K5BtAxD9G2Au" 34 | }, 35 | "source": [ 36 | "## Deep Learning, CNN" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "colab_type": "text", 43 | "id": "yY0_0M00IXYt" 44 | }, 45 | "source": [ 46 | "## Objec" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": { 52 | "colab_type": "text", 53 | "id": "5SjqkwjRIUA4" 54 | }, 55 | "source": [ 56 | "## Policy Gradient" 57 | ] 58 | } 59 | ], 60 | "metadata": { 61 | "colab": { 62 | "include_colab_link": true, 63 | "name": "07-DuckieBot5.ipynb", 64 | "provenance": [] 65 | }, 66 | "kernelspec": { 67 | "display_name": "Python 3", 68 | "name": "python3" 69 | } 70 | }, 71 | "nbformat": 4, 72 | "nbformat_minor": 0 73 | } -------------------------------------------------------------------------------- /_build/jupyter_execute/content/07/DuckieBot5.txt: -------------------------------------------------------------------------------- 1 | # DuckieBot V 2 | * Robot: DuckieBot 3 | * Sensor: camera 4 | * Think: localize 5 | * Act: DD 6 | * Topics needed: Machine learning (maybe deep), CNNs 7 | * Factor graph concepts: 8 | 9 | 10 | ## Machine Learning 11 | 12 | ## Deep Learning, CNN 13 | 14 | ## Objec 15 | 16 | ## Policy Gradient -------------------------------------------------------------------------------- /_build/jupyter_execute/content/intro.py: -------------------------------------------------------------------------------- 1 | ## Overview 2 | 3 | There are 7 chapters in this book, where we discuss the sense-think-act cycle for increasingly complex robots: 4 | 5 | 1. [Agents](01/Agents): in this chapter we discuss the sense-think-act in a simple simulated agent environment, and discuss classical planning, discret state estimation, and reinforcement learning. 6 | 7 | 2. [A Differential Drive Robot](02/DiffDrive): the DuckieBot robot is a simple, differential drive robot, and in this chapter we only discuss simple wheel encoder sensors. This nevertheless allows us to think about where we are and where we want to go, using simple differential steering as the action. 8 | 9 | 3. [Planar Manipulators](03/PlanarArm): besides mobile robots, mobile manipulators are another important topic in robotics. In this chapter we discuss *planar* arms, with simple joint angle sensors and torques applied at the joints for action. 10 | 11 | 4. [Vision for Robots](04/DuckieBot3): in this chapter we introduce *vision* as one of the most important sensors in robotics. 12 | 13 | 5. [Self-driving Cars](05/SelfDrivingCar): in autonomous vehicles an expensive, yet frequently used sensor is a *LIDAR*. This allows us to do dense mapping, and planning in those maps. 14 | 15 | 6. [Visual SLAM](06/DuckieBot4): cameras are more suited to sparse point-cloud mapping, for which the geometry and math is a bit more involved. We discuss bundle adjustment and the sparse linear algebra topics needed for computational efficiency. 16 | 17 | 7. [Deep Learning](07/DuckieBot5): finally, in this last chapter we touch upon topics in deep learning, which has profoundly changed perception and planning in robotics. -------------------------------------------------------------------------------- /_data/toc.yml: -------------------------------------------------------------------------------- 1 | # This file contains the order and numbering for all sections in the book. 2 | # 3 | # Each entry has the following schema: 4 | # 5 | # - title: mytitle # Title of chapter or section 6 | # url: /myurl # URL of section relative to the /content/ folder. 7 | # sections: # Contains a list of more entries that make up the chapter's sections 8 | # not_numbered: true # if the section shouldn't have a number in the sidebar 9 | # (e.g. Introduction or appendices) 10 | # expand_sections: true # if you'd like the sections of this chapter to always 11 | # be expanded in the sidebar. 12 | # external: true # Whether the URL is an external link or points to content in the book 13 | # 14 | # Below are some special values that trigger specific behavior: 15 | # - search: true # Will provide a link to a search page 16 | # - divider: true # Will insert a divider in the sidebar 17 | # - header: My Header # Will insert a header with no link in the sidebar 18 | 19 | - title: Home 20 | url: /intro 21 | not_numbered: true 22 | 23 | - title: License 24 | url: /license 25 | not_numbered: true 26 | 27 | - title: Agents 28 | url: /01/Agents 29 | sections: 30 | - title: Planning 31 | url: /01/Planning 32 | - title: Probability and Bayes Nets 33 | url: /01/1-Bayes-nets 34 | 35 | - title: A DiffDrive Robot 36 | url: /02/DiffDrive 37 | sections: 38 | - title: Geometry 39 | url: /02/Geometry 40 | - title: Kinematics 41 | url: /02/Kinematics 42 | 43 | - title: Planar Manipulators 44 | url: /03/PlanarArm 45 | 46 | - title: Vision for Robots 47 | url: /04/DuckieBot3 48 | 49 | - title: Self-Driving Cars 50 | url: /05/SelfDrivingCar 51 | 52 | - title: Visual SLAM 53 | url: /06/DuckieBot4 54 | 55 | - title: Deep Learning 56 | url: /07/DuckieBot5 57 | 58 | -------------------------------------------------------------------------------- /_includes/buttons.html: -------------------------------------------------------------------------------- 1 |
2 | {% include buttons/download.html %} 3 | {% if page.interact_link %} 4 | {% include buttons/thebelab.html %} 5 | {% include buttons/nbinteract.html %} 6 | {% include buttons/binder.html %} 7 | {% include buttons/jupyterhub.html %} 8 | {% include buttons/colab.html %} 9 | {% endif %} 10 |
11 | -------------------------------------------------------------------------------- /_includes/buttons/binder.html: -------------------------------------------------------------------------------- 1 | {% if site.use_binder_button %} 2 | 3 | {% if site.use_jupyterlab %} 4 | {% assign binder_interact_prefix="urlpath=lab/tree/" %} 5 | {% else %} 6 | {% assign binder_interact_prefix="filepath=" %} 7 | {% endif %} 8 | 9 | {% capture interact_url_binder %}v2/gh/{{ site.binder_repo_org }}/{{ site.binder_repo_name }}/{{ site.binder_repo_branch }}?{{ binder_interact_prefix }}{{ page.interact_link | url_encode }}{% endcapture %} 10 | {% capture interact_icon_binder %}{{ site.images_url | relative_url }}/logo_binder.svg{% endcapture %} 11 | 12 | 13 | 14 | {%- endif %} -------------------------------------------------------------------------------- /_includes/buttons/colab.html: -------------------------------------------------------------------------------- 1 | {% if site.use_colab_button %} 2 | 3 | Open In Colab 4 | 5 | {%- endif %} -------------------------------------------------------------------------------- /_includes/buttons/download.html: -------------------------------------------------------------------------------- 1 | {% if site.use_download_button -%} 2 |
3 | 4 |
5 | {% if page.interact_link -%} 6 | 7 | 8 | 9 | {% endif %} 10 | 11 |
12 |
13 | {%- endif %} 14 | -------------------------------------------------------------------------------- /_includes/buttons/jupyterhub.html: -------------------------------------------------------------------------------- 1 | {% if site.use_jupyterhub_button %} 2 | 3 | {% if site.use_jupyterlab %} 4 | {% assign hub_app="lab" %} 5 | {% else %} 6 | {% assign hub_app="notebook" %} 7 | {% endif %} 8 | 9 | {% capture interact_url_jupyterhub %}hub/user-redirect/git-pull?repo={{ site.binder_repo_base }}/{{ site.binder_repo_org }}/{{ site.binder_repo_name }}&branch={{ site.binder_repo_branch }}&subPath={{ page.interact_link | url_encode }}&app={{ hub_app }}{% endcapture %} 10 | {% capture interact_icon_jupyterhub %}{{ site.images_url | relative_url }}/logo_jupyterhub.svg{% endcapture %} 11 | 12 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /_includes/buttons/nbinteract.html: -------------------------------------------------------------------------------- 1 | {% if site.use_show_widgets_button and page.has_widgets -%} 2 | 3 | {% endif %} -------------------------------------------------------------------------------- /_includes/buttons/thebelab.html: -------------------------------------------------------------------------------- 1 | {% if site.use_thebelab_button -%} 2 | 3 | {% endif %} -------------------------------------------------------------------------------- /_includes/css_entry.scss: -------------------------------------------------------------------------------- 1 | @import 'inuitcss/settings/settings.core'; 2 | @import 'settings/settings.global.scss'; 3 | 4 | @import 'inuitcss/tools/tools.font-size'; 5 | @import 'inuitcss/tools/tools.clearfix'; 6 | @import 'inuitcss/tools/tools.hidden'; 7 | @import 'inuitcss/tools/tools.mq'; 8 | 9 | @import 'inuitcss/elements/elements.page'; 10 | @import 'inuitcss/elements/elements.headings'; 11 | @import 'inuitcss/elements/elements.images'; 12 | @import 'inuitcss/elements/elements.tables'; 13 | @import 'elements/elements.typography'; 14 | @import 'elements/elements.syntax-highlighting'; 15 | @import 'elements/elements.tables'; 16 | @import 'elements/elements.links'; 17 | 18 | @import 'components/components.textbook__page'; 19 | -------------------------------------------------------------------------------- /_includes/fb_tags.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /_includes/google_analytics.html: -------------------------------------------------------------------------------- 1 | {% if site.google_analytics.mytrackingcode %} 2 | 3 | 4 | 11 | {% endif %} 12 | -------------------------------------------------------------------------------- /_includes/js/nbinteract.html: -------------------------------------------------------------------------------- 1 | {% if site.use_show_widgets_button and page.has_widgets %} 2 | 3 | 4 | 5 | 33 | {% endif %} -------------------------------------------------------------------------------- /_includes/js/print.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 33 | -------------------------------------------------------------------------------- /_includes/js/thebelab-cell-button.html: -------------------------------------------------------------------------------- 1 | {% if site.use_thebelab_button -%} 2 | 27 | {% endif %} 28 | -------------------------------------------------------------------------------- /_includes/mathjax.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 22 | -------------------------------------------------------------------------------- /_includes/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "http://schema.org", 3 | "@type": "NewsArticle", 4 | "mainEntityOfPage": "{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}", 5 | "headline": "{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}", 6 | "datePublished": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}", 7 | "dateModified": "{% if page.date %}{{ page.date | date_to_xmlschema }}{% else %}{{ site.time | date_to_xmlschema }}{% endif %}", 8 | "description": "{{ page.content | strip_html | strip_newlines | truncate: 160 }}", 9 | "author": { 10 | "@type": "Person", 11 | "name": "{{ site.author }}" 12 | }, 13 | "publisher": { 14 | "@type": "Organization", 15 | "name": "Data 100 at UC Berkeley", 16 | "logo": { 17 | "@type": "ImageObject", 18 | "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}", 19 | "width": 60, 20 | "height": 60 21 | } 22 | }, 23 | "image": { 24 | "@type": "ImageObject", 25 | "url": "{{ site.logo | prepend: site.baseurl | prepend: site.url }}", 26 | "height": 60, 27 | "width": 60 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /_includes/page-nav.html: -------------------------------------------------------------------------------- 1 | 24 | -------------------------------------------------------------------------------- /_includes/search/lunr/lunr-store.js: -------------------------------------------------------------------------------- 1 | var store = [ 2 | {%- for c in site.collections -%} 3 | {%- if forloop.last -%} 4 | {%- assign l = true -%} 5 | {%- endif -%} 6 | {%- assign docs = c.docs | where_exp:'doc','doc.search != false' -%} 7 | {%- for doc in docs -%} 8 | {%- if doc.header.teaser -%} 9 | {%- capture teaser -%}{{ doc.header.teaser }}{%- endcapture -%} 10 | {%- else -%} 11 | {%- assign teaser = site.teaser -%} 12 | {%- endif -%} 13 | { 14 | "title": {{ doc.title | jsonify }}, 15 | {% assign truncateWords=site.search_max_words_in_content %} 16 | "excerpt": 17 | {{ doc.content | newline_to_br | 18 | replace:"
", " " | 19 | replace:"

", " " | 20 | replace:"", " " | 21 | replace:"", " " | 22 | replace:"", " " | 23 | replace:"", " " | 24 | replace:"", " " | 25 | replace:"", " " | 26 | strip_html | strip_newlines | truncatewords: truncateWords | jsonify }}, 27 | "categories": {{ doc.categories | jsonify }}, 28 | "tags": {{ doc.tags | jsonify }}, 29 | "url": {{ doc.url | absolute_url | jsonify }}, 30 | "teaser": 31 | {%- if teaser contains "://" -%} 32 | {{ teaser | jsonify }} 33 | {%- else -%} 34 | {{ teaser | absolute_url | jsonify }} 35 | {%- endif -%} 36 | }{%- unless forloop.last and l -%},{%- endunless -%} 37 | {%- endfor -%} 38 | {%- endfor -%}] -------------------------------------------------------------------------------- /_includes/topbar.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 12 | {% include buttons.html %} 13 |
14 | 15 | 20 | 21 | Search 22 | 23 |
24 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include head.html %} 4 | 5 | 6 |
7 | {% include sidebar.html %} 8 | {% if page.search_page != true %} 9 | {% endif %} 10 | {% include topbar.html %} 11 |
12 |
13 | {{ content }} 14 |
15 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /_sass/components/_components.book__topbar.scss: -------------------------------------------------------------------------------- 1 | .c-topbar__label { 2 | @include inuit-font-size(12px); 3 | display: inline-block; 4 | margin-left: $spacing-unit-tiny; 5 | vertical-align: middle; 6 | text-transform: uppercase; 7 | } 8 | 9 | .c-topbar { 10 | .hamburger, .buttons { 11 | float: left; 12 | } 13 | 14 | #js-sidebar-toggle { 15 | margin-right: 5px; 16 | padding-top: 4px; 17 | } 18 | 19 | span.hamburger-box { 20 | width: 40px; 21 | height: 30px; 22 | padding-left: 10px; 23 | } 24 | 25 | .c-topbar__buttons { 26 | @include mq($from: tablet) { 27 | width: calc(100% - #{$right-sidebar-width} - 20px) 28 | } 29 | } 30 | 31 | .topbar-right-button { 32 | display: block; 33 | float: right; 34 | padding: 0 1rem; 35 | 36 | img { 37 | width: 20px; 38 | margin-top: 4px; 39 | } 40 | } 41 | } 42 | 43 | // Download buttons 44 | 45 | .download-buttons { 46 | display: none; 47 | position: absolute; 48 | 49 | button { 50 | min-width: 100px !important; 51 | border: 1px white solid !important; 52 | border-radius: 0 !important; 53 | } 54 | } 55 | 56 | .download-buttons-dropdown { 57 | position: relative; 58 | display: inline-block; 59 | 60 | &:hover div.download-buttons { 61 | display: block; 62 | } 63 | 64 | img { 65 | height: 18px; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /_sass/components/_components.interact-button.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Stylings for Interact and Show Widget buttons. 3 | * 4 | * [1]: We abuse CSS selector specificity here since the buttons at the top of 5 | * the notebook might have both .interact-button and .js=nbinteract-widget. 6 | * [2]: We want the top buttons to be large. 7 | * [3]: However, a .js=nbinteract-widget appearing alone midway through the 8 | * notebook should be small. 9 | * 10 | */ 11 | 12 | $color-interact-button: #5a5a5a !default; 13 | 14 | %interact-button { 15 | @include inuit-font-size(14px); 16 | background-color: $color-interact-button; 17 | border-radius: 3px; 18 | border: none; 19 | color: white; 20 | cursor: pointer; 21 | display: inline-block; 22 | font-weight: 700; 23 | /* [2] */ 24 | padding: $spacing-unit-tiny $spacing-unit-med; 25 | text-decoration: none; 26 | 27 | &:hover, 28 | &:focus { 29 | text-decoration: none; 30 | } 31 | } 32 | 33 | .interact-button-logo { 34 | height: 1.35em; 35 | padding-right: 10px; 36 | margin-left: -5px; 37 | } 38 | 39 | .buttons { 40 | margin-bottom: $spacing-unit; 41 | 42 | /* [1] */ 43 | .interact-button { 44 | @extend %interact-button; 45 | } 46 | } 47 | 48 | .js-nbinteract-widget { 49 | @extend %interact-button; 50 | 51 | /* [3] */ 52 | padding: $spacing-unit-tiny $spacing-unit; 53 | margin-bottom: $spacing-unit-small; 54 | } 55 | 56 | // If the interact button link is changed with a REST param 57 | div.interact-context { 58 | display: inline; 59 | padding-left: 1em; 60 | } -------------------------------------------------------------------------------- /_sass/components/_components.page__footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | text-align: center; 3 | font-size: 14px; 4 | padding: 20px; 5 | opacity: 0.7; 6 | margin-bottom: 0px; 7 | } 8 | -------------------------------------------------------------------------------- /_sass/components/_components.page__nav.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Styling for the Next Page / Previous Page links at the bottom of textbook 3 | * pages. 4 | */ 5 | 6 | $color-nav-links: rgba(0, 140, 255, 0.7); 7 | 8 | .c-page__nav__prev, 9 | .c-page__nav__next { 10 | flex: 1; 11 | color: $color-nav-links; 12 | border: 1px solid $color-nav-links; 13 | border-radius: 3px; 14 | padding: $spacing-unit-small 0; 15 | } 16 | 17 | .c-page__nav__next { 18 | text-align: right; 19 | } 20 | -------------------------------------------------------------------------------- /_sass/components/_components.thebelab.scss: -------------------------------------------------------------------------------- 1 | 2 | .thebelab-cell { 3 | // To ensure that thebelab cells are always the top of the Z-stack 4 | position: relative; 5 | z-index: 999; 6 | } 7 | 8 | .thebelab-button { 9 | z-index: 999; 10 | display: inline-block; 11 | padding: 0.35em 1.2em; 12 | margin: 0px 1px; 13 | border-radius: 0.12em; 14 | box-sizing: border-box; 15 | text-decoration: none; 16 | font-family: 'Roboto', sans-serif; 17 | font-weight: 300; 18 | text-align: center; 19 | transition: all 0.2s; 20 | background-color: #dddddd; 21 | border: 0.05em solid white; 22 | color: #000000; 23 | } 24 | 25 | .thebelab-button:hover{ 26 | border: 0.05em solid black; 27 | background-color: #fcfcfc; 28 | } 29 | 30 | 31 | div.jp-OutputArea-output { 32 | padding: 5px; 33 | } 34 | -------------------------------------------------------------------------------- /_sass/hamburgers/_base.scss: -------------------------------------------------------------------------------- 1 | // Hamburger 2 | // ================================================== 3 | .hamburger { 4 | padding: $hamburger-padding-y $hamburger-padding-x; 5 | display: inline-block; 6 | cursor: pointer; 7 | 8 | transition-property: opacity, filter; 9 | transition-duration: $hamburger-hover-transition-duration; 10 | transition-timing-function: $hamburger-hover-transition-timing-function; 11 | 12 | // Normalize (