Skip to content

Commit 759346d

Browse files
committed
Add drone light show example
1 parent 8780c61 commit 759346d

16 files changed

Lines changed: 14204 additions & 0 deletions

‎Examples/drone-show/DOCUMENTATION.md‎

Lines changed: 1736 additions & 0 deletions
Large diffs are not rendered by default.

‎Examples/drone-show/DroneLightShowApp.m‎

Lines changed: 7872 additions & 0 deletions
Large diffs are not rendered by default.

‎Examples/drone-show/DroneShowExample.m‎

Lines changed: 336 additions & 0 deletions
Large diffs are not rendered by default.
722 KB
Binary file not shown.

‎Examples/drone-show/README.md‎

Lines changed: 364 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
function createFleetBusObjects(N_uav, nSat)
2+
% createFleetBusObjects - Define bus objects for fleet telemetry
3+
%
4+
% Creates bus objects in the base workspace for use by the
5+
% MultiUAV_DroneShow model.
6+
%
7+
% nSat is the number of satellite slots in GNSSObservableBus (default rtk_n_sat's
8+
% shipped value, 8). It is separate from N_uav because the GNSS interface is a
9+
% property of the base station, not of the fleet.
10+
11+
if nargin < 2
12+
nSat = 8;
13+
end
14+
15+
%% VehicleStateBus - Per-UAV estimated state
16+
elems = Simulink.BusElement;
17+
elems(1).Name = 'Position';
18+
elems(1).Dimensions = [3 1];
19+
elems(1).DataType = 'double';
20+
21+
elems(2) = Simulink.BusElement;
22+
elems(2).Name = 'Velocity';
23+
elems(2).Dimensions = [3 1];
24+
elems(2).DataType = 'double';
25+
26+
elems(3) = Simulink.BusElement;
27+
elems(3).Name = 'Attitude';
28+
elems(3).Dimensions = [3 1];
29+
elems(3).DataType = 'double';
30+
31+
elems(4) = Simulink.BusElement;
32+
elems(4).Name = 'AngularRate';
33+
elems(4).Dimensions = [3 1];
34+
elems(4).DataType = 'double';
35+
36+
elems(5) = Simulink.BusElement;
37+
elems(5).Name = 'PositionAccuracy';
38+
elems(5).Dimensions = [1 1];
39+
elems(5).DataType = 'double';
40+
41+
elems(6) = Simulink.BusElement;
42+
elems(6).Name = 'RTKMode';
43+
elems(6).Dimensions = [1 1];
44+
elems(6).DataType = 'double';
45+
46+
VehicleStateBus = Simulink.Bus;
47+
VehicleStateBus.Elements = elems;
48+
assignin('base','VehicleStateBus', VehicleStateBus);
49+
50+
%% FleetTelemetryBus - Aggregated fleet state
51+
elems2 = Simulink.BusElement;
52+
elems2(1).Name = 'Positions';
53+
elems2(1).Dimensions = [N_uav 3];
54+
elems2(1).DataType = 'double';
55+
56+
elems2(2) = Simulink.BusElement;
57+
elems2(2).Name = 'Velocities';
58+
elems2(2).Dimensions = [N_uav 3];
59+
elems2(2).DataType = 'double';
60+
61+
elems2(3) = Simulink.BusElement;
62+
elems2(3).Name = 'Attitudes';
63+
elems2(3).Dimensions = [N_uav 3];
64+
elems2(3).DataType = 'double';
65+
66+
elems2(4) = Simulink.BusElement;
67+
elems2(4).Name = 'LEDColors';
68+
elems2(4).Dimensions = [N_uav 3];
69+
elems2(4).DataType = 'double';
70+
71+
elems2(5) = Simulink.BusElement;
72+
elems2(5).Name = 'TrackingErrors';
73+
elems2(5).Dimensions = [N_uav 1];
74+
elems2(5).DataType = 'double';
75+
76+
elems2(6) = Simulink.BusElement;
77+
elems2(6).Name = 'MinSeparation';
78+
elems2(6).Dimensions = [1 1];
79+
elems2(6).DataType = 'double';
80+
81+
elems2(7) = Simulink.BusElement;
82+
elems2(7).Name = 'CommStatus';
83+
elems2(7).Dimensions = [N_uav 1];
84+
elems2(7).DataType = 'double';
85+
86+
FleetTelemetryBus = Simulink.Bus;
87+
FleetTelemetryBus.Elements = elems2;
88+
assignin('base','FleetTelemetryBus', FleetTelemetryBus);
89+
90+
%% MultirotorGuidanceControlBus - Control commands for guidance model (vectorized)
91+
elems3(1) = Simulink.BusElement;
92+
elems3(1).Name = 'Roll';
93+
elems3(1).Dimensions = [1 N_uav];
94+
elems3(1).DataType = 'double';
95+
96+
elems3(2) = Simulink.BusElement;
97+
elems3(2).Name = 'Pitch';
98+
elems3(2).Dimensions = [1 N_uav];
99+
elems3(2).DataType = 'double';
100+
101+
elems3(3) = Simulink.BusElement;
102+
elems3(3).Name = 'YawRate';
103+
elems3(3).Dimensions = [1 N_uav];
104+
elems3(3).DataType = 'double';
105+
106+
elems3(4) = Simulink.BusElement;
107+
elems3(4).Name = 'Thrust';
108+
elems3(4).Dimensions = [1 N_uav];
109+
elems3(4).DataType = 'double';
110+
111+
MultirotorGuidanceControlBus = Simulink.Bus;
112+
MultirotorGuidanceControlBus.Elements = elems3;
113+
assignin('base','MultirotorGuidanceControlBus', MultirotorGuidanceControlBus);
114+
115+
%% MultirotorGuidanceEnvironmentBus - Environment inputs for guidance model (vectorized)
116+
elems4(1) = Simulink.BusElement;
117+
elems4(1).Name = 'Gravity';
118+
elems4(1).Dimensions = [1 N_uav];
119+
elems4(1).DataType = 'double';
120+
121+
MultirotorGuidanceEnvironmentBus = Simulink.Bus;
122+
MultirotorGuidanceEnvironmentBus.Elements = elems4;
123+
assignin('base','MultirotorGuidanceEnvironmentBus', MultirotorGuidanceEnvironmentBus);
124+
125+
%% MultirotorGuidanceStateBus - Output state from guidance model (vectorized)
126+
elems5(1) = Simulink.BusElement;
127+
elems5(1).Name = 'WorldPosition';
128+
elems5(1).Dimensions = [3 N_uav];
129+
elems5(1).DataType = 'double';
130+
131+
elems5(2) = Simulink.BusElement;
132+
elems5(2).Name = 'WorldVelocity';
133+
elems5(2).Dimensions = [3 N_uav];
134+
elems5(2).DataType = 'double';
135+
136+
elems5(3) = Simulink.BusElement;
137+
elems5(3).Name = 'EulerZYX';
138+
elems5(3).Dimensions = [3 N_uav];
139+
elems5(3).DataType = 'double';
140+
141+
elems5(4) = Simulink.BusElement;
142+
elems5(4).Name = 'BodyAngularRateRPY';
143+
elems5(4).Dimensions = [3 N_uav];
144+
elems5(4).DataType = 'double';
145+
146+
elems5(5) = Simulink.BusElement;
147+
elems5(5).Name = 'Thrust';
148+
elems5(5).Dimensions = [1 N_uav];
149+
elems5(5).DataType = 'double';
150+
151+
MultirotorGuidanceStateBus = Simulink.Bus;
152+
MultirotorGuidanceStateBus.Elements = elems5;
153+
assignin('base','MultirotorGuidanceStateBus', MultirotorGuidanceStateBus);
154+
155+
%% GNSSObservableBus - the RTK engine's input contract
156+
% Defined in gnssObservableBus.m rather than inline, so the definition has one home and any
157+
% caller can build the same bus into its own model workspace without writing into base.
158+
% Read that file for the contract: undifferenced, metres, row 1 base and row 2 rover.
159+
assignin('base', 'GNSSObservableBus', gnssObservableBus(nSat));
160+
161+
end

0 commit comments

Comments
 (0)