forked from chiyu1468/AirTrapMine
Update GUI 2.0.1 from local
This commit is contained in:
+11
-6
@@ -12,6 +12,7 @@ import asyncio
|
|||||||
import json
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
# 導入分離的類別
|
# 導入分離的類別
|
||||||
from communication import DroneMonitor, UDPMavlinkReceiver, WebSocketMavlinkReceiver
|
from communication import DroneMonitor, UDPMavlinkReceiver, WebSocketMavlinkReceiver
|
||||||
@@ -379,6 +380,8 @@ class ControlStationUI(QMainWindow):
|
|||||||
status_label.setToolTip("運行中")
|
status_label.setToolTip("運行中")
|
||||||
self.statusBar().showMessage(f"已啟動 Serial 連接: {conn['port']}", 3000)
|
self.statusBar().showMessage(f"已啟動 Serial 連接: {conn['port']}", 3000)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
print(f"❌ Serial 連接啟動失敗: {str(e)}")
|
||||||
|
traceback.print_exc()
|
||||||
self.statusBar().showMessage(f"啟動 Serial 連接失敗: {str(e)}", 5000)
|
self.statusBar().showMessage(f"啟動 Serial 連接失敗: {str(e)}", 5000)
|
||||||
|
|
||||||
def remove_serial_connection(self, conn, panel):
|
def remove_serial_connection(self, conn, panel):
|
||||||
@@ -496,7 +499,6 @@ class ControlStationUI(QMainWindow):
|
|||||||
print(f"⚠️ {action} 被取消")
|
print(f"⚠️ {action} 被取消")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ {action} 錯誤: {str(e)}")
|
print(f"❌ {action} 錯誤: {str(e)}")
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
self.statusBar().showMessage(f"{action} 錯誤: {str(e)}", 3000)
|
self.statusBar().showMessage(f"{action} 錯誤: {str(e)}", 3000)
|
||||||
|
|
||||||
@@ -798,12 +800,12 @@ class ControlStationUI(QMainWindow):
|
|||||||
except Exception as service_error:
|
except Exception as service_error:
|
||||||
msg = f"❌ {drone_id} 服務調用錯誤: {str(service_error)}"
|
msg = f"❌ {drone_id} 服務調用錯誤: {str(service_error)}"
|
||||||
print(f" {msg}", flush=True)
|
print(f" {msg}", flush=True)
|
||||||
|
traceback.print_exc()
|
||||||
self.message_queue.put((msg, 2000))
|
self.message_queue.put((msg, 2000))
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
msg = f"❌ {drone_id} 錯誤: {str(e)}"
|
msg = f"❌ {drone_id} 錯誤: {str(e)}"
|
||||||
print(f" {msg}", flush=True)
|
print(f" {msg}", flush=True)
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
self.message_queue.put((msg, 2000))
|
self.message_queue.put((msg, 2000))
|
||||||
self.message_queue.put((msg, 2000))
|
self.message_queue.put((msg, 2000))
|
||||||
@@ -1229,7 +1231,6 @@ class ControlStationUI(QMainWindow):
|
|||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.statusBar().showMessage(f"❌ Group {group.group_id}: 規劃失敗: {str(e)}", 5000)
|
self.statusBar().showMessage(f"❌ Group {group.group_id}: 規劃失敗: {str(e)}", 5000)
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
# ================================================================================
|
# ================================================================================
|
||||||
@@ -1301,7 +1302,6 @@ class ControlStationUI(QMainWindow):
|
|||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.statusBar().showMessage(f"❌ Group {group.group_id}: Grid Sweep 規劃失敗: {str(e)}", 5000)
|
self.statusBar().showMessage(f"❌ Group {group.group_id}: Grid Sweep 規劃失敗: {str(e)}", 5000)
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
# ================================================================================
|
# ================================================================================
|
||||||
@@ -1381,7 +1381,6 @@ class ControlStationUI(QMainWindow):
|
|||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.statusBar().showMessage(f"❌ Group {group.group_id}: 跟隨模式規劃失敗: {str(e)}", 5000)
|
self.statusBar().showMessage(f"❌ Group {group.group_id}: 跟隨模式規劃失敗: {str(e)}", 5000)
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
# ================================================================================
|
# ================================================================================
|
||||||
@@ -1663,6 +1662,7 @@ class ControlStationUI(QMainWindow):
|
|||||||
break
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ 消息隊列處理錯誤: {e}", flush=True)
|
print(f"❌ 消息隊列處理錯誤: {e}", flush=True)
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
def _spin_asyncio(self):
|
def _spin_asyncio(self):
|
||||||
"""驅動 asyncio 事件循環,允許異步任務執行
|
"""驅動 asyncio 事件循環,允許異步任務執行
|
||||||
@@ -1678,7 +1678,8 @@ class ControlStationUI(QMainWindow):
|
|||||||
loop.run_until_complete(asyncio.sleep(0))
|
loop.run_until_complete(asyncio.sleep(0))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# 靜默忽略任何錯誤,防止 Qt 定時器出現異常
|
# 靜默忽略任何錯誤,防止 Qt 定時器出現異常
|
||||||
pass
|
# 但仍然打印詳細的堆棧跟踪以便調試
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
def spin_ros(self):
|
def spin_ros(self):
|
||||||
try:
|
try:
|
||||||
@@ -1694,8 +1695,10 @@ class ControlStationUI(QMainWindow):
|
|||||||
print(f"⚠️ ROS2 context 錯誤(忽略): {e}", flush=True)
|
print(f"⚠️ ROS2 context 錯誤(忽略): {e}", flush=True)
|
||||||
else:
|
else:
|
||||||
print(f"ROS spin error: {e}", flush=True)
|
print(f"ROS spin error: {e}", flush=True)
|
||||||
|
traceback.print_exc()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"ROS spin error: {e}", flush=True)
|
print(f"ROS spin error: {e}", flush=True)
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
try:
|
try:
|
||||||
@@ -1711,6 +1714,7 @@ class ControlStationUI(QMainWindow):
|
|||||||
self.executor.shutdown()
|
self.executor.shutdown()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"⚠️ 清理資源時出錯: {e}", flush=True)
|
print(f"⚠️ 清理資源時出錯: {e}", flush=True)
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
# 安全地 shutdown ROS2
|
# 安全地 shutdown ROS2
|
||||||
try:
|
try:
|
||||||
@@ -1718,6 +1722,7 @@ class ControlStationUI(QMainWindow):
|
|||||||
rclpy.shutdown()
|
rclpy.shutdown()
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
print(f"⚠️ ROS2 shutdown 錯誤: {e}", flush=True)
|
print(f"⚠️ ROS2 shutdown 錯誤: {e}", flush=True)
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
event.accept()
|
event.accept()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user