From 4d0d1366aca843a4b027af2cba1f9cf25d20f443 Mon Sep 17 00:00:00 2001 From: ken910606 Date: Mon, 31 Aug 2026 16:28:51 +0800 Subject: [PATCH] 2.8.2 grid mission --- src/GUI/gui.py | 12 ++++++------ src/GUI/mission_group.py | 10 +++++----- src/GUI/mission_orchestrator.py | 2 +- src/GUI/mission_planner.py | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/GUI/gui.py b/src/GUI/gui.py index d1938ec..e14dea1 100644 --- a/src/GUI/gui.py +++ b/src/GUI/gui.py @@ -277,7 +277,7 @@ class ControlStationUI(QMainWindow): # ================================================================================ self.mission_planner = FormationPlanner( spacing=5.0, # 5 公尺間距 - base_altitude=10.0, # 基準高度 10 公尺 + base_altitude=25.0, # 基準高度 25 公尺 altitude_diff=2.0 # 高低差 2 公尺 ) # ================================================================================ @@ -1146,7 +1146,7 @@ class ControlStationUI(QMainWindow): def handle_takeoff(self, drone_id): loop = asyncio.get_event_loop() - future = self.monitor.takeoff_drone(drone_id, 10.0) + future = self.monitor.takeoff_drone(drone_id, 25.0) loop.create_task(self.handle_service_response(future, f"起飛 {drone_id}")) def handle_setpoint_selected(self): @@ -1231,7 +1231,7 @@ class ControlStationUI(QMainWindow): loop = asyncio.get_event_loop() for drone_id in selected: - future = self.monitor.takeoff_drone(drone_id, 10.0) + future = self.monitor.takeoff_drone(drone_id, 25.0) loop.create_task(self.handle_service_response(future, f"批次起飛 {drone_id}")) # ================================================================================ @@ -2313,7 +2313,7 @@ class ControlStationUI(QMainWindow): _log("INFO", f"地圖點擊: {lat:.6f}, {lon:.6f} -> Group {group.group_id} ({group.mission_type})") panel = self.group_panels.get(group.group_id) params = panel.get_mission_params() if panel else {} - base_alt = params.get('base_altitude', params.get('altitude', 10.0)) + base_alt = params.get('base_altitude', params.get('altitude', 25.0)) target_gps = (lat, lon, base_alt) self.statusBar().showMessage( f"Group {group.group_id}: 正在規劃 {group.mission_type} ({len(selected_drones)} 台)", 2000) @@ -2365,7 +2365,7 @@ class ControlStationUI(QMainWindow): panel = self.group_panels.get(group.group_id) params = panel.get_mission_params() if panel else {} - base_alt = params.get('altitude', 10.0) + base_alt = params.get('altitude', 25.0) self.statusBar().showMessage( f"Group {group.group_id}: 正在規劃 Grid Sweep ({len(selected_drones)} 台)", 2000) drone_gps_positions = self._collect_drone_gps(selected_drones) @@ -2426,7 +2426,7 @@ class ControlStationUI(QMainWindow): panel = self.group_panels.get(group.group_id) params = panel.get_mission_params() if panel else {} - base_alt = params.get('altitude', 10.0) + base_alt = params.get('altitude', 25.0) self.statusBar().showMessage( f"Group {group.group_id}: 正在規劃跟隨模式 ({len(selected_drones)} 台)", 2000) diff --git a/src/GUI/mission_group.py b/src/GUI/mission_group.py index d7d766d..9ffc30e 100644 --- a/src/GUI/mission_group.py +++ b/src/GUI/mission_group.py @@ -24,10 +24,10 @@ GROUP_COLORS = [ DEFAULT_MISSION_PARAM_VALUES = { 'spacing': '5.0', - 'base_altitude': '10.0', + 'base_altitude': '25.0', 'altitude_diff': '2.0', 'radius': '10.0', - 'altitude': '10.0', + 'altitude': '25.0', 'start_angle': '0', 'lateral_offset': '3.0', 'longitudinal_spacing': '5.0', @@ -249,8 +249,8 @@ class GroupPanel(QWidget): takeoff_row.setSpacing(3) self.alt_input = QComboBox() self.alt_input.setEditable(True) - self.alt_input.addItems(["5", "10", "15", "20"]) - self.alt_input.setCurrentText("10") + self.alt_input.addItems(["5", "10", "15", "20", "25"]) + self.alt_input.setCurrentText("25") self.alt_input.setStyleSheet(COMBO) alt_lbl = QLabel("m") alt_lbl.setStyleSheet(LBL) @@ -679,5 +679,5 @@ class GroupPanel(QWidget): try: alt = float(self.alt_input.currentText()) except ValueError: - alt = 10.0 + alt = 25.0 self.takeoff_requested.emit(self.group.group_id, alt) diff --git a/src/GUI/mission_orchestrator.py b/src/GUI/mission_orchestrator.py index 17e5a7d..a62fc3d 100644 --- a/src/GUI/mission_orchestrator.py +++ b/src/GUI/mission_orchestrator.py @@ -67,7 +67,7 @@ DEFAULT_REPLAN_CAP_SEC = 1.0 # 重算週期上限 (s) DEFAULT_CIRCLE_RADIUS = 10.0 # 包圍半徑 (m) DEFAULT_LON_SPACING = 5.0 # 隊形縱向間距 (m) DEFAULT_LAT_OFFSET = 3.0 # 隊形橫向錯開 (m) -DEFAULT_FORMATION_ALT = 10.0 # 隊形基準高度 (m,相對 home) +DEFAULT_FORMATION_ALT = 25.0 # 隊形基準高度 (m,相對 home) DEFAULT_ALT_LAYER_GAP = 6.0 # A/B 上下層垂直間隔 (m):A=基準+gap/2、B=基準-gap/2 DEFAULT_MIN_ALT_FLOOR = 5.0 # 相對 home 的最低安全高度 (m):B 下層不得低於此值 DEFAULT_LEAD_TIME_CAP = 4.0 # 前置攔截 lead_time 上限 (s) diff --git a/src/GUI/mission_planner.py b/src/GUI/mission_planner.py index 7530356..9931f69 100644 --- a/src/GUI/mission_planner.py +++ b/src/GUI/mission_planner.py @@ -58,7 +58,7 @@ class FormationPlanner: """隊形規劃器""" def __init__(self, spacing: float = 5.0, - base_altitude: float = 10.0, + base_altitude: float = 25.0, altitude_diff: float = 2.0): self.spacing = spacing self.base_altitude = base_altitude @@ -179,7 +179,7 @@ class FormationPlanner: params = params or {} N = len(drone_positions) radius = params.get('radius', 10.0) - altitude = params.get('altitude', 10.0) + altitude = params.get('altitude', 25.0) start_angle = params.get('start_angle', 0.0) center_x, center_y, center_z = target_point @@ -547,4 +547,4 @@ if __name__ == "__main__": ) print(f"\nGrid Sweep:") for i, wp_list in enumerate(wps2): - print(f" Drone {i}: {len(wp_list)} waypoints") \ No newline at end of file + print(f" Drone {i}: {len(wp_list)} waypoints")