# Jupyter Notebooks in Undergraduate Mobile Robotics Courses: Educational Tool and Case Study
## 4 Methods  
### Procedure  
This study was carried out in the scope of the innovative education project _Development of Interactive Documents to Empower Learning in Robotics-related Subjects_. It comprises three consecutive academic courses of the _Robotics_ subject (from 2017/2018 to 2019/2020), mainly devoted to mobile robots and common sensors in the field (e.g., odometers, cameras, laser scanners, sonars, etc.). This is a compulsory subject taught in the last of the four academic years of the _Computer Engineering_ degree of the _University of Malaga_. It corresponds to six European Credit Transfer System (ETCS) [55], that is, to 150 h of student work. It spans over 15 weeks from October to January, where students attend to theoretical and practical lessons, and carry out two exams. Table 1 illustrates the course syllabus, which was the same during the three courses conforming this study (besides the number of sessions, which suffered minor changes). It is divided into 4 blocks entitled: _Introduction to robotics_, _Mobile Robots_, _Mobile robot localization_, and _Motion planning_. Regarding the courses' teachers, the lecturer in charge of the theory lessons was the same in all of them, while for the practical lessons they were two: one for the 2017/2018 academic course, and another lecturer for 2018/2019 and 2019/2020 ones. However, 2017/2018 and 2018/2019 courses shared hands-on material and grading strategy. During the last two academic courses, a Jupyter Notebook based approach has been developed to replace the traditional problem-solving one (see Section 4.2), which was finally introduced in the last course (2019/2020). As shown in Table 1, each theory topic is followed by a _lab_ session to consolidate concepts and put them into practice (both theory and _lab_ sessions last 2 h). In those hands-on sessions, students are given a Jupyter notebook. Such notebook is first introduced by the lecturer to explain its parts, which follow _a worked example_ philosophy. Then, students start working on it while the lecturer is available to answer questions. Given that it is only needed a web browser to work with notebooks, they could work with the computers available in the classroom or bring their own laptops. A deadline was set (typically one week after the _lab_) for the students to submit a report \begin{table}
\begin{tabular}{l l c} \hline \hline
**Lesson** & **Topic** & **\#Sessions** \\ \hline Theory 1 & Introduction to Autonomous Robotics & 1 \\ Theory 2 & Probability and Statistics Bases for Robotics & 3 \\ _Lab._ 1 & Probability fundamentals (Gaussian distribution) & 2 \\ \hline Theory 3 & Robot Motion & 3 \\ _Lab._ 2 & Movement of a robot using velocity and odometry commands & 2 \\ Theory 4 & Robot Sensing & 2 \\ _Lab._ 3 & Landmark-based models for sensing & 1 \\ \hline Theory 5 & Robot Localization & 2 \\ _Lab._ 4 & Least Squares and EKF for localization & 2 \\ Theory 6 & Mapping & 1 \\ _Lab._ 5 & EKF for robot mapping & 2 \\ Theory 7 & SLAM & 1 \\ _Lab._ 6 & EKF for Simultaneous Localization and Mapping & 1 \\ \hline Theory 8 & Motion planning & 1 \\ _Lab._ 7 & Motion planning by means of Potential Fields & 1 \\ Theory 9 & Robot Control Architecture + ROS & 2 \\ _Lab._ 8 & Implementing a robotic explorer using Python and ROS & 2 \\ \hline \hline \end{tabular}
\end{table} 
Table 1: Syllabus of the subject _Robotics_. including the completed notebook as well as a (guided) discussion about the work done and interesting findings. This submission was graded by the lecturers, which also provided feedback about possible issues/strengths. The grading scheme gave marks according to: (a) correctness of the solution, (b) _elegance_ and originality of the solution, (c) correctness of the discussion, and (d) additional code/discussion cells added by the own student. The traditional problem-solving approach replaced by the Jupyter Notebook based one relied on code snippets in Matlab along with problem definitions [54].