-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSolar.html
More file actions
260 lines (203 loc) · 12.3 KB
/
Solar.html
File metadata and controls
260 lines (203 loc) · 12.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
<!DOCTYPE HTML>
<!--
Arcana by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>Solar UAV - SUAVE Tutorial</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="https://suave.stanford.edu/assets/css/main.css" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-132339206-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-132339206-1');
</script>
</head>
<body class="is-preload">
<div id="page-wrapper">
<!-- Header -->
<div id="header">
<!-- Logo -->
<a hidden id="logo">SUAVE</a>
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="https://suave.stanford.edu/index.html"> SUAVE</a></li>
<li><a href="https://suave.stanford.edu/download.html">Download</a></li>
<li class="current"><a href="https://suave.stanford.edu/tutorials.html">Tutorials</a></li>
<li><a href="https://suave.stanford.edu/documentation.html">Documentation</a></li>
<li><a href="https://suave.stanford.edu/forum.html">Forum</a></li>
<li><a href="https://suave.stanford.edu/publications.html">Publications</a></li>
<li><a href="https://github.com/suavecode/SUAVE">
<span class="icon2 icon-github">
<img src="https://suave.stanford.edu/images/github_white.svg">
</span>
</a></li>
<li><a href="https://ci.appveyor.com/project/planes/suave">
<span class="icon2 icon-appveyor">
<img src="images/appveyor-logo.svg">
</span>
</a></li>
<li><a href="https://coveralls.io/github/suavecode/SUAVE">
<span class="icon2 icon-coveralls">
<img src="https://suave.stanford.edu/images/coveralls.svg">
</span>
</a></li>
</ul>
</nav>
</div>
<!-- Main -->
<section class="wrapper style1">
<div class="container">
<div id="content">
<!-- Content -->
<article>
<h2 id="introduction">Introduction</h2>
<p>The purpose of this tutorial is to educate users on how to setup a preconfigured solar energy network to work with a high altitude solar UAV. In this tutorial it is assumed that the user has some familiarity with SUAVE having completed the fundamental tutorial for the Boeing 737-800. You will learn about setting up the following:</p>
<ul>
<li>Solar missions,</li>
<li>Human powered/solar weight estimation,</li>
<li>Boundary layer transition,</li>
<li>Solar panels,</li>
<li>Batteries,</li>
<li>Electric motors,</li>
<li>Propellers,</li>
<li>Electric network integration in a solar UAV</li>
</ul>
<p>Because of the flexible nature of SUAVE, the approach shown is just one way to setup the UAV for analysis. By experimenting and eventually developing your own code you will be able to do far more than what is shown in this tutorial. The original script can be found in the tutorial repository as tut_solar_uav.py.</p>
<h2 id="vehicle-and-mission">Vehicle and Mission</h2>
<p>The vehicle is similar to the Qinetiq Zephyr but far larger at 40 meters in wing span and a weight of 200 kg. However, it does carry double the payload of the Zephyr at 5 kg and accounts for constant payload power usage. The battery energy density is set to an optimistic estimate of 450 Watt-hours per kg. Additionally, 90 percent of the wings are covered with solar panels that have a 25 percent efficiency.</p>
<p>This mission exercises the methods developed for solar radiation estimation, propeller and motor integration, as well as the human powered aircraft weight estimation. The mission setup is a constant altitude cruise at 15 km at Mach 0.12 for about 24 hours. The location is over the California Bay Area during the summer solstice.</p>
<h2 id="setup">Setup</h2>
<p>This tutorial highlights the differences between setting up a typical commercial aircraft like a Boeing 737 and a solar UAV.</p>
<h3 id="mission-setup">Mission Setup</h3>
<p>For a solar UAV, the starting location as well as the day and time are critical. So the first segment must be modified to include this information. It is important to note that the start times provided are in “Zulu” time or Greenwich Mean Time. This is typical for aircraft navigation to prevent time zone errors and ambiguity.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>segment.state.numerics.number_control_points = 64
segment.start_time = time.strptime("Tue, Jun 21 11:30:00 2020", "%a, %b %d %H:%M:%S %Y",)
segment.altitude = 15.0 * Units.km
segment.mach = 0.12
segment.distance = 3050.0 * Units.km
segment.battery_energy = vehicle.propulsors.solar.battery.max_energy*0.2 #Charge the battery to start
segment.latitude = 37.4300 # this defaults to degrees (do not use Units.degrees)
segment.longitude = -122.1700 # this defaults to degrees
</code></pre></div></div>
<p>Additionally, this mission is highly simplified. It consists of only one mission segment. To provide ample resolution, the number of control points has been increased to 64.</p>
<h3 id="structural-weight-sizing">Structural Weight Sizing</h3>
<p>The vehicle sizing of the human powered aircraft or solar UAV requires the dimensions of the vehicle like in other weight estimation methods. However, it also requires information about the number of wing ribs and the number of end ribs. The end ribs are relevant for wing designs where the sections can come apart for transportation.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>wing.number_ribs = 26.
wing.number_end_ribs = 2.
</code></pre></div></div>
<h3 id="wing-boundary-layer-transition">Wing Boundary Layer Transition</h3>
<p>The transition location of the boundary layer can have a great impact on the drag of the wing. This is especially important in properly designed, low Reynolds number flows, where laminar flow can be extended for larger regions of the surface. The code snippet below is how surfaces have transition points set. These are estimates provided from the designer based on experience.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>wing.transition_x_upper = 0.6
wing.transition_x_lower = 1.0
</code></pre></div></div>
<h3 id="solar-panels">Solar Panels</h3>
<p>The solar panel model is quite simple and only requires a capture area, an efficiency, and mass. In this case we assume that 90% of the wing area is covered in solar panels.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>panel.area = vehicle.reference_area * 0.9
panel.efficiency = 0.25
panel.mass_properties.mass = panel.area*(0.60 * Units.kg)
</code></pre></div></div>
<h3 id="batteries">Batteries</h3>
<p>The batteries are set up with knowledge of the mass of the battery and the specific energy. In this case a futuristic specific energy of 600 Watt-hr/kg is set for lithium ion type batteries. The resistance of the batteries is another important input to determine charging and discharging losses.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>bat = SUAVE.Components.Energy.Storages.Batteries.Constant_Mass.Lithium_Ion()
bat.mass_properties.mass = 90.0 * Units.kg
bat.specific_energy = 800. * Units.Wh/Units.kg
bat.resistance = 0.05
bat.max_voltage = 45.0
initialize_from_mass(bat,bat.mass_properties.mass)
net.battery = bat
</code></pre></div></div>
<h3 id="propeller">Propeller</h3>
<p>To setup the propeller we will actually design an optimized propeller. This is done through the methods provided by Adkins and Liebeck. The attributes of the propeller design are then seeded to the motor and network to accelerate convergence of the propeller and motor models.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>prop = SUAVE.Components.Energy.Converters.Propeller()
prop.number_blades = 2.0
prop.freestream_velocity = 40.0 * Units['m/s']# freestream
prop.angular_velocity = 150. * Units['rpm']
prop.tip_radius = 4.25 * Units.meters
prop.hub_radius = 0.05 * Units.meters
prop.design_Cl = 0.7
prop.design_altitude = 14.0 * Units.km
prop.design_thrust = None
prop.design_power = 3500.0 * Units.watts
prop = propeller_design(prop)
net.propeller = prop
</code></pre></div></div>
<h3 id="motor">Motor</h3>
<p>This motor model relies on data that is generally available from motor manufacturers. This includes the resistance, no load current, and the speed constant. Additionally, any gearbox is specified here and basic information about the propeller is entered here to help inform the solver when converging the motor and propeller analyses.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>motor = SUAVE.Components.Energy.Converters.Motor()
motor.resistance = 0.008
motor.no_load_current = 4.5 * Units.ampere
motor.speed_constant = 120. * Units['rpm'] # RPM/volt converted to (rad/s)/volt
motor.propeller_radius = prop.tip_radius
motor.propeller_Cp = prop.power_coefficient
motor.gear_ratio = 12. # Gear ratio
motor.gearbox_efficiency = .98 # Gear box efficiency
motor.expected_current = 160. # Expected current
motor.mass_properties.mass = 2.0 * Units.kg
net.motor = motor
</code></pre></div></div>
<h2 id="running">Running</h2>
<p>As you should be familiar with by now, running this script is just like any other.</p>
<div class="highlight_code"><div class="highlight_code"><pre><code>python tut_solar_uav.py
</code></pre></div></div>
<h2 id="results">Results</h2>
<p>If all went well the script ran and it provided you with more plots than you ever wanted. Here are some of the plots that were generated when we ran it:</p>
<p><img src="/images/Solar_Flux_Power_Energy.png" alt="solar_flux" /></p>
<br>
</article>
</div>
</div>
</section>
<!-- Footer -->
<div id="footer">
<div class="container">
<div class="row">
<section class="col-3 col-6-narrower col-12-mobilep">
<h3>Download</h3>
<ul class="links">
<li><a href="https://suave.stanford.edu/registration.html">Registration</a></li>
<li><a href="https://github.com/suavecode/SUAVE">Github Site</a></li>
</ul>
</section>
<section class="col-3 col-6-narrower col-12-mobilep">
<h3>Learn</h3>
<ul class="links">
<li><a href="https://suave.stanford.edu/tutorials.html">Tutorials</a></li>
<li><a href="https://suave.stanford.edu/documentation.html">Documentation</a></li>
<li><a href="https://suave.stanford.edu/forum.html">Forum</a></li>
</ul>
</section>
<section class="col-3 col-6-narrower col-12-mobilep">
<h3>External Links</h3>
<ul class="links">
<li><a href="http://adl.stanford.edu">Aerospace Design Lab</a></li>
<li><a href="https://aa.stanford.edu">Stanford Aero/Astro</a></li>
<li><a href="https://su2code.github.io">SU2</a></li>
</ul>
</section>
</div>
<!-- Copyright -->
<div class="copyright">
<ul class="menu">
<li>© <script>document.write(new Date().getFullYear())</script> Stanford Aerospace Design Lab <br/>
All rights reserved</li>
</ul>
</div>
</div>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.dropotron.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>