diff --git a/estimation/covariance_estimated_parameters.ipynb b/estimation/covariance_estimated_parameters.ipynb index 7a5ab63..f26fa79 100644 --- a/estimation/covariance_estimated_parameters.ipynb +++ b/estimation/covariance_estimated_parameters.ipynb @@ -13,7 +13,7 @@ "* how to **plot the correlation coefficients**;\n", "* how to **plot the uncertainty ellipsoids**.\n", "\n", - "For the **full estimation** of some selected parameteres, such as initial state, drag coefficient, and radiation pressure coefficient of a spacecraft, see [DELFI-C3 - Parameter Estimation Example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/full_estimation_example.html).\n", + "For the **full estimation** of some selected parameters, such as initial state, drag coefficient, and radiation pressure coefficient of a spacecraft, see [DELFI-C3 - Parameter Estimation Example](full_estimation_example.ipynb).\n", "\n", "To simulate the orbit of a spacecraft, we will fall back and reiterate on all aspects of orbit propagation that are important within the scope of orbit estimation. Further, we will highlight all relevant features of modelling a tracking station on Earth. Using this station, we will simulate a tracking routine of the spacecraft using a series of instantaneous unbiased one-way Doppler range-rate measurements with uncertainty of 1 mm/s every 60 seconds. To assure an uninterrupted line-of-sight between the station and the spacecraft, a minimum elevation angle of more than 15 degrees above the horizon - as seen from the station - will be imposed as constraint on the simulation of observations.\n", "\n", @@ -67,7 +67,7 @@ "\n", "Subsequently, the start and end epoch of the simulation and observations are defined.* Note that using `tudatpy`, the times are generally specified in seconds since J2000. Hence, setting the start epoch to `0` corresponds to the 1st of January 2000. The end epoch specifies a total duration of the simulation of four days.\n", "\n", - "For more information on J2000 and the conversion between different temporal reference frames, please refer to the API documentation of the [`time_conversion module`](https://tudatpy.readthedocs.io/en/latest/time_conversion.html).\n", + "For more information on J2000 and the conversion between different temporal reference frames, please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module.\n", "\n", "*Please note that it is always a good practice to separate the observation start and end epochs from the simulated ones. This way, we ensure that the times at which the observations are simulated all fall within the simulation timespan, especially given the geometry of the problem and the time difference at the two link ends (receiver and transmitter are separated by a certain distance). For this reason, we will set the first observation start epoch at one day after the simulation start epoch, and the observation end epoch at one day before the end of the simulation." ] @@ -101,7 +101,7 @@ "### Create the main bodies\n", "To create the systems of bodies for the simulation, one first has to define a list of strings of all bodies that are to be included. Note that the default body settings (such as atmosphere, body shape, rotation model) are taken from the `SPICE` kernel.\n", "\n", - "These settings, however, can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details." + "These settings, however, can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details." ] }, { @@ -335,7 +335,7 @@ "### Add a ground station\n", "Trivially, the simulation of observations requires the extension of the current environment by at least one observer - a ground station. For this example, we will model a single ground station located in Delft, Netherlands, at an altitude of 0m, 52.00667°N, 4.35556°E.\n", "\n", - "More information on how to use the `add_ground_station()` function can be found in the respective [API documentation](https://tudatpy.readthedocs.io/en/latest/environment_setup.html#tudatpy.numerical_simulation.environment_setup.add_ground_station)." + "More information on how to use the `add_ground_station()` function can be found in the respective [API documentation](https://py.api.tudat.space/en/latest/environment_setup.html#tudatpy.numerical_simulation.environment_setup.add_ground_station)." ] }, { @@ -472,10 +472,10 @@ "### Creating the Estimator object\n", "Ultimately, the `Estimator` object consolidates all relevant information required for the estimation of any system parameter:\n", " \n", - " 1) the environment (bodies)\n", - " 2) the parameter set (parameters_to_estimate)\n", - " 3) observation models (observation_settings_list)\n", - " 4) dynamical, numerical, and integrator setup (propagator_settings)\n", + "1) the environment (`bodies`)\n", + "2) the parameter set (`parameters_to_estimate`)\n", + "3) observation models (`observation_settings_list`)\n", + "4) dynamical, numerical, and integrator setup (`propagator_settings`)\n", "\n", "Underneath its hood, upon creation, the estimator automatically takes care of setting up the relevant Observation Simulator and Variational Equations which will subsequently be required for the simulation of observations and the estimation of parameters, respectively." ] @@ -532,7 +532,7 @@ "metadata": {}, "source": [ "## Perform the covariance analysis\n", - "Having simulated the observations and created the `Estimator` object - containing the variational equations for the parameters to estimate - we have defined everything to conduct the actual estimation. Realise that up to this point, we have not yet specified whether we want to perform a covariance analysis or the full estimation of all parameters. It should be stressed that the general setup for either path to be followed is largely identical up to this point (see, for example, the [full estimation example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/tudatpy-examples/estimation/full_estimation_example.html)).\n", + "Having simulated the observations and created the `Estimator` object - containing the variational equations for the parameters to estimate - we have defined everything to conduct the actual estimation. Realise that up to this point, we have not yet specified whether we want to perform a covariance analysis or the full estimation of all parameters. It should be stressed that the general setup for either path to be followed is largely identical up to this point (see, for example, the [full estimation example](full_estimation_example.ipynb)).\n", "\n", "### Set up the inversion\n", "To set up the inversion of the problem, we collect all relevant inputs in the form of a covariance input object and define some basic settings of the inversion. Most crucially, this is the step where we can account for different weights - if any - of the different observations, to give the estimator knowledge about the quality of the individual types of observations." @@ -661,6 +661,7 @@ "source": [ "## Post-Processing Results\n", "Perfect, we have got our results. Now it is time to make sense of them. To further process them, one can - exemplary - plot:\n", + "\n", "1) the ellipsoidal confidence region defined by the covariance;\n", "2) the behaviour of the simulated observations over time;\n", "3) the history of the residuals;\n", @@ -782,6 +783,7 @@ "Please note that, in our case, the space of parameters has dimension 8 (initial state + drag coefficient + gravitational parameter), but we will plot the ellipsoid obtained by restricting the problem to the **3 spatial dimensions only** (unless you can find a way to plot an 8D ellipsoid in python!)\n", "\n", "The plots will show, for each of the two matrices:\n", + "\n", "1) the 3-sigma ellipsoid\n", "2) the 1-sigma ellipsoid\n", "3) the projections of both 1) and 2) on the x,y,z axes.\n", @@ -960,9 +962,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "Python 3", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -974,7 +976,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/estimation/covariance_propagation_example.ipynb b/estimation/covariance_propagation_example.ipynb index 0a568d1..a83068d 100644 --- a/estimation/covariance_propagation_example.ipynb +++ b/estimation/covariance_propagation_example.ipynb @@ -8,7 +8,7 @@ "# Covariance Propagation Using `Starlink-32101`\n", "\n", "## Objectives\n", - "This example will show you how to **propagate the covariance**. We will simulate a series of **one-way** open loop observing sessions of the ``Starlink-32101`` satellite, and we will see simulating a different number of observations affects the evolution of the **formal errors** over time. This example builds up on the [Starlink-32101 Covariance Analysis example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/covariance_estimated_parameters.html), so go check that out if you haven't already! " + "This example will show you how to **propagate the covariance**. We will simulate a series of **one-way** open loop observing sessions of the ``Starlink-32101`` satellite, and we will see simulating a different number of observations affects the evolution of the **formal errors** over time. This example builds up on the [Starlink-32101 Covariance Analysis example](covariance_estimated_parameters.ipynb), so go check that out if you haven't already! " ] }, { @@ -66,7 +66,7 @@ "* **Single observation session**: from August 29, 2024 to `simulation_end_epoch`\n", "\n", "Please note that, in general, the satellite might not be visible during a full osbervation session. \n", - "For more information on J2000 and the conversion between different temporal reference frames, please refer to the API documentation of the [`time_conversion module`](https://tudatpy.readthedocs.io/en/latest/time_conversion.html)." + "For more information on J2000 and the conversion between different temporal reference frames, please refer to the API documentation of the [`time_conversion module`](https://py.api.tudat.space/en/latest/time_conversion.html)." ] }, { @@ -102,7 +102,7 @@ "### Create the main bodies\n", "To create the systems of bodies for the simulation, one first has to define a list of strings of all bodies that are to be included. Note that the default body settings (such as atmosphere, body shape, rotation model) are taken from the `SPICE` kernel.\n", "\n", - "These settings, however, can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details." + "These settings, however, can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details." ] }, { @@ -199,12 +199,15 @@ "source": [ "### Create the acceleration model\n", "Subsequently, all accelerations (and there settings) that act on ``Starlink-32101`` have to be defined. In particular, we will consider:\n", + "\n", "* Gravitational acceleration using a spherical harmonic approximation up to 8th degree and order for Earth.\n", "* Aerodynamic acceleration for Earth.\n", "* Gravitational acceleration using a simple point mass model for:\n", + "\n", " - The Sun\n", " - The Moon\n", " - Mars\n", + "\n", "* Radiation pressure experienced by the spacecraft - shape-wise approximated as a spherical cannonball - due to the Sun.\n", "\n", "The defined acceleration settings are then applied to ``Starlink-32101`` by means of a dictionary, which is finally used as input to the propagation setup to create the acceleration models." @@ -336,7 +339,7 @@ "### Add a ground station\n", "Trivially, the simulation of observations requires the extension of the current environment by at least one observer - a ground station. For this example, we will model a single ground station located in Delft, Netherlands, at an altitude of 0m, 52.00667°N, 4.35556°E.\n", "\n", - "More information on how to use the `add_ground_station()` function can be found in the respective [API documentation](https://tudatpy.readthedocs.io/en/latest/environment_setup.html#tudatpy.numerical_simulation.environment_setup.add_ground_station)." + "More information on how to use the `add_ground_station()` function can be found in the respective [API documentation](https://py.api.tudat.space/en/latest/environment_setup.html#tudatpy.numerical_simulation.environment_setup.add_ground_station)." ] }, { @@ -365,7 +368,7 @@ "metadata": {}, "source": [ "### Define Observation Links and Types\n", - "To establish the links between our ground station and ``Starlink-32101``, we will make use of the [observation module](https://py.api.tudat.space/en/latest/observation.html#observation) of tudat. In particular, we choose a one-way doppler observation mode, which means that the spacecraft effectively acts as a transmitter, while the antenna is the receiver. As already done in the [Starlink-32101 Covariance Analysis example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/covariance_estimated_parameters.html), we will select an Earth Tracking Station located in Delft as a receiver. \n", + "To establish the links between our ground station and ``Starlink-32101``, we will make use of the [observation module](https://py.api.tudat.space/en/latest/observation.html#observation) of tudat. In particular, we choose a one-way doppler observation mode, which means that the spacecraft effectively acts as a transmitter, while the antenna is the receiver. As already done in the [Starlink-32101 Covariance Analysis example](covariance_estimated_parameters.ipynb), we will select an Earth Tracking Station located in Delft as a receiver. \n", "\n", "To fully define an observation model for a given link, we have to create a list of the observation model settings of all desired observable types and their associated links. This list will later be used as input to the actual estimator object.\n", "\n", @@ -400,6 +403,7 @@ "\n", "#### 1 - Define Observation Simulation Settings\n", "The observation simulation settings:\n", + "\n", "1) allows for setting up of the **time intervals** at which observations are simulated (keep in mind the **three different observation scenarios** we want to simulate!);\n", "2) allows for the definition of a noise level to simulate noisy observations\n", "3) allows for the definition of the **viability criteria** and noise of the observation (we will set a minimum required elevation angle of **15 degrees**)\n", @@ -414,7 +418,7 @@ "We collect all relevant inputs in the form of a covariance input, with the variance represented by the noise levels we chose earlier. This will be given as an input to the estimation process, to obtain `covariance_output = estimator.compute_covariance(covariance_input)`. The `covariance_output` will then become the initial covariance to be propagated by subsequent applications of the **state transition matrix**, initialized by the function `state_transition_interface` of the `estimator` object. \n", "\n", "#### 5 - Propagate the Covariances and the Formal Errors\n", - "Covariances and Formal Errors are propagated at the `output_times = simulation_times`, using the functions `propagate_covariance_split_output`, `propagate_formal_errors_split_output` (or `propagate_covariance`, `propagate_formal_errors`) of the estimation class, and through the above-defined state transition matrix. Please note that, in principle, one does not need to propagate the **formal errors** if the **propagated covariance** is already available. This is because the formal errors constitute the diagonal elements (**variances**) of the covariance matrix (to learn more about this, also check the [Starlink-32101 Parameter Estimation example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/full_estimation_example.html).)\n", + "Covariances and Formal Errors are propagated at the `output_times = simulation_times`, using the functions `propagate_covariance_split_output`, `propagate_formal_errors_split_output` (or `propagate_covariance`, `propagate_formal_errors`) of the estimation class, and through the above-defined state transition matrix. Please note that, in principle, one does not need to propagate the **formal errors** if the **propagated covariance** is already available. This is because the formal errors constitute the diagonal elements (**variances**) of the covariance matrix (to learn more about this, also check the [Starlink-32101 Parameter Estimation example](full_estimation_example.ipynb).)\n", "\n", "#### 6 - Append Results\n", "We append the formal errors and the covariance obtained for each scenario to the respective lists: `formal_errors_list`, `covariances_list`." diff --git a/estimation/estimation_dynamical_models.ipynb b/estimation/estimation_dynamical_models.ipynb index 0b8beeb..8984b3a 100644 --- a/estimation/estimation_dynamical_models.ipynb +++ b/estimation/estimation_dynamical_models.ipynb @@ -11,7 +11,7 @@ "source": [ "# Simulation and Estimation Using Different Dynamical Models\n", "## Objectives\n", - "Within this example, we will go beyond the earlier introduced basic steps of setting up an orbit estimation routine. In particular, using several orbits of the **Mars Express (MEX)** spacecraft around the Red Planet, we will introduce different **new types of observables**, **observation constraints**, and finally focus on how to apply **different dynamical models** to the simulation of observations and the estimation, respectively. Since no further explanation with respect to already introduced functionalities will be given in this example, the reader is advised - if not already done so - to first browse to the [previous examples](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/full_estimation_example.html).\n", + "Within this example, we will go beyond the earlier introduced basic steps of setting up an orbit estimation routine. In particular, using several orbits of the **Mars Express (MEX)** spacecraft around the Red Planet, we will introduce different **new types of observables**, **observation constraints**, and finally focus on how to apply **different dynamical models** to the simulation of observations and the estimation, respectively. Since no further explanation with respect to already introduced functionalities will be given in this example, the reader is advised - if not already done so - to first browse to the [Parameter estimation example](full_estimation_example.ipynb).\n", "\n", "Using **different dynamical models** for the simulation of observations and the subsequent estimation comes in handy when trying to **emulate what effects an imperfect dynamical model will have on the estimation** of selected parameters based on real-world data. \n", "\n", @@ -229,7 +229,7 @@ "### Define Observation Model Settings\n", "Within this example - as it is common practice when tracking deep-space missions using the ESTRACK system - Mars Express will be tracked using an **n-way Doppler measurement** (realised as two-way link ends in this example). This means that the signal travels from Earth to the spacecraft where it gets **re-transmitted** and subsequently has to travel back to Earth where it is **recorded and processed**. In particular, we will model **two-way range** and **range-rate (Doppler) observables**.\n", "\n", - "Moreover, expanding upon the knowledge from the [previous examples](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/full_estimation_example.html), we will introduce how to introduce the settings for the light time correction of the signal due to the **relativistic effects of the Sun**, as well as how to impose a **constant bias** on one of the two observables." + "Moreover, expanding upon the knowledge from the [Parameter estimation example](full_estimation_example.ipynb), we will introduce how to introduce the settings for the light time correction of the signal due to the **relativistic effects of the Sun**, as well as how to impose a **constant bias** on one of the two observables." ] }, { @@ -739,7 +739,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -753,7 +753,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/estimation/estimation_with_mpc.ipynb b/estimation/estimation_with_mpc.ipynb index 1d5c563..e813e25 100644 --- a/estimation/estimation_with_mpc.ipynb +++ b/estimation/estimation_with_mpc.ipynb @@ -9,9 +9,9 @@ "## Objectives\n", "This example highlights a **simple orbit estimation routine** using **real angular observation data** from the [Minor Planet Center](https://www.minorplanetcenter.net/) (MPC). \n", "\n", - "In the [DELFI-C3 - Parameter Estimation Example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/full_estimation_example.html), we saw how to set up and run an **orbit estimation routine**, and we did so by using **simulated observational data**. While simulating observational data is certainly useful for a variety of purposes, in real life we want to estimate an orbit starting from **real data** coming from radio or optical observations.\n", + "In the [DELFI-C3 - Parameter Estimation Example](full_estimation_example.ipynb), we saw how to set up and run an **orbit estimation routine**, and we did so by using **simulated observational data**. While simulating observational data is certainly useful for a variety of purposes, in real life we want to estimate an orbit starting from **real data** coming from radio or optical observations.\n", "\n", - "We will estimate the initial state of [Eros](https://en.wikipedia.org/wiki/433_Eros), a near-Earth asteroid also visited by the NEAR Shoemaker probe in 1998. We will use the `Tudat BatchMPC` interface to retrieve and process the data. For a more in depth explanation of this interface we recommend first checking out the [Retrieving observation data from the Minor Planet Centre](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/retrieving_mpc_observation_data.html) example. We will also briefly use the SBDBquery class which interfaces JPL's [Small Body DataBase (SBDB)](https://ssd.jpl.nasa.gov/tools/sbdb_lookup.html)." + "We will estimate the initial state of [Eros](https://en.wikipedia.org/wiki/433_Eros), a near-Earth asteroid also visited by the NEAR Shoemaker probe in 1998. We will use the `Tudat BatchMPC` interface to retrieve and process the data. For a more in depth explanation of this interface we recommend first checking out the [Retrieving observation data from the Minor Planet Centre](retrieving_mpc_observation_data.ipynb) example. We will also briefly use the SBDBquery class which interfaces JPL's [Small Body DataBase (SBDB)](https://ssd.jpl.nasa.gov/tools/sbdb_lookup.html)." ] }, { @@ -316,7 +316,7 @@ "metadata": {}, "source": [ "### Convert the observations to Tudat\n", - "Now that our system of bodies is ready, we can retrieve the observation collection from the observations batch using the `to_tudat()` method. By setting the `included_satellites` to `None`, we filter out all space-based observations. From the **observation collection** we can also retrieve **observation links**. As you already know from [previous examples](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/covariance_estimated_parameters.html), we use the links to define our **observations settings**. This is also where you would add the **bias settings**. For the purpose of this example, we will use the plain **angular position observation settings**, which can process observations with Right Ascension and Declination. We can also retrieve the times for the first and final observations from the batch object in seconds since J2000 TDB, which is what tudat uses internally. We here add our buffer, set previously, to avoid interpolation errors down the line." + "Now that our system of bodies is ready, we can retrieve the observation collection from the observations batch using the `to_tudat()` method. By setting the `included_satellites` to `None`, we filter out all space-based observations. From the **observation collection** we can also retrieve **observation links**. As you already know from [Covariance estimation example](covariance_estimated_parameters.ipynb), we use the links to define our **observations settings**. This is also where you would add the **bias settings**. For the purpose of this example, we will use the plain **angular position observation settings**, which can process observations with Right Ascension and Declination. We can also retrieve the times for the first and final observations from the batch object in seconds since J2000 TDB, which is what tudat uses internally. We here add our buffer, set previously, to avoid interpolation errors down the line." ] }, { @@ -365,6 +365,7 @@ "source": [ "### Creating the acceleration settings\n", "In order to estimate the orbit of Eros, we need to **propagate its initial state**. The propagation can only be performed upon definition of a **dynamical model**. Thus, we need to define the settings of the forces acting on Eros, which will determine its trajectory. We will include:\n", + "\n", "* **point mass gravity accelerations** for each of the bodies defined before,\n", "* Schwarzschild **relativistic corrections** for the Sun.\n", "\n", @@ -644,7 +645,7 @@ "source": [ "## Visualising the results\n", "\n", - "#### Change in residuals per iteration\n", + "### Change in residuals per iteration\n", "We want to visualise the residuals, splitting them between Right Ascension and Declination. Internally, `concatenated_observations` orders the observations alternating RA, DEC, RA, DEC,... This allows us to map the colors accordingly by taking every other item in the `residual_history`/`concatenated_observations`, i.e. by slicing [::2]." ] }, @@ -732,7 +733,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Residuals Correlations Matrix\n", + "### Residuals Correlations Matrix\n", "Lets check out the correlation of the estimated parameters." ] }, @@ -796,7 +797,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Orbit error vs spice over time\n", + "### Orbit error vs spice over time\n", "Next, lets take a look at the error of the orbit over time, using spice as a reference.\n", "\n", "We saw in the residuals graph that there are two large gaps in observations, for 2022 and around Jan 2020. Lets collect those gaps and overlay them on to our error plot." @@ -916,7 +917,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Final residuals highlighted per observatory\n", + "### Final residuals highlighted per observatory\n", "This plot shows the final iteration of the residuals, highlighting the 10 observatories with the most observations." ] }, @@ -1059,7 +1060,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Residual Boxplots per observatory\n", + "### Residual Boxplots per observatory\n", "Let's visualise these residuals as boxplots as well, again splitting for right ascension and declination. Note that some low level Matplotlib is used for this plot. Consider using the simplified [seaborn boxplot](https://seaborn.pydata.org/generated/seaborn.boxplot.html) implementation if this format is relevant to your use case." ] }, @@ -1170,7 +1171,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Histograms per observatory\n", + "### Histograms per observatory\n", "Finally, lets get the residual histogram for the top 6 observatories, splitting again for right ascension and declination." ] }, @@ -1270,9 +1271,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "tudat-examples", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1284,7 +1285,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/estimation/full_estimation_example.ipynb b/estimation/full_estimation_example.ipynb index a389e5f..b9c8af1 100644 --- a/estimation/full_estimation_example.ipynb +++ b/estimation/full_estimation_example.ipynb @@ -11,26 +11,13 @@ " \n", "* how to set up and perform the **full estimation** of a spacecraft's initial state, drag coefficient, and radiation pressure coefficient\n", " \n", - "For the **covariance analysis** over the course of the spacecraft's orbit see the [Delfi-C3 Covariance Analysis example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/covariance_estimated_parameters.html).\n", + "For the **covariance analysis** over the course of the spacecraft's orbit see the [Delfi-C3 Covariance Analysis example](covariance_estimated_parameters.ipynb).\n", " \n", "If you have already followed the covariance example, you might want to **skip the first part of this example** dealing with the setup of all relevant (environment, propagation, and estimation) modules, and dive straight in to the full estimation of all chosen parameters.\n", " \n", "To simulate the orbit of a spacecraft, we will fall back and reiterate on all aspects of orbit propagation that are important within the scope of orbit estimation. Further, we will highlight all relevant features of modelling a tracking station on Earth. Using this station, we will simulate a tracking routine of the spacecraft using a series of open-loop Doppler range-rate measurements at 1 mm/s every 60 seconds. To assure an uninterrupted line-of-sight between the station and the spacecraft, a minimum elevation angle of more than 15 degrees above the horizon - as seen from the station - will be imposed as constraint on the simulation of observations." ] }, - { - "cell_type": "markdown", - "id": "ff22a6db-84d1-441c-a7d5-d73ac13bbc31", - "metadata": {}, - "source": [ - "## Import statements\n", - "Typically - in the most pythonic way - all required modules are imported at the very beginning.\n", - " \n", - "Some standard modules are first loaded: `numpy` and `matplotlib.pyplot`.\n", - " \n", - "Then, the different modules of `tudatpy` that will be used are imported. Most notably, the `estimation`, `estimation_setup`, and `observations` modules will be used and demonstrated within this example." - ] - }, { "cell_type": "markdown", "id": "e99cbeda", @@ -80,7 +67,7 @@ " \n", "Subsequently, the start and end epoch of the simulation are defined. Note that using `tudatpy`, the times are generally specified in seconds since J2000. Hence, setting the start epoch to `0` corresponds to the 1st of January 2000. The end epoch specifies a total duration of the simulation of three days.\n", " \n", - "For more information on J2000 and the conversion between different temporal reference frames, please refer to the API documentation of the [`time_conversion module`](https://tudatpy.readthedocs.io/en/latest/time_conversion.html)." + "For more information on J2000 and the conversion between different temporal reference frames, please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module." ] }, { @@ -109,7 +96,7 @@ "### Create the main bodies\n", "To create the systems of bodies for the simulation, one first has to define a list of strings of all bodies that are to be included. Note that the default body settings (such as atmosphere, body shape, rotation model) are taken from the `SPICE` kernel.\n", " \n", - "These settings, however, can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details.\n", + "These settings, however, can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details.\n", " \n", "Finally, the system of bodies is created using the settings. This system of bodies is stored into the variable `bodies`." ] @@ -224,12 +211,15 @@ "source": [ "### Create the acceleration model\n", "Subsequently, all accelerations (and there settings) that act on `Delfi-C3` have to be defined. In particular, we will consider:\n", + "\n", "* Gravitational acceleration using a spherical harmonic approximation up to 8th degree and order for Earth.\n", "* Aerodynamic acceleration for Earth.\n", "* Gravitational acceleration using a simple point mass model for:\n", - " - The Sun\n", - " - The Moon\n", - " - Mars\n", + "\n", + " - The Sun\n", + " - The Moon\n", + " - Mars\n", + "\n", "* Radiation pressure experienced by the spacecraft - shape-wise approximated as a spherical cannonball - due to the Sun.\n", "\n", "The defined acceleration settings are then applied to `Delfi-C3` by means of a dictionary, which is finally used as input to the propagation setup to create the acceleration models." @@ -361,7 +351,7 @@ "### Add a ground station\n", "Trivially, the simulation of observations requires the extension of the current environment by at least one observer - a ground station. For this example, we will model a single ground station located in Delft, Netherlands, at an altitude of 0m, 52.00667°N, 4.35556°E.\n", "\n", - "More information on how to use the `add_ground_station()` function can be found in the respective [API documentation](https://tudatpy.readthedocs.io/en/latest/environment_setup.html#tudatpy.numerical_simulation.environment_setup.add_ground_station)." + "More information on how to use the `add_ground_station()` function can be found in the respective [API documentation](https://py.api.tudat.space/en/latest/environment_setup.html#tudatpy.numerical_simulation.environment_setup.add_ground_station)." ] }, { @@ -649,9 +639,10 @@ "source": [ "## True Errors, Formal Errors\n", "\n", - "Since we have now estimated the actual parameters - unlike when only getting the initial covariance matrix over the course of the orbit, as done in [Delfi-C3 Covariance Analysis example](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/covariance_estimated_parameters.html) - we are able to qualitatively compare the goodness-of-fit of the found parameters with the known ground truth ones. \n", + "Since we have now estimated the actual parameters - unlike when only getting the initial covariance matrix over the course of the orbit, as done in [Delfi-C3 Covariance Analysis example](covariance_estimated_parameters.ipynb) - we are able to qualitatively compare the goodness-of-fit of the found parameters with the known ground truth ones. \n", "\n", "The common way to perform this comparison is by following these 3 simple steps:\n", + "\n", "1) Compute the formal errors. These are the **diagonal entries of the covariance matrix (variances)**\n", "2) Take the difference between the true parameters (known) and the estimated ones (estimated)\n", "3) Take the ratio between the results obtained in 2) and 1). This is the true-to-formal-error ratio.\n", @@ -749,6 +740,7 @@ "source": [ "## Post-Processing Results\n", "Perfect, we have got our results. Now it is time to make sense of them. To further process them, one can - exemplary - plot:\n", + "\n", "1) the **behaviour of the simulated observations over time**;\n", "2) the **history of the residuals**;\n", "3) the **statistical interpretation of the final residuals**.\n", @@ -882,7 +874,7 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-examples", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -896,7 +888,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/estimation/galilean_moons_state_estimation.ipynb b/estimation/galilean_moons_state_estimation.ipynb index e994b68..1962374 100644 --- a/estimation/galilean_moons_state_estimation.ipynb +++ b/estimation/galilean_moons_state_estimation.ipynb @@ -17,7 +17,7 @@ "1) **simulate observations** based on the ephemerides of the Galilean moons;\n", "2) **estimate an improved initial state** for all four moons, such that\n", " the propagated orbit **minimizes the observations (ephemeris) residuals**\n", - "4) inspecting the (correct) representation and stability of the **Laplace resonance** between the inner three moons (Io, Europa, and Ganymede)." + "3) inspecting the (correct) representation and stability of the **Laplace resonance** between the inner three moons (Io, Europa, and Ganymede)." ] }, { @@ -60,12 +60,13 @@ "source": [ "## Orbital Simulation\n", "Entirely independent of the upcoming estimation-process, we first have to:\n", + "\n", "* define the **general settings of the simulation**\n", "* create the **environment**\n", "* define all relevant **propagation settings**\n", "\n", "### Simulation Settings\n", - "Besides importing tudat's standard kernels - which handily already include a version of the **NOE-5 ephemeris**, for more details see also [here](https://py.api.tudat.space/en/latest/spice.html#tudatpy.interface.spice.load_standard_kernels) - in terms of time-wise settings we have (arbitrarily) chosen to make use of the nominal duration of ESA's JUICE mission as scope of our simulation. Nonetheless, note that any other reasonably long time-span would have been equally sufficient." + "Besides importing tudat's standard kernels - which handily already include a version of the **NOE-5 ephemeris**, for more details see also the [`load_standard_kernels`](https://py.api.tudat.space/en/latest/spice.html#tudatpy.interface.spice.load_standard_kernels) function - in terms of time-wise settings we have (arbitrarily) chosen to make use of the nominal duration of ESA's JUICE mission as scope of our simulation. Nonetheless, note that any other reasonably long time-span would have been equally sufficient." ] }, { @@ -412,7 +413,7 @@ "metadata": {}, "source": [ "### Perform the Estimation\n", - "Using the set of **'artificial cartesian observations'** of the moons' ephemerides, we are finally able to estimate improved initial states for each of the four Galilean satellites. To this end, we will make use of the known estimation functionality of tudat. All other settings remain unchanged and thus equal to their default values (for more details see [here](https://py.api.tudat.space/en/latest/estimation.html#tudatpy.numerical_simulation.estimation.EstimationInput.define_estimation_settings))." + "Using the set of **'artificial cartesian observations'** of the moons' ephemerides, we are finally able to estimate improved initial states for each of the four Galilean satellites. To this end, we will make use of the known estimation functionality of tudat. All other settings remain unchanged and thus equal to their default values (for more details see the [`define_estimation_settings`](https://py.api.tudat.space/en/latest/estimation.html#tudatpy.numerical_simulation.estimation.EstimationInput.define_estimation_settings) function)." ] }, { @@ -744,9 +745,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "tudat-examples", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -758,7 +759,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/estimation/improved_estimation_with_mpc.ipynb b/estimation/improved_estimation_with_mpc.ipynb index cf673bb..dac1fbe 100644 --- a/estimation/improved_estimation_with_mpc.ipynb +++ b/estimation/improved_estimation_with_mpc.ipynb @@ -8,7 +8,7 @@ "Copyright (c) 2010-2024, Delft University of Technology. All rights reserved. This file is part of the Tudat. Redistribution and use in source and binary forms, with or without modification, are permitted exclusively under the terms of the Modified BSD license. You should have received a copy of the license with this file. If not, please visit: http://tudat.tudelft.nl/LICENSE.\n", "\n", "## Objectives\n", - "This example extends the previous [Initial state estimation with Minor Planet Center Observations](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/estimation_with_mpc.html). In an attempt to improve the results from the previous example, we introduce and compare the effects of including satellite data, star catalog corrections, observation weighting and more expansive acceleration models. It essential to be familiar with the previous example as many concepts will be reused here without explanation. \n", + "This example extends the previous [Initial state estimation with Minor Planet Center Observations](estimation_with_mpc.ipynb). In an attempt to improve the results from the previous example, we introduce and compare the effects of including satellite data, star catalog corrections, observation weighting and more expansive acceleration models. It essential to be familiar with the previous example as many concepts will be reused here without explanation. \n", "\n", "As in the previous example we will estimate the initial state of [433 Eros](https://en.wikipedia.org/wiki/433_Eros). In addition to observation data from MPC and metadata from SBDB, we now also use ephemeris data from JPL Horizons to retrieve position data for observing space telescopes, additional perturbing bodies and as a method of comparison. This is accomplished using Tudat's HorizonsQuery Interface." ] @@ -144,10 +144,13 @@ "source": [ "### Combinations and additional body setup\n", "There are various ways to change our estimation. We can create a system of setups to compare those various options and to facilitate comparison. Throughout the example, the following options are considered:\n", + "\n", "- [`accel_levels`] Different acceleration settings, for this example, 3 options are created in increasing order of realism\n", + "\n", " - LVL 1 - Only point-mass gravity for the sun and the 8 mayor planets as well as Schwarzschild relativistic correction for the sun.\n", " - LVL 2 - LVL 1 + point-mass gravity for the mayor moons of Jupiter, Saturn, Earth and Mars.\n", " - LVL 3 - LVL 2 + SHG for the Earth and point-mass gravity for Triton, Titania, Pluto, the mayor Near Earth Asteroids (NEA) and largest Main Body Asteroids (MBA). These additional bodies are retrieved through the JPL Horizons interface.\n", + "\n", "- [`use_sat_data`] Observations by space telescope WISE\n", "- [`use_catalog_cor`] Star catalog corrections as described in \"Star catalog position and proper motion corrections in asteroid astrometry II: The Gaia era\" by Eggl et al.\n", "- [`use_weighting`] Estimation weights as described in \"Statistical analysis of astrometric errors for the most productive asteroid surveys\" by Veres et al.\n", @@ -646,7 +649,7 @@ "metadata": {}, "source": [ "### Creating the acceleration settings\n", - "Differing acceleration settings will allow us to see how addititional perturbations affect our estimation. As mentioned before the following acceleration sets are used:\n", + "Differing acceleration settings will allow us to see how additional perturbations affect our estimation. As mentioned before the following acceleration sets are used:\n", "\n", "- LVL 1 - Only point-mass gravity for the sun and the 8 mayor planets as well as Schwarzschild relativistic correction for the sun.\n", "- LVL 2 - LVL 1 + point-mass gravity for the mayor moons of Jupiter, Saturn, Earth and Mars.\n", @@ -795,10 +798,11 @@ "source": [ "## Estimation and plotting functions\n", "To enable standardised comparison of the different setups, we create estimation and plotting functions for our estimations. The estimation itself largely follows the same steps as the previous example, with the exception of the added satellite configuration and the enabling of the weights and the star catalog corrections. The following four functions are made:\n", - " - [`perform_estimation`] takes a set of options defined by us to perform an estimation, returning the `estimator`, `pod_output`, `batch` and `observation_collection` for subsequent analysis.\n", - " - [`plot_residuals`] plots the obtained residuals for a collection of setups\n", - " - [`plot_cartesian`] plots the carthesian error with respect to SPICE and JPL Horizons for a collection of setups.\n", - " - [`plot_cartesian_single`] plots a more detailed verion of the above for a single setup.\n", + "\n", + "- [`perform_estimation`] takes a set of options defined by us to perform an estimation, returning the `estimator`, `pod_output`, `batch` and `observation_collection` for subsequent analysis.\n", + "- [`plot_residuals`] plots the obtained residuals for a collection of setups\n", + "- [`plot_cartesian`] plots the carthesian error with respect to SPICE and JPL Horizons for a collection of setups.\n", + "- [`plot_cartesian_single`] plots a more detailed verion of the above for a single setup.\n", "\n" ] }, @@ -806,7 +810,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Estimation Function" + "### Estimation Function" ] }, { @@ -923,7 +927,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Plotting Functions" + "### Plotting Functions" ] }, { @@ -1242,7 +1246,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Perfoming the estimation\n", + "### Performing the estimation\n", "We can then run the setups using `perform_estimation` to retrieve our pod_outputs, observation collections, estimator objects and also retrieve the state at a set of times for later comparison with SPICE and horizons." ] }, @@ -1359,7 +1363,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Visualising the results\n", + "### Visualising the results\n", "The result of the estimation is plotted below. The first plot shows similar residuals for all three setups, with all setups converging within 6 iteration. In terms of the cartesian errors, adding the additional moons in LVL2 greatly reduces the error, however additions added beyond that in LVL3 have almost no effect." ] }, @@ -1406,7 +1410,8 @@ "metadata": {}, "source": [ "### Weights and Star Catalog Biases\n", - "Before running the next round, lets have a quick look at the star catalog corrections and obsertvation weights which are based on the following literature:\n", + "Before running the next round, lets have a quick look at the star catalog corrections and observation weights which are based on the following literature:\n", + "\n", "- \"Star catalog position and proper motion corrections in asteroid astrometry II: The Gaia era\" by Eggl et al.\n", "- \"Statistical analysis of astrometric errors for the most productive asteroid surveys\" by Veres et al.\n", "\n", diff --git a/estimation/mro_range_estimation.ipynb b/estimation/mro_range_estimation.ipynb index 9dd3dda..18242a4 100644 --- a/estimation/mro_range_estimation.ipynb +++ b/estimation/mro_range_estimation.ipynb @@ -18,7 +18,7 @@ "\n", "## Prerequisites\n", "\n", - "To run this example, you need [the data file](https://ssd.jpl.nasa.gov/dat/planets/mrorange2006-2013.txt) from the NASA JPLand store it in a subfolder called [./data](./data). For your convenience, this file has been added to the example repository already\n" + "To run this example, you need [the data file](https://ssd.jpl.nasa.gov/dat/planets/mrorange2006-2013.txt) from the NASA JPL and store it in a subfolder called ``./data``. For your convenience, this file [has been added to the example repository](./data/mrorange2006-2013.txt) already.\n" ] }, { @@ -513,9 +513,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "tudat-examples", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -527,7 +527,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/estimation/retrieving_mpc_observation_data.ipynb b/estimation/retrieving_mpc_observation_data.ipynb index 5d34ad0..3b8e042 100644 --- a/estimation/retrieving_mpc_observation_data.ipynb +++ b/estimation/retrieving_mpc_observation_data.ipynb @@ -8,7 +8,7 @@ "## Objectives\n", "The [Minor Planet Centre](https://www.minorplanetcenter.net/) (MPC) provides positional elements and observation data for minor planets, comets and outer irregular natural satellites of the major planets. Tudat's `BatchMPC` class allows for the retrieval and processing of observational data for these objects. \n", "\n", - "This example highlights the complete functionality of the `BatchMPC` class. The [Estimation with MPC](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/estimation_with_mpc.html) example showcases how to perform an estimation using MPC observations, but **we recommend going through this example first**.\n", + "This example highlights the complete functionality of the `BatchMPC` class. The [Estimation with MPC](estimation_with_mpc.ipynb) example showcases how to perform an estimation using MPC observations, but **we recommend going through this example first**.\n", "\n", "\n", "\n", @@ -16,7 +16,7 @@ "\n", "The following asteroids will be used in the example:\n", "\n", - "- [433 Eros](https://en.wikipedia.org/wiki/433_Eros) (also the main focus of the [Estimation with MPC](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/estimation_with_mpc.html) example)\n", + "- [433 Eros](https://en.wikipedia.org/wiki/433_Eros) (also the main focus of the [Estimation with MPC](estimation_with_mpc.ipynb) example)\n", "- [238 Hypatia](https://en.wikipedia.org/wiki/238_Hypatia)\n", "- [329 Svea](https://en.wikipedia.org/wiki/329_Svea)\n" ] @@ -229,7 +229,7 @@ "metadata": {}, "source": [ "### Set up the system of bodies\n", - "A **system of bodies** must be created to keep observatories' positions consistent with Earth's shape model and to allow the attachment of these observatories to Earth. For the purposes of this example, we keep it as simple as possible. See the [Estimation with MPC](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/estimation_with_mpc.html) for a more complete setup and explanation appropriate for estimation. For our bodies, we only use **Earth and the Sun**. We set our origin to `\"SSB\"`, the solar system barycenter. We use the default body settings from the `SPICE` kernel to initialise the planet and use it to create a system of bodies. This system of bodies is used in the `to_tudat()` method." + "A **system of bodies** must be created to keep observatories' positions consistent with Earth's shape model and to allow the attachment of these observatories to Earth. For the purposes of this example, we keep it as simple as possible. See the [Estimation with MPC](estimation_with_mpc.ipynb) for a more complete setup and explanation appropriate for estimation. For our bodies, we only use **Earth and the Sun**. We set our origin to `\"SSB\"`, the solar system barycenter. We use the default body settings from the `SPICE` kernel to initialise the planet and use it to create a system of bodies. This system of bodies is used in the `to_tudat()` method." ] }, { @@ -441,7 +441,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "That's it! Next, check out the [Estimation with MPC](https://docs.tudat.space/en/latest/_src_getting_started/_src_examples/notebooks/estimation/estimation_with_mpc.html) example to try estimation with the observations we have retrieved here. The remainder of the example discusses additional features of the BatchMPC interface." + "That's it! Next, check out the [Estimation with MPC](estimation_with_mpc.ipynb) example to try estimation with the observations we have retrieved here. The remainder of the example discusses additional features of the BatchMPC interface." ] }, { @@ -705,9 +705,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "tudat-examples", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -719,7 +719,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/mission_design/cassini1_mga_optimization.ipynb b/mission_design/cassini1_mga_optimization.ipynb index e169232..8bf23e0 100644 --- a/mission_design/cassini1_mga_optimization.ipynb +++ b/mission_design/cassini1_mga_optimization.ipynb @@ -279,7 +279,7 @@ "id": "de4f38b2", "metadata": {}, "source": [ - "Before running the optimisation, it is first necessary to setup the simulation. In this case, this consists of creating an MGA object. This object is created according to the procedure described in the [MGA trajectory example](https://docs.tudat.space/en/stable/_src_getting_started/_src_examples/notebooks/propagation/mga_dsm_analysis.html). The object is created using the central body, transfer bodies order, departure orbit, and arrival orbit specified in the Cassini 1 problem statement (presented above)." + "Before running the optimisation, it is first necessary to setup the simulation. In this case, this consists of creating an MGA object. This object is created according to the procedure described in the [MGA trajectory example](mga_trajectories.ipynb). The object is created using the central body, transfer bodies order, departure orbit, and arrival orbit specified in the Cassini 1 problem statement (presented above)." ] }, { @@ -695,7 +695,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -709,7 +709,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/mission_design/earth_mars_transfer_window.ipynb b/mission_design/earth_mars_transfer_window.ipynb index 79bbceb..1947617 100644 --- a/mission_design/earth_mars_transfer_window.ipynb +++ b/mission_design/earth_mars_transfer_window.ipynb @@ -154,7 +154,7 @@ "metadata": {}, "outputs": [ { - "name": "stdin", + "name": "stdout", "output_type": "stream", "text": [ "\n", @@ -334,19 +334,11 @@ " **case\n", " )" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "92f63a97-d527-4b42-ac6b-53abb8cbea5e", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -360,7 +352,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/mission_design/hodographic_shaping_mga_optimization.ipynb b/mission_design/hodographic_shaping_mga_optimization.ipynb index a131581..78fc639 100644 --- a/mission_design/hodographic_shaping_mga_optimization.ipynb +++ b/mission_design/hodographic_shaping_mga_optimization.ipynb @@ -868,7 +868,7 @@ "id": "6b6eddd8-d2ed-4433-9425-28384c8c8902", "metadata": {}, "source": [ - "#### Plot the transfer\n", + "### Plot the transfer\n", "\n", "The transfer trajectory object associated with a given design parameter vector can be retrieved from the PyGMO problem class through the `get_transfer_trajectory_object` object. The returned object is already evaluated. Using the transfer trajectory object one can, for example, retrieve the state and thrust acceleration history throughout the transfer and plot them." ] diff --git a/mission_design/mga_trajectories.ipynb b/mission_design/mga_trajectories.ipynb index 438b0be..5f56643 100644 --- a/mission_design/mga_trajectories.ipynb +++ b/mission_design/mga_trajectories.ipynb @@ -9,6 +9,7 @@ "## Objectives\n", "\n", "This example demonstrates how **Multiple Gravity Assist (MGA)** transfer trajectories can be simulated. Three types of transfers are analyzed:\n", + "\n", "* High-thrust transfer with unpowered legs\n", "* High-thrust transfer with deep space maneuvers (DSMs) and manually-created legs and nodes\n", "* Low-thrust transfer with hodographic shaping\n", @@ -17,7 +18,7 @@ "In addition, this example show how the results, such as partial $\\Delta V$'s, total $\\Delta V$ and time of flight\n", "values can be retrieved from the transfer object.\n", "\n", - "A complete guide on transfer trajectory design is given on [this page](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/astrodynamics/trajectory_design.html) of tudat user documentation." + "A complete guide on transfer trajectory design is given on [this page](https://docs.tudat.space/en/latest/_src_user_guide/prelim_mission_design/mga_transfer.html) of tudat user documentation." ] }, { @@ -1006,7 +1007,7 @@ "source": [ "In this case, there is a much larger list of free parameters than in the previous cases. As before, the first parameters are the node times, corresponding to the times when the spacecraft encounters each planet. Next, the node free parameters are required. These include the selection of the departure velocity at the departure node (3 parameters), the arrival velocity at each swingby node (3 parameters per node), the characteristics of each swingby (3 parameters per node), and the arrival velocity at the arrival node (3 parameters). Finally, it is necessary to specify the leg free parameters. These consist of the number of revolutions of each leg (1 parameter per leg), and of two free coefficients per velocity component per leg (6 parameters per leg).\n", "\n", - "The parameters used in this example were determined via optimization, using PyGMO. The code used to optimize the transfer is analyzed in [this example](https://tudat-space.readthedocs.io/en/latest/src_getting_started/_src_examples/notebooks/pygmo/hodographic_shaping_mga_optimization.ipynb)." + "The parameters used in this example were determined via optimization, using PyGMO. The code used to optimize the transfer is analyzed in [this example](hodographic_shaping_mga_optimization.ipynb)." ] }, { @@ -1168,7 +1169,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -1182,7 +1183,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/propagation/keplerian_satellite_orbit.ipynb b/propagation/keplerian_satellite_orbit.ipynb index 154b9dc..9e4e90d 100644 --- a/propagation/keplerian_satellite_orbit.ipynb +++ b/propagation/keplerian_satellite_orbit.ipynb @@ -62,7 +62,7 @@ "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to `0`, corresponding to the 1st of January 2000.\n", "The end epoch is defined as 1 day later.\n", "The times should be specified in seconds since J2000.\n", - "Please refer to the API documentation of the `time_conversion module` [here](https://tudatpy.readthedocs.io/en/latest/time_conversion.html) for more information on this." + "Please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module for more information on this." ] }, { @@ -93,7 +93,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details." + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details." ] }, { @@ -430,9 +430,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "Python 3", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -444,7 +444,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/propagation/linear_sensitivity_analysis.ipynb b/propagation/linear_sensitivity_analysis.ipynb index 3ef357a..6c7a1b2 100644 --- a/propagation/linear_sensitivity_analysis.ipynb +++ b/propagation/linear_sensitivity_analysis.ipynb @@ -61,7 +61,7 @@ "NAIF's `SPICE` kernels are first loaded, so that the position of various bodies such as the Earth, the Sun, the Moon, Venus, or Mars, can be make known to `tudatpy`.\n", "\n", "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to `0`, corresponding to the 1st of January 2000. The times should be specified in seconds since J2000.\n", - "Please refer to the API documentation of the `time_conversion module` [here](https://tudatpy.readthedocs.io/en/latest/time_conversion.html) for more information on this." + "Please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module for more information on this." ] }, { @@ -92,7 +92,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details." + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details." ] }, { @@ -343,10 +343,10 @@ "source": [ "### Setup the variational equations\n", "In addition to the state of the satellite, variation equations will also be propagated.\n", - "A detailed explanation on variational equations is given in [tudatpy user guide](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/running_variational_simulation.html).\n", + "A detailed explanation on variational equations is given in [tudatpy user guide](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/propagating_variational_simulation.html).\n", "\n", "In this example, both the initial state transition matrix and the sensitivity matrix are to be propagated.\n", - "The list of the available estimated parameters for the sensitivity matrix are also given in [tudatpy user guide](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/sensitivity_analysis/available_parameters.html)." + "The list of the available estimated parameters for the sensitivity matrix are also given in [tudatpy user guide](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/propagating_variational_equations/available_parameters.html)." ] }, { @@ -562,7 +562,7 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-examples", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -576,7 +576,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/propagation/perturbed_satellite_orbit.ipynb b/propagation/perturbed_satellite_orbit.ipynb index 9d218e5..2f2432d 100644 --- a/propagation/perturbed_satellite_orbit.ipynb +++ b/propagation/perturbed_satellite_orbit.ipynb @@ -62,7 +62,7 @@ "NAIF's `SPICE` kernels are first loaded, so that the position of various bodies such as the Earth can be make known to `tudatpy`.\n", "\n", "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to `0`, corresponding to the 1st of January 2000. The times should be specified in seconds since J2000.\n", - "Please refer to the API documentation of the `time_conversion module` [here](https://tudatpy.readthedocs.io/en/latest/time_conversion.html) for more information on this." + "Please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module for more information on this." ] }, { @@ -93,7 +93,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details." + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details." ] }, { @@ -335,7 +335,7 @@ "### Define dependent variables to save\n", "In this example, we are interested in saving not only the propagated state of the satellite over time, but also a set of so-called dependent variables, that are to be computed (or extracted and saved) at each integration step.\n", "\n", - "[This page](https://tudatpy.readthedocs.io/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available." + "[This page](https://py.api.tudat.space/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available." ] }, { @@ -691,9 +691,9 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-bundle", + "display_name": "Python 3", "language": "python", - "name": "tudat-bundle" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -705,7 +705,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/propagation/reentry_trajectory.ipynb b/propagation/reentry_trajectory.ipynb index 87e79e1..3f721de 100644 --- a/propagation/reentry_trajectory.ipynb +++ b/propagation/reentry_trajectory.ipynb @@ -217,7 +217,7 @@ "NAIF's `SPICE` kernels are first loaded, so that the position of various bodies such as the Earth can be make known to `tudatpy`.\n", "\n", "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to `0`, corresponding to the 1st of January 2000. The times should be specified in seconds since J2000.\n", - "Please refer to the API documentation of the `time_conversion module` [here](https://tudatpy.readthedocs.io/en/latest/time_conversion.html) for more information on this." + "Please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module for more information on this." ] }, { @@ -259,7 +259,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details." + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details." ] }, { @@ -536,7 +536,7 @@ "\n", "In this example, we are interested in saving not only the propagated state of the vehicle over time, but also a set of so-called dependent variables, that are to be computed (or extracted and saved) at each integration step.\n", "\n", - "[This page](https://tudatpy.readthedocs.io/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available." + "[This page](https://py.api.tudat.space/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available." ] }, { @@ -995,7 +995,7 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-examples", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -1009,7 +1009,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/propagation/solar_system_propagation.ipynb b/propagation/solar_system_propagation.ipynb index 3d7beee..53dfbd4 100644 --- a/propagation/solar_system_propagation.ipynb +++ b/propagation/solar_system_propagation.ipynb @@ -66,7 +66,7 @@ "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to `1e7`, corresponding to 10 million seconds ($\\approx$ 115.74 days) after the 1st of January 2000. The end epoch is set 5 years later.\n", "\n", "The times should always be specified in seconds since J2000.\n", - "Please refer to the API documentation of the `time_conversion module` [here](https://tudatpy.readthedocs.io/en/latest/time_conversion.html) for more information on this." + "Please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module for more information on this." ] }, { @@ -97,7 +97,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details.\n", + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details.\n", "\n", "Finally, the system of bodies is created using the settings. This system of bodies is stored into the variable `body_system`." ] diff --git a/propagation/thrust_between_Earth_Moon.ipynb b/propagation/thrust_between_Earth_Moon.ipynb index 18c8cba..3076ea5 100644 --- a/propagation/thrust_between_Earth_Moon.ipynb +++ b/propagation/thrust_between_Earth_Moon.ipynb @@ -74,7 +74,7 @@ "Then the start and end simulation epochs are set up. In this case, the start epoch is set to `1e7`, which corresponds to 10 million seconds ($\\approx$ 115.74 days) after the 1st of January 2000.\n", "\n", "The times should always be specified in seconds since the epoch of J2000.\n", - "Please refer to the API documentation of the `time_conversion module` [here](https://tudatpy.readthedocs.io/en/latest/time_conversion.html) for more information on this." + "Please refer to the [API documentation](https://py.api.tudat.space/en/latest/time_conversion.html) of the `time_conversion` module for more information on this." ] }, { @@ -131,7 +131,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details.\n", + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details.\n", "\n", "Finally, the system of bodies is created using the settings. This system of bodies is stored in the variable `bodies`." ] @@ -350,7 +350,7 @@ "\n", "In this example, we are interested in saving not only the propagated state of the satellite over time, but also a set of so-called dependent variables that are to be computed (or extracted and saved) at each integration step.\n", "\n", - "[This page](https://tudatpy.readthedocs.io/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available." + "[This page](https://py.api.tudat.space/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available." ] }, { @@ -778,7 +778,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -792,7 +792,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/propagation/thrust_satellite_engine.ipynb b/propagation/thrust_satellite_engine.ipynb index 66fca5f..7a03864 100644 --- a/propagation/thrust_satellite_engine.ipynb +++ b/propagation/thrust_satellite_engine.ipynb @@ -20,9 +20,10 @@ "Consider the orbit of JUICE with respect to Ganymede. The goal will be to increase the inclination of the orbit, while keeping the nodes constant. Theoretically speaking, the easiest way to do this is by one or more impulsive maneuvers at the nodes of the orbit. Naturally, in reality this thrust will not be impulsive, but the thrust will be applied over a finite duration.\n", "\n", "In this example, thrust is implemented to be provided when the true longitude of the spacecraft is within 2 degrees of one of the nodes. Note that parametrizing the thrust as a function of the true longitude is likely not an optimal choice, but it will suffice for this example. The maximum thrust magnitude $T_{max}$ is used when the thrust is on. Introducing such a discontinuity in the dynamical model is again likely not an optimal choice, but will suffice.\n", - "In addition to the acceleration from the thrust, a basic model is set up, consisting of the following accelerations: \\\n", - "· Spherical harmonic gravity accelerations from Ganymede and Jupiter. Their gravity fields will be expanded to D/O 2/2 and 4/0 respectively. \\\n", - "· Third body forces will include those of the Sun, Saturn, Europa, Io and Callisto. \n", + "In addition to the acceleration from the thrust, a basic model is set up, consisting of the following accelerations:\n", + "\n", + "- Spherical harmonic gravity accelerations from Ganymede and Jupiter. Their gravity fields will be expanded to D/O 2/2 and 4/0 respectively.\n", + "- Third body forces will include those of the Sun, Saturn, Europa, Io and Callisto. \n", "\n", "The mass of the vehicle is propagated using a mass rate model consistent with the engine thrust used.\n", "\n", @@ -369,9 +370,9 @@ "\n", "In this example, we are interested in saving not only the propagated state of the satellite over time, but also a set of so-called dependent variables that are to be computed (or extracted and saved) at each integration step.\n", "\n", - "[This page](https://tudatpy.readthedocs.io/en/latest/dependent_variable.html) of the tudatpy API website provides a detailled explanation of all the dependent variables that are available.\n", + "[This page](https://py.api.tudat.space/en/latest/dependent_variable.html) of the tudatpy API website provides a detailed explanation of all the dependent variables that are available.\n", "\n", - "We will save the keplerian state of JUICE with respect to Ganymede, to verify whether we really do raise the inclincation of the orbit. We will also save the mass of JUICE over time to ensure our mass propagation is also correctly performed. Lastly, we save norm of the thrust acceleration to verify whether the thrust we have set is indeed equal to 1N." + "We will save the keplerian state of JUICE with respect to Ganymede, to verify whether we really do raise the inclination of the orbit. We will also save the mass of JUICE over time to ensure our mass propagation is also correctly performed. Lastly, we save norm of the thrust acceleration to verify whether the thrust we have set is indeed equal to 1N." ] }, { diff --git a/propagation/two_stage_rocket_ascent.ipynb b/propagation/two_stage_rocket_ascent.ipynb index 26fefc7..f795f6d 100644 --- a/propagation/two_stage_rocket_ascent.ipynb +++ b/propagation/two_stage_rocket_ascent.ipynb @@ -57,7 +57,7 @@ "## Configuration\n", "NAIF's `SPICE` kernels are first loaded, so that the position of various bodies such as the Earth can be make known to `tudatpy`.\n", "\n", - "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to the 17th of February 2031. This epoch is first defined using the `datetime` module. Because the times should be specified in seconds since J2000, the `time_conversion module` is then used to convert the `datetime` to the correct format." + "Then, the start and end simulation epochs are setups. In this case, the start epoch is set to the 17th of February 2031. This epoch is first defined using the `datetime` module. Because the times should be specified in seconds since J2000, the `time_conversion` module is then used to convert the `datetime` to the correct format." ] }, { @@ -89,7 +89,7 @@ "\n", "The default body settings (such as atmosphere, body shape, rotation model) are taken from `SPICE`.\n", "\n", - "These settings can be adjusted. Please refer to the [Available Environment Models](https://tudat-space.readthedocs.io/en/latest/_src_user_guide/state_propagation/environment_setup/create_models/available.html#available-environment-models) in the user guide for more details.\n", + "These settings can be adjusted. Please refer to the [Available Environment Models](https://docs.tudat.space/en/latest/_src_user_guide/state_propagation/environment_setup/environment_models.html#available-model-types) in the user guide for more details.\n", "\n", "For our central body Mars, a predefined exponential atmosphere is then loaded.\n", "\n", @@ -1023,7 +1023,7 @@ ], "metadata": { "kernelspec": { - "display_name": "tudat-examples", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -1037,7 +1037,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/pygmo/asteroid_orbit_optimization/aoo_custom_environment.ipynb b/pygmo/asteroid_orbit_optimization/aoo_custom_environment.ipynb index 11cd55c..249c411 100644 --- a/pygmo/asteroid_orbit_optimization/aoo_custom_environment.ipynb +++ b/pygmo/asteroid_orbit_optimization/aoo_custom_environment.ipynb @@ -11,14 +11,14 @@ "Copyright (c) 2010-2022, Delft University of Technology. All rights reserved. This file is part of the Tudat. Redistribution and use in source and binary forms, with or without modification, are permitted exclusively under the terms of the Modified BSD license. You should have received a copy of the license with this file. If not, please or visit: http://tudat.tudelft.nl/LICENSE.\n", "\n", "## Objectives\n", - "The aim of this tutorial is to illustrate the use of PyGMO to optimize an astrodynamics problem simulated with tudatpy. The problem describes the orbit design around a small body; the [Itokawa asteroid](https://en.wikipedia.org/wiki/25143_Itokawa). This example consists of three parts that build on each other to ultimately perform an orbit optimization. The three parts are built up as follows: Custom Environment (this page), [Design Space Exploration](https://tudat-space.readthedocs.io/en/latest/_src_getting_started/_src_examples/notebooks/pygmo/asteroid_orbit_optimization/aoo_design_space_exploration.html), and [Optimization](https://tudat-space.readthedocs.io/en/latest/_src_getting_started/_src_examples/notebooks/pygmo/asteroid_orbit_optimization/aoo_optimization.html).\n", + "The aim of this tutorial is to illustrate the use of PyGMO to optimize an astrodynamics problem simulated with tudatpy. The problem describes the orbit design around a small body; the [Itokawa asteroid](https://en.wikipedia.org/wiki/25143_Itokawa). This example consists of three parts that build on each other to ultimately perform an orbit optimization. The three parts are built up as follows: Custom Environment (this page), [Design Space Exploration](aoo_design_space_exploration.ipynb), and [Optimization](aoo_optimization.ipynb).\n", "\n", "**This part of the example is focussed on the creation of a custom environment, using manually defined rotation, ephemeris, gravity field, and shape settings**. A PyGMO compatible Problem class is also created for the next parts of the example. Using this problem class, a propagation is conducted to show a possible trajectory orbiting Itokawa.\n", "\n", "\n", "### NOTE\n", "\n", - "It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://tudat-space.readthedocs.io/en/latest/_src_advanced_topics/optimization_pygmo.html). The full PyGMO documentation is available [on this website](https://esa.github.io/pygmo2/index.html). Be careful to read the\n", + "It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://docs.tudat.space/en/latest/_src_advanced_topics/optimization_pygmo.html). The full PyGMO documentation is available [on this website](https://esa.github.io/pygmo2/index.html). Be careful to read the\n", "correct the documentation webpage (there is also a similar one for previous yet now outdated versions [here](https://esa.github.io/pygmo/index.html); as you can see, they can easily be confused).\n", "PyGMO is the Python counterpart of [PAGMO](https://esa.github.io/pagmo2/index.html)." ] @@ -91,7 +91,7 @@ "metadata": {}, "source": [ "### Itokawa rotation settings\n", - "The first helper function that is setup is `get_itokawa_rotation_settings()`. This function can be called to get Itokawa rotation settings, of type [environment_setup.rotation_model.RotationModelSettings](https://tudatpy.readthedocs.io/en/latest/rotation_model.html#tudatpy.numerical_simulation.environment_setup.rotation_model.RotationModelSettings), using a constant angular velocity.\n", + "The first helper function that is setup is `get_itokawa_rotation_settings()`. This function can be called to get Itokawa rotation settings, of type [environment_setup.rotation_model.RotationModelSettings](https://py.api.tudat.space/en/latest/rotation_model.html#tudatpy.numerical_simulation.environment_setup.rotation_model.RotationModelSettings), using a constant angular velocity.\n", "\n", "This function only take the name of the body frame of Itokawa as an input.\n", "In addition, some fixed parameters are defined in this function:\n", @@ -282,7 +282,7 @@ "metadata": {}, "source": [ "### Simulation bodies\n", - "Next, the `create_simulation_bodies()` function is setup, that returns an [environment.SystemOfBodies](https://tudatpy.readthedocs.io/en/latest/environment.html#tudatpy.numerical_simulation.environment.SystemOfBodies) object. This object contains all the body settings and body objects required by the simulation. Only one input is required to this function: the radius of Itokawa.\n", + "Next, the `create_simulation_bodies()` function is setup, that returns an [environment.SystemOfBodies](https://py.api.tudat.space/en/latest/environment.html#tudatpy.numerical_simulation.environment.SystemOfBodies) object. This object contains all the body settings and body objects required by the simulation. Only one input is required to this function: the radius of Itokawa.\n", "\n", "Moreover, in the system of bodies that is returned, a `Spacecraft` body is included, with a mass of 400kg, and a radiation pressure interface. This body is the one for which an orbit is to be optimised around Itokawa." ] @@ -874,7 +874,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -888,7 +888,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/pygmo/asteroid_orbit_optimization/aoo_design_space_exploration.ipynb b/pygmo/asteroid_orbit_optimization/aoo_design_space_exploration.ipynb index b3c76af..d75923f 100644 --- a/pygmo/asteroid_orbit_optimization/aoo_design_space_exploration.ipynb +++ b/pygmo/asteroid_orbit_optimization/aoo_design_space_exploration.ipynb @@ -11,7 +11,7 @@ "Copyright (c) 2010-2022, Delft University of Technology. All rights reserved. This file is part of the Tudat. Redistribution and use in source and binary forms, with or without modification, are permitted exclusively under the terms of the Modified BSD license. You should have received a copy of the license with this file. If not, please or visit: http://tudat.tudelft.nl/LICENSE.\n", "\n", "## Objectives\n", - "This tutorial is the second part of the Asteroid Orbit Optimization example. **This page reuses the** [Custom environment](https://tudat-space.readthedocs.io/en/latest/_src_getting_started/_src_examples/notebooks/pygmo/asteroid_orbit_optimization/aoo_custom_environment.html) **part of the example, without the explanation, after which a Design Space Exploration (DSE) is done**. The DSE is collection of methods with which an optimization problem can be analyzed, and better understood, without having to execute an optimization or test randomly.\n", + "This tutorial is the second part of the Asteroid Orbit Optimization example. **This page reuses the** [Custom environment](aoo_custom_environment.ipynb) **part of the example, without the explanation, after which a Design Space Exploration (DSE) is done**. The DSE is collection of methods with which an optimization problem can be analyzed, and better understood, without having to execute an optimization or test randomly.\n", "\n", "## Problem definition\n", "\n", @@ -29,8 +29,8 @@ " \n", "The constraints are set on the altitude: all the sets of design variables leading to an orbit.\n", "\n", - "#### NOTE\n", - "It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://tudat-space.readthedocs.io/en/latest/_src_advanced_topics/optimization_pygmo.html). The full PyGMO documentation is available [on this website](https://esa.github.io/pygmo2/index.html). Be careful to read the\n", + "### NOTE\n", + "It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://docs.tudat.space/en/latest/_src_advanced_topics/optimization_pygmo.html). The full PyGMO documentation is available [on this website](https://esa.github.io/pygmo2/index.html). Be careful to read the\n", "correct the documentation webpage (there is also a similar one for previous yet now outdated versions [here](https://esa.github.io/pygmo/index.html); as you can see, they can easily be confused).\n", "PyGMO is the Python counterpart of [PAGMO](https://esa.github.io/pagmo2/index.html)." ] @@ -707,7 +707,7 @@ "source": [ "## Design Space Exploration\n", "\n", - "**From here on out the example is new compared to the** [Custom environment](https://tudat-space.readthedocs.io/en/latest/_src_getting_started/_src_examples/notebooks/pygmo/asteroid_orbit_optimization/aoo_custom_environment.html) **part of the example.**\n", + "**From here on out the example is new compared to the** [Custom environment](aoo_custom_environment.ipynb) **part of the example.**\n", "\n", "Now that the simulation has been setup, the problem can actually be run and explored. While one could jump into the optimisation immediately, not much is known yet about the specific problem at hand. A design space exploration is done prior to the optimisation in order to better understand the behaviour of the system. The goal is to figure out and observe the link between the design space and the objective space. Numerous methods for exploring the design space are possible, a list of the implemented methods can be seen below. This selection covers various kinds of analysis, ranging from simple and brainless, to systematic and focussed. \n", "\n", @@ -1232,7 +1232,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -1246,7 +1246,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/pygmo/asteroid_orbit_optimization/aoo_optimization.ipynb b/pygmo/asteroid_orbit_optimization/aoo_optimization.ipynb index 8952f9d..d0742d1 100644 --- a/pygmo/asteroid_orbit_optimization/aoo_optimization.ipynb +++ b/pygmo/asteroid_orbit_optimization/aoo_optimization.ipynb @@ -11,7 +11,7 @@ "Copyright (c) 2010-2022, Delft University of Technology. All rights reserved. This file is part of the Tudat. Redistribution and use in source and binary forms, with or without modification, are permitted exclusively under the terms of the Modified BSD license. You should have received a copy of the license with this file. If not, please or visit: http://tudat.tudelft.nl/LICENSE.\n", "\n", "## Objectives\n", - "This tutorial is the third part of the Asteroid Orbit Optimization example. **This page reuses the** [Custom environment](https://tudat-space.readthedocs.io/en/latest/_src_getting_started/_src_examples/notebooks/pygmo/asteroid_orbit_optimization/aoo_custom_environment.html) **part of the example, without the explanation, after which an optimization is executed.**\n", + "This tutorial is the third part of the Asteroid Orbit Optimization example. **This page reuses the** [Custom environment](aoo_custom_environment.ipynb) **part of the example, without the explanation, after which an optimization is executed.**\n", "\n", "## Problem recap\n", "This aim of this tutorial is to illustrate the use of PyGMO to optimize an astrodynamics problem simulated with tudatpy. The problem describes the orbit design around a small body, the [Itokawa asteroid](https://en.wikipedia.org/wiki/25143_Itokawa).\n", @@ -30,8 +30,8 @@ " \n", "The constraints are set on the altitude: all the sets of design variables leading to an orbit.\n", "\n", - "#### NOTE\n", - "It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://tudat-space.readthedocs.io/en/latest/_src_advanced_topics/optimization_pygmo.html). The full PyGMO documentation is available [on this website](https://esa.github.io/pygmo2/index.html). Be careful to read the\n", + "### NOTE\n", + "It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://docs.tudat.space/en/latest/_src_advanced_topics/optimization_pygmo.html). The full PyGMO documentation is available [on this website](https://esa.github.io/pygmo2/index.html). Be careful to read the\n", "correct the documentation webpage (there is also a similar one for previous yet now outdated versions [here](https://esa.github.io/pygmo/index.html); as you can see, they can easily be confused).\n", "PyGMO is the Python counterpart of [PAGMO](https://esa.github.io/pagmo2/index.html)." ] @@ -701,7 +701,7 @@ "source": [ "## Optimisation run\n", "\n", - "**From here on out the example is new compared to the** [Custom environment](https://tudat-space.readthedocs.io/en/latest/_src_getting_started/_src_examples/notebooks/pygmo/asteroid_orbit_optimization/aoo_custom_environment.html) **part of the example.**\n", + "**From here on out the example is new compared to the** [Custom environment](aoo_custom_environment.ipynb) **part of the example.**\n", "\n", "With the optimization problem and the simulation setup in hand, let's now run our optimization using PyGMO." ] @@ -1249,7 +1249,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "tudat-examples", "language": "python", "name": "python3" }, @@ -1263,7 +1263,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.14" } }, "nbformat": 4,