You may have heard of Project Stratos, DARE’s flagship and main project. However, that’s not the only project DARE has. Within the society, multiple teams work on their own ideas and projects. As part of the Advanced Control Team, or ACT for short, I work on writing software for the control and recovery of the a modified CANSAT rocket.
The goal of the ACT is to create a rocket stabilized by the use of control surfaces. At the launch attempt of May this year we unfortunately lost the rocket due to the parachute not deploying. In a normal flight scenario, the deployment of the parachute causes minimal damage to our rocket, and we can fly it again later. In our crash analysis we found out that the flight computer stopped working. After a multitude of things were considered, we found out that most likely the software froze shortly before launch. This was confusing to us, given that the software worked on every previous flight and throughout all the testing.
The system was built on a real-time operating system (RTOS), which is great for task scheduling but brings complexity with it. The code itself also hadn’t been worked on by the newer members of the project. Because of these reasons it was decided to rebuild the software from scratch, using principles common in the world of professional software development. Many of these methods are also taught during the bachelor programme of Computer Science, here at the TU.
Test-driven development is the principle we employed. This means that whenever you write code, you first make test cases that will succeed on a correct implementation of your software. By using these so-called unit tests, which implies every test only tests one unit or aspect of the system, we can validate that the software is indeed doing the correct task. We also test for edge cases: extreme cases in which we deliberately feed input is at the maximum of minimum of what a function is supposed to do, and see how well it reacts.
Furthermore, we make much better use of version control software such as Git and review the code of each other with merge requests. This not only means we better know what each component does, but also how to work with it in the future, and where potential issues might arise. Documentation is another tool we use to keep the software easy to understand.
These tools of test-driven development, Git, merge requests, and documentation are also taught within the Computer Science programme. To me, these subjects can seem vague sometimes when explained during class, or even in a practical assignment. When applying them in a real world application in a student team, they make a lot more sense and become more intuitive to use.
When working together with students from other faculties, the effects are amplified even more. A Computer Science student will likely not know how to handle electronics, or design PCBs. Having a variety of backgrounds within ACT we combine knowledge from Computer Science, Electrical Engineering, and Aerospace Engineering. To me, working with students from other studies provides a unique experience, and can result in great friendships. As a team we can accomplish our goal of controlling the flight path of a rocket.
by Hidde Leistra