From ae984ecad4a0aa9eaacb94b1aa58188b26a85582 Mon Sep 17 00:00:00 2001 From: wenchun Date: Tue, 9 Jun 2026 19:05:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor(GUI):=20=E7=A7=BB=E9=99=A4=E8=A6=8F?= =?UTF-8?q?=E5=8A=83=E8=B7=AF=E5=BE=91=E7=9A=84=E6=AD=BB=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=86=8D=E6=8A=8A=20GNSS=20=E7=B5=95?= =?UTF-8?q?=E5=B0=8D=E9=AB=98=E5=BA=A6=E9=A4=B5=E9=80=B2=E8=A6=8F=E5=8A=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _collect_drone_gps 原本把 drone_gps['alt'](GNSS AMSL)放進規劃輸入的 z, 但四種任務的指令高度一律取自 mission params,從不讀飛機回報的當下高度, planner 與驗證視窗也都丟棄該 z。改填 0.0 placeholder、移除沒用的 base_alt 參數,讓「高度非規劃輸入」語意明確化;並移除 gps 更新路徑未使用的 alt 變數。 行為不變,SITL 四模式驗證通過。 Co-Authored-By: Claude Opus 4.8 --- src/GUI/gui.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/GUI/gui.py b/src/GUI/gui.py index ec7283a..1b72e67 100644 --- a/src/GUI/gui.py +++ b/src/GUI/gui.py @@ -1998,7 +1998,7 @@ class ControlStationUI(QMainWindow): self.statusBar().showMessage( f"Group {group.group_id}: 正在規劃 {group.mission_type} ({len(selected_drones)} 台)", 2000) - drone_gps_positions = self._collect_drone_gps(selected_drones, base_alt) + drone_gps_positions = self._collect_drone_gps(selected_drones) if drone_gps_positions is None: return @@ -2044,7 +2044,7 @@ class ControlStationUI(QMainWindow): base_alt = params.get('altitude', 10.0) self.statusBar().showMessage( f"Group {group.group_id}: 正在規劃 Grid Sweep ({len(selected_drones)} 台)", 2000) - drone_gps_positions = self._collect_drone_gps(selected_drones, base_alt) + drone_gps_positions = self._collect_drone_gps(selected_drones) if drone_gps_positions is None: return @@ -2106,7 +2106,7 @@ class ControlStationUI(QMainWindow): self.statusBar().showMessage( f"Group {group.group_id}: 正在規劃跟隨模式 ({len(selected_drones)} 台)", 2000) - drone_gps_positions = self._collect_drone_gps(selected_drones, base_alt) + drone_gps_positions = self._collect_drone_gps(selected_drones) if drone_gps_positions is None: return @@ -2154,18 +2154,20 @@ class ControlStationUI(QMainWindow): # 輔助方法 # ================================================================================ - def _collect_drone_gps(self, selected_drones, base_alt): + def _collect_drone_gps(self, selected_drones): + # 只收集無人機的水平位置 (lat/lon);高度固定填 0.0 當 placeholder。 + # 各任務的指令高度一律取自 mission params(base_altitude/altitude),不依賴無人機 + # 回報的當下高度,因此這裡的 z 不是規劃輸入,planner 與驗證視窗都會忽略它。 drone_gps_positions = [] for drone_id in selected_drones: if hasattr(self.monitor, 'drone_gps') and drone_id in self.monitor.drone_gps: gps_data = self.monitor.drone_gps[drone_id] - drone_gps_positions.append((gps_data['lat'], gps_data['lon'], gps_data.get('alt', base_alt))) + drone_gps_positions.append((gps_data['lat'], gps_data['lon'], 0.0)) elif drone_id in self.drone_positions: pos = self.drone_positions[drone_id] lat_drone = 24.0 + pos[1] / 111000 lon_drone = 120.0 + pos[0] / (111000 * 0.9) - alt_drone = pos[2] if len(pos) > 2 else base_alt - drone_gps_positions.append((lat_drone, lon_drone, alt_drone)) + drone_gps_positions.append((lat_drone, lon_drone, 0.0)) else: self.statusBar().showMessage(f"找不到 {drone_id} 的位置資料", 3000) return None @@ -2411,7 +2413,6 @@ class ControlStationUI(QMainWindow): lat, lon = gps_data.get('lat', 0), gps_data.get('lon', 0) self.drone_positions[drone_id] = (lat, lon) self._map_dirty_drones.add(drone_id) - alt = gps_data.get('alt', 0) if not hasattr(self.monitor, 'drone_gps'): self.monitor.drone_gps = {} self.monitor.drone_gps[drone_id] = gps_data.copy()