Update master with local 2.0.5

ken
ken910606 4 weeks ago
parent 7ae4c56f86
commit 2c38376f9c

@ -602,7 +602,7 @@ class DroneMonitor(Node):
# ================================================================================
async def set_mode(self, drone_id, mode_name):
"""使用 CommandLongClient 切換無人機飛行模式"""
"""使用 CommandLongClient 切換無人機飛行模式(使用非阻塞的 async 方法)"""
try:
# 解析 drone_id 提取 sysid
parts = drone_id.split('_')
@ -619,30 +619,24 @@ class DroneMonitor(Node):
print(f"\n📢 [SET_MODE] {drone_id}{mode_name} (custom_mode={custom_mode})")
# 在線程池中調用 CommandLongClient
loop = asyncio.get_event_loop()
executor = ThreadPoolExecutor(max_workers=1)
def _call_set_mode():
client = CommandLongClient() if CommandLongClient else None
if not client:
return False
result = client.change_mode(
target_sysid=sysid,
custom_mode=float(custom_mode),
target_compid=0,
base_mode=1.0,
timeout_sec=2.0,
)
client.destroy_node()
return result.success if result else False
result = await loop.run_in_executor(executor, _call_set_mode)
if result:
if not self.command_long_client:
print(f"❌ [SET_MODE] CommandLongClient 未初始化")
return False
# 直接調用 async 方法,無需線程池(避免嵌套執行器衝突)
result = await self.command_long_client.change_mode_async(
target_sysid=sysid,
custom_mode=float(custom_mode),
target_compid=0,
base_mode=1.0,
timeout_sec=2.0,
)
if result and result.success:
print(f"✅ [SET_MODE] 模式切換成功")
return True
else:
print(f"❌ [SET_MODE] 模式切換失敗")
print(f"❌ [SET_MODE] 模式切換失敗 (message={result.message if result else 'None'})")
return False
except Exception as e:
print(f"❌ [SET_MODE] 例外錯誤: {e}")

@ -33,7 +33,7 @@ from mission_group import (
# ================================================================================
class ControlStationUI(QMainWindow):
VERSION = '2.0.4'
VERSION = '2.0.5'
def __init__(self):
super().__init__()

Loading…
Cancel
Save