An open-source, stochastic, six-degrees-of-freedom rocket flight simulator, with a probabilistic trajectory analysis approach Willem J. Eerland ∗, Simon Box †, Hans Fangohr ‡ , and András Sóbester § University of Southampton, Southampton, England SO17 1BJ, United Kingdom Predicting the flight-path of an unguided rocket can help overcome unnecessary risks. Avoiding residential areas or a car-park can improve the safety of launching a rocket significantly. Furthermore, an accurate landing site prediction facilitates recovery. This paper introduces a six-degrees-of-freedom flight simulator for large unguided model rockets that can fly to altitudes of up to 13 km and then return to earth by parachute. The open-source software package assists the user with the design of rockets, and its simulation core models both the rocket flight and the parachute descent in stochastic wind conditions. Furthermore, the uncertainty in the input variables propagates through the model via a Monte Carlo wrapper, simulating a range of possible flight conditions. The resulting trajectories are captured as a Gaussian process, which assists in the statistical assessment of the flight conditions in the face of uncertainties, such as changes in wind conditions, failure to deploy the parachute, and variations in thrust. This approach also facilitates concise presentation of such uncertainties via visualisation of trajectory ensembles. Nomenclature E k M m µ N Σ σ τ τ u v v̂ x x y y z z = = = = = = = = = = = = = = = = = = = expectation covariance kernel number of data-points mean function mean vector Gaussian function covariance matrix standard deviation normalised time [-] normalised time vector [-] vector holding a three-dimensional coordinate [m] column vector holding three-dimensional coordinates [m] estimated column vector holding three-dimensional coordinates [m] easting [m] easting vector [m] northing [m] northing vector [m] altitude [m] altitude vector [m] ∗ Ph.D. Candidate, Aeronautics, Astronautics, and Computational Engineering. Member AIAA, [email protected] Research Fellow, Transportation Research Group. Member AIAA ‡ Professor, Aeronautics, Astronautics, and Computational Engineering § Associate Professor, Aeronautics, Astronautics, and Computational Engineering. Member AIAA † Visiting 1 of 15 American Institute of Aeronautics and Astronautics I. Introduction arge, unguided model rockets are flown extensively by hobbyists1,2 and in academia3 . Safety regulation for such events demands a probabilistic assessment of flight trajectories in the context of the forecast conditions and the uncertainty over various aspects of such flights4 . At the same time, such models may facilitate the assessment of security threats posed by certain improvised rocket-propelled devices. There are various software packages available on the market that assist the user in designing a rocket, and predict the corresponding flight path; these include commercial solutions such as RockSim5 , and opensource solutions such as OpenRocket6 . However, all these packages simulate the performance of a rocket under nominal conditions, returning only the expected performance to the user. RockSim Pro5 does displays confidence bounds around the predicted landing location to the user, but is only available to US citizens. The Cambridge Rocketry Simulator7 assists the user to design a concept rocket in a Graphical User Interface (GUI), fly the rocket in a range of possible flight conditions, and obtain confidence bounds on the expected flightpath and landing location by analysing the output trajectory data. The specific contributions of the third version compared to the previous versions are: the improved GUI, which is based on the OpenRocket6 code, a modification to the simulator core from Box, Bishop and Hunt8 to incorporate additional stochastic variables, and the expansion of user input to set the of degree uncertainty for the stochastic variables. This puts the Cambridge Rocketry Simulator on a par with RockSim Pro. On top of that, the entire software package is open-source and available online. Finally, the trajectory analysis approach from Eerland, Box and Sóbester9 , available as an open-source Python toolbox10 , is applied to rocket trajectories. This approach models the trajectory data as a Gaussian process, capturing the general trend and dispersion. The direct application here is the ability to visualise the behaviour of a large dataset without cluttering the screen. Besides being helpful in visualising, it also allows quantifying the difference between the simulated scenarios. It visualises two- and three-dimensional data using the Python libraries Matplotlib11 and Mayavi12 respectively. The calculations are done using the libraries SciPy and Numpy13 , and all the data handling is done via Pandas14 . The results seen in this paper are produced in Jupyter Notebooks15 , which are available online as supplemental material. The remainder of the paper is organised as follows. In section II, the architecture of the program is described, elaborating on the purpose of each part and explaining the theory applied. Furthermore, it includes an overview of the various rocket components and describes the stochastic elements available in the simulator. Finally, it describes the method of using time-cues to model the rocket trajectories as a Gaussian process. Section III analyses the trajectory data generated in four different scenarios, namely, changes in wind conditions, failure to deploy the parachute, and variations in thrust. This section show-cases the usability of the trajectory analysis applied to rocket trajectories. Finally, in section IV, the conclusions are presented. L II. Methodology This section starts of with an overview of the software architecture. As there is a clear divide between functionality and programming languages, this simultaneously provides an overview of functionality. Subsection B introduces the module that assists the user with the rocket design. Subsection C is an overview of the stochastic input variables. Finally, subsection D elaborates on how the rocket trajectories are modelled as a Gaussian process, useful for visualising the behaviour of numerous trajectories, and quantifying the difference between varying the launch- and atmosphere conditions. Furthermore, it also explains how abrupt changes in the trajectories are dealt with, such as the activation of the second stage, or a parachute deployment. A. Overview of the architecture The architecture of the Cambridge Rocketry Simulator features three programming languages. The GUI is written in Java, providing a method for the user to control the input parameters. It also assists with the design of the rocket. The simulator core is written in C++ , allowing rapid execution of numerous rocket launches – a requirement for effectively applying the Monte Carlo method to obtain a probabilistic interpretation. A more in-depth review of the software is available online7 , and includes a description of 2 of 15 American Institute of Aeronautics and Astronautics the support and testing framework. Finally, the visualisation is written in Python. An overview of the architecture is available in Figure 1. The information between the three components is transferred via Extensible Mark-up Language (XML) documents. Where the input data of the simulator consists of the physics related to the rocket (e.g. moment of inertia as a function of time), and the output data consists of flight-path trajectories (i.e. northing, easting, and altitude). Furthermore, there is an XML file containing parameters related to the degree of uncertainty of the stochastic variables (to be discussed in subsection C). Additional functionality allows the XML output to be exported as a Comma Separated Values (CSV) file. An overview of the headers belonging to this CSV file is available in Table 2. XML uncertain GUI (Java) user plots (Python) Teetool (Python) XML input simulator (C++ ) XML output CSV Figure 1: Schematic representation of the components and the corresponding programming languages. The dashed lines represent a path specific to the third version. Table 2: Description of CSV file headers Label INDEX ID STR ID STAGE STR TIME SECONDS DOUBLE EASTINGS METERS DOUBLE NORTHINGS METERS DOUBLE ALTITUDE METERS DOUBLE DISTANCE METERS DOUBLE EVENT INT B. Type Integer String String Double Double Double Double Double Integer Description unique index per trajectory id trajectory identifier stage identifier (e.g. SingleStage) time in seconds easting in metres northing in metres altitude in metres absolute distance in metres event identifier (e.g. apogee reached) Designing a rocket Other than providing an interface to the user and executing both the C++ and Python code-base, the Java module is capable of giving a physical interpretation of the rocket design. To construct the rocket, the components seen in Table 3 are available. When components are added, they are visible in the complete rocket, as seen in Figure 2. There are two main categories; the external components, that influence the aerodynamics and the inertia, and internal components, that only influence the latter. Mass objects are a subset of the internal components, however, these are only modelled as a point-mass. Furthermore, it is possible to include a single or multiple parachutes, where each parachute holds unique properties, such as the activation altitude, drag coefficient, size, and mass. A complete overview of the components and 3 of 15 American Institute of Aeronautics and Astronautics parameters is included in the user-guide, available in the software repository7 . These parameters can be modified directly in the XML input file. Table 3: Available design components External components Nose cone Body tube Transition Trapezoidal fins Internal components Inner tube Coupler Centring ring Bulkhead Mass objects Parachute Mass component Figure 2: The rocket design tab of the user interface C. Stochastic elements in the simulation This subsection describes the process of capturing the uncertainty of an input variable (e.g. drag coefficient) in the output (e.g. landing location), as this is not straightforward in a system with coupled input variables. In simulating systems that have many coupled input variables such as this one, Monte Carlo methods are useful to obtain a probabilistic interpretation. In a nutshell, Monte Carlo methods work by sampling over the probability distribution of the input space, and reflect that uncertainty in the output of the simulation. While this provides a method of obtaining a probabilistic interpretation of the output, here we focus on the probability distribution of the input space. An overview of the input variables, their probability distribution, the default values, and how they are applied can be seen in Table 4. Not all variables are directly available in the GUI (seen in Figure 3), however, those not visible can be modified in the uncertainty XML file. The probability distribution of all input variables is assumed to be normally distributed, however, the mean value, and the manner in which 4 of 15 American Institute of Aeronautics and Astronautics the uncertainty (represented as the standard deviation σ) is applied differs. For both angles, declination and azimuth, the random variables is applied as an addition, with a mean equal to 0. The reasoning here is that the positioning uncertainty is typically independent of the variable value. For the other variables the uncertainty is applied as a multiplication, and the mean is equal to 1. The result is an uncertainty as a percentage, causing large values of the variable to have a larger variation than smaller values. As the thrust curve consists of multiple points as a function of time, the uncertainty is modelled by drawing a sample from the normal distribution, then all thrust values are multiplied with this sample value, causing the entire curve to shift up or down accordingly. It should be noted that there is a ceiling of 250 as a maximum thrust-to-weight ratio set within the simulation. This is to prevent a scenario of unreasonable thrust that would produce numerical errors in the simulator. Figure 3: Launch- and atmospheric conditions tab of the user interface Table 4: Overview of stochastic variables and their implementation Variable Drag coefficient Centre of pressure Normal coefficient Parachute drag coefficient Thrust curve Declination launch angle Azimuth launch angle D. Probability distribution N (1, σ 2 ), σ = 0.2 N (1, σ 2 ), σ = 0.1 N (1, σ 2 ), σ = 0.1 Multiplication Multiplication Multiplication N (1, σ 2 ), σ = 0.1 Multiplication N (1, σ 2 ), σ = 0.01 Multiplication N (0, σ 2 ), σ = 1 Addition N (0, σ 2 ), σ = 1 Addition How applied Modelling the rocket trajectories as a Gaussian process The previous subsection describes the process of capturing the uncertainty of an input variable in the output via the Monte Carlo method. However, as the input variables are sampled independently from a normal 5 of 15 American Institute of Aeronautics and Astronautics distribution, it’s possible to end up with launch- and atmospheric conditions that correspond with a low probability (i.e. multiple input variables are far away from their nominal value). As the Monte Carlo method simulates more and more conditions, eventually one of these instances will result in an unstable rocket flight, but this one outlier might be a bad representation of the whole. To capture these effects, a trajectory analysis method is implemented to model the spatial distribution of the rocket trajectories as produced by the simulator. This allows for an unrestricted sampling space as the input, which is useful because there is an unknown influence of the variables on the output, while obtaining the spatial statistics based on the unfiltered output from the simulator. The task at hand is to translate the trajectory data into a mean trajectory and capture the dispersion from the mean trajectory. This subsection describes a simplified version of the original method as published in Eerland, Box and Sóbester9 , specifically suited to three-dimensional rocket trajectory data as output by the simulator, which has no missing data, nor any measurement noise. Furthermore, the time-warping approach described here is modified to handle the abrupt changes seen in the rocket trajectories (e.g. the start of the second stage, and the deployment of the parachutes). Given the trajectory data: x (1) v = y z where v is a column vector and x, y, and z are vectors containing the coordinates easting, northing, and altitude respectively. Therefore, when a trajectory has M coordinates, v is a (3 · M ) × 1 vector. As the data are produced by the simulator, information about position, time, and the particular stage of flight is available. By definition, all trajectories start at the normalised time τ = 0, and end at τ = 1. There are time-warping methods available to align the behaviour of the trajectories16 , however, such a method is not required here as the moments that these events occur are well known. These are the moments where there is a change from one stage of flight to the next, for example when the rocket reaches apogee. By synchronizing these moments in the normalised time vector τ , the time-warping is complete. For this reason the label EVENT INT is included in the CSV file (seen in Table 2), as it refers to a particular stage of the flight. Hence, the normalised time vector τ to accompany the coordinate vector v is equal to: h i| 1 τ = 0 M (2) ... M M where the points in time when the trajectory changes from one stage of flight to the next are aligned. The values of these points in time are set by the nominal flight. For example, if the nominal flight reaches apogee at τ = 0.3, all trajectories reach apogee at τ = 0.3. Now, with the additional assumption that the rocket travels linearly between data-points, the coordinate vector u can be expressed as a function of the normalised time τ : u(τ ) = [x y z]| (3) where x, y, and z are the coordinates from x, y, and z, linearly interpolated as a function of τ . All trajectories can now be resampled to a uniform size to the column vector v̂. The structure is identical to v, seen in Equation (1), however, the size is identical between all trajectories. In this paper 100 steps are taken, thus v̂ is a 300 × 1 vector, for all N trajectories found in the data. The mean vector µ, and the covariance matrix Σ are calculated following: N 1 X µ= {E[v̂n ]} (4) N n=1 Σ= N 1 X {v̂n v̂n| − 2v̂n| µ + µµ| } N n=1 (5) where p(u(τ )) ∼ N (u(τ ) |µ, Σ) (6) This solution fits into a Gaussian Process (GP) framework, where a function is defined as a Gaussian process by a mean function m(τ ) and a covariance kernel k(τ, τ 0 ): p(u(τ )) ∼ GP(m(τ ), k(τ, τ 0 )) 6 of 15 American Institute of Aeronautics and Astronautics (7) where m(τ ) = E[u] = µ (8) k(τ, τ 0 ) = E[(u(τ ) − m(τ ))(u(τ 0 ) − m(τ 0 ))] = Σ (9) A more intuitive representation of the mean function m(τ ), given by Equation (8), is a point that moves along a three-dimensional trajectory as a function of τ . In turn, the covariance kernel k(τ, τ 0 ), given by Equation (9), can be represented as a three-dimensional ellipsoid at a constant probability. The reference to the GP framework is made, as it provides the mathematical tools necessary to handle noise measurements and missing data, to be applied when either is a problem. There are several advantages to this approach. Firstly, it is shown how a probabilistic model can capture the general trend and dispersion seen in the trajectory data. The direct application here is the ability to visualise the behaviour of a large dataset without cluttering the screen. Besides helpful in visualising, it also allows quantifying the difference between the scenarios. The latter is done by evaluating the number of grid-points found within the one standard deviation (σ = 1) region for multiple scenarios. Changes in these points reflect changes in the trend modelled from the trajectory data. III. Results This section demonstrates the effects of the stochastic input variables to the output trajectory data. For each of the four scenarios seen in this section, 500 trajectories are generated via the Monte Carlo method as described in subsection C. It shows the results of modelling the output data as a Gaussian process, using the additional information on the events as discussed in subsection D. All 500 trajectories produced by the rocket flight simulator are used to learn the corresponding probabilistic model, however, to prevent visual clutter only 50 of the 500 trajectories are shown in the figures. The flight-path trajectories seen in Figure 4 are generated using the settings seen in Figure 3. In this simulation the wind conditions represent a light northerly wind (no more than 2.2 ms−1 ), and the parachute deploys at an altitude of 750 metres. Specific launch conditions are a declination angle of 10 degrees, and an azimuth angle of 0 degrees (i.e. launched towards the North). The volume identifying the trend corresponds with the one standard deviation region (σ = 1). The first alternate scenario changes the wind-conditions to a strong southerly wind (with an average wind speed up to 13.5 ms−1 ). An overview of both the northerly and southerly wind-conditions is available in Figure 5. Northerly and southerly are merely labels, and these wind-conditions represent real data measured by a weather balloon. The x-wind and y-wind components correspond with the easting and northing directions respectively, where both vary as a function of altitude. Both wind-conditions have a 0 ms−1 vertical wind component. The results are visible in Figure 6, where again 50 trajectories and the one standard deviation region (σ = 1) are shown. The comparison plot with the standard launch is seen in Figure 7. The blocks used to construct this volume have a volume of 20m×20m×20m, and the blocks relating to the addition, removal, and lack of change in the standard launch versus the southerly wind scenario are coloured green, red, and blue respectively. While the declination angle of the launch tower is 10 degrees in both cases, the southerly wind has a steeper trajectory. This is due to an effect called weathercocking, which was a key part of the validation of the rocket simulator8 . The second alternate scenario introduces a failure to deploy the parachute, resulting in a fully ballistic flight trajectory. The resulting flight trajectories are visible in Figure 8. The comparison with the standard launch is visible in Figures 9 and 10, whereas expected, the final part of the trajectory shows the difference between the parachute- and ballistic landing. The failure to deploy the parachute is only visible in the final 750m of the descent, as this is where the parachute deploys. Figure 11 shows a two-dimensional slice of the one standard deviation region at a constant altitude for both 750m and 300m. It also includes a two-dimensional projection of the mean trajectory belonging to both scenarios, represented by a dashed line. The dispersion seen until the 750m is almost (it is an approximation via a Monte-Carlo method) identical. The models diverge after this point, which is visible in Figure 11b. Finally, the third alternate scenario introduced a 5% variation in the thrust curve, according to the method discussed in subsection C. This method increases/decreases the thrust curve over the entire duration, where the percentage is sampled from a normal distribution. Similar to the other plots, the 50 trajectories and the one standard deviation region are visible in Figure 12. The comparison plot is seen in Figure 13, indicating that the thrust has a strong correlation with the steepness of the launch trajectory, an effect that can be 7 of 15 American Institute of Aeronautics and Astronautics Figure 4: Trajectories produced by standard launch conditions, and the one standard deviation region Figure 5: Wind conditions north(erly) wind versus south(erly) wind 8 of 15 American Institute of Aeronautics and Astronautics Figure 6: Trajectories produced by southerly wind conditions, and the one standard deviation region Figure 7: Comparison of the one standard deviation region in the standard launch conditions versus the southerly wind conditions 9 of 15 American Institute of Aeronautics and Astronautics Figure 8: Trajectories produced with the parachute failure condition, and the one standard deviation region Figure 9: Comparison of the one standard deviation region in the standard launch conditions versus the parachute failure condition 10 of 15 American Institute of Aeronautics and Astronautics Figure 10: Comparison of the one standard deviation region in the standard launch conditions versus the parachute failure condition, alternate view-point (a) 750 m (b) 300 m Figure 11: One standard deviation region at a constant altitude, comparing the standard launch conditions versus the parachute failure condition 11 of 15 American Institute of Aeronautics and Astronautics attributed to weathercocking. The two-dimension projection of the one standard deviation region is visible in Figure 14. At a constant altitude of 2100m (Figure 14a) the effect of the thrust variation on the dispersion in the launch phase is pronounced, however, closer to the ground, at 500m (Figure 14b) the differences in divergence between the two scenarios have reduced. Figure 12: Trajectories produced with the variable thrust curve condition, and the one standard deviation region The numerical results that quantify the changes seen between the scenarios are visible in Table 5. To demonstrate the sensitivity of the block size, the percentages have been calculated at varying sizes of 100m, 50m, and 20m in all three dimension (easting, northing, altitude). The percentages are related to the total number of blocks identified to be inside the one standard deviation region for the standard conditions, i.e. the region as seen in Figure 4, hence the percentage removed and unchanged adds up to 100%. The difference in the percentage added and removed relates to the uncertainty region expanding or shrinking with respect to the standard conditions. Based on the percentage unchanged, the variable thrust curve shows the least change, followed by the parachute failure conditions, and the changed wind condition shows most change. IV. Conclusion This paper demonstrates the functionality of the Cambridge Rocketry Simulator. The open-source software assists the user in designing a concept rocket, and flying it in a spectrum of flight conditions based on stochastic input variables. The rocket trajectory data available as output from the simulator are modelled using a trajectory analysis approach, which is both capable at visualising trends, and quantifying the change found in different launch- and atmospheric conditions. The modification to the time-warping in the original trajectory analysis approach, expanding the functionality to accept time-cues from the simulator output, removes undesired artefacts previously present when modelling rocket trajectories as a Gaussian process. The time-cues here will be those moments where discrete changes occur (e.g. initialisation of the second stage, parachute deployment). Finally, while the method is capable of modelling the rocket trajectory data as output by the simulator, the trajectories should not always be modelled as a Gaussian process. Such a situation arises when the rocket concept design is close to being dynamically unstable, resulting in a discrete path change for numerous 12 of 15 American Institute of Aeronautics and Astronautics Figure 13: Comparison of the one standard deviation region in the standard launch conditions versus the variable thrust curve condition (a) 2100 m (b) 500 m Figure 14: One standard deviation region at a constant altitude, comparing the standard launch conditions versus the variable thrust curve condition 13 of 15 American Institute of Aeronautics and Astronautics Table 5: Comparing against the standard conditions Block volume [m3 ] Added Removed Unchanged versus southerly wind conditions 100 × 100 × 100 79.7% 78.1% 21.9% 50 × 50 × 50 76.1% 78.5% 21.5% 20 × 20 × 20 75.4% 78.3% 21.7% versus the parachute failure condition 100 × 100 × 100 22.4% 15.7% 84.3% 50 × 50 × 50 20.3% 17.5% 82.5% 20 × 20 × 20 20.7% 18.1% 81.9% versus the variable thrust curve condition 100 × 100 × 100 21.1% 8.1% 91.9% 50 × 50 × 50 18.2% 8.6% 91.4% 20 × 20 × 20 17.6% 8.6% 91.4% trajectories as the uncertainty analysis varies the centre of pressure. The trajectory analysis method as presented in this paper assumes the trajectories only deviate slightly from the nominal flight-path, therefore when discrete path changes are present in the data, a clustering algorithm should be applied. The trajectory data can also be analysed via other methods, as the output data from the simulator are openly available in both XML and CSV file format. Acknowledgements The authors gratefully acknowledge the funding provided under research grant EP/L505067/1 from the Engineering and Physical Sciences Research Council, and the industry sponsor Cunning Running Software Ltd. Supplemental material supporting this study are openly available from the University of Southampton repository at https://doi.org/10.5258/SOTON/403364. References [1] UKRA. United Kingdom Rocketry Association. 2016. url: http://www.ukra.org.uk/events (visited on 02/11/2016). [2] BBC. Rocket launch for Bolton students on Mull of Galloway. 2011. url: http://bbc.co.uk/news/ukengland-manchester-14760906 (visited on 02/11/2016). [3] TU Delft. DARE: Delft Aerospace Rocket Engineering. 2016. url: http://dare.tudelft.nl (visited on 02/11/2016). [4] Commercial Space Transportation. Supplemental Application Guidance for Unguided Suborbital Launch Vehicles (USLVs). Tech. rep. Federal Aviation Administration (FAA), 2007. url: https://www.faa. gov/. [5] Apogee. RockSim. Version 9. 2008. url: http://www.apogeerockets.com (visited on 02/11/2016). [6] S. Niskanen. OpenRocket. Version 15. 2015. url: http://openrocket.sourceforge.net (visited on 02/11/2016). [7] S. Box and W. J. Eerland. Cambridge Rocketry Simulator. Version 3.1. 2016. url: http : / / www . sourceforge.net/p/camrocsim (visited on 02/11/2016). [8] S. Box, C. Bishop and H. Hunt. ‘Stochastic six-degree-of-freedom flight simulator for passively controlled high-power rockets’. In: Journal of Aerospace Engineering 24.1 (2010), pp. 31–45. doi: 10 . 1061/(ASCE)AS.1943-5525.0000051. eprint: http://eprints.soton.ac.uk/73938/. 14 of 15 American Institute of Aeronautics and Astronautics [9] W. J. Eerland, S. Box and A. Sóbester. ‘Modeling the Dispersion of Aircraft Trajectories Using Gaussian Processes’. In: Journal of Guidance, Control, and Dynamics 39.12 (28th Nov. 2016), pp. 2661– 2672. doi: 10.2514/1.G000537. eprint: http://eprints.soton.ac.uk/399818/. [10] W. J. Eerland. Teetool - a trajectory analysis tool. 2016. url: http://github.com/WillemEerland/ teetool (visited on 02/11/2016). [11] J. D. Hunter. ‘Matplotlib: A 2D graphics environment’. In: Computing In Science & Engineering 9.3 (2007), pp. 90–95. doi: 10.1109/MCSE.2007.55. [12] P. Ramachandran and G. Varoquaux. ‘Mayavi: 3D Visualization of Scientific Data’. In: Computing in Science & Engineering 13.2 (2011), pp. 40–51. issn: 1521-9615. doi: 10.1109/MCSE.2011.35. [13] S. v. d. Walt, S. C. Colbert and G. Varoquaux. ‘The NumPy Array: A Structure for Efficient Numerical Computation’. In: Computing in Science & Engineering 13.2 (2011), pp. 22–30. doi: 10.1109/MCSE. 2011.37. [14] W. McKinney. ‘Data Structures for Statistical Computing in Python’. In: Proceedings of the 9th Python in Science Conference. Ed. by S. van der Walt and J. Millman. 2010, pp. 51–56. [15] T. Kluyver et al. ‘Jupyter Notebooksa publishing format for reproducible computational workflows’. In: Positioning and Power in Academic Publishing: Players, Agents and Agendas: Proceedings of the 20th International Conference on Electronic Publishing. IOS Press. 2016, pp. 87–90. doi: 10.3233/978-161499-649-1-87. [16] M. Müller. ‘Information Retrieval for Music and Motion’. In: Berlin, Heidelberg: Springer Berlin Heidelberg, 2007. Chap. Dynamic Time Warping, pp. 69–84. isbn: 978-3-540-74048-3. doi: 10.1007/978-3540-74048-3_4. 15 of 15 American Institute of Aeronautics and Astronautics
© Copyright 2026 Paperzz