From 8c439b60c3c73d79e89923aa3829ffad54bd6d9b Mon Sep 17 00:00:00 2001 From: VALLONGOL Date: Fri, 31 Oct 2025 13:46:11 +0100 Subject: [PATCH] Chore: Stop tracking files based on .gitignore update. Untracked files matching the following rules: - Rule "!.vscode/launch.json": 1 file - Rule "!.vscode/settings.json": 1 file - Rule "!.vscode/tasks.json": 1 file - Rule "*.bak*": 8 files --- .gitignore | 5 +- scenarios.json | 37 +++ scenarios.json.bak1 | 388 ------------------------ scenarios.json.bak2 | 385 ----------------------- scenarios.json.bak3 | 5 - scenarios.json.bak4 | 5 - scenarios.json.bak5 | 385 ----------------------- scenarios.json.prewrite.1761907106.bak | 5 - scenarios.json.prewrite.1761908997.bak | 5 - scenarios.json.prewrite.1761909560.bak | 388 ------------------------ settings.json | 2 +- target_simulator.ico | Bin 0 -> 83733 bytes target_simulator/_version.py | 74 +++++ target_simulator/core/sfp_transport.py | 2 +- target_simulator/gui/analysis_window.py | 125 +++++++- target_simulator/gui/main_view.py | 116 +++---- 16 files changed, 291 insertions(+), 1636 deletions(-) delete mode 100644 scenarios.json.bak1 delete mode 100644 scenarios.json.bak2 delete mode 100644 scenarios.json.bak3 delete mode 100644 scenarios.json.bak4 delete mode 100644 scenarios.json.bak5 delete mode 100644 scenarios.json.prewrite.1761907106.bak delete mode 100644 scenarios.json.prewrite.1761908997.bak delete mode 100644 scenarios.json.prewrite.1761909560.bak create mode 100644 target_simulator/_version.py diff --git a/.gitignore b/.gitignore index cc67f27..f888da5 100644 --- a/.gitignore +++ b/.gitignore @@ -149,4 +149,7 @@ dmypy.json *.swp *~ Temp/* -*.txt \ No newline at end of file +*.txt +_dist/ +_build/ +*.bak* \ No newline at end of file diff --git a/scenarios.json b/scenarios.json index f20b074..f85b898 100644 --- a/scenarios.json +++ b/scenarios.json @@ -381,5 +381,42 @@ "use_spline": false } ] + }, + "corto": { + "name": "corto", + "targets": [ + { + "target_id": 0, + "active": true, + "traceable": true, + "trajectory": [ + { + "maneuver_type": "Fly to Point", + "duration_s": 10.0, + "target_range_nm": 50.0, + "target_azimuth_deg": 45.0, + "target_altitude_ft": 10000.0, + "target_velocity_fps": 506.343, + "target_heading_deg": -90.0, + "longitudinal_acceleration_g": 0.0, + "lateral_acceleration_g": 0.0, + "vertical_acceleration_g": 0.0, + "turn_direction": "Right" + }, + { + "maneuver_type": "Fly to Point", + "duration_s": 30.0, + "target_range_nm": 50.0, + "target_azimuth_deg": -45.0, + "target_altitude_ft": 10000.0, + "longitudinal_acceleration_g": 0.0, + "lateral_acceleration_g": 0.0, + "vertical_acceleration_g": 0.0, + "turn_direction": "Right" + } + ], + "use_spline": false + } + ] } } \ No newline at end of file diff --git a/scenarios.json.bak1 b/scenarios.json.bak1 deleted file mode 100644 index 41a9b7b..0000000 --- a/scenarios.json.bak1 +++ /dev/null @@ -1,388 +0,0 @@ -{ - "scenario1": { - "name": "scenario1", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 0.0 - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1670.9318999999994, - "target_heading_deg": 10.0 - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 400.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 25.0, - "target_azimuth_deg": -20.0 - } - ], - "use_spline": false - } - ] - }, - "scenario2": { - "name": "scenario2", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": -3.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 0.0, - "target_heading_deg": 0.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 30.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 1, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 20.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 30.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 35.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario3": { - "name": "scenario3", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 5.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 30.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": -180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - } - ] - }, - "scenario_9g": { - "name": "scenario2", - "targets": [ - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario_dritto": { - "name": "scenario_dritto", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 20.0, - "target_azimuth_deg": -45.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 100.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "s1": { - "a": 1 - } -} \ No newline at end of file diff --git a/scenarios.json.bak2 b/scenarios.json.bak2 deleted file mode 100644 index 061cb48..0000000 --- a/scenarios.json.bak2 +++ /dev/null @@ -1,385 +0,0 @@ -{ - "scenario1": { - "name": "scenario1", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 0.0 - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1670.9318999999994, - "target_heading_deg": 10.0 - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 400.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 25.0, - "target_azimuth_deg": -20.0 - } - ], - "use_spline": false - } - ] - }, - "scenario2": { - "name": "scenario2", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": -3.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 0.0, - "target_heading_deg": 0.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 30.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 1, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 20.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 30.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 35.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario3": { - "name": "scenario3", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 5.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 30.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": -180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - } - ] - }, - "scenario_9g": { - "name": "scenario2", - "targets": [ - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario_dritto": { - "name": "scenario_dritto", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 20.0, - "target_azimuth_deg": -45.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 100.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - } -} \ No newline at end of file diff --git a/scenarios.json.bak3 b/scenarios.json.bak3 deleted file mode 100644 index 187e2d6..0000000 --- a/scenarios.json.bak3 +++ /dev/null @@ -1,5 +0,0 @@ -{ - "s1": { - "a": 1 - } -} \ No newline at end of file diff --git a/scenarios.json.bak4 b/scenarios.json.bak4 deleted file mode 100644 index 187e2d6..0000000 --- a/scenarios.json.bak4 +++ /dev/null @@ -1,5 +0,0 @@ -{ - "s1": { - "a": 1 - } -} \ No newline at end of file diff --git a/scenarios.json.bak5 b/scenarios.json.bak5 deleted file mode 100644 index 061cb48..0000000 --- a/scenarios.json.bak5 +++ /dev/null @@ -1,385 +0,0 @@ -{ - "scenario1": { - "name": "scenario1", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 0.0 - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1670.9318999999994, - "target_heading_deg": 10.0 - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 400.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 25.0, - "target_azimuth_deg": -20.0 - } - ], - "use_spline": false - } - ] - }, - "scenario2": { - "name": "scenario2", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": -3.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 0.0, - "target_heading_deg": 0.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 30.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 1, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 20.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 30.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 35.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario3": { - "name": "scenario3", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 5.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 30.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": -180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - } - ] - }, - "scenario_9g": { - "name": "scenario2", - "targets": [ - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario_dritto": { - "name": "scenario_dritto", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 20.0, - "target_azimuth_deg": -45.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 100.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - } -} \ No newline at end of file diff --git a/scenarios.json.prewrite.1761907106.bak b/scenarios.json.prewrite.1761907106.bak deleted file mode 100644 index 187e2d6..0000000 --- a/scenarios.json.prewrite.1761907106.bak +++ /dev/null @@ -1,5 +0,0 @@ -{ - "s1": { - "a": 1 - } -} \ No newline at end of file diff --git a/scenarios.json.prewrite.1761908997.bak b/scenarios.json.prewrite.1761908997.bak deleted file mode 100644 index 187e2d6..0000000 --- a/scenarios.json.prewrite.1761908997.bak +++ /dev/null @@ -1,5 +0,0 @@ -{ - "s1": { - "a": 1 - } -} \ No newline at end of file diff --git a/scenarios.json.prewrite.1761909560.bak b/scenarios.json.prewrite.1761909560.bak deleted file mode 100644 index 41a9b7b..0000000 --- a/scenarios.json.prewrite.1761909560.bak +++ /dev/null @@ -1,388 +0,0 @@ -{ - "scenario1": { - "name": "scenario1", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 0.0 - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1670.9318999999994, - "target_heading_deg": 10.0 - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 400.0, - "target_altitude_ft": 10000.0, - "target_range_nm": 25.0, - "target_azimuth_deg": -20.0 - } - ], - "use_spline": false - } - ] - }, - "scenario2": { - "name": "scenario2", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": -3.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 0.0, - "target_heading_deg": 0.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 30.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 35.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 200.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 1, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 10.0, - "target_azimuth_deg": 10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 20.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 30.0, - "target_azimuth_deg": 30.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 30.0, - "target_range_nm": 35.0, - "target_azimuth_deg": -10.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - }, - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario3": { - "name": "scenario3", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 10.0, - "target_range_nm": 5.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 10.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 20.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 30.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": -180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": true - } - ] - }, - "scenario_9g": { - "name": "scenario2", - "targets": [ - { - "target_id": 2, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 28.0, - "target_azimuth_deg": 0.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 300.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 180.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Dynamic Maneuver", - "duration_s": 9.0, - "maneuver_speed_fps": 1519.0289999999995, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 9.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly for Duration", - "duration_s": 100.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 1012.686, - "target_heading_deg": -90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "scenario_dritto": { - "name": "scenario_dritto", - "targets": [ - { - "target_id": 0, - "active": true, - "traceable": true, - "trajectory": [ - { - "maneuver_type": "Fly to Point", - "duration_s": 1.0, - "target_range_nm": 20.0, - "target_azimuth_deg": -45.0, - "target_altitude_ft": 10000.0, - "target_velocity_fps": 506.343, - "target_heading_deg": 90.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - }, - { - "maneuver_type": "Fly to Point", - "duration_s": 100.0, - "target_range_nm": 20.0, - "target_azimuth_deg": 45.0, - "target_altitude_ft": 10000.0, - "longitudinal_acceleration_g": 0.0, - "lateral_acceleration_g": 0.0, - "vertical_acceleration_g": 0.0, - "turn_direction": "Right" - } - ], - "use_spline": false - } - ] - }, - "s1": { - "a": 1 - } -} \ No newline at end of file diff --git a/settings.json b/settings.json index b97507c..5571ff2 100644 --- a/settings.json +++ b/settings.json @@ -3,7 +3,7 @@ "scan_limit": 60, "max_range": 100, "geometry": "1599x1089+587+179", - "last_selected_scenario": null, + "last_selected_scenario": "corto", "connection": { "target": { "type": "sfp", diff --git a/target_simulator.ico b/target_simulator.ico index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..79d02a0c23560569fb6574e43b7b4b8cf024e704 100644 GIT binary patch literal 83733 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ð)P1e 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 literal 0 HcmV?d00001 diff --git a/target_simulator/_version.py b/target_simulator/_version.py new file mode 100644 index 0000000..1f134a8 --- /dev/null +++ b/target_simulator/_version.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# File generated by PyInstaller GUI Wrapper. DO NOT EDIT MANUALLY. +# Contains build-time information scraped from Git (if available) +# and a helper function to format version strings. + +import re + +# --- Version Data (Generated) --- +__version__ = "v.0.0.0.62-0-g00ffcb5-dirty" +GIT_COMMIT_HASH = "00ffcb54a320df4b682bb77920dbb758e10fbca0" +GIT_BRANCH = "master" +BUILD_TIMESTAMP = "2025-10-31T11:56:55.656151+00:00" +IS_GIT_REPO = True + +# --- Default Values (for comparison or fallback) --- +DEFAULT_VERSION = "0.0.0+unknown" +DEFAULT_COMMIT = "Unknown" +DEFAULT_BRANCH = "Unknown" + +# --- Helper Function --- +def get_version_string(format_string=None): + """ + Returns a formatted string based on the build version information. + + Args: + format_string (str, optional): A format string using placeholders. + Defaults to "{version} ({branch}/{commit_short})" if None. + Placeholders: + {{version}}: Full version string (e.g., 'v1.0.0-5-gabcdef-dirty') + {{tag}}: Clean tag part if exists (e.g., 'v1.0.0'), else DEFAULT_VERSION. + {{commit}}: Full Git commit hash. + {{commit_short}}: Short Git commit hash (7 chars). + {{branch}}: Git branch name. + {{dirty}}: '-dirty' if the repo was dirty, empty otherwise. + {{timestamp}}: Full build timestamp (ISO 8601 UTC). + {{timestamp_short}}: Build date only (YYYY-MM-DD). + {{is_git}}: 'Git' if IS_GIT_REPO is True, 'Unknown' otherwise. + + Returns: + str: The formatted version string, or an error message if formatting fails. + """ + if format_string is None: + format_string = "{version} ({branch}/{commit_short})" # Default format + + replacements = {} + try: + replacements['version'] = __version__ if __version__ else DEFAULT_VERSION + replacements['commit'] = GIT_COMMIT_HASH if GIT_COMMIT_HASH else DEFAULT_COMMIT + replacements['commit_short'] = GIT_COMMIT_HASH[:7] if GIT_COMMIT_HASH and len(GIT_COMMIT_HASH) >= 7 else DEFAULT_COMMIT + replacements['branch'] = GIT_BRANCH if GIT_BRANCH else DEFAULT_BRANCH + replacements['timestamp'] = BUILD_TIMESTAMP if BUILD_TIMESTAMP else "Unknown" + replacements['timestamp_short'] = BUILD_TIMESTAMP.split('T')[0] if BUILD_TIMESTAMP and 'T' in BUILD_TIMESTAMP else "Unknown" + replacements['is_git'] = "Git" if IS_GIT_REPO else "Unknown" + replacements['dirty'] = "-dirty" if __version__ and __version__.endswith('-dirty') else "" + + tag = DEFAULT_VERSION + if __version__ and IS_GIT_REPO: + match = re.match(r'^(v?([0-9]+(?:\.[0-9]+)*))', __version__) + if match: + tag = match.group(1) + replacements['tag'] = tag + + output_string = format_string + for placeholder, value in replacements.items(): + pattern = re.compile(r'{{\s*' + re.escape(placeholder) + r'\s*}}') + output_string = pattern.sub(str(value), output_string) + + if re.search(r'{\s*\w+\s*}', output_string): + pass # Or log a warning: print(f"Warning: Unreplaced placeholders found: {output_string}") + + return output_string + + except Exception as e: + return f"[Formatting Error: {e}]" diff --git a/target_simulator/core/sfp_transport.py b/target_simulator/core/sfp_transport.py index 529f7dc..daface4 100644 --- a/target_simulator/core/sfp_transport.py +++ b/target_simulator/core/sfp_transport.py @@ -211,7 +211,7 @@ class SfpTransport: ) except Exception: sent_preview = repr(cs) - logger.info( + logger.debug( f"{log_prefix} Sent command to {destination} (TID: {header.SFP_TID}): {sent_preview!r}" ) return True diff --git a/target_simulator/gui/analysis_window.py b/target_simulator/gui/analysis_window.py index 4b0f8e1..34ae745 100644 --- a/target_simulator/gui/analysis_window.py +++ b/target_simulator/gui/analysis_window.py @@ -46,6 +46,12 @@ class AnalysisWindow(tk.Toplevel): self._hub = hub self._active = True + # Cache last displayed state so we can preserve it between simulations. + # If no new analysis data is available (e.g. simulation stopped), we + # will keep showing these values until a new simulation populates the hub. + self._last_displayed_target_id = None + self._has_last_values = False + self.selected_target_id = tk.IntVar() self._create_widgets() @@ -118,32 +124,127 @@ class AnalysisWindow(tk.Toplevel): return self._update_target_selector() + # If the simulation is not running, do not process new analysis data. + # Keep showing the last cached values (if any) until a simulation is + # actively running again. + try: + running = False + if hasattr(self.master, "is_simulation_running"): + try: + running = bool(self.master.is_simulation_running.get()) + except Exception: + running = False + except Exception: + running = False + sel = self.selected_target_id.get() + + if not running: + # Simulation not running: do not call analyze or update plots. + # Preserve last displayed values to avoid UI flicker/clearing. + # However, if there are no cached values, show a message in the + # stats table to indicate data will appear when simulation runs. + if not self._has_last_values: + self.stats_tree.delete(*self.stats_tree.get_children()) + self.stats_tree.insert( + "", + "end", + values=("No Data", "-", "-", "-"), + ) + self.after(UPDATE_INTERVAL_MS, self._update_loop) + return + + # When running, perform live analysis and update views. analysis_results = self._analyzer.analyze() - if self.selected_target_id.get() in analysis_results: - self._update_stats_table(analysis_results[self.selected_target_id.get()]) - self._update_plot(self.selected_target_id.get()) + if sel in analysis_results: + # We have fresh analysis for the selected target: update and cache + self._update_stats_table(analysis_results[sel]) + self._update_plot(sel) + self._last_displayed_target_id = sel + self._has_last_values = True else: - self._clear_views() + # No fresh analysis for selected target. Decide whether to clear or + # keep the last displayed values. If the hub currently reports any + # active real targets, it means data should be cleared for missing + # selection; otherwise preserve. + try: + if self._hub and hasattr(self._hub, "has_active_real_targets") and self._hub.has_active_real_targets(): + self._clear_views() + self._has_last_values = False + else: + pass + except Exception: + self._clear_views() + self._has_last_values = False self.after(UPDATE_INTERVAL_MS, self._update_loop) def _update_target_selector(self): - target_ids = sorted(self._hub.get_all_target_ids()) - self.target_selector["values"] = target_ids + # Only update the combobox values when the hub reports target ids. + # This prevents the selector from being emptied when the hub is cleared + # at the end of a simulation and allows the analysis window to continue + # showing the last results until the next simulation starts. + try: + target_ids = sorted(self._hub.get_all_target_ids()) + except Exception: + target_ids = [] - if target_ids and self.selected_target_id.get() not in target_ids: - self.selected_target_id.set(target_ids[0]) + if target_ids: + self.target_selector["values"] = target_ids + + if self.selected_target_id.get() not in target_ids: + # If previous selection isn't available, pick the first available + self.selected_target_id.set(target_ids[0]) + else: + # Do not overwrite existing combobox values when no targets are present. + # This preserves the user's last view after a simulation ends. + pass def _on_target_select(self, event=None): # Trigger an immediate update when user changes selection + # Only perform an immediate analysis if the simulation is running. + running = False + try: + if hasattr(self.master, "is_simulation_running"): + running = bool(self.master.is_simulation_running.get()) + except Exception: + running = False + + sel = self.selected_target_id.get() + + if not running: + # If we have cached values for this selection, keep them; otherwise + # show a placeholder and don't call the analyzer. + if self._has_last_values and self._last_displayed_target_id == sel: + return + else: + self.stats_tree.delete(*self.stats_tree.get_children()) + self.stats_tree.insert( + "", + "end", + values=("No Data", "-", "-", "-"), + ) + self._has_last_values = False + return + + # Simulation running -> perform analysis for selection analysis_results = self._analyzer.analyze() - if self.selected_target_id.get() in analysis_results: - self._update_stats_table(analysis_results[self.selected_target_id.get()]) - self._update_plot(self.selected_target_id.get()) + if sel in analysis_results: + self._update_stats_table(analysis_results[sel]) + self._update_plot(sel) + self._last_displayed_target_id = sel + self._has_last_values = True else: - self._clear_views() + try: + if self._hub and hasattr(self._hub, "has_active_real_targets") and self._hub.has_active_real_targets(): + self._clear_views() + self._has_last_values = False + else: + pass + except Exception: + self._clear_views() + self._has_last_values = False def _update_stats_table(self, results: Dict): self.stats_tree.delete(*self.stats_tree.get_children()) diff --git a/target_simulator/gui/main_view.py b/target_simulator/gui/main_view.py index 114426c..8ec2753 100644 --- a/target_simulator/gui/main_view.py +++ b/target_simulator/gui/main_view.py @@ -796,33 +796,12 @@ class MainView(tk.Tk): if self.is_simulation_running.get(): self.logger.info("Simulation is already running.") return - # If communicator exists but connection was deferred, try to connect now - if self.target_communicator and not self.target_communicator.is_open: - try: - sfp_cfg = self.connection_config.get("target", {}).get("sfp", {}) - if sfp_cfg: - self.logger.info( - "Attempting deferred/auto connect for target communicator before starting simulation." - ) - if not self.target_communicator.connect(sfp_cfg): - messagebox.showerror( - "Not Connected", - "Target communicator is not connected. Please check settings and connect.", - ) - return - except Exception: - self.logger.exception( - "Exception while attempting auto-connect for target communicator." - ) - messagebox.showerror( - "Not Connected", - "Target communicator is not connected. Please check settings and connect.", - ) - return - if not self.target_communicator or not self.target_communicator.is_open: - messagebox.showerror( + # Require explicit connection before starting live. Do NOT auto-connect. + if not (self.target_communicator and getattr(self.target_communicator, "is_open", False)): + # Friendly English reminder to connect first + messagebox.showwarning( "Not Connected", - "Target communicator is not connected. Please check settings and connect.", + "Please connect to the target (use the Connect button) before starting live simulation.", ) return if not self.scenario or not self.scenario.get_all_targets(): @@ -913,37 +892,60 @@ class MainView(tk.Tk): if not self.is_simulation_running.get() or not self.simulation_engine: return - self.logger.info("Stopping live simulation...") - self.simulation_engine.stop() - self.simulation_engine = None - # Also disconnect the target communicator (SFP) so we stop receiving from server + self.logger.info("Stopping live simulation (user request)...") try: - if self.target_communicator and getattr( - self.target_communicator, "is_open", False - ): - self.logger.info( - "Disconnecting target communicator (SFP) after simulation stop." - ) - try: - self.target_communicator.disconnect() - except Exception: - self.logger.exception( - "Error while disconnecting target communicator." - ) - # Update visual status - self._update_communicator_status("Target", False) - try: - self.ppi_widget.update_connect_state(False) - except Exception: - pass + self.simulation_engine.stop() except Exception: - self.logger.exception( - "Unexpected error while attempting to disconnect target communicator." - ) + self.logger.exception("Error while stopping simulation engine") + self.simulation_engine = None + # IMPORTANT: Do NOT disconnect the communicator here. Keep the connection + # active so the user can choose when to disconnect manually. + + # Update running flag and UI states self.is_simulation_running.set(False) self._update_button_states() + # Inform the user the simulation was stopped + try: + messagebox.showinfo( + "Simulation Stopped", + "Live simulation was stopped. Connection to the target remains active.", + ) + except Exception: + pass + + return + + def _on_simulation_finished(self): + """Handle the natural end-of-simulation event coming from the engine. + + This should update the UI and inform the user, but must NOT disconnect the + communicator — the connection stays active until the user explicitly disconnects. + """ + self.logger.info("Handling simulation finished (engine signalled completion).") + + # If engine still exists, stop it cleanly + try: + if self.simulation_engine and getattr(self.simulation_engine, "is_running", False): + try: + self.simulation_engine.stop() + except Exception: + self.logger.exception("Error while stopping finished simulation engine") + self.simulation_engine = None + except Exception: + self.logger.exception("Error while handling simulation finished cleanup") + + # Mark as not running and update UI (but keep connection state as-is) + self.is_simulation_running.set(False) + self._update_button_states() + + # Notify the user in English that the simulation finished + try: + messagebox.showinfo("Simulation Finished", "The live simulation has completed.") + except Exception: + pass + def _on_reset_simulation(self): self.logger.info("Resetting scenario to initial state.") if self.is_simulation_running.get(): @@ -963,8 +965,8 @@ class MainView(tk.Tk): if update == "SIMULATION_FINISHED": self.logger.info("Simulation finished signal received.") - # Ensure engine is stopped and UI reset - self._on_stop_simulation() + # Ensure engine is stopped and UI reset (do not disconnect communicator) + self._on_simulation_finished() # Reset progress UI to final state try: self.sim_elapsed_time = self.total_sim_time @@ -1073,10 +1075,14 @@ class MainView(tk.Tk): def _update_button_states(self): is_running = self.is_simulation_running.get() + # Determine if analysis data exists. Ensure boolean type. has_data_to_analyze = ( - self.simulation_hub.get_all_target_ids() if self.simulation_hub else False + bool(self.simulation_hub.get_all_target_ids()) if self.simulation_hub else False ) - analysis_state = tk.NORMAL if is_running or has_data_to_analyze else tk.DISABLED + + # Enable Analysis only when simulation is NOT running and there is data + # to analyze (i.e., after a completed run or after receiving real data). + analysis_state = tk.NORMAL if (not is_running and has_data_to_analyze) else tk.DISABLED state = tk.DISABLED if is_running else tk.NORMAL