Compare commits

..

No commits in common. 'd15c2d0a2d2fbd14064ee424c0d6de6623fdf0de' and '32aa4894625d487ed73f1a8bb59138318947aa8b' have entirely different histories.

5
.gitignore vendored

@ -32,8 +32,3 @@ CLAUDE.md
my_env_notes.md my_env_notes.md
notes/ notes/
**/eeprom.bin **/eeprom.bin
# MAVProxy / SITL 執行產生的 log 與參數 dump
*.tlog
*.tlog.raw
mav.parm

@ -1998,7 +1998,7 @@ class ControlStationUI(QMainWindow):
self.statusBar().showMessage( self.statusBar().showMessage(
f"Group {group.group_id}: 正在規劃 {group.mission_type} ({len(selected_drones)} 台)", 2000) f"Group {group.group_id}: 正在規劃 {group.mission_type} ({len(selected_drones)} 台)", 2000)
drone_gps_positions = self._collect_drone_gps(selected_drones) drone_gps_positions = self._collect_drone_gps(selected_drones, base_alt)
if drone_gps_positions is None: if drone_gps_positions is None:
return return
@ -2044,7 +2044,7 @@ class ControlStationUI(QMainWindow):
base_alt = params.get('altitude', 10.0) base_alt = params.get('altitude', 10.0)
self.statusBar().showMessage( self.statusBar().showMessage(
f"Group {group.group_id}: 正在規劃 Grid Sweep ({len(selected_drones)} 台)", 2000) f"Group {group.group_id}: 正在規劃 Grid Sweep ({len(selected_drones)} 台)", 2000)
drone_gps_positions = self._collect_drone_gps(selected_drones) drone_gps_positions = self._collect_drone_gps(selected_drones, base_alt)
if drone_gps_positions is None: if drone_gps_positions is None:
return return
@ -2106,7 +2106,7 @@ class ControlStationUI(QMainWindow):
self.statusBar().showMessage( self.statusBar().showMessage(
f"Group {group.group_id}: 正在規劃跟隨模式 ({len(selected_drones)} 台)", 2000) f"Group {group.group_id}: 正在規劃跟隨模式 ({len(selected_drones)} 台)", 2000)
drone_gps_positions = self._collect_drone_gps(selected_drones) drone_gps_positions = self._collect_drone_gps(selected_drones, base_alt)
if drone_gps_positions is None: if drone_gps_positions is None:
return return
@ -2154,20 +2154,18 @@ class ControlStationUI(QMainWindow):
# 輔助方法 # 輔助方法
# ================================================================================ # ================================================================================
def _collect_drone_gps(self, selected_drones): def _collect_drone_gps(self, selected_drones, base_alt):
# 只收集無人機的水平位置 (lat/lon);高度固定填 0.0 當 placeholder。
# 各任務的指令高度一律取自 mission paramsbase_altitude/altitude不依賴無人機
# 回報的當下高度,因此這裡的 z 不是規劃輸入planner 與驗證視窗都會忽略它。
drone_gps_positions = [] drone_gps_positions = []
for drone_id in selected_drones: for drone_id in selected_drones:
if hasattr(self.monitor, 'drone_gps') and drone_id in self.monitor.drone_gps: if hasattr(self.monitor, 'drone_gps') and drone_id in self.monitor.drone_gps:
gps_data = self.monitor.drone_gps[drone_id] gps_data = self.monitor.drone_gps[drone_id]
drone_gps_positions.append((gps_data['lat'], gps_data['lon'], 0.0)) drone_gps_positions.append((gps_data['lat'], gps_data['lon'], gps_data.get('alt', base_alt)))
elif drone_id in self.drone_positions: elif drone_id in self.drone_positions:
pos = self.drone_positions[drone_id] pos = self.drone_positions[drone_id]
lat_drone = 24.0 + pos[1] / 111000 lat_drone = 24.0 + pos[1] / 111000
lon_drone = 120.0 + pos[0] / (111000 * 0.9) lon_drone = 120.0 + pos[0] / (111000 * 0.9)
drone_gps_positions.append((lat_drone, lon_drone, 0.0)) alt_drone = pos[2] if len(pos) > 2 else base_alt
drone_gps_positions.append((lat_drone, lon_drone, alt_drone))
else: else:
self.statusBar().showMessage(f"找不到 {drone_id} 的位置資料", 3000) self.statusBar().showMessage(f"找不到 {drone_id} 的位置資料", 3000)
return None return None
@ -2413,6 +2411,7 @@ class ControlStationUI(QMainWindow):
lat, lon = gps_data.get('lat', 0), gps_data.get('lon', 0) lat, lon = gps_data.get('lat', 0), gps_data.get('lon', 0)
self.drone_positions[drone_id] = (lat, lon) self.drone_positions[drone_id] = (lat, lon)
self._map_dirty_drones.add(drone_id) self._map_dirty_drones.add(drone_id)
alt = gps_data.get('alt', 0)
if not hasattr(self.monitor, 'drone_gps'): if not hasattr(self.monitor, 'drone_gps'):
self.monitor.drone_gps = {} self.monitor.drone_gps = {}
self.monitor.drone_gps[drone_id] = gps_data.copy() self.monitor.drone_gps[drone_id] = gps_data.copy()

Loading…
Cancel
Save