Aaron Belinski

Projects

The rocketry and GNC work I’m doing right now, most important first.

  1. Flight computer state estimator
  2. Rocket trajectory simulator
  3. Ramjet design
  4. Toy plane with swappable parts

Flight computer state estimator

Rutgers Rocket Propulsion Lab, avionics team. Fall 2026.

Implemented

Estimates
Position, velocity, acceleration
Runs on
Ganesha III, Hephaestus
Built in
MATLAB and Simulink, then C++

Our flight computers, Ganesha III and Hephaestus, need to know where the rocket is and how fast it’s moving. I wrote the Kalman filter that estimates position, velocity, and acceleration. It takes the attitude quaternion from a teammate’s module and works out the translational state from there.

I built and tested it in MATLAB and Simulink first, then wrote the C++ version for the team’s shared driver code. This fall I ran it on the logged sensor data from one of our flights last June.

Filter run on logged sensor data from a June 2026 flight. Altitude and velocity from liftoff to 42.47 seconds. The estimate follows the barometer and GPS readings to an apogee of about 7828 meters at 37.11 seconds. Peak estimated velocity is 514 meters per second. Altitude, km 0 2 4 6 8 Velocity, m/s 0 250 500 Sensor minus estimate, m -200 -100 0 +100 +200 0 5 10 15 20 25 30 35 40 45 time from liftoff, s Liftoff Burnout Apogee log ends

Filter estimate Barometer GPS

My filter run on the logged sensor data from a June 2026 flight. The flight didn’t go as planned and the log ends about five seconds after apogee. The estimate puts apogee at 7,828 m, between the GPS (7,713 m) and the barometer (7,990 m), with a peak velocity of 514 m/s.
Altitude error in a simulated flight with the filter's plus and minus 3 sigma bounds. From 16.72 to 33.64 seconds there are no barometer updates and the bounds grow to 7.97 meters, then collapse when updates return. The error stays inside the bounds until 54.415 seconds, just before the end of the run. no barometer updates Altitude error, m -8 -4 0 +4 +8 0 5 10 15 20 25 30 35 40 45 50 55 time, s leaves bound

Error from true altitude ±3σ bound

The same filter on a simulated flight, where the true altitude is known. From about 17 s to 34 s it runs without barometer updates, so the bounds grow. They collapse as soon as the updates come back. The error stays inside the bounds until 54.4 s, a few seconds after apogee, when it drifts just past +3σ.

Rocket trajectory simulator

Personal project. Python.

In progress

Current stage
3 of 6, drag
Motor data
RASP .eng files
Built in
Python, NumPy, Matplotlib

I’m writing a trajectory simulator from scratch so I understand every line of it. Each stage gets checked before I start the next one, which makes it a lot easier to tell where a bug came from.

The long-term goal is one codebase that goes from a motor’s thrust curve all the way to thrust vector control and state estimation.

Simulator block diagram. A motor file feeds a thrust and mass model, which feeds a sum of forces (thrust, gravity, drag). The forces go to an integrator that outputs altitude, velocity, and acceleration. Velocity feeds back to the drag term. A planned estimator and thrust vector controller will close a second loop. Motor file RASP .eng Thrust and mass model Sum of forces thrust, gravity, drag Integrator State h, v, a v feeds back into drag Estimator Controller gimbaled thrust Dashed: planned
How the simulator is put together. The dashed loop is where it’s headed.
  1. Stage 1 1D vertical point mass Validated
  2. Stage 2 Real motor thrust curves, variable mass, .eng file parser Validated
  3. Stage 3 Aerodynamic drag In progress
  4. Stage 4 Check against RPL flight data Planned
  5. Stage 5 2D dynamics with gimbaled thrust (TVC) Planned
  6. Stage 6 Control and state estimation Planned

Ramjet design

Personal project. SolidWorks.

In progress

Design point
Mach 2.5 at 10 km
Next step
3D print the part
Built in
SolidWorks

A ramjet sized for Mach 2.5 at 10 km. I worked out the freestream conditions at that design point first and let the geometry come out of the analysis, instead of drawing a shape and checking it afterward. Once the model is done I’m going to 3D print it.

Ramjet cross-section with stations numbered 0 through 5: freestream, inlet lip, combustor entry, combustor exit, nozzle throat, and nozzle exit. An oblique shock runs from the spike tip to the cowl lip. 0 1 2 3 4 5 Freestream: Mach 2.5 at 10 km Oblique shock Combustor Flameholder Nozzle
A generic ramjet with station numbers: freestream (0), inlet lip (1), combustor entry (2), combustor exit (3), throat (4), and exit (5). It’s a reference sketch, not my SolidWorks model.

Toy plane with swappable parts

Team project for ID3EA I, Rutgers first-year design. Fall 2026.

In progress

Course
ID3EA I
Team
Group project
Term
Fall 2026

A toy plane whose parts you can swap out, designed with my team this semester.