# Jupyter Notebooks in Undergraduate Mobile Robotics Courses: Educational Tool and Case Study
## 4 Methods
### Educational Tool
#### 4.2.1 Used Technologies  
Jupyter Notebook [1] provides a platform to easily blend rich text elements and executable code in the same document. It is the work of Project Jupyter, an award winning [57] non-profit project, dedicated to the creation of open-source tools for interactive data science and scientific computing. The Jupyter Notebook framework is one of its most popular developments, and it is composed of a series of tools:  
* **Notebook format. ** It organizes the code in a number of cells, which can be modified and run on demand. The _outputs generated_ by these executions are displayed just beneath the code cell. Not only they can display text, but plots, graphics or mathematical formulas. Besides the code cells, there are text cells written using Markdown markup language (more information on that below). * **Web application. ** It works as both a text and code editor and a computing platform. Its web application nature allows a lecturer to set up a server in order to give ready access to the platform if needed, although it can be easily installed in a local machine, e.g., using Anaconda ([[https://www.anaconda.com/distribution/](https://www.anaconda.com/distribution/)]([https://www.anaconda.com/distribution/](https://www.anaconda.com/distribution/))). * **Kernel. ** Language backend designed to execute code on request, using a common documented protocol. Initially, only a kernel for the Python programming language was available, yet the incredible popularity of the platform and its open-source nature has encouraged the development of an increasingly amount of kernels, now embracing over 50 additional languages ([[https://github.com/jupyter/jupyter/wiki/Jupyter-kernels](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels)]([https://github.com/jupyter/jupyter/wiki/Jupyter-kernels](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels))). Regarding the text cells provided by the notebook format, its support for Markdown ([[https://www.markdownguide.org/getting-started](https://www.markdownguide.org/getting-started)]([https://www.markdownguide.org/getting-started](https://www.markdownguide.org/getting-started))) provides powerful formatting options. It allows the inclusion of rich elements, such as mathematical formulas, tables, lists, images, links, static code, etc. Another benefit in comparison to other markup languages such as LaTeX or HTML, is Markdown's rather minimal syntax, which allows newcomers to readily work without experiencing a heavy learning curve. Nonetheless, if a greater amount of control over the content of the document was needed, HTML can be also used within a text cell. This could be a really powerful tool, as most of the capabilities of HTML translate directly to the Jupyter Notebooks, such as embedding a video within them. Next section describes the programming language used in the code cells. Python  
The programming language of choice for the elaboration of the practical assignments is Python, one of the most popular languages nowadays, ranking just bellow C and Java [58]. Some of the reasons for such a popularity are its clean and concise syntax and a breadth of libraries for most use cases. This makes the language a great tool for prototyping and experimenting without the boilerplate coding conventions or significant compile time of other, more efficient, programming languages. Concretely, the practical exercises make use of the following libraries:  
**Numpy. **: The de facto library for matrix and array computation in Python. It provides a large collection of high-level mathematical functions, such as matrix multiplication, trigonometric functions, etc. **Scipy. **: A library for mathematical computation, which was originally Numpy's parent project. It brings additional utilities for statistics, linear algebra and signal processing which are basic building blocks in the developed notebooks. **Matplotlib. **: Visualizing the problem pays a huge part in the learning process, specially in the domain of mobile robots.