Certification flight
Predicting a Rocket Flight
Tripoli Level 1 on a LOC-IV X2, flown 5 September 2026. I built the flight computer that went in the electronics bay and wrote a 1-DOF trajectory model before the launch to see how close I could get to the measured altitude.

Over the summer, I have been growing interested with rocketry. In June, I got a little Estes Alpha rocket, built it, and had a ton of fun with it. I kept reading about model rockets and got more excited about the whole field. When I went to my first High Power Tripoli rocketry event near me and saw an L motor rocket blast off, I went home and very quickly ordered the LOC-IV X2 rocket kit that would allow me to get my L1 and eventually L2. However, as I read about rocketry and was getting hyped with the Starship launches getting more and more frequent, I wanted to do something more with it.
Then I thought about how cool a self-landing model rocket would be. Difficult but possible. The first step to that in my head was that I had to be able to get my L1 to access the higher power motors, and I had to have experience with computers at altitude to build up to harder and harder avionics. The best way I felt to do that was to start with my LOC-IV X2's electronics bay and put an altimeter and IMU in there to see how high my own rocket would go so I could better tune my simulations for future builds.
The Rocket Build
When I got my L1 rocket kit, I spent a lot of time reading about the various parts that could go wrong - epoxy, weak joints, misbalance of the CG/CP ratio and I wanted to get everything right. I would mark the piece before cutting and epoxying because I realized those would be hard to undo if I messed up. In addition I was aware that I had technology in the e-Bay that could be damaged and not recoverable if something failed.
The epoxy was the biggest learning curve to overcome. Getting the technique right to apply epoxy and look good is something I got better at throughout the process. I used 15-minute epoxy as that allowed more error in the application process as I could wipe away excess if it spread too much, though this was at the expense of making the build take longer than it would have otherwise.
The LOC-IV X2 and many high power rockets feature through-the-tube fins for added support. This was different than the Alpha Estes rocket I built earlier in the summer and a bit worrisome as it was a tight fit and if you messed up when getting the glue in and everything right, the build would be ruined. However after a few dry fittings and preparation, it went smoothly in and epoxied together great. I did the fins last and for good reason. One, it closes up the motor mount and everything to the body tube so you cannot access it. But more importantly, it was one of my last epoxies and one of the more visible ones on the build. Due to my improvement in epoxying over the build, they looked significantly better than some of the earlier ones, and they are the most structurally significant to the flight.


Logger
To make things interesting, I took to the rocket's eBay even though I wasn't doing dual deployment. I wanted to see measured results from something I built.
I used an Adafruit Feather RP2040 Adalogger for the microcontroller, a Bosch BMP581 and a Goertek SPA06-003 for two redundant altimeters, and a LSM6DSOX Arduino Modulino movement board for the IMU. Then the logger was powered by a 500 mAh LiPo and the data was stored to a microSD card plugged into the Adalogger.

Putting them all together wasn't a big deal and it was exciting to see them and the rocket all come together as one.
On the field, I used the base measurements from the ground as height 0 m. Then from the barometric data, (given the pressure difference small holes in the airframe allowed the barometer to read) I could calculate how high it went using the standard atmosphere formula referenced to the pad.
In addition to those, I put an AirTag in the eBay to help find it when it came down on the field. This was due to me having lost the Estes Alpha on a C motor that took it above the clouds.
One thing that came out during the flight that was interesting is the difference between the two altimeters. While their absolute calibrations were off from each other by about 1.194 hPa, if you take each one relative to its own starting point then they both hold to about 19 mm of noise sitting on the pad, and their noise floors match each other within .2 mm. Their measured apogees are 1.2 meters apart (.4% difference). However, their ascents differ by up to 40 meters throughout. I figured out that this was due to the sampling lag inherent in them. My logger samples at 55 Hz, but the BMP581 only produces a new reading at 43 Hz and the SPA06-003 at 3.4 Hz, so the SPA is showing a delayed updated height in comparison to the BMP and the semi-static pause at apogee allowed them to sample very close heights.
1-DOF Flight Simulation
To make it more interesting, in addition to using Open Rocket to test my build against the flight-site's launch waiver of 4500'. I decided to make a 1 degree of freedom flight simulation to see how close I could get to my logger's measured altitude.
For this, I used a 1-DOF trajectory model integrated as an initial value problem with ode45 (Dormand-Prince 5(4)) in MATLAB, with an adaptive RelTol 10−8 tolerance, terminated by an apogee event. I initially tested it given expected temperature, pressure, impulse, and drag coefficient before the flight. However, the day after my launch I noticed that my measured altitude was quite off from the expected altitude of 1209 feet (368.5 m), and so I analyzed it with forward uncertainty propagation by Monte Carlo over four sampled inputs and global sensitivity analysis by correlation after the launch.
With that model, I used a Monte Carlo analysis adjusting the drag coefficient (Cd), pressure (p), temperature (T), and impulse (Fc).
I chose a 1-DOF model as unless something went catastrophically wrong with the flight, it was best for my purposes to model the rocket as a point on a line. Rockets essentially go straight up and the offsets tend to happen after parachute deployment, which is not what I am concerned with when finding the apogee. Therefore the 1 degree of freedom seemed adequate and more than enough for the given situation. This was shown to be a pretty good assumption with my gyroscope showing a 0.42 degree tilt through the entire boost phase. The effect that had on it is about 3 parts per hundred thousand or about 8.4 mm off and thus justified my decision for a 1-DOF model.
The drag coefficient was something that I could not measure and only estimate at before actually launching the rocket. My Open Rocket simulation chose a Cd of .45 given my model and I read online that L1 model rockets tend to range from .45 to .75. So I took that as a good range to test. The temperature and pressure were assumed to be around 20 degrees Celsius given it was a summer morning plus or minus 5 degrees and the International Standard Atmosphere sea level pressure of 1013.25 hPa plus or minus 10 hPa.
For the impulse, I read that within a manufacturer's own motor there could be 1-2% variation with regards to impulse from the NAR AeroTech G76G certification report, which gives 115.0 N·s with a standard deviation of 1.8, a relative standard deviation of 1.6%. Then I saw that there is a regulatory ceiling of 6.7% standard deviation in accordance with NFPA 1125 §8.2.7, which I have from ThrustCurve's summary of the standard rather than from the standard itself, since NFPA 1125 is paywalled. I used an assumption of plus or minus 3% for a medium between the two as my Monte Carlo variation to see how it would affect altitude.
The model found a mean height of 343.9 meters (1128.3 feet) across N=10,000. The 2.5, 50, and 97.5 percentiles were 303.5 m, 342.5 m, and 391.3 m respectively. The standard deviation was 22.6 meters from the mean.

What I found when I launched it was that the apogee turned out to be 1021 feet (311.2 meters) above the launch pad by the standard atmosphere formula above. That formula assumes a 15 degree Celsius sea level temperature and the air on launch day was around 23 degrees, which is a less dense column, so the same pressure drop covers more altitude than the formula allows for.
To correct it I dropped the standard atmosphere entirely and reduced the raw pressure against the pad pressure my own barometer measured, 997.73 hPa, using the hypsometric form of the barometric equation with the temperature on the day rather than 15 degrees:
The 23 degrees is the weakest number on this page and I want to be straight about where it came from. It is my own reading of the conditions at the field, which I wrote down at the time as roughly 70 to 78 degrees Fahrenheit. It is not a station observation and I have not gone back to the archive at Orange County Airport to check it. The two temperature sensors on board are no help either, because both sat sealed inside the electronics bay and read about 40.8 and 40.5 degrees Celsius on the pad, which is self heating rather than air. What makes this acceptable is that the reduction barely cares: the correction moves the apogee by 1.09 m per degree Celsius, so the whole 70 to 78 degree range I reported spans 320.0 m to 324.9 m on the BMP581. That is a band of about 1.5%, smaller than the miss I am trying to explain and much smaller than the drag effect that drives it.
Correcting it to the pad pressure my barometer measured and the warmer air on the day gives 1052 feet (320.6 m), about 3% higher, and that is the number I compare the simulation against since the simulation runs on real air rather than a standard one. This differed from the expected altitude of 1209 feet (prior to the launch and Monte Carlo) by 157 feet. However, within the Monte Carlo the measured apogee was at the 14.8 percentile, that is low in the distribution (though within the central 95% interval). Some factors came into play that I predicted inaccurately. The main driver of this difference between the expected mean 1128 feet (343.9 m) and the measured 1052 feet was the drag coefficient.

I measured the acceleration at 12.58 g against 12.5 (.6% difference), burnout was inside 4% of the motor's published figure, and peak velocity was 92.2 m/s against the 93.07 predicted (.9%). That means that the mass model, thrust curve, and parser were all checked against direct measurement and the boost phase was verified having the energy the model said it would before the coast phase. That means the error is dominantly within that coasting phase and likely not as affected by boost phase effects. In the coasting phase the only forces are drag and gravity, so it's the phase with drag as the primary contributor. That most likely means my real rocket was far draggier than I anticipated, calculated retrospectively from the corrected measured altitude to be about 0.75. Far higher than the assumed .45.
One other thing that the Monte Carlo showed was the correlation that the major share of variance was the Cd with 57.6% (r = -.7588, r2 = .5758), impulse also contributed heavily with 40.6% (r = .6368, r2 = .4055), then temperature (r = .079, r2 = .0062) and pressure (r = -.0415, r2 = .0017) contributed almost nothing at .6% and .2% respectively. Those percentages add up to 98.9% as it is near linear based on R2 calculated to be .9919.
This also shows that knowing the pressure in advance doesn't affect the expected altitude too much, however the barometer I used allowed me to show it was the drag coefficient rather than the air density that affected the launch altitude. One thing to note though is that these shares of variance are based on my assumptions of uncertainty, they would be different if I had assigned different uncertainties, however pressure and temperature are still very small contributions as pressure stays under 5% even at plus or minus 50 hPa which would be the year-round range for a single site.
The drag was still shown to be the leading cause of the 157 foot miss in actual flight due to the measurements and coasting phase error.
What I Will Do Differently
There was a lot I learned about building and preparing something for a scheduled launch through this project. I discovered that despite my efforts to think of everything that could go wrong prior to the launch day, I still showed up and had to sand some things due to an RSO saying it fit too tight to fly.
Additionally, with this new drag coefficient, I will be able to better simulate future launches with this rocket for when I plan to do my L2 next month as dual deployment. That will give me a more accurate expected height than I would have been able to give had I not gotten the measured data and not realized the error in my Cd. Further, I plan to add a camera onboard for that flight in addition to testing out a Kalman filter for estimating and smoothing terms out during flight. This will be necessary for future projects I plan to do such as a targeted landing with a parafoil deployment.
This L1 rocket was incredibly fun to build and seeing something I created fly into the sky is something I hope to recreate many times.