diff --git a/rocketpy/rocket/rocket.py b/rocketpy/rocket/rocket.py index e3692d2e8..9800d9e46 100644 --- a/rocketpy/rocket/rocket.py +++ b/rocketpy/rocket/rocket.py @@ -1952,6 +1952,46 @@ def add_thrust_eccentricity(self, x, y): self.thrust_eccentricity_y = y return self + def add_discrete_controller( + self, + controller_function, + refresh_rate, + interactive_objects=None, + initial_observed_variables=None, + name=None, + ): + + controller = _Controller( + controller_function=controller_function, + sampling_rate=refresh_rate, + interactive_objects=interactive_objects, + initial_observed_variables=initial_observed_variables, + name=name, + ) + + self._add_controllers(controller) + + return self + + def add_continuous_controller( + self, + controller_function, + interactive_objects=None, + initial_observed_variables=None, + name=None, + ): + + controller = _Controller( + controller_function=controller_function, + sampling_rate=np.inf, + interactive_objects=interactive_objects, + initial_observed_variables=initial_observed_variables, + name=name, + ) + + self._add_controllers(controller) + return controller + def draw(self, vis_args=None, plane="xz", *, filename=None): """Draws the rocket in a matplotlib figure. diff --git a/rocketpy/simulation/flight.py b/rocketpy/simulation/flight.py index 1443d1d80..1104769af 100644 --- a/rocketpy/simulation/flight.py +++ b/rocketpy/simulation/flight.py @@ -4497,6 +4497,9 @@ def add_parachutes(self, parachutes, t_init, t_end): def add_controllers(self, controllers, t_init, t_end): for controller in controllers: + # Skip node creation for continuous controllers + if math.isinf(controller.sampling_rate): + continue # Calculate start of sampling time nodes controller_time_step = 1 / controller.sampling_rate controller_node_list = [