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
This commit is contained in:
parent
2c46580a6c
commit
8c439b60c3
5
.gitignore
vendored
5
.gitignore
vendored
@ -149,4 +149,7 @@ dmypy.json
|
||||
*.swp
|
||||
*~
|
||||
Temp/*
|
||||
*.txt
|
||||
*.txt
|
||||
_dist/
|
||||
_build/
|
||||
*.bak*
|
||||
@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
{
|
||||
"s1": {
|
||||
"a": 1
|
||||
}
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
{
|
||||
"s1": {
|
||||
"a": 1
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
{
|
||||
"s1": {
|
||||
"a": 1
|
||||
}
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
{
|
||||
"s1": {
|
||||
"a": 1
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 82 KiB |
74
target_simulator/_version.py
Normal file
74
target_simulator/_version.py
Normal file
@ -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}]"
|
||||
@ -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
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user