The idea of creating Tudat started in 2010, in the Astrodynamics and Space Missions section at TU Delft. There, we found that many students working on their thesis project were reinventing the wheel by writing their own numerical integrators, acceleration models, etc. and were losing a lot of time on this. Some attempts were made to share software, but without proper documentation or consistent coding practices, this quickly led to an unmaintainable codebase. One of our Ph.D students, Kartik Kumar, took the lead on this, together with Jeroen Melman supported by staff members and a number of M.Sc. students, then started to figure out how to set up a large software project like Tudat. After a number of discussions, it was chosen to write the software in C++. Ever since, our project has been fortunate enough to have had made many enthusiastic people, mostly students, contribute to it. Please see our Contributor list for a full list
The scope of the software has evolved since the first steps were made. Although it was initially conceptualized to primarily support trajectory optimization problems, the codebase evolved more towards supporting numerical propagation problems, both in an optimization loop, and outside of it. Since starting the software, it has gone through a number of significant evolutionary stages. Several years into the project, a thorough rewrite of much of the internal workings was undertaken, based on our own experience and input from several external coding experts. Around 2012, it was decided to use Tudat as the core tool for WP3 (Laser Ranging) of the European ESPaCE project. In the context of this project, functionality was developed to support batch least squares state estimation, first only from laser ranging data but later on from more general data types. This functionality was applied to a number of real and simulated test cases, and led to a number or publications. After this project ended, Tudat continued to be used in this context, as the main tool for simulating the contribution of the PRIDE experiment on the JUICE mission, an ongoing collaboration between TU Delft, JIVE, and others.
In 2016, another substantial addition was made to Tudat. After years of leading and developing Tudat through its first years, Kartik had gone on to focus on the company he co-founded called satsearch. After having been somewhat ‘adrift’, the project was reinvigorated when Dominic Dirkx returned to TU Delft as a tenure tracker after his postdoc. One of the first steps that was made in this period was the addition of the ‘simulation setup’ layer. Before, a user would manually have to link all their objects together manually, which ended being very time-consuming and required significant C++ expertise on the side of the user. Since much of the user base was then TU Delft M.Sc. students, this led to significant issues, as the expected/required skills of students and their background did not match. The simulation setup layer (which are now the
numerical_simulation.AAA_setup submodules) made the use of Tudat much easier, by no longer requiring as much C++ expertise. Still, the required coding expertise to use Tudat was daunting, and the support was limited. Around the same time, Tudat was migrated from a privately hosted website, and moved onto Github. This step, and numerous other steps to professionalize the project, and to support the use of Tudat were led by Jacco Geul, who supported Tudat through much of his Ph.D. Also, Tudat was incorporated into the Space Exploration curriculum of TU Delft further, first in a course named ‘Space Project’, now renamed to Numerical Astrodynamics. Initially, this course was meant primarilly to give students academic credit for the time they put into getting familiar with Tudat. Now, it is a full-fledged course which focusses on setting up and interpreting astrodynamics problems, where Tudat is ‘merely’ the tool that happens to be used. A year later, this course was supplemented by the Propagation and Optimization in Astrodynamics course, where the focus is on selecting suitable models for a numerical problem, where we use both Tudat and Pagmo/Pygmo.
The Python interface
The last (latest?) large change in the project started in 2019, when Geoffrey Garrett, one of our more entrepeneurial students, came up to Dominic for a chat after a lecture and said “Why doesn’t Tudat have a Python interface”. The reply was something along the lines of “Because nobody has been crazy enough to take on this gargantuan task”. His reply “Well, maybe I’ll build this interface as a sideproject” was met with silent chuckle. But, he persevered, and with a little funding to hire him as a TA, he ended up building exactly what he said he would, and the first version of Tudatpy was born. Along with a Python interface, an installation page of several pages (including compiling the code and running the unit tests) was reduced to one line: Tudatpy was now shipped as a conda package. Initially the plan was to roll this out in the 2021/2022 academic year and migrate our courses from C++ to Python. The pandemic accelerated this project, and we rolled out Tudatpy in October 2020, as we really did not want to debug C++ code over Zoom. The process was difficult and hectic, but we managed to pull it off (more or less). Since then, we have been hard at work moving all our functionality to Python, redoing our documentation, and tackling some long-standing issues in our code to make it easier to use and more flexible.
Where we are
As of mid-2022, Tudatpy is in a state where we are happy and confident to release it into the wild. Before the Python interface, the amount of support from us to get stuff working properly meant that it was difficult to use by anyone in the community. Getting the Python interface up and running, exposing much of our functionality, and documenting this, has been a long process, but Tudat is now in a much better state than it has ever been. In terms of functionality, it provides many state-of-the-art, and some unique, functionality for numerical orbit propagation for numerous kinds of space missions, from orbital analysis of LEO spacecraft, to trajectory optimization of interplanetary transfers, orbit determination and ephemeris generation for planetary missions, and high-accuracy natural satellite dynamics. There are many plans for the future, and many students who will come into our faculty every year and use it. It is our hope that the use of Tudat will spread even further into the community, and that we can provide a sustainable, flexible and useful tool for researchers, students and enthusiasts in the field of astrodynamics.