When I was reading about the endeavours of Gemini and Apollo programs, I got really excited and immediately wanted to scratch that itch by making something related. So I built a model rocket based on plans I found on a website of some model builder. The type is simply called ‘Ten’ because it’s meant to fly with a solid fuel rocket motor with impulse of 10 Ns. However, it should handle 20 Ns as well, according to the author.


Since the beginning, my intention was to build some kind of a simple flight computer. And because the original plan does not account for any payload, I needed to make sure that the rocket will be stable and also to confirm the 10 Ns motor would be enough for it to fly reasonably high. For this purpose I utilized a software called OpenRocket which based on your build calculates center of gravity, center of pressure, all that from a set of components like body tube, bulkheads, fins etc. All of these can be edited and shifted easily around the body which is nifty. It also has a library of motors with their thrust curvers, can calculate drag and simulate the whole flight.



Data logger was based around the ‘Blue Pill’ microcontroller with STM32F103 ARM chip, mainly because it can log data in much faster rates than Arduino Nano which has similar footprint. I hooked it up with a BMP180 pressure sensor, MPU6050 IMU unit that contains both 3-axis accelerometer (up to 16 G) and a gyroscope (up to 2000 °/s). The data is continuously stored on an SD card as a binary file because it allows for much faster sampling rate than writing an ASCII text file. After the flight when the rocket is recovered and a button is pressed, the binary data is processed and saved in the form of a CSV file. There are also some stats displayed on an 0.96″ OLED display to indicate that valid data was gathered.


One of the features of the circuit was also a beeper that would start beeping after a lift-off was evaluated. The sound it makes is quite loud and makes it really easy to locate the rocket in case it lands in dense vegetation.

On the day of launch it was a calm winter weather with overcast skies. The flight itself was nominal up to the coasting phase. When it reached peaked altitude, the motor released the forward facing charge to expell the upper stage together with a parachute. However, the parachute was tangled and opened only partially. So the descent rate was roughly twice as high than it should be.
Upon impact one of the stabilizing fins broke off. No other damage was observed and the data logger survived and saved all gathered data successfully.


The figure below shows measured data compared with those gather from a simulated flight by OpenRocket software. The acceleration data match nicely, however the pressure measurement indicates a major design flaw of the rocket. Unfortunately, I completely forgot to create a fuselage opening for a static port. The first positive peak in measured pressure is caused either by dynamic pressure or by deformation of the sensor compartment due to high acceleration values or by combination of both. The largest peak at around 6 s is caused by explosion of chute release charge of the motor. The last measured peak is around the timestamp of 17 s where the rocket impacted the ground.

Thrust vector control
I find the idea of thrust vectoring really intriguing and since there some TVC kits available for model rockets (for example this one by BPS.space), I dived into this idea at least on a theoretical level.
I used the OpenRocket model of the ‘Ten’ rocket as a baseline and added to it a weight estimate of a TVC block placed at the bottom in order to get a C.G. and moment of inertia. With this data I made a very simple 2D model of the rocket where I disregard any aerodynamic forces. I then used a Control Toolbox of the MATLAB suite to design a PID controller for the actuator commands while focusing on rise time and amount of percent overshoot. The maximum thrust deflection was given by geometric constraints of the airframe and estimated as 5 °. The motor used in this case is a C3 type that delivers 10 Ns of impulse with a nominal thrust of 3 N.
In the animated plot above there’s a simulated launch form a launchpad that is tilted by 10 ° which shows how effectively the rocket gets to an upright orientation after launch. Note that since there is no position control loop, the only goal of the controller is for the rocket to stay vertical.
Then I went a step further and used the same model to simulate a landing sequence using the same model and C3 motor. As an input a terminal velocity was estimated at 50.6 m/s and then the initial altitude was calculated given the known motor impulse and the fact that the velocity at the ground level needs to be zero. The initial pitch angle was set to 5 °, the simulation runs since the moment the motor is ignited for the duration it deliveres thrust. Note that the velocity at ground level is 0.65 m/s which would not be so bad itself, however due to some error in calculation there is still a bit of the available impulse left, therefore the rocket continues to head back to the skies and accelerate to a velocity of 4.5 m/s at which the motor has finally no thrust left.