mirror of
https://gitlab.com/Anson-Projects/projects.git
synced 2025-06-15 22:46:48 +00:00
finished eclipse det
This commit is contained in:
parent
3da697bfeb
commit
66efb062d4
@ -1,24 +1,3 @@
|
||||
|
||||
@book{shackelford_introduction_2015,
|
||||
address = {Boston},
|
||||
edition = {Eighth edition},
|
||||
title = {Introduction to materials science for engineers},
|
||||
isbn = {9780133826654},
|
||||
publisher = {Pearson},
|
||||
author = {Shackelford, James F.},
|
||||
year = {2015},
|
||||
keywords = {Materials},
|
||||
}
|
||||
|
||||
@book{curtis_orbital_2021,
|
||||
title = {Orbital mechanics for engineering students},
|
||||
isbn = {9780128240250 9780323853453 9780081021330},
|
||||
language = {English},
|
||||
author = {Curtis, Howard D},
|
||||
year = {2021},
|
||||
note = {OCLC: 1235349370},
|
||||
}
|
||||
|
||||
@misc{ariss,
|
||||
title = {{ARISS} {TLE}},
|
||||
shorttitle = {{ARISS}},
|
||||
@ -27,3 +6,14 @@
|
||||
journal = {Amateur Radio on the International Space Station},
|
||||
note = {publisher: ARISS},
|
||||
}
|
||||
|
||||
@book{vallado,
|
||||
address = {Dordrecht},
|
||||
title = {Fundamentals of {Astrodynamics} and {Applications}, 2nd. ed.},
|
||||
isbn = {0-07-066829-9},
|
||||
publisher = {Microcosm, Inc},
|
||||
author = {Vallado, David A.},
|
||||
editor = {Larson, Wiley},
|
||||
collaborator = {McClain, Wayne},
|
||||
year = {1997},
|
||||
}
|
@ -6,7 +6,6 @@ draft: false
|
||||
author:
|
||||
- name: Anson Biggs
|
||||
url: https://ansonbiggs.com
|
||||
repository_url: https://gitlab.com/lander-team/air-prop-simulation
|
||||
date: 05-01-2021
|
||||
fig_width: 6
|
||||
fig_align: "center"
|
||||
@ -21,7 +20,7 @@ creative_commons: CC BY
|
||||
preview: preview.png
|
||||
---
|
||||
|
||||
Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space with no solar radiation to power the solar panels and keep the spacecraft from freezing.
|
||||
Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space where it will receive no solar radiation to power the solar panels and keep the spacecraft from freezing.
|
||||
|
||||
```{r setup, include=FALSE}
|
||||
knitr::opts_chunk$set(echo = TRUE, results = 'hide')
|
||||
@ -33,15 +32,15 @@ julia_setup(JULIA_HOME = "/opt/julia-1.6.0/bin/")
|
||||
|
||||

|
||||
|
||||
The above image is a simple representation of what an eclipse is. You'll notice there is the Umbra which is complete darkness, then the Penumbra which is a shadow of varying darkness, and then the rest of the orbit is in complete sunlight. For this example I will be using the ISS which has a very low orbit so the Penumbra isn't much of a problem. You can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.
|
||||
The above image is a simple representation of what an eclipse is. First, you'll notice the Umbra is complete darkness, then the Penumbra, which is a shadow of varying darkness, and then the rest of the orbit is in full sunlight. For this example, I will be using the ISS, which has a very low orbit, so the Penumbra isn't much of a problem. However, you can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.
|
||||
|
||||

|
||||
|
||||
Here is a more detailed view of the eclipse that will make it easier to explain the code. There are 2 Position vectors and 2 radius's that need to be known for simple eclipse determination. There are more advanced cases where the atmosphere of the body your orbiting can greatly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun, but for this example we will keep it simple since those have very little affect for the ISS's orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radius's of the Sun and Body (In this case Earth) respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination its important to calculate this at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate [Ephemerides](https://ssd.jpl.nasa.gov/?ephemerides) in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbitted, to the center of our spacecraft.
|
||||
Here is a more detailed view of the eclipse that will make it easier to explain what is going on. There are 2 Position vectors, and 2 radius that need to be known for simple eclipse determination. More advanced cases where the atmosphere of the body your orbiting can significantly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun. However, we will keep it simple for this example since they have minimal effect on the ISS’s orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radius of the Sun and Body (In this case Earth), respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination it is important to calculate the ephemeris at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate [Ephemerides](https://ssd.jpl.nasa.gov/?ephemerides) in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbited, to the center of our spacecraft.
|
||||
|
||||
## The Code
|
||||
|
||||
```{julia, code_folding=TRUE}
|
||||
```{julia imports, code_folding=TRUE}
|
||||
using Unitful
|
||||
using LinearAlgebra
|
||||
using SatelliteToolbox
|
||||
@ -50,9 +49,9 @@ using Colors
|
||||
theme(:ggplot2)
|
||||
```
|
||||
|
||||
In order to get the orbit for the ISS I used a [Two-Line Element](https://en.wikipedia.org/wiki/Two-line_element_set) which is a data format for explaining orbits. the US Joint Space Operations Center makes these widely available, but https://live.ariss.org/tle/ makes the TLE for the ISS way more accessible [@ariss]. The Julia Package [SatelliteToolbox.jl](https://github.com/JuliaSpace/SatelliteToolbox.jl) makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the `tle` string macro like below and now we have access to the information to start making our ISS orbit.
|
||||
To get the orbit for the ISS, I used a [Two-Line Element](https://en.wikipedia.org/wiki/Two-line_element_set) which is a data format for explaining orbits. The US Joint Space Operations Center makes these widely available, but https://live.ariss.org/tle/ makes the TLE for the ISS way more accessible [@ariss]. The Julia Package [SatelliteToolbox.jl](https://github.com/JuliaSpace/SatelliteToolbox.jl) makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the `tle` string macro like below, we now have access to the information to start making our ISS orbit.
|
||||
|
||||
```{julia, results='show'}
|
||||
```{julia ISS, results='show'}
|
||||
ISS = tle"""
|
||||
ISS (ZARYA)
|
||||
1 25544U 98067A 21103.84943184 .00000176 00000-0 11381-4 0 9990
|
||||
@ -60,23 +59,21 @@ ISS (ZARYA)
|
||||
"""
|
||||
```
|
||||
|
||||
Now that we have the TLE we can pass that into SatelliteToolbox's orbit propagator. Before we can propagate the orbit we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day so using that we can calculate the amount of time required for one orbit which is all that were worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.
|
||||
Now that we have the TLE, we can pass that into SatelliteToolbox's orbit propagator. Before propagating the orbit, we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day, so using that, we can calculate the amount of time required for one orbit, which is all that we're worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.
|
||||
|
||||
```{juliam result='show'}
|
||||
```{julia mean-motion, result='show'}
|
||||
ISS[1].n
|
||||
```
|
||||
|
||||
```{julia}
|
||||
```{julia orbit-propagation}
|
||||
orbit = init_orbit_propagator(Val(:twobody), ISS[1]);
|
||||
time = 0:0.1:((24 / ISS[1].n) .* 60 * 60); # ISS[1].n gives the mean motion, or orbits per day.
|
||||
o, r, v = propagate!(orbit, time);
|
||||
```
|
||||
|
||||
Now we just need way to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of pretty basic trigonometry and vector math.
|
||||
We just need to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of trigonometry and vector math that I won't bore anyone with. However, using the diagrams above and following the code in the sunlight function, you should follow what's happening. For a rigorous discussion, check out [@vallado].
|
||||
|
||||
`add more discussion about the math`
|
||||
|
||||
```{julia}
|
||||
```{julia sunlight-function}
|
||||
function sunlight(Rbody, r_sun_body, r_body_sc)
|
||||
Rsun = 695_700u"km"
|
||||
|
||||
@ -110,9 +107,9 @@ S = r .|> R -> sunlight(6371u"km", [0.5370, 1.2606, 0.5466] .* 1e8u"km", R .* u"
|
||||
|
||||
## Plotting the Results
|
||||
|
||||
The `sunlight` function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spend in the penumbra is almost insignificant.
|
||||
The `sunlight` function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spent in the penumbra is almost insignificant.
|
||||
|
||||
```{julia, code_folding=TRUE, results='show',layout="l-body-outset",fig.cap= "ISS Sunlight", preview=TRUE }
|
||||
```{julia sunlight-plot, code_folding=TRUE, results='show',layout="l-body-outset",fig.cap= "ISS Sunlight", preview=TRUE }
|
||||
# Get fancy with the line color.
|
||||
light_range = range(colorant"black", stop = colorant"orange", length = 101);
|
||||
light_colors = [light_range[unique(round(Int, 1 + s * 100))][1] for s in S];
|
||||
@ -130,21 +127,24 @@ ylabel!("Sunlight (%)");
|
||||
title!("ISS Sunlight Over a Day")
|
||||
```
|
||||
|
||||
Looking at the plot its pretty easy to see by the vertical transition from 0% to 100% that the time in the penumbra is limited, but almost counterintutively it also looks like the ISS gets more sunlight than it does darkness. Using the raw sunlight data we can actually calculate almost exactly how much time is spent in each region.
|
||||
Looking at the plot, the vertical transition from 0% to 100% makes it pretty clear that the time in the penumbra is limited. Still, almost counterintuitively, it also looks like the ISS gets more sunlight than it does darkness. So, using the raw sunlight data, we can calculate precisely how much time is spent in each region.
|
||||
|
||||
Time in Sun:
|
||||
```{julia, results='show'}
|
||||
|
||||
```{julia sun-time, results='show'}
|
||||
sun = length(S[S.==1])/length(S) * 100
|
||||
```
|
||||
|
||||
Time in Darkness:
|
||||
```{julia, results='show'}
|
||||
|
||||
```{julia dark-time, results='show'}
|
||||
umbra = length(S[S.==0])/length(S) * 100
|
||||
```
|
||||
|
||||
Time in Penumbra:
|
||||
```{julia, results='show'}
|
||||
|
||||
```{julia penum-time, results='show'}
|
||||
penumbra = 100 - umbra - sun
|
||||
```
|
||||
|
||||
The ISS spends about 62% of its time in the sun, this is because if you go back and reference the diagram at the beginning of this post you can see that the umbra is actually a cone. This is mainly due to the fact that the Sun is massive compared to the Earth, but this effect is also stronger with orbits of higher altitudes.
|
||||
This means that even with the ISS's low orbit, it still gets sunlight ~62% of the time and spends almost no time in the penumbra. This would vary a few percent depending on the time of year, but in a circular orbit like the ISS, the amount of sunlight would remain pretty constant. There are other orbits like a polar orbit, lunar orbit, or highly elliptic earth orbits that can have their time in the sunlight vary widely by the time of year.
|
||||
|
@ -111,15 +111,16 @@ code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
|
||||
<!--/radix_placeholder_meta_tags-->
|
||||
|
||||
<meta name="citation_reference" content="citation_title=ARISS TLE"/>
|
||||
<meta name="citation_reference" content="citation_title=Fundamentals of Astrodynamics and Applications, 2nd. ed.;citation_publication_date=1997;citation_publisher=Microcosm, Inc;citation_author=David A. Vallado"/>
|
||||
<!--radix_placeholder_rmarkdown_metadata-->
|
||||
|
||||
<script type="text/json" id="radix-rmarkdown-metadata">
|
||||
{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","draft","author","repository_url","date","fig_width","fig_align","output","categories","bibliography","creative_commons","preview"]}},"value":[{"type":"character","attributes":{},"value":["ISS Eclipse Determination"]},{"type":"character","attributes":{},"value":["Determining how much sunlight a body orbiting a planet is receiving.\n"]},{"type":"logical","attributes":{},"value":[false]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Anson Biggs"]},{"type":"character","attributes":{},"value":["https://ansonbiggs.com"]}]}]},{"type":"character","attributes":{},"value":["https://gitlab.com/lander-team/air-prop-simulation"]},{"type":"character","attributes":{},"value":["05-01-2021"]},{"type":"integer","attributes":{},"value":[6]},{"type":"character","attributes":{},"value":["center"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["Julia","Astrodynamics"]},{"type":"character","attributes":{},"value":["citations.bib"]},{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["preview.png"]}]}
|
||||
{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","draft","author","date","fig_width","fig_align","output","categories","bibliography","creative_commons","preview"]}},"value":[{"type":"character","attributes":{},"value":["ISS Eclipse Determination"]},{"type":"character","attributes":{},"value":["Determining how much sunlight a body orbiting a planet is receiving.\n"]},{"type":"logical","attributes":{},"value":[false]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Anson Biggs"]},{"type":"character","attributes":{},"value":["https://ansonbiggs.com"]}]}]},{"type":"character","attributes":{},"value":["05-01-2021"]},{"type":"integer","attributes":{},"value":[6]},{"type":"character","attributes":{},"value":["center"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["Julia","Astrodynamics"]},{"type":"character","attributes":{},"value":["citations.bib"]},{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["preview.png"]}]}
|
||||
</script>
|
||||
<!--/radix_placeholder_rmarkdown_metadata-->
|
||||
|
||||
<script type="text/json" id="radix-resource-manifest">
|
||||
{"type":"character","attributes":{},"value":["citations.bib","geometry.svg","iss-eclipse-determination_files/anchor-4.2.2/anchor.min.js","iss-eclipse-determination_files/bowser-1.9.3/bowser.min.js","iss-eclipse-determination_files/distill-2.2.21/template.v2.js","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-6-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png","iss-eclipse-determination_files/header-attrs-2.7/header-attrs.js","iss-eclipse-determination_files/jquery-1.11.3/jquery.min.js","iss-eclipse-determination_files/popper-2.6.0/popper.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-bundle.umd.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-light-border.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.umd.min.js","iss-eclipse-determination_files/webcomponents-2.0.0/webcomponents.js","preview.png","vectors_radiuss.svg"]}
|
||||
{"type":"character","attributes":{},"value":["citations.bib","geometry.svg","iss-eclipse-determination_files/anchor-4.2.2/anchor.min.js","iss-eclipse-determination_files/bowser-1.9.3/bowser.min.js","iss-eclipse-determination_files/distill-2.2.21/template.v2.js","iss-eclipse-determination_files/figure-html5/sunlight-plot-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-6-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png","iss-eclipse-determination_files/header-attrs-2.7/header-attrs.js","iss-eclipse-determination_files/jquery-1.11.3/jquery.min.js","iss-eclipse-determination_files/popper-2.6.0/popper.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-bundle.umd.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-light-border.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.umd.min.js","iss-eclipse-determination_files/webcomponents-2.0.0/webcomponents.js","preview.png","vectors_radiuss.svg"]}
|
||||
</script>
|
||||
<!--radix_placeholder_navigation_in_header-->
|
||||
<!--/radix_placeholder_navigation_in_header-->
|
||||
@ -1485,16 +1486,16 @@ code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
|
||||
</div>
|
||||
|
||||
<div class="d-article">
|
||||
<p>Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space with no solar radiation to power the solar panels and keep the spacecraft from freezing.</p>
|
||||
<p>Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space where it will receive no solar radiation to power the solar panels and keep the spacecraft from freezing.</p>
|
||||
<h2 id="what-is-an-eclipse">What is an Eclipse</h2>
|
||||
<figure>
|
||||
<img src="geometry.svg" alt="Geometry of an Eclipse" /><figcaption aria-hidden="true">Geometry of an Eclipse</figcaption>
|
||||
</figure>
|
||||
<p>The above image is a simple representation of what an eclipse is. You’ll notice there is the Umbra which is complete darkness, then the Penumbra which is a shadow of varying darkness, and then the rest of the orbit is in complete sunlight. For this example I will be using the ISS which has a very low orbit so the Penumbra isn’t much of a problem. You can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.</p>
|
||||
<p>The above image is a simple representation of what an eclipse is. First, you’ll notice the Umbra is complete darkness, then the Penumbra, which is a shadow of varying darkness, and then the rest of the orbit is in full sunlight. For this example, I will be using the ISS, which has a very low orbit, so the Penumbra isn’t much of a problem. However, you can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.</p>
|
||||
<figure>
|
||||
<img src="vectors_radiuss.svg" alt="Body Radius’s and Position Vectors" /><figcaption aria-hidden="true">Body Radius’s and Position Vectors</figcaption>
|
||||
</figure>
|
||||
<p>Here is a more detailed view of the eclipse that will make it easier to explain the code. There are 2 Position vectors and 2 radius’s that need to be known for simple eclipse determination. There are more advanced cases where the atmosphere of the body your orbiting can greatly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun, but for this example we will keep it simple since those have very little affect for the ISS’s orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radius’s of the Sun and Body (In this case Earth) respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination its important to calculate this at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate <a href="https://ssd.jpl.nasa.gov/?ephemerides">Ephemerides</a> in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbitted, to the center of our spacecraft.</p>
|
||||
<p>Here is a more detailed view of the eclipse that will make it easier to explain what is going on. There are 2 Position vectors, and 2 radius that need to be known for simple eclipse determination. More advanced cases where the atmosphere of the body your orbiting can significantly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun. However, we will keep it simple for this example since they have minimal effect on the ISS’s orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radius of the Sun and Body (In this case Earth), respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination it is important to calculate the ephemeris at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate <a href="https://ssd.jpl.nasa.gov/?ephemerides">Ephemerides</a> in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbited, to the center of our spacecraft.</p>
|
||||
<h2 id="the-code">The Code</h2>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<details>
|
||||
@ -1509,7 +1510,7 @@ Show code
|
||||
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>theme(<span class="op">:</span>ggplot2)</span></code></pre></div>
|
||||
</details>
|
||||
</div>
|
||||
<p>In order to get the orbit for the ISS I used a <a href="https://en.wikipedia.org/wiki/Two-line_element_set">Two-Line Element</a> which is a data format for explaining orbits. the US Joint Space Operations Center makes these widely available, but <a href="https://live.ariss.org/tle/" class="uri">https://live.ariss.org/tle/</a> makes the TLE for the ISS way more accessible <span class="citation" data-cites="ariss">(<a href="#ref-ariss" role="doc-biblioref"><span>“<span>ARISS</span> <span>TLE</span>,”</span> n.d.</a>)</span>. The Julia Package <a href="https://github.com/JuliaSpace/SatelliteToolbox.jl">SatelliteToolbox.jl</a> makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the <code>tle</code> string macro like below and now we have access to the information to start making our ISS orbit.</p>
|
||||
<p>To get the orbit for the ISS, I used a <a href="https://en.wikipedia.org/wiki/Two-line_element_set">Two-Line Element</a> which is a data format for explaining orbits. The US Joint Space Operations Center makes these widely available, but <a href="https://live.ariss.org/tle/" class="uri">https://live.ariss.org/tle/</a> makes the TLE for the ISS way more accessible <span class="citation" data-cites="ariss">(<a href="#ref-ariss" role="doc-biblioref"><span>“<span>ARISS</span> <span>TLE</span>,”</span> n.d.</a>)</span>. The Julia Package <a href="https://github.com/JuliaSpace/SatelliteToolbox.jl">SatelliteToolbox.jl</a> makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the <code>tle</code> string macro like below, we now have access to the information to start making our ISS orbit.</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb2"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>ISS <span class="op">=</span> tle<span class="st">"""</span></span>
|
||||
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="st">ISS (ZARYA)</span></span>
|
||||
@ -1519,17 +1520,16 @@ Show code
|
||||
<pre><code>1-element Vector{TLE}:
|
||||
TLE: ISS (ZARYA) (Epoch = 2021-04-13T20:23:10.911)</code></pre>
|
||||
</div>
|
||||
<p>Now that we have the TLE we can pass that into SatelliteToolbox’s orbit propagator. Before we can propagate the orbit we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day so using that we can calculate the amount of time required for one orbit which is all that were worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.</p>
|
||||
<p>Now that we have the TLE, we can pass that into SatelliteToolbox’s orbit propagator. Before propagating the orbit, we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day, so using that, we can calculate the amount of time required for one orbit, which is all that we’re worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<pre class="juliam"><code>ISS[1].n</code></pre>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>ISS[<span class="fl">1</span>].n</span></code></pre></div>
|
||||
</div>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>orbit <span class="op">=</span> init_orbit_propagator(<span class="dt">Val</span>(<span class="op">:</span>twobody)<span class="op">,</span> ISS[<span class="fl">1</span>])<span class="op">;</span></span>
|
||||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>time <span class="op">=</span> <span class="fl">0</span><span class="op">:</span><span class="fl">0.1</span><span class="op">:</span>((<span class="fl">24</span> <span class="op">/</span> ISS[<span class="fl">1</span>].n) <span class="op">.*</span> <span class="fl">60</span> <span class="op">*</span> <span class="fl">60</span>)<span class="op">;</span> <span class="co"># ISS[1].n gives the mean motion, or orbits per day.</span></span>
|
||||
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>o<span class="op">,</span> r<span class="op">,</span> v <span class="op">=</span> propagate<span class="op">!</span>(orbit<span class="op">,</span> time)<span class="op">;</span></span></code></pre></div>
|
||||
</div>
|
||||
<p>Now we just need way to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of pretty basic trigonometry and vector math.</p>
|
||||
<p><code>add more discussion about the math</code></p>
|
||||
<p>We just need to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of trigonometry and vector math that I won’t bore anyone with. However, using the diagrams above and following the code in the sunlight function, you should follow what’s happening. For a rigorous discussion, check out <span class="citation" data-cites="vallado">(<a href="#ref-vallado" role="doc-biblioref">Vallado 1997</a>)</span>.</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> sunlight(Rbody<span class="op">,</span> r_sun_body<span class="op">,</span> r_body_sc)</span>
|
||||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a> Rsun <span class="op">=</span> <span class="fl">695_700</span>u<span class="st">"km"</span></span>
|
||||
@ -1560,7 +1560,7 @@ Show code
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>S <span class="op">=</span> r .<span class="op">|></span> R <span class="op">-></span> sunlight(<span class="fl">6371</span>u<span class="st">"km"</span><span class="op">,</span> [<span class="fl">0.5370</span><span class="op">,</span> <span class="fl">1.2606</span><span class="op">,</span> <span class="fl">0.5466</span>] <span class="op">.*</span> <span class="fl">1e8</span>u<span class="st">"km"</span><span class="op">,</span> R <span class="op">.*</span> u<span class="st">"m"</span>)<span class="op">;</span></span></code></pre></div>
|
||||
</div>
|
||||
<h2 id="plotting-the-results">Plotting the Results</h2>
|
||||
<p>The <code>sunlight</code> function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spend in the penumbra is almost insignificant.</p>
|
||||
<p>The <code>sunlight</code> function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spent in the penumbra is almost insignificant.</p>
|
||||
<div class="layout-chunk" data-layout="l-body-outset">
|
||||
<details>
|
||||
<summary>
|
||||
@ -1582,35 +1582,38 @@ Show code
|
||||
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true" tabindex="-1"></a>ylabel<span class="op">!</span>(<span class="st">"Sunlight (%)"</span>)<span class="op">;</span></span>
|
||||
<span id="cb8-15"><a href="#cb8-15" aria-hidden="true" tabindex="-1"></a>title<span class="op">!</span>(<span class="st">"ISS Sunlight Over a Day"</span>)</span></code></pre></div>
|
||||
</details>
|
||||
<div class="figure"><span id="fig:unnamed-chunk-7"></span>
|
||||
<img src="iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png" alt="ISS Sunlight" width="300" data-distill-preview=1 />
|
||||
<div class="figure"><span id="fig:sunlight-plot"></span>
|
||||
<img src="iss-eclipse-determination_files/figure-html5/sunlight-plot-J1.png" alt="ISS Sunlight" width="300" data-distill-preview=1 />
|
||||
<p class="caption">
|
||||
Figure 1: ISS Sunlight
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<p>Looking at the plot its pretty easy to see by the vertical transition from 0% to 100% that the time in the penumbra is limited, but almost counterintutively it also looks like the ISS gets more sunlight than it does darkness. Using the raw sunlight data we can actually calculate almost exactly how much time is spent in each region.</p>
|
||||
Time in Sun:
|
||||
<p>Looking at the plot, the vertical transition from 0% to 100% makes it pretty clear that the time in the penumbra is limited. Still, almost counterintuitively, it also looks like the ISS gets more sunlight than it does darkness. So, using the raw sunlight data, we can calculate precisely how much time is spent in each region.</p>
|
||||
<p>Time in Sun:</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>sun <span class="op">=</span> length(S[S.<span class="op">==</span><span class="fl">1</span>])<span class="op">/</span>length(S) <span class="op">*</span> <span class="fl">100</span></span></code></pre></div>
|
||||
<pre><code>62.03323593209401</code></pre>
|
||||
</div>
|
||||
Time in Darkness:
|
||||
<p>Time in Darkness:</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb11"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>umbra <span class="op">=</span> length(S[S.<span class="op">==</span><span class="fl">0</span>])<span class="op">/</span>length(S) <span class="op">*</span> <span class="fl">100</span></span></code></pre></div>
|
||||
<pre><code>37.64408511553699</code></pre>
|
||||
</div>
|
||||
Time in Penumbra:
|
||||
<p>Time in Penumbra:</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb13"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a>penumbra <span class="op">=</span> <span class="fl">100</span> <span class="op">-</span> umbra <span class="op">-</span> sun</span></code></pre></div>
|
||||
<pre><code>0.322678952369003</code></pre>
|
||||
</div>
|
||||
<p>The ISS spends about 62% of its time in the sun, this is because if you go back and reference the diagram at the beginning of this post you can see that the umbra is actually a cone. This is mainly due to the fact that the Sun is massive compared to the Earth, but this effect is also stronger with orbits of higher altitudes.</p>
|
||||
<p>This means that even with the ISS’s low orbit, it still gets sunlight ~62% of the time and spends almost no time in the penumbra. This would vary a few percent depending on the time of year, but in a circular orbit like the ISS, the amount of sunlight would remain pretty constant. There are other orbits like a polar orbit, lunar orbit, or highly elliptic earth orbits that can have their time in the sunlight vary widely by the time of year.</p>
|
||||
<div class="sourceCode" id="cb15"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
|
||||
<div id="refs" class="references csl-bib-body hanging-indent" role="doc-bibliography">
|
||||
<div id="ref-ariss" class="csl-entry" role="doc-biblioentry">
|
||||
<span>“<span>ARISS</span> <span>TLE</span>.”</span> n.d. <em>Amateur Radio on the International Space Station</em>. <a href="https://live.ariss.org/tle/">https://live.ariss.org/tle/</a>.
|
||||
</div>
|
||||
<div id="ref-vallado" class="csl-entry" role="doc-biblioentry">
|
||||
Vallado, David A. 1997. <em>Fundamentals of <span>Astrodynamics</span> and <span>Applications</span>, 2nd. Ed.</em> Edited by Wiley Larson. Dordrecht: Microcosm, Inc.
|
||||
</div>
|
||||
</div>
|
||||
<!--radix_placeholder_article_footer-->
|
||||
<!--/radix_placeholder_article_footer-->
|
||||
@ -1626,10 +1629,8 @@ Time in Penumbra:
|
||||
<div class="appendix-bottom">
|
||||
<h3 id="references">References</h3>
|
||||
<div id="references-listing"></div>
|
||||
<h3 id="updates-and-corrections">Corrections</h3>
|
||||
<p>If you see mistakes or want to suggest changes, please <a href="https://gitlab.com/lander-team/air-prop-simulation">create an issue</a> on the source repository.</p>
|
||||
<h3 id="reuse">Reuse</h3>
|
||||
<p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Source code is available at <a href="https://gitlab.com/lander-team/air-prop-simulation">https://gitlab.com/lander-team/air-prop-simulation</a>, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p>
|
||||
<p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p>
|
||||
</div>
|
||||
<!--/radix_placeholder_appendices-->
|
||||
<!--radix_placeholder_navigation_after_body-->
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
119
docs/index.xml
119
docs/index.xml
@ -23,124 +23,7 @@
|
||||
<title>Air Propulsion Simulation</title>
|
||||
<dc:creator>Anson Biggs</dc:creator>
|
||||
<link>https://projects.ansonbiggs.com/posts/2021-04-01-air-propulsion-simulation</link>
|
||||
<description>
|
||||
|
||||
|
||||
<p>For Capstone my team was tasked with designing a system capable of moving mining equipment and materials around the surface of the Moon using a propulsive landing. The system had to be tested on Earth with something feasible for our team to build in 2 semesters. One of the first considerations my capstone advisor wanted was to test the feasibility of an air propulsion system instead of the obvious solution that of using solid rocket motors. This document is just <em>napkin math</em> to determine if the system is even feasibly and is not meant to be a rigorous study of an air propulsion system that would easily keep a capstone team busy by itself.</p>
|
||||
<pre class="julia"><code>using Plots
|
||||
theme(:ggplot2); # In true R spirit
|
||||
|
||||
using Unitful
|
||||
using DataFrames
|
||||
using Measurements
|
||||
using Measurements: value, uncertainty
|
||||
using CSV</code></pre>
|
||||
<h2 id="the-simulation">The Simulation</h2>
|
||||
<p>I chose an off-the-shelf paintball gun tank for the pressure vessel. The primary consideration was the incredible pressure to weight ratio, and the fact that it is designed to be bumped around would be necessary for proving the safety of the system further into the project.</p>
|
||||
<pre class="julia"><code># Tank https://www.amazon.com/Empire-Paintball-BASICS-Pressure-Compressed/dp/B07B6M48SR/
|
||||
V = (85 ± 5)u&quot;inch^3&quot;
|
||||
P0 = (4200.0 ± 300)u&quot;psi&quot;
|
||||
Wtank = (2.3 ± 0.2)u&quot;lb&quot;
|
||||
Pmax = (250 ± 50)u&quot;psi&quot; # Max Pressure that can come out the nozzle</code></pre>
|
||||
<p>The nozzle diameter was changed until the air prop system had a <em>burn time</em> similar to a G18ST rocket motor. The propulsion system’s total impulse is not dependant on the nozzle diameter, so this was just done to make it plot nicely with the rest of the rocket motors since, at this time, it is unknown what the optimal thrust profile is.</p>
|
||||
<pre class="julia"><code># Params
|
||||
d_nozzle = ((1 // 18) ± 0.001)u&quot;inch&quot;
|
||||
a_nozzle = (pi / 4) * d_nozzle^2</code></pre>
|
||||
<p>These are just universal values for what a typical day would look like during the summer in Northern Arizona. <span class="citation">(Çengel and Boles 2015)</span></p>
|
||||
<pre class="julia"><code># Universal Stuff
|
||||
P_amb = (1 ± 0.2)u&quot;atm&quot;
|
||||
γ = 1.4 ± 0.05
|
||||
R = 287.05u&quot;J/(kg * K)&quot;
|
||||
T = (300 ± 20)u&quot;K&quot;</code></pre>
|
||||
<p>The actual simulation is quite simple. The basic idea is that using the current pressure, you can calculate <span class="math inline">\(\dot{m}\)</span>, which allows calculating the Thrust, and then you can subtract the current mass of air in the tank by <span class="math inline">\(\dot{m}\)</span> and recalculate pressure using the new mass then repeat the whole process.</p>
|
||||
<p>The bulk of the equations in the simulation came from <span class="citation">(Çengel and Boles 2015)</span>, while the Thrust and <span class="math inline">\(v_e\)</span> equations came from <span class="citation">(Sutton and Biblarz 2001, eq: 2-14)</span>.</p>
|
||||
<p><span class="math display">\[ T = \dot{m} \cdot v_\text{Exit} + A_\text{Nozzle} \cdot (P - P_\text{Ambient}) \]</span></p>
|
||||
<p>The initial pressure difference is 4190.0 ± 300.0 psi, which is massive, so the area of the nozzle significantly alters the thrust profile. The paintball tanks come with pressure regulators, in our case, 800 psi which is still a huge number compared to atmospheric pressure. While the total impulse of the system doesn’t change with different nozzle areas, the peak thrust and <em>burn time</em> vary greatly. One of the benefits of doing air propulsion and the reason it was even considered so seriously is that it should be possible to change the nozzle diameter in flight, allowing thrust to be throttled, making controlled landing easier to control.</p>
|
||||
<pre class="julia"><code>df = let
|
||||
t = 0.0u&quot;s&quot;
|
||||
P = P0 |&gt; u&quot;Pa&quot;
|
||||
M = V * (P / (R * T)) |&gt; u&quot;kg&quot;
|
||||
ts = 1u&quot;ms&quot;
|
||||
df = DataFrame(Thrust=(0 ± 0)u&quot;N&quot;, Pressure=P0, Time=0.0u&quot;s&quot;, Mass=M)
|
||||
while M &gt; 0.005u&quot;kg&quot;
|
||||
# Calculate what is leaving tank
|
||||
P = minimum([P, Pmax])
|
||||
ve = sqrt((2 * γ / (γ - 1)) * R * T * (1 - P_amb / P)^((γ - 1) / γ)) |&gt; u&quot;m/s&quot;
|
||||
ρ = P / (R * T) |&gt; u&quot;kg/m^3&quot;
|
||||
ṁ = ρ * a_nozzle * ve |&gt; u&quot;kg/s&quot;
|
||||
|
||||
Thrust = ṁ * ve + a_nozzle * (P - P_amb) |&gt; u&quot;N&quot;
|
||||
|
||||
# Calculate what is still in the tank
|
||||
M = M - ṁ * ts |&gt; u&quot;kg&quot;
|
||||
P = (M * R * T) / V |&gt; u&quot;Pa&quot;
|
||||
t = t + ts
|
||||
|
||||
df_step = DataFrame(Thrust=Thrust, Pressure=P, Time=t, Mass=M)
|
||||
append!(df, df_step)
|
||||
end
|
||||
df
|
||||
end</code></pre>
|
||||
<h2 id="analysis">Analysis</h2>
|
||||
<p>Below in figure 1, the result of the simulation is plotted. Notice the massive error once the tank starts running low. This is because the calculation for pressure has a lot of very uncertain variables. This is primarily due to air being a compressible fluid, making this simulation challenging to do accurately. The thrust being below 0 N might not make intuitive sense, but it’s technically possible for the pressure to compress, leaving the inside of the rocket nozzle with a pressure that’s actually below atmospheric pressure. The effect would likely last a fraction of a second, but the point stands that this simulation is wildly inaccurate and only meant to get an idea of what an air propulsion system is capable of.</p>
|
||||
<pre class="julia"><code>
|
||||
thrust_values = df.Thrust .|&gt; ustrip .|&gt; value;
|
||||
thrust_uncertainties = df.Thrust .|&gt; ustrip .|&gt; uncertainty;
|
||||
|
||||
air = DataFrame(Thrust=thrust_values, Uncertainty=thrust_uncertainties, Time=df.Time .|&gt; u&quot;s&quot; .|&gt; ustrip);
|
||||
|
||||
|
||||
plot(df.Time .|&gt; ustrip, thrust_values,
|
||||
title=&quot;Thrust Over Time&quot;,
|
||||
ribbon=(thrust_uncertainties, thrust_uncertainties),
|
||||
fillalpha=.2,label=&quot;Thrust&quot;,
|
||||
xlabel=&quot;Time (s)&quot;,
|
||||
ylabel=&quot;Thrust (N)&quot;,
|
||||
)</code></pre>
|
||||
<div class="figure">
|
||||
<img src="file622ef5a388f_files/figure-html/unnamed-chunk-6-J1.png" alt="Air Proplsion Simulation" width="300" />
|
||||
<p class="caption">
|
||||
(#fig:unnamed-chunk-6)Air Proplsion Simulation
|
||||
</p>
|
||||
</div>
|
||||
<p>In Figure 2, the air propulsion simulation is compared to commercially available rocket motors. This early in the project, we have no idea whether short burns or longer burns are ideal for a propulsive landing, so the air propulsion system was compared to a variety of different motors with unique profiles.</p>
|
||||
<pre class="julia"><code>
|
||||
f10 = CSV.read(&quot;AeroTech_F10.csv&quot;, DataFrame);
|
||||
f15 = CSV.read(&quot;Estes_F15.csv&quot;, DataFrame);
|
||||
g8 = CSV.read(&quot;AeroTech_G8ST.csv&quot;, DataFrame);
|
||||
|
||||
|
||||
plot(air.Time, air.Thrust, label=&quot;Air Propulsion&quot;, legend=:topleft);
|
||||
|
||||
for (d, l) in [(f10, &quot;F10&quot;), (f15, &quot;F15&quot;), (g8, &quot;G8ST&quot;)]
|
||||
plot!(d[!,&quot;Time (s)&quot;], d[!, &quot;Thrust (N)&quot;], label=l);
|
||||
end
|
||||
|
||||
title!(&quot;Propulsion Comparison&quot;);
|
||||
xlabel!(&quot;Time (s)&quot;);
|
||||
ylabel!(&quot;Thrust (N)&quot;)</code></pre>
|
||||
<div class="figure">
|
||||
<img src="file622ef5a388f_files/figure-html/unnamed-chunk-7-J1.png" alt="Rocket Motor Data: [@thrustcurve]" width="300" data-distill-preview=1 />
|
||||
<p class="caption">
|
||||
(#fig:unnamed-chunk-7)Rocket Motor Data: <span class="citation">(Coker, n.d.)</span>
|
||||
</p>
|
||||
</div>
|
||||
<p>In the end, the air propulsion system’s performance has a very impressive total impulse and, with more time and resources, could be a serious option for a propulsive landing on Earth. One of the largest abstractions from the Moon mission that the mission here on Earth will have to deal with is the lack of Throttling engines since any propulsion system outside of model rocket motors is well beyond the scope of this Capstone.</p>
|
||||
<h2 id="future-work">Future Work</h2>
|
||||
<p>After determining that solid model rocket motors are the best option for the current mission scope, the next step is determining what motor to use. There are many great options, and deciding what thrust profile is ideal may have to wait until a Simulink simulation of the landing can be built so that the metrics of each motor can be constrained more. Instead of throttling motors, the current working idea is that thrust vector control may be a way to squeeze a little more control out of a solid rocket motor. Thrust Vector Control will undoubtedly be challenging to control, so another essential piece that needs exploring is whether an LQR controller is feasible or if a PID controller is accurate enough to control our system.</p>
|
||||
<pre class="r distill-force-highlighting-css"><code></code></pre>
|
||||
<div id="refs" class="references csl-bib-body hanging-indent">
|
||||
<div id="ref-thrustcurve" class="csl-entry">
|
||||
Coker, John. n.d. <span>“Rocket <span>Motor</span> <span>Data</span>.”</span> <a href="https://www.thrustcurve.org/">https://www.thrustcurve.org/</a>.
|
||||
</div>
|
||||
<div id="ref-cengel_thermodynamics" class="csl-entry">
|
||||
Çengel, Yunus A., and Michael A. Boles. 2015. <em>Thermodynamics: An Engineering Approach</em>. Eighth edition. New York: McGraw-Hill Education.
|
||||
</div>
|
||||
<div id="ref-sutton_rocket_2001" class="csl-entry">
|
||||
Sutton, George P., and Oscar Biblarz. 2001. <em>Rocket Propulsion Elements</em>. 7th ed. New York: John Wiley &amp; Sons.
|
||||
</div>
|
||||
</div></description>
|
||||
<distill:md5>dbf2ace5c1414ee7c72e89cac1535434</distill:md5>
|
||||
<description>Simulating the performance of an air propulsion system as an alternative to solid rocket motors.</description>
|
||||
<category>Julia</category>
|
||||
<category>Capstone</category>
|
||||
<guid>https://projects.ansonbiggs.com/posts/2021-04-01-air-propulsion-simulation</guid>
|
||||
|
@ -1,24 +1,3 @@
|
||||
|
||||
@book{shackelford_introduction_2015,
|
||||
address = {Boston},
|
||||
edition = {Eighth edition},
|
||||
title = {Introduction to materials science for engineers},
|
||||
isbn = {9780133826654},
|
||||
publisher = {Pearson},
|
||||
author = {Shackelford, James F.},
|
||||
year = {2015},
|
||||
keywords = {Materials},
|
||||
}
|
||||
|
||||
@book{curtis_orbital_2021,
|
||||
title = {Orbital mechanics for engineering students},
|
||||
isbn = {9780128240250 9780323853453 9780081021330},
|
||||
language = {English},
|
||||
author = {Curtis, Howard D},
|
||||
year = {2021},
|
||||
note = {OCLC: 1235349370},
|
||||
}
|
||||
|
||||
@misc{ariss,
|
||||
title = {{ARISS} {TLE}},
|
||||
shorttitle = {{ARISS}},
|
||||
@ -27,3 +6,14 @@
|
||||
journal = {Amateur Radio on the International Space Station},
|
||||
note = {publisher: ARISS},
|
||||
}
|
||||
|
||||
@book{vallado,
|
||||
address = {Dordrecht},
|
||||
title = {Fundamentals of {Astrodynamics} and {Applications}, 2nd. ed.},
|
||||
isbn = {0-07-066829-9},
|
||||
publisher = {Microcosm, Inc},
|
||||
author = {Vallado, David A.},
|
||||
editor = {Larson, Wiley},
|
||||
collaborator = {McClain, Wayne},
|
||||
year = {1997},
|
||||
}
|
@ -128,15 +128,16 @@ code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
|
||||
<!--/radix_placeholder_meta_tags-->
|
||||
|
||||
<meta name="citation_reference" content="citation_title=ARISS TLE"/>
|
||||
<meta name="citation_reference" content="citation_title=Fundamentals of Astrodynamics and Applications, 2nd. ed.;citation_publication_date=1997;citation_publisher=Microcosm, Inc;citation_author=David A. Vallado"/>
|
||||
<!--radix_placeholder_rmarkdown_metadata-->
|
||||
|
||||
<script type="text/json" id="radix-rmarkdown-metadata">
|
||||
{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","draft","author","repository_url","date","fig_width","fig_align","output","categories","bibliography","creative_commons","preview","citation_url","canonical_url"]}},"value":[{"type":"character","attributes":{},"value":["ISS Eclipse Determination"]},{"type":"character","attributes":{},"value":["Determining how much sunlight a body orbiting a planet is receiving."]},{"type":"logical","attributes":{},"value":[false]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Anson Biggs"]},{"type":"character","attributes":{},"value":["https://ansonbiggs.com"]}]}]},{"type":"character","attributes":{},"value":["https://gitlab.com/lander-team/air-prop-simulation"]},{"type":"character","attributes":{},"value":["05-01-2021"]},{"type":"integer","attributes":{},"value":[6]},{"type":"character","attributes":{},"value":["center"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["Julia","Astrodynamics"]},{"type":"character","attributes":{},"value":["citations.bib"]},{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["preview.png"]},{"type":"character","attributes":{},"value":["https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"]},{"type":"character","attributes":{},"value":["https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"]}]}
|
||||
{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","draft","author","date","fig_width","fig_align","output","categories","bibliography","creative_commons","preview","citation_url","canonical_url"]}},"value":[{"type":"character","attributes":{},"value":["ISS Eclipse Determination"]},{"type":"character","attributes":{},"value":["Determining how much sunlight a body orbiting a planet is receiving."]},{"type":"logical","attributes":{},"value":[false]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Anson Biggs"]},{"type":"character","attributes":{},"value":["https://ansonbiggs.com"]}]}]},{"type":"character","attributes":{},"value":["05-01-2021"]},{"type":"integer","attributes":{},"value":[6]},{"type":"character","attributes":{},"value":["center"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["Julia","Astrodynamics"]},{"type":"character","attributes":{},"value":["citations.bib"]},{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["preview.png"]},{"type":"character","attributes":{},"value":["https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"]},{"type":"character","attributes":{},"value":["https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/"]}]}
|
||||
</script>
|
||||
<!--/radix_placeholder_rmarkdown_metadata-->
|
||||
|
||||
<script type="text/json" id="radix-resource-manifest">
|
||||
{"type":"character","attributes":{},"value":["citations.bib","geometry.svg","iss-eclipse-determination_files/anchor-4.2.2/anchor.min.js","iss-eclipse-determination_files/bowser-1.9.3/bowser.min.js","iss-eclipse-determination_files/distill-2.2.21/template.v2.js","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-6-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png","iss-eclipse-determination_files/header-attrs-2.7/header-attrs.js","iss-eclipse-determination_files/jquery-1.11.3/jquery.min.js","iss-eclipse-determination_files/popper-2.6.0/popper.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-bundle.umd.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-light-border.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.umd.min.js","iss-eclipse-determination_files/webcomponents-2.0.0/webcomponents.js","preview.png","vectors_radiuss.svg"]}
|
||||
{"type":"character","attributes":{},"value":["citations.bib","geometry.svg","iss-eclipse-determination_files/anchor-4.2.2/anchor.min.js","iss-eclipse-determination_files/bowser-1.9.3/bowser.min.js","iss-eclipse-determination_files/distill-2.2.21/template.v2.js","iss-eclipse-determination_files/figure-html5/sunlight-plot-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-2-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J2.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J3.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-4-J4.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-6-J1.png","iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png","iss-eclipse-determination_files/header-attrs-2.7/header-attrs.js","iss-eclipse-determination_files/jquery-1.11.3/jquery.min.js","iss-eclipse-determination_files/popper-2.6.0/popper.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-bundle.umd.min.js","iss-eclipse-determination_files/tippy-6.2.7/tippy-light-border.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.css","iss-eclipse-determination_files/tippy-6.2.7/tippy.umd.min.js","iss-eclipse-determination_files/webcomponents-2.0.0/webcomponents.js","preview.png","vectors_radiuss.svg"]}
|
||||
</script>
|
||||
<!--radix_placeholder_navigation_in_header-->
|
||||
<meta name="distill:offset" content="../.."/>
|
||||
@ -2127,16 +2128,16 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
</div>
|
||||
|
||||
<div class="d-article">
|
||||
<p>Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space with no solar radiation to power the solar panels and keep the spacecraft from freezing.</p>
|
||||
<p>Determining the eclipses a satellite will encounter is a major driving factor when designing a mission in space. Thermal and power budgets have to be made with the fact that a satellite will periodically be in the complete darkness of space where it will receive no solar radiation to power the solar panels and keep the spacecraft from freezing.</p>
|
||||
<h2 id="what-is-an-eclipse">What is an Eclipse</h2>
|
||||
<figure>
|
||||
<img src="geometry.svg" alt="Geometry of an Eclipse" /><figcaption aria-hidden="true">Geometry of an Eclipse</figcaption>
|
||||
</figure>
|
||||
<p>The above image is a simple representation of what an eclipse is. You’ll notice there is the Umbra which is complete darkness, then the Penumbra which is a shadow of varying darkness, and then the rest of the orbit is in complete sunlight. For this example I will be using the ISS which has a very low orbit so the Penumbra isn’t much of a problem. You can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.</p>
|
||||
<p>The above image is a simple representation of what an eclipse is. First, you’ll notice the Umbra is complete darkness, then the Penumbra, which is a shadow of varying darkness, and then the rest of the orbit is in full sunlight. For this example, I will be using the ISS, which has a very low orbit, so the Penumbra isn’t much of a problem. However, you can tell by looking at the diagram that higher altitude orbits would spend more time in the Penumbra.</p>
|
||||
<figure>
|
||||
<img src="vectors_radiuss.svg" alt="Body Radius’s and Position Vectors" /><figcaption aria-hidden="true">Body Radius’s and Position Vectors</figcaption>
|
||||
</figure>
|
||||
<p>Here is a more detailed view of the eclipse that will make it easier to explain the code. There are 2 Position vectors and 2 radius’s that need to be known for simple eclipse determination. There are more advanced cases where the atmosphere of the body your orbiting can greatly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun, but for this example we will keep it simple since those have very little affect for the ISS’s orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radius’s of the Sun and Body (In this case Earth) respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination its important to calculate this at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate <a href="https://ssd.jpl.nasa.gov/?ephemerides">Ephemerides</a> in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbitted, to the center of our spacecraft.</p>
|
||||
<p>Here is a more detailed view of the eclipse that will make it easier to explain what is going on. There are 2 Position vectors, and 2 radius that need to be known for simple eclipse determination. More advanced cases where the atmosphere of the body your orbiting can significantly affect the Umbra and Penumbra, and other bodies could also potentially block the Sun. However, we will keep it simple for this example since they have minimal effect on the ISS’s orbit. <code style="color:#0b7285">Rsun</code> and <code style="color:#c92a2a">Rbody</code> are the radius of the Sun and Body (In this case Earth), respectively. <code style="color:#5f3dc4">r_sun_body</code> is a vector from the center of the Sun to the center of the target body. For this example I will only be using one vector, but for more rigorous eclipse determination it is important to calculate the ephemeris at least once a day since it does significantly change over the course of a year. The reason that I am ignoring it at the moment is because there is currently no good way to calculate <a href="https://ssd.jpl.nasa.gov/?ephemerides">Ephemerides</a> in Julia but the package is being worked on so I may revisit this and do a more rigorous analysis in the future. <code style="color:#5c940d">r_body_sc</code> is a position vector from the center of the body being orbited, to the center of our spacecraft.</p>
|
||||
<h2 id="the-code">The Code</h2>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<details>
|
||||
@ -2151,7 +2152,7 @@ Show code
|
||||
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>theme(<span class="op">:</span>ggplot2)</span></code></pre></div>
|
||||
</details>
|
||||
</div>
|
||||
<p>In order to get the orbit for the ISS I used a <a href="https://en.wikipedia.org/wiki/Two-line_element_set">Two-Line Element</a> which is a data format for explaining orbits. the US Joint Space Operations Center makes these widely available, but <a href="https://live.ariss.org/tle/" class="uri">https://live.ariss.org/tle/</a> makes the TLE for the ISS way more accessible <span class="citation" data-cites="ariss">(<a href="#ref-ariss" role="doc-biblioref"><span>“<span>ARISS</span> <span>TLE</span>,”</span> n.d.</a>)</span>. The Julia Package <a href="https://github.com/JuliaSpace/SatelliteToolbox.jl">SatelliteToolbox.jl</a> makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the <code>tle</code> string macro like below and now we have access to the information to start making our ISS orbit.</p>
|
||||
<p>To get the orbit for the ISS, I used a <a href="https://en.wikipedia.org/wiki/Two-line_element_set">Two-Line Element</a> which is a data format for explaining orbits. The US Joint Space Operations Center makes these widely available, but <a href="https://live.ariss.org/tle/" class="uri">https://live.ariss.org/tle/</a> makes the TLE for the ISS way more accessible <span class="citation" data-cites="ariss">(<a href="#ref-ariss" role="doc-biblioref"><span>“<span>ARISS</span> <span>TLE</span>,”</span> n.d.</a>)</span>. The Julia Package <a href="https://github.com/JuliaSpace/SatelliteToolbox.jl">SatelliteToolbox.jl</a> makes it super easy to turn a TLE into an orbit that can be propagated. Simply putting the TLE in a string and using the <code>tle</code> string macro like below, we now have access to the information to start making our ISS orbit.</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb2"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>ISS <span class="op">=</span> tle<span class="st">"""</span></span>
|
||||
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="st">ISS (ZARYA)</span></span>
|
||||
@ -2161,17 +2162,16 @@ Show code
|
||||
<pre><code>1-element Vector{TLE}:
|
||||
TLE: ISS (ZARYA) (Epoch = 2021-04-13T20:23:10.911)</code></pre>
|
||||
</div>
|
||||
<p>Now that we have the TLE we can pass that into SatelliteToolbox’s orbit propagator. Before we can propagate the orbit we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day so using that we can calculate the amount of time required for one orbit which is all that were worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.</p>
|
||||
<p>Now that we have the TLE, we can pass that into SatelliteToolbox’s orbit propagator. Before propagating the orbit, we need to have a range of time steps to pass into the propagator. The TLE gives the mean motion, n, which is the revolutions per day, so using that, we can calculate the amount of time required for one orbit, which is all that we’re worried about for this analysis. The propagator returns a tuple containing the Orbital elements, a position vector with units meters, and a velocity vector with units meters per second. For this analysis were only worried about the position vector.</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<pre class="juliam"><code>ISS[1].n</code></pre>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>ISS[<span class="fl">1</span>].n</span></code></pre></div>
|
||||
</div>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>orbit <span class="op">=</span> init_orbit_propagator(<span class="dt">Val</span>(<span class="op">:</span>twobody)<span class="op">,</span> ISS[<span class="fl">1</span>])<span class="op">;</span></span>
|
||||
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>time <span class="op">=</span> <span class="fl">0</span><span class="op">:</span><span class="fl">0.1</span><span class="op">:</span>((<span class="fl">24</span> <span class="op">/</span> ISS[<span class="fl">1</span>].n) <span class="op">.*</span> <span class="fl">60</span> <span class="op">*</span> <span class="fl">60</span>)<span class="op">;</span> <span class="co"># ISS[1].n gives the mean motion, or orbits per day.</span></span>
|
||||
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>o<span class="op">,</span> r<span class="op">,</span> v <span class="op">=</span> propagate<span class="op">!</span>(orbit<span class="op">,</span> time)<span class="op">;</span></span></code></pre></div>
|
||||
</div>
|
||||
<p>Now we just need way to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of pretty basic trigonometry and vector math.</p>
|
||||
<p><code>add more discussion about the math</code></p>
|
||||
<p>We just need to use the radii and vectors discussed earlier to determine if the ISS is in the penumbra or umbra. This is a lot of trigonometry and vector math that I won’t bore anyone with. However, using the diagrams above and following the code in the sunlight function, you should follow what’s happening. For a rigorous discussion, check out <span class="citation" data-cites="vallado">(<a href="#ref-vallado" role="doc-biblioref">Vallado 1997</a>)</span>.</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> sunlight(Rbody<span class="op">,</span> r_sun_body<span class="op">,</span> r_body_sc)</span>
|
||||
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a> Rsun <span class="op">=</span> <span class="fl">695_700</span>u<span class="st">"km"</span></span>
|
||||
@ -2202,7 +2202,7 @@ Show code
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>S <span class="op">=</span> r .<span class="op">|></span> R <span class="op">-></span> sunlight(<span class="fl">6371</span>u<span class="st">"km"</span><span class="op">,</span> [<span class="fl">0.5370</span><span class="op">,</span> <span class="fl">1.2606</span><span class="op">,</span> <span class="fl">0.5466</span>] <span class="op">.*</span> <span class="fl">1e8</span>u<span class="st">"km"</span><span class="op">,</span> R <span class="op">.*</span> u<span class="st">"m"</span>)<span class="op">;</span></span></code></pre></div>
|
||||
</div>
|
||||
<h2 id="plotting-the-results">Plotting the Results</h2>
|
||||
<p>The <code>sunlight</code> function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spend in the penumbra is almost insignificant.</p>
|
||||
<p>The <code>sunlight</code> function returns values from 0 to 1, 0 being complete darkness, 1 being complete sunlight, and anything between being the fraction of light being received. Again since the ISS has a very low orbit, the amount of time spent in the penumbra is almost insignificant.</p>
|
||||
<div class="layout-chunk" data-layout="l-body-outset">
|
||||
<details>
|
||||
<summary>
|
||||
@ -2224,35 +2224,38 @@ Show code
|
||||
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true" tabindex="-1"></a>ylabel<span class="op">!</span>(<span class="st">"Sunlight (%)"</span>)<span class="op">;</span></span>
|
||||
<span id="cb8-15"><a href="#cb8-15" aria-hidden="true" tabindex="-1"></a>title<span class="op">!</span>(<span class="st">"ISS Sunlight Over a Day"</span>)</span></code></pre></div>
|
||||
</details>
|
||||
<div class="figure"><span id="fig:unnamed-chunk-7"></span>
|
||||
<img src="iss-eclipse-determination_files/figure-html5/unnamed-chunk-7-J1.png" alt="ISS Sunlight" width="300" data-distill-preview=1 />
|
||||
<div class="figure"><span id="fig:sunlight-plot"></span>
|
||||
<img src="iss-eclipse-determination_files/figure-html5/sunlight-plot-J1.png" alt="ISS Sunlight" width="300" data-distill-preview=1 />
|
||||
<p class="caption">
|
||||
Figure 1: ISS Sunlight
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<p>Looking at the plot its pretty easy to see by the vertical transition from 0% to 100% that the time in the penumbra is limited, but almost counterintutively it also looks like the ISS gets more sunlight than it does darkness. Using the raw sunlight data we can actually calculate almost exactly how much time is spent in each region.</p>
|
||||
Time in Sun:
|
||||
<p>Looking at the plot, the vertical transition from 0% to 100% makes it pretty clear that the time in the penumbra is limited. Still, almost counterintuitively, it also looks like the ISS gets more sunlight than it does darkness. So, using the raw sunlight data, we can calculate precisely how much time is spent in each region.</p>
|
||||
<p>Time in Sun:</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>sun <span class="op">=</span> length(S[S.<span class="op">==</span><span class="fl">1</span>])<span class="op">/</span>length(S) <span class="op">*</span> <span class="fl">100</span></span></code></pre></div>
|
||||
<pre><code>62.03323593209401</code></pre>
|
||||
</div>
|
||||
Time in Darkness:
|
||||
<p>Time in Darkness:</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb11"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>umbra <span class="op">=</span> length(S[S.<span class="op">==</span><span class="fl">0</span>])<span class="op">/</span>length(S) <span class="op">*</span> <span class="fl">100</span></span></code></pre></div>
|
||||
<pre><code>37.64408511553699</code></pre>
|
||||
</div>
|
||||
Time in Penumbra:
|
||||
<p>Time in Penumbra:</p>
|
||||
<div class="layout-chunk" data-layout="l-body">
|
||||
<div class="sourceCode" id="cb13"><pre class="sourceCode julia"><code class="sourceCode julia"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a>penumbra <span class="op">=</span> <span class="fl">100</span> <span class="op">-</span> umbra <span class="op">-</span> sun</span></code></pre></div>
|
||||
<pre><code>0.322678952369003</code></pre>
|
||||
</div>
|
||||
<p>The ISS spends about 62% of its time in the sun, this is because if you go back and reference the diagram at the beginning of this post you can see that the umbra is actually a cone. This is mainly due to the fact that the Sun is massive compared to the Earth, but this effect is also stronger with orbits of higher altitudes.</p>
|
||||
<p>This means that even with the ISS’s low orbit, it still gets sunlight ~62% of the time and spends almost no time in the penumbra. This would vary a few percent depending on the time of year, but in a circular orbit like the ISS, the amount of sunlight would remain pretty constant. There are other orbits like a polar orbit, lunar orbit, or highly elliptic earth orbits that can have their time in the sunlight vary widely by the time of year.</p>
|
||||
<div class="sourceCode" id="cb15"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
|
||||
<div id="refs" class="references csl-bib-body hanging-indent" role="doc-bibliography">
|
||||
<div id="ref-ariss" class="csl-entry" role="doc-biblioentry">
|
||||
<span>“<span>ARISS</span> <span>TLE</span>.”</span> n.d. <em>Amateur Radio on the International Space Station</em>. <a href="https://live.ariss.org/tle/">https://live.ariss.org/tle/</a>.
|
||||
</div>
|
||||
<div id="ref-vallado" class="csl-entry" role="doc-biblioentry">
|
||||
Vallado, David A. 1997. <em>Fundamentals of <span>Astrodynamics</span> and <span>Applications</span>, 2nd. Ed.</em> Edited by Wiley Larson. Dordrecht: Microcosm, Inc.
|
||||
</div>
|
||||
</div>
|
||||
<!--radix_placeholder_article_footer-->
|
||||
<div class="article-footer">
|
||||
@ -2281,10 +2284,8 @@ Time in Penumbra:
|
||||
<div class="appendix-bottom">
|
||||
<h3 id="references">References</h3>
|
||||
<div id="references-listing"></div>
|
||||
<h3 id="updates-and-corrections">Corrections</h3>
|
||||
<p>If you see mistakes or want to suggest changes, please <a href="https://gitlab.com/lander-team/air-prop-simulation">create an issue</a> on the source repository.</p>
|
||||
<h3 id="reuse">Reuse</h3>
|
||||
<p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Source code is available at <a href="https://gitlab.com/lander-team/air-prop-simulation">https://gitlab.com/lander-team/air-prop-simulation</a>, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p>
|
||||
<p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p>
|
||||
<h3 id="citation">Citation</h3>
|
||||
<p>For attribution, please cite this work as</p>
|
||||
<pre class="citation-appendix short">Biggs (2021, May 1). Anson's Projects: ISS Eclipse Determination. Retrieved from https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/</pre>
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
File diff suppressed because one or more lines are too long
@ -6,14 +6,14 @@
|
||||
"description": "I'm an Astronautical Engineer studying at Embry-Riddle Prescott.",
|
||||
"author": [],
|
||||
"contents": "\nI mostly write code, but sometimes I make 3D Models. This website is where I plan on breaking down some of my more interesting findings and sharing them with the World Wide Web. If you think I could be a could fit at your company then take a look at my Resume, otherwise you can reach me on Telegram or by Email.\n\n\n\n",
|
||||
"last_modified": "2021-05-03T21:28:01-07:00"
|
||||
"last_modified": "2021-05-07T09:53:25-07:00"
|
||||
},
|
||||
{
|
||||
"path": "index.html",
|
||||
"title": "Anson's Projects",
|
||||
"author": [],
|
||||
"contents": "\n\n\n\n",
|
||||
"last_modified": "2021-05-03T21:28:01-07:00"
|
||||
"last_modified": "2021-05-07T09:53:25-07:00"
|
||||
}
|
||||
],
|
||||
"collections": ["posts/posts.json"]
|
||||
|
@ -10,10 +10,10 @@
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://projects.ansonbiggs.com/posts/2021-04-14-iss-eclipse-determination/</loc>
|
||||
<lastmod>2021-05-03T21:23:45-07:00</lastmod>
|
||||
<lastmod>2021-05-07T09:51:55-07:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://projects.ansonbiggs.com/posts/2021-04-01-air-propulsion-simulation/</loc>
|
||||
<lastmod>2021-05-03T21:53:15-07:00</lastmod>
|
||||
<lastmod>2021-05-07T08:51:19-07:00</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
|
Loading…
x
Reference in New Issue
Block a user