RocketPy icon indicating copy to clipboard operation
RocketPy copied to clipboard

ENH: Full support for multi-stage rockets

Open Gui-FernandesBR opened this issue 1 year ago • 0 comments

RocketPy already allows you to run mult-stage rocket simulations. However, we all now it is not an easy task. Let's improve user's experience with this feature request.

We can divide this task into 3 main blocks:

  1. Create a Stage class
  2. Use the new Stage class in the Rocket
  3. Improves the Flight class to deal with different stage flights

Details of each part:

  1. Create the Stage class
  • [ ] The new class should work in a pretty similar way to the current Rocket class.
  • [ ] It should have methods like add_surfaces and add_motor.
  • [ ] Moment of inertias should be optional arguments
  1. Use the new stage class in the Rocket class
  • [ ] A new attribute should be available: list Rocket.stages: list[Stage] should be created
  • [ ] When you initialize a Rocket, it already comes with an empty Stage, it is selected and ready to be used.
  • [ ] Rocket.add_surfaces actually adds the surfaces to the current selected stage.
  1. Improve the Flight class.
  • [ ] Flight setting or flight model file: Before simulating the flight, we should be able to generate the "simulation model" file, which could be a .json file or something more readable. The flight class should be able to read this simulation model file.
  • [ ] The simulation flight phases/stage should be predicted before the flight actually happens. Maybe a "Flight settings" class?
  • [ ] We need a better handling of the Events om our simulation. It's time to create a FlightEvents enum.
  • [ ] We need custom exceptions in the flight class, this will make our lives pretty easier.
  • [ ] We need to make the rail length argument optional now.

Breaking changes (postponed to future versions):

  • [ ] Create a Flight.simulate() method and stop running the simulation in the init method.

Additional requirements:

  • [ ] Inertia Tensors must be stored using the new class
  • [ ] Q: is it time for a "EjectablePayload" class?

Gui-FernandesBR avatar Aug 19 '24 02:08 Gui-FernandesBR