2.8.2 grid mission
This commit is contained in:
+6
-6
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
print(f" Drone {i}: {len(wp_list)} waypoints")
|
||||
|
||||
Reference in New Issue
Block a user