Parachute trigger comparison

Created Diff expires in
7 Entfernungen
Zeilen
Gesamt
Entfernt
Wörter
Gesamt
Entfernt
Um diese Funktion weiterhin zu nutzen, aktualisieren Sie auf
Diffchecker logo
Diffchecker Pro
54 Zeilen
19 Hinzufügungen
Zeilen
Gesamt
Hinzugefügt
Wörter
Gesamt
Hinzugefügt
Um diese Funktion weiterhin zu nutzen, aktualisieren Sie auf
Diffchecker logo
Diffchecker Pro
66 Zeilen
for parachute in node.parachutes:
for parachute in overshootable_node.parachutes:
# Calculate and save pressure signal
# Calculate and save pressure signal
(
(
noisy_pressure,
noisy_pressure,
height_above_ground_level,
height_above_ground_level,
) = self.__calculate_and_save_pressure_signals(
) = self.__calculate_and_save_pressure_signals(
parachute, node.t, self.y_sol[2]
parachute,
overshootable_node.t,
overshootable_node.y_sol[2],
)
)

# Check for parachute trigger
if not parachute.triggerfunc(
if not parachute.triggerfunc(
noisy_pressure,
noisy_pressure,
height_above_ground_level,
height_above_ground_level,
self.y_sol,
overshootable_node.y_sol,
self.sensors,
self.sensors,
):
):
return False # Early exit: parachute not deployed
return False # Early exit, parachute not triggred


# Remove parachute from flight parachutes
# Remove parachute from flight parachutes
self.parachutes.remove(parachute)
self.parachutes.remove(parachute)


# Create phase for time after detection and before inflation
# Create phase for time after detection and before inflation
# Must only be created if parachute has any lag
# Must only be created if parachute has any lag
i = 1
i = 1
if parachute.lag != 0:
if parachute.lag != 0:
self.flight_phases.add_phase(
self.flight_phases.add_phase(
node.t,
overshootable_node.t,
phase.derivative,
phase.derivative,
clear=True,
clear=True,
index=phase_index + i,
index=phase_index + i,
)
)
i += 1
i += 1


# Create flight phase for time after inflation
# Create flight phase for time after inflation
callbacks = [
callbacks = [
lambda self, parachute_cd_s=parachute.cd_s: setattr(
lambda self, parachute_cd_s=parachute.cd_s: setattr(
self, "parachute_cd_s", parachute_cd_s
self, "parachute_cd_s", parachute_cd_s
)
)
]
]
self.flight_phases.add_phase(
self.flight_phases.add_phase(
node.t + parachute.lag,
overshootable_node.t + parachute.lag,
self.u_dot_parachute,
self.u_dot_parachute,
callbacks,
callbacks,
clear=False,
clear=False,
index=phase_index + i,
index=phase_index + i,
)
)


# Rollback history
self.t = overshootable_node.t
self.y_sol = overshootable_node.y_sol
self.solution[-1] = [overshootable_node.t, *overshootable_node.y_sol]

# Prepare to leave loops and start new flight phase
# Prepare to leave loops and start new flight phase
overshootable_nodes.flush_after(overshootable_index)
phase.time_nodes.flush_after(node_index)
phase.time_nodes.flush_after(node_index)
phase.time_nodes.add_node(self.t, [], [], [])
phase.time_nodes.add_node(self.t, [], [], [])
phase.solver.status = "finished"
phase.solver.status = "finished"

# Save parachute event
self.parachute_events.append([self.t, parachute])
self.parachute_events.append([self.t, parachute])
return True
return True


return False
return False