├── .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 |
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 |
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 |
4 |
5 | {%- endif %}
--------------------------------------------------------------------------------
/_includes/buttons/download.html:
--------------------------------------------------------------------------------
1 | {% if site.use_download_button -%}
2 |
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 |
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 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% include head.html %}
4 |
5 |
6 |
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 (