Skip to content

Commit b43f9fd

Browse files
committed
Update Toolbox requirements and mocks for GitHub CI
1 parent 7f5181e commit b43f9fd

13 files changed

Lines changed: 79 additions & 16 deletions

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ jobs:
8585
Computer_Vision_Toolbox
8686
Stateflow
8787
Simulink_Real-Time
88+
Symbolic_Math_Toolbox
89+
Robotic_System_Toolbox
8890
LD_PRELOAD: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
8991
steps:
9092
# Checks-out your repository

README.md

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
<a id="T_DEF03274"></a>
32

43
# <span style="color:rgb(213,80,0)">Introduction to Quadcopter Modeling & Simulation</span>
@@ -18,7 +17,7 @@ _Created with R2025a. Compatible with R2025a and later releases._
1817

1918
# Information
2019

21-
This curriculum module contains interactive [MATLAB® live scripts](https://www.mathworks.com/products/matlab/live-editor.html) that teach the fundamental principles of how a quadcopter operates.
20+
This curriculum module contains interactive [MATLAB® live scripts](https://www.mathworks.com/products/matlab/live-editor.html) that teach the fundamental principles behind how a quadcopter operates.
2221

2322
<p style="text-align:left">
2423
<img src="Images/DroneScene.png" width="737" alt="DroneScene.png">
@@ -28,7 +27,7 @@ This curriculum module contains interactive [MATLAB® live scripts](https://www.
2827

2928
## Background
3029

31-
You can use these live scripts as demonstrations in lectures, class activities, or interactive assignments outside class. Starting from the basics of mathematical modeling, we will build up to a full simulation of a quadcopter delivering a package. We will also look at different fidelities of simulation, ranging from simple cuboidal navigation models to detailed physical models to photorealistic simulations suitable for testing sensing and perception algorithms. Further resources are provided for student projects, competitions, and researchers looking to develop additional skills for industrial applications or research.
30+
You can use these live scripts as demonstrations in lectures, class activities, or interactive assignments outside class. Starting from the basics of mathematical modeling, we will build up to a full simulation of a quadcopter delivering a package. We will also look at different fidelities of simulation ranging from simple cuboidal navigation models to detailed physical models to photorealistic simulations suitable for testing sensing and perception algorithms. Further resources are provided for student projects, competitions and researchers looking to develop their skills further for industrial applications or research.
3231

3332

3433
The instructions inside the live scripts will guide you through the exercises and activities. Get started with each live script by running it one section at a time. To stop running the script or a section midway (for example, when an animation is in progress), use the <img src="Images/EndIcon.png" width="19" alt="EndIcon.png"> Stop button in the **RUN** section of the **Live Editor** tab in the MATLAB Toolstrip.
@@ -41,7 +40,7 @@ Contact the [MathWorks Educator Content Development Team](mailto:onlineteaching@
4140

4241
## Prerequisites
4342

44-
It is expected that students taking this course will be familiar with the basics of MATLAB programming and working with the Simulink environment. They should also have a basic understanding of ordinary differential equations, physics, and numerical simulations. Additionally, a knowledge of basic Control Systems and Physical Modeling with Simscape will also be helpful.
43+
It is expected that students going through this course should be familiar with the basics of MATLAB programming and working with the Simulink environment. They should also have a basic understanding of ordinary differential equations, physics, and numerical simulations. Additionally, a knowledge of basic Control Systems and Physical Modeling with Simscape will also be helpful.
4544

4645

4746
To help with the background requirements, Online Self\-Paced Courses are available on MATLAB Academy, which the students can use to learn more:
@@ -79,7 +78,7 @@ To help with the background requirements, Online Self\-Paced Courses are availab
7978
- [Control System Modeling Essentials](https://matlabacademy.mathworks.com/details/control-system-modeling-essentials/otmlslcsme)
8079
- [PID Control Techniques](https://matlabacademy.mathworks.com/details/pid-control-techniques/otmlslpct)
8180

82-
Each of these courses awards a certificate upon completion. The courses can also be assigned as homework.
81+
Each of these courses awards a certificate upon completion. The courses can also be assigned as homework alongside the course.
8382

8483
<a id="H_330E72C3"></a>
8584

@@ -91,16 +90,16 @@ Use the [<img src="Images/OpenInMO.png" width="136" alt="OpenInMO.png">](https:/
9190

9291
### **On Desktop:**
9392

94-
Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts, and double\-click [UAV.prj](<matlab: openProject("UAV.prj")>). It will add the appropriate files to your MATLAB path, set up your starting folder, and open an app that asks you where you would like to start.
93+
Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts and double\-click on [UAV.prj](<matlab: openProject("UAV.prj")>). It will add the appropriate files to your MATLAB path, set up your starting directory, and open an app that asks you where you would like to start.
9594

9695

97-
Ensure you have all the required products ([listed below](#H_E850B4FF)) installed. If you need to include a product, use the Add\-On Explorer to add it. To install an add\-on, go to the **Home** tab and select <img src="Images/AddOnsIcon.png" width="16" alt="AddOnsIcon.png"> **Add-Ons** > **Get Add-Ons**.
96+
Ensure you have all the required products ([listed below](#H_E850B4FF)) installed. If you need to include a product, add it using the Add\-On Explorer. To install an add\-on, go to the **Home** tab and select <img src="Images/AddOnsIcon.png" width="16" alt="AddOnsIcon.png"> **Add-Ons** > **Get Add-Ons**.
9897

9998
<a id="H_E850B4FF"></a>
10099

101100
## Products
102101

103-
[MATLAB®](http://www.mathworks.com/products/matlab.html), [Simulink®](https://www.mathworks.com/products/simulink.html), [Stateflow®](https://www.mathworks.com/products/stateflow.html), [Aerospace Blockset](https://www.mathworks.com/products/aerospace-blockset.html), and [Simulink® Real\-Time™](https://www.mathworks.com/products/simulink-real-time.html) are used throughout. The [RigidTransforms](#M_5db9) script also uses the [Image Processing Toolbox™](https://www.mathworks.com/products/image-processing.html), and the [Computer Vision Toolbox™](https://www.mathworks.com/products/computer-vision.html).
102+
[MATLAB®](http://www.mathworks.com/products/matlab.html), [Simulink®](https://www.mathworks.com/products/simulink.html), [Stateflow®](https://www.mathworks.com/products/stateflow.html), [Aerospace Blockset](https://www.mathworks.com/products/aerospace-blockset.html), and [Simulink® Real\-Time™](https://www.mathworks.com/products/simulink-real-time.html) are used throughout. The [RigidTransforms](#M_5db9) script also uses the [Image Processing Toolbox™](https://www.mathworks.com/products/image-processing.html), and the [Computer Vision Toolbox™](https://www.mathworks.com/products/computer-vision.html). The [Trajectory Generation](#M_3cef) script also uses the [Robotics System Toolbox™](https://www.mathworks.com/products/robotics.html). The [QuadcopterBasics](#M_531f) script and [PropellerModel](#M_72c8) script also use the [Symbolic Math Toolbox™](https://www.mathworks.com/products/symbolic.html).
104103

105104
<a id="H_E8C62B23"></a>
106105

@@ -126,12 +125,12 @@ Introduction to mathematical modeling with six degrees of freedom.
126125

127126
||||
128127
| :-- | :-- | :-- |
129-
| <img src="Images/SixDOFBlock.png" width="171" alt="SixDOFBlock.png"> <br> | **In this script, students will...** <br> $\bullet$ Learn about movement in 6 degrees of freedom. <br> | **Models referenced** <br> $\bullet$ Modeling a Six Degree of Freedom Motion Platform <br> |
128+
| <img src="Images/SixDOFBlock.png" width="171" alt="SixDOFBlock.png"> <br> | **In this script, students will...** <br> $\bullet$ Learn about movement in 6 degrees\-of\-freedom. <br> | **Models referenced** <br> $\bullet$ Modeling a Six Degree of Freedom Motion Platform <br> |
130129

131130
<a id="TMP_8a3f"></a>
132131

133132
## **Modeling a Quadcopter**
134-
<a id="TMP_1dbc"></a>
133+
<a id="M_72c8"></a>
135134

136135
### **3.** [**Propeller Model**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Quadcopter-Modeling-Simulation​&project=UAV.prj&file=Scripts/PropellerModel.mlx)
137136

@@ -141,7 +140,7 @@ Create a simple propeller model using blade element theory and dimensional analy
141140
| :-- | :-- | :-- |
142141
| <img src="Images/PropellerBlock.png" width="171" alt="PropellerBlock.png"> <br> | **In this script, students will...** <br> $\bullet$ Construct a minimal physical model of a quadcopter propeller. <br> $\bullet$ Understand how rotor speed produces thrust and torque. <br> $\bullet$ Understand how thrust and torque depend on the width of a rotor. <br> | **Models referenced** <br> $\bullet$ [SimplePropellerModel.slx](./Models/SimplePropellerModel.slx) <br> |
143142

144-
<a id="TMP_2d09"></a>
143+
<a id="M_531f"></a>
145144

146145
### **4.** [**Quadcopter Basics**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Quadcopter-Modeling-Simulation​&project=UAV.prj&file=Scripts/QuadcopterBasics.mlx)
147146

@@ -165,7 +164,7 @@ Explore the implications of moving in a 3D world.
165164

166165
### **6.** [**Quadcopter Control**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Quadcopter-Modeling-Simulation​&project=UAV.prj&file=Scripts/QuadcopterControl.mlx)
167166

168-
Investigate the use of PID control systems on a quadcopter.
167+
Investigate using PID control systems on a quadcopter.
169168

170169
||||
171170
| :-- | :-- | :-- |
@@ -184,22 +183,22 @@ Improve the fidelity of a quadcopter model with Simscape elements.
184183
| :-- | :-- | :-- |
185184
| <img src="Images/SimscapeFamily.png" width="171" alt="SimscapeFamily.png"> <br> | **In this script, students will...** <br> $\bullet$ Use pulse width modulation on a DC motor <br> $\bullet$ Model a propeller in Simscape <br> | **Models referenced** <br> $\bullet$ Build and Simulate a Simple DC Motor <br> $\bullet$ [Propeller\_Model.slx](./Models/Propeller_Model.slx) <br> $\bullet$ [Propeller\_Ref\_Speed.slx](./Models/Propeller_Ref_Speed.slx) <br> |
186185

187-
<a id="TMP_4870"></a>
186+
<a id="M_3cef"></a>
188187

189188
### **8.** [**Trajectory Generation**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Quadcopter-Modeling-Simulation​&project=UAV.prj&file=Scripts/ExampleCollectionOnTrajectories.mlx)
190189

191190
Explore two documentation examples on trajectory generation
192191

193192
||||
194193
| :-- | :-- | :-- |
195-
| <img src="Images/MinimumJerk.png" width="171" alt="MinimumJerk.png"> <br> | **In this script, students will...** <br> $\bullet$ Explore the effects of planning trajectories to minimize jerk <br> $\bullet$ Learn about Simscape Results Explorer, spatial contact forces, and applications of multibody modeling <br> | **Models referenced** <br> $\bullet$ Generate Minimum Jerk Trajectory <br> $\bullet$ Package Delivery Quadcopter Example <br> |
194+
| <img src="Images/MinimumJerk.png" width="171" alt="MinimumJerk.png"> <br> | **In this script, students will...** <br> $\bullet$ Explore the effects of planning trajectories to minimize jerk <br> $\bullet$ Learn about Simscape Results Explorer, spatial contact forces and applications of multibody modeling <br> | **Models referenced** <br> $\bullet$ Generate Minimum Jerk Trajectory <br> $\bullet$ Package Delivery Quadcopter Example <br> |
196195

197196
<a id="TMP_0492"></a>
198197

199198
### **9.** [**Quadcopter Package Delivery**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Quadcopter-Modeling-Simulation​&project=UAV.prj&file=Scripts/QuadcopterFromFEX.mlx)
200199
||||
201200
| :-- | :-- | :-- |
202-
| <img src="Images/Quadcopter.png" width="171" alt="Quadcopter.png"> <br> | **In this script, students will...** <br> $\bullet$ Explore the fully implemented model to see the various subsystems: electrical, mechanical, and maneuver controller. <br> $\bullet$ Work on exercises on motor sizing, testing stability and range, integrating a 3D propeller, and more. <br> | **Models referenced** <br> $\bullet$ Quadcopter Drone Model in Simscape <br> |
201+
| <img src="Images/Quadcopter.png" width="171" alt="Quadcopter.png"> <br> | **In this script, students will...** <br> $\bullet$ Explore the fully implemented model to see the various subsystems \- electrical, mechanical and maneuver controller. <br> $\bullet$ Work on exercises on motor sizing, testing stability and range, integrating a 3D propeller, and more. <br> | **Models referenced** <br> $\bullet$ Quadcopter Drone Model in Simscape <br> |
203202

204203
<a id="TMP_89b5"></a>
205204

@@ -225,7 +224,7 @@ Explore a variety of high\- and low\-fidelity scenarios.
225224

226225
## [**Next Steps**](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Quadcopter-Modeling-Simulation​&project=UAV.prj&file=Scripts/NextSteps.mlx)
227226

228-
Suggest additional directions that students may be interested in exploring, including Advanced Control, Working with ROS and Gazebo, and the Challenge Projects.
227+
Suggest additional directions that students may be interested in exploring including Advanced Control, Working with ROS and Gazebo, and the Challenge Projects.
229228

230229
<a id="H_F61733D7"></a>
231230

README.mlx

84 Bytes
Binary file not shown.

SoftwareTests/PreFiles/PreExampleCollectionOnTrajectories.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@
33
KnownIssuesID = "";
44
% ---- Pre-run commands -----
55

6+
open = @(str)MyOpen(str);
7+
8+
function MyOpen(str)
9+
assert(exist(str,"file"))
10+
disp("Open " + str)
11+
end

SoftwareTests/PreFiles/PreExampleCollectionOnTrajectoriesSoln.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@
33
KnownIssuesID = "";
44
% ---- Pre-run commands -----
55

6+
open = @(str)MyOpen(str);
7+
8+
function MyOpen(str)
9+
assert(exist(str,"file"))
10+
disp("Open " + str)
11+
end

SoftwareTests/PreFiles/PreQuadcopterFromFEX.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@
44
% ---- Pre-run commands -----
55
DownloadExampleFromFileExchange = @(dir,URL,proj) DownloadSpoof(dir,URL,proj);
66

7+
open = @(str)MyOpen(str);
8+
79
function DownloadSpoof(dir,URL,proj)
810
disp("Pretend downloading example to " + dir + " from " + URL)
911
disp("Then pretend running the project: " + proj)
1012
end
13+
14+
function MyOpen(str)
15+
assert(exist(str,"file"))
16+
disp("Open " + str)
17+
end

SoftwareTests/PreFiles/PreQuadcopterFromFEXSoln.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@
44
% ---- Pre-run commands -----
55
DownloadExampleFromFileExchange = @(dir,URL,proj) DownloadSpoof(dir,URL,proj);
66

7+
open = @(str)MyOpen(str);
8+
79
function DownloadSpoof(dir,URL,proj)
810
disp("Pretend downloading example to " + dir + " from " + URL)
911
disp("Then pretend running the project: " + proj)
1012
end
13+
14+
function MyOpen(str)
15+
assert(exist(str,"file"))
16+
disp("Open " + str)
17+
end

SoftwareTests/PreFiles/PreRigidTransforms.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@
33
KnownIssuesID = "";
44
% ---- Pre-run commands -----
55

6+
open = @(str)MyOpen(str);
7+
8+
function MyOpen(str)
9+
assert(exist(str,"file"))
10+
disp("Open " + str)
11+
end

SoftwareTests/PreFiles/PreRigidTransformsSoln.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@
33
KnownIssuesID = "";
44
% ---- Pre-run commands -----
55

6+
open = @(str)MyOpen(str);
7+
8+
function MyOpen(str)
9+
assert(exist(str,"file"))
10+
disp("Open " + str)
11+
end

SoftwareTests/PreFiles/PreScenarioGeneration.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@
33
KnownIssuesID = "";
44
% ---- Pre-run commands -----
55

6+
open = @(str)MyOpen(str);
7+
8+
function MyOpen(str)
9+
assert(exist(str,"file"))
10+
disp("Open " + str)
11+
end

0 commit comments

Comments
 (0)