forked from chiyu1468/AirTrapMine
Update GUI 2.0.1 from local
This commit is contained in:
+19
-11
@@ -1733,30 +1733,38 @@ def main():
|
||||
|
||||
這樣可以確保所有 ROS2 相關操作都共享同一個初始化狀態
|
||||
"""
|
||||
# 第一步:在最外層只初始化一次 ROS2
|
||||
print("🚀 [GUI] 初始化 ROS2...", flush=True)
|
||||
rclpy.init()
|
||||
print("✓ [GUI] ROS2 初始化完成", flush=True)
|
||||
# 第一步:在最外層只初始化一次 ROS2(終極防護)
|
||||
# 添加 rclpy.ok() 檢查,防止重複初始化導致 "Context.init() must only be called once" 錯誤
|
||||
print("🚀 [GUI 主程式] 檢查 ROS2 初始化狀態...", flush=True)
|
||||
if not rclpy.ok():
|
||||
print("🚀 [GUI 主程式] ROS2 未初始化,開始初始化...", flush=True)
|
||||
rclpy.init()
|
||||
print("✅ [GUI 主程式] ROS2 已全局初始化(由 GUI 主程式霸佔)", flush=True)
|
||||
else:
|
||||
print("ℹ️ [GUI 主程式] ROS2 已初始化,跳過重複初始化", flush=True)
|
||||
|
||||
try:
|
||||
# 第二步:啟動 Qt 應用程式
|
||||
print("🚀 [GUI] 啟動 Qt 應用程式...", flush=True)
|
||||
print("🚀 [GUI 主程式] 啟動 Qt 應用程式...", flush=True)
|
||||
app = QApplication(sys.argv)
|
||||
station = ControlStationUI()
|
||||
station.show()
|
||||
print("✓ [GUI] 應用程式已啟動", flush=True)
|
||||
print("✓ [GUI 主程式] 應用程式已啟動", flush=True)
|
||||
|
||||
# 第三步:進入 Qt 事件循環(阻塞直到用戶關閉應用)
|
||||
print("🎯 [GUI] 進入主事件循環,等待用戶操作...", flush=True)
|
||||
print("🎯 [GUI 主程式] 進入主事件循環,等待用戶操作...", flush=True)
|
||||
sys.exit(app.exec())
|
||||
|
||||
finally:
|
||||
# 第四步:只有當 GUI 視窗被關閉時,才做 ROS2 cleanup
|
||||
print("\n🛑 [GUI] 應用程式關閉,正在清理 ROS2 資源...", flush=True)
|
||||
# 第四步:只有當 GUI 視窗被關閉時,才做 ROS2 cleanup(終極防護)
|
||||
# 這裡確保 ROS2 被正確且安全地關閉
|
||||
print("\n🛑 [GUI 主程式] 應用程式關閉,正在清理 ROS2 資源...", flush=True)
|
||||
if rclpy.ok():
|
||||
rclpy.shutdown()
|
||||
print("✓ [GUI] ROS2 已關閉", flush=True)
|
||||
print("✓ [GUI] 應用程式完全退出", flush=True)
|
||||
print("✓ [GUI 主程式] ROS2 已安全關閉", flush=True)
|
||||
else:
|
||||
print("ℹ️ [GUI 主程式] ROS2 已關閉或不可用,無需重複 shutdown", flush=True)
|
||||
print("✓ [GUI 主程式] 應用程式完全退出", flush=True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user