Update GUI 2.0.1 from local

chiyu
ken910606 1 month ago
parent cb58ba2121
commit a303a3538e

@ -1733,30 +1733,38 @@ def main():
這樣可以確保所有 ROS2 相關操作都共享同一個初始化狀態 這樣可以確保所有 ROS2 相關操作都共享同一個初始化狀態
""" """
# 第一步:在最外層只初始化一次 ROS2 # 第一步:在最外層只初始化一次 ROS2終極防護
print("🚀 [GUI] 初始化 ROS2...", flush=True) # 添加 rclpy.ok() 檢查,防止重複初始化導致 "Context.init() must only be called once" 錯誤
rclpy.init() print("🚀 [GUI 主程式] 檢查 ROS2 初始化狀態...", flush=True)
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: try:
# 第二步:啟動 Qt 應用程式 # 第二步:啟動 Qt 應用程式
print("🚀 [GUI] 啟動 Qt 應用程式...", flush=True) print("🚀 [GUI 主程式] 啟動 Qt 應用程式...", flush=True)
app = QApplication(sys.argv) app = QApplication(sys.argv)
station = ControlStationUI() station = ControlStationUI()
station.show() station.show()
print("✓ [GUI] 應用程式已啟動", flush=True) print("✓ [GUI 主程式] 應用程式已啟動", flush=True)
# 第三步:進入 Qt 事件循環(阻塞直到用戶關閉應用) # 第三步:進入 Qt 事件循環(阻塞直到用戶關閉應用)
print("🎯 [GUI] 進入主事件循環,等待用戶操作...", flush=True) print("🎯 [GUI 主程式] 進入主事件循環,等待用戶操作...", flush=True)
sys.exit(app.exec()) sys.exit(app.exec())
finally: finally:
# 第四步:只有當 GUI 視窗被關閉時,才做 ROS2 cleanup # 第四步:只有當 GUI 視窗被關閉時,才做 ROS2 cleanup終極防護
print("\n🛑 [GUI] 應用程式關閉,正在清理 ROS2 資源...", flush=True) # 這裡確保 ROS2 被正確且安全地關閉
print("\n🛑 [GUI 主程式] 應用程式關閉,正在清理 ROS2 資源...", flush=True)
if rclpy.ok(): if rclpy.ok():
rclpy.shutdown() rclpy.shutdown()
print("✓ [GUI] ROS2 已關閉", flush=True) print("✓ [GUI 主程式] ROS2 已安全關閉", flush=True)
print("✓ [GUI] 應用程式完全退出", flush=True) else:
print(" [GUI 主程式] ROS2 已關閉或不可用,無需重複 shutdown", flush=True)
print("✓ [GUI 主程式] 應用程式完全退出", flush=True)
if __name__ == '__main__': if __name__ == '__main__':

Loading…
Cancel
Save