The open-source astrodynamics Tudatpy software &#8211; overview for planetary mission design and science analysis
Authors: Dirkx Dominic , Fayolle Marie , Garrett Geoffrey , Avillez Miguel , Cowan Kevin , Cowan Sean , Encarnacao Joao , Fortuny Lombrana Carlos , Gaffarel Jérémie , Hener Jonas , Hu Xuanyu , van Nistelrooij Maarten , Oggionni Filippo , Plumaris Michael 
Published: September 2022

&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;span lang=&quot;en-GB&quot;&gt;The Tudat software was created at the Astrodynamics &amp; Space Missions Section (AS) at TU Delft, as a generic C++ tool for astrodynamics research and education. &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;Since 2020, a Python interface named Tudatpy, has been developed.&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt; The core of the software is numerical state propagation and estimation &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;functionality&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;. &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;It has been used for research publications over a wide range of topics, &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;and &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;is embedded in&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt; the &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;TU Delft Spaceflight&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt; M.Sc. curriculum.&lt;/span&gt; &lt;span lang=&quot;en-GB&quot;&gt;The software &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;is&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt; released as a conda packag&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;e&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;. Tudat &lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;is&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt; hosted on GitHub (&lt;/span&gt;&lt;span lang=&quot;zxx&quot;&gt;&lt;span lang=&quot;en-GB&quot;&gt;https://github.com/tudat-team/&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;), under open-source BSD 3-clause license, with its functionality covered by &gt;200 unit te&lt;/span&gt;&lt;span lang=&quot;en-GB&quot;&gt;sts.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;strong&gt;Example applications for planetary missions&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;We start by showing three illustrative examples of past and ongoing work with Tudatpy:&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;western&quot;&gt;&lt;em&gt;Small body orbit design and optimization using fully numerical modeling&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;The dynamical environment around small bodies is highly non-linear. In addition, the uncertainty of the gravity field complicates the search for stable spacecraft orbits. In this context, Tudat has been used for several projects, such as the design of a quasi-stable orbit (QSO) around Phobos (Fig. 1), the optimization of an orbit (for maximum coverage/minimum distance) around an asteroid, and the design of robustly stable spacecraft orbits under uncertainties in the asteroid gravity field.&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;img src=&quot;&quot; width=&quot;1070&quot; height=&quot;302&quot; name=&quot;Image1&quot; align=&quot;left&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;em&gt;Fig. 1 QSO orbits around Phobos designed using Tudatpy and Pygmo [1]&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;western&quot;&gt;&lt;em&gt;Galilean satellite ephemerides determination from JUICE tracking data&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;The JUICE mission will provide data on the dynamics of the Galilean moons to unprecedented accuracy. Using a simulated set of radio tracking data, Tudat has been used to simulate uncertainty of the ephemerides of the Galilean satellites during and after the JUICE mission (see Fig. 2). This analysis will be extended to provide a flexible tool to analyze the potential for a global inversion of Earth- and space-based radio and optical data for satellite ephemerides.&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;img src=&quot;&quot; width=&quot;836&quot; height=&quot;517&quot; name=&quot;Image5&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; lang=&quot;en-GB&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;em&gt;Fig. &lt;/em&gt;&lt;em&gt;2&lt;/em&gt;&lt;em&gt; &lt;/em&gt;&lt;em&gt;Galilean satellite ephemeris uncertainty obtained from covariance analysis in a coupled estimation, using simulated JUICE radio tracking data [&lt;/em&gt;&lt;em&gt;2&lt;/em&gt;&lt;em&gt;]&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;western&quot;&gt;&lt;em&gt;Interplanetary trajectory design using multiple gravity assists (MGA), deep space maneuvers (DSM), and shape-based low-thrust &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;Tudat includes a framework for interplanetary trajectory design (see Fig. 3 for example), where the typical MGA-DSM functionality is enhanced with shape-based (spherical shaping and hodographic shaping) legs. Although the interplanetary trajectory is evaluated/optimized using a (semi-)analytical inner loop, the numerical propagatio of Tudat allows for a direct verification of the final trajectory under perturbations and for the use of differential correction to generate a high-fidelity transfer orbit.&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;img src=&quot;&quot; width=&quot;739&quot; height=&quot;564&quot; name=&quot;Image5&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;em&gt;Fig. 3 Earth-Mercury transfer using EEVM sequence, one DSM per leg, in patched conic approximation(taken from one of the examples on the Tudatpy website)&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&lt;strong&gt;Functionality&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;Tudat functionality falls into the following broad categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;western&quot;&gt;Numerical propagation of dynamics, with modular setup and options for solar system bodies, accelerations, propagation schemes, &lt;em&gt;etc.&lt;/em&gt; In addition to translation state, it can combine different types of dynamics for any number of bodies, including coupled orbital-rotational motion. No fundamental distinction is made between natural and artificial bodies, and the propagation is capable of both single- and multi-arc (or a combination). Tudat has a broad set of outputs (&amp;#8216;dependent variables&amp;#8217;) that it can generate during numerical propagation that are useful for visualization/post-processing.&lt;/li&gt;
&lt;li class=&quot;western&quot;&gt;State and parameter estimation: Tudat contains a large amount of functionality for performing (simulated) state and parameter estimation/covariance analysis from observational data. The framework is set up in a modular fashion, allowing for a combined analysis of a diverse set of types of observations and parameters. It has been used in a large number of simulation studies, with work ongoing to extend the functionality to processing DSN tracking data. It has been applied to the orbit determination of LRO, as well as to preliminary Doppler/VLBI data analysis of Mars and Venus Express.&lt;/li&gt;
&lt;li class=&quot;western&quot;&gt;Mission design and optimization: Modules containing mission design tools, such as Lambert targeters and multiple gravity-assist transfers, are included in Tudat. Additionally, Tudat provides an interface to the Pagmo2 optimization software.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;western&quot; lang=&quot;en-GB&quot; align=&quot;justify&quot;&gt;&lt;strong&gt;Documentation and development&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;In 2020, development of a Python interface, named TudatPy, was initiated. This has now become the default interface for Tudat and associated documentation, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;western&quot;&gt;An installation and top-level user guide, supported by a growing set of example applications (&lt;span lang=&quot;zxx&quot;&gt;https://docs.tudat.space/&lt;/span&gt;)&lt;/li&gt;
&lt;li class=&quot;western&quot;&gt;Documentation for the Application Programmer Interface (API) of TudatPy (&lt;span lang=&quot;zxx&quot;&gt;https://py.api.tudat.space/&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;western&quot; lang=&quot;en-GB&quot; align=&quot;justify&quot;&gt;Both parts of the documentation now cover the core aspects of the functionality, and are being continuously expanded. At the time of writing, some C++ functions have yet to be exposed to Python, while other functions are missing their API documentation.&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;If you are interested in using or developing Tudat(py), you are most welcome to do so! Any questions about its functionality or suggestions for future implementation are always welcome, and can be addressed to the first author of this abstract. Tudat discussions primarily take place over Slack, open to any potential interested parties.&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;[1] Plumaris et al. (2022). &lt;em&gt;&quot;&lt;span dir=&quot;ltr&quot; role=&quot;presentation&quot;&gt;Cold Atom Interferometry for enhancing the Radio Science&lt;/span&gt;&lt;/em&gt;&lt;br role=&quot;presentation&quot; /&gt;&lt;em&gt;&lt;span dir=&quot;ltr&quot; role=&quot;presentation&quot;&gt;gravity experiment: a Phobos case study&quot; &lt;/span&gt;&lt;/em&gt;Remote Sensing, (submitted)&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;[2] Fayolle et al. (2022). &lt;em&gt;&quot;Decoupled and coupled moons&amp;#8217; ephemerides estimation strategies&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Application to the JUICE mission&quot;&lt;/em&gt; Planetary and Space Science, (revision submitted)&lt;/p&gt;
&lt;p class=&quot;western&quot; align=&quot;justify&quot;&gt;&amp;#160;&lt;/p&gt;