From 0117e2ad826ee17788fc1512d17bb1ee4c7c9f9c Mon Sep 17 00:00:00 2001 From: sontolau Date: Tue, 16 Jun 2026 10:54:12 +0800 Subject: [PATCH] in dev --- tools/uav_control.py | 21 +++++++++++---------- tools/uav_get_state.py | 10 +++++----- tools/uav_self_check.py | 8 ++++---- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/tools/uav_control.py b/tools/uav_control.py index fcd6253..1d24d0f 100644 --- a/tools/uav_control.py +++ b/tools/uav_control.py @@ -1,7 +1,7 @@ from typing import List from agent.device import controller from agent.tools.base_tool import BaseTool, ToolResult - +from core.uas_control.command import CommandResult class Tool(BaseTool): @@ -30,13 +30,14 @@ class Tool(BaseTool): def execute(self, command: str, params: dict={}, actions: List[object]=()) -> ToolResult: - if not controller.connect(): - return ToolResult(success=False, output="连接无人机失败") + if not controller.is_connected: + if not controller.connect(): + return ToolResult(success=False, output="连接无人机失败") + command_handler = getattr(controller, command) try: - command_handler = getattr(controller, command) - try: - return ToolResult(success=True, output=str(command_handler(**params))) - except Exception as e: - return ToolResult(success=False, output=str(e)) - finally: - controller.disconnect() \ No newline at end of file + result = command_handler(**params) + assert isinstance(result, CommandResult) + + return ToolResult(success=result.success, output=result.message) + except Exception as e: + return ToolResult(success=False, output=str(e)) diff --git a/tools/uav_get_state.py b/tools/uav_get_state.py index f5de66e..d5825ef 100644 --- a/tools/uav_get_state.py +++ b/tools/uav_get_state.py @@ -27,11 +27,11 @@ class Tool(BaseTool): } def execute(self) -> ToolResult: - if not controller.connect(): - return ToolResult(success=False, output="连接无人机失败") + if not controller.is_connected: + if not controller.connect(): + return ToolResult(success=False, output="连接无人机失败") try: telemetry = controller.get_telemetry() return ToolResult(success=True, output=json.dumps(telemetry.to_dict(), ensure_ascii=True)) - finally: - controller.disconnect() - + except Exception as e: + return ToolResult(success=False, output=str(e)) diff --git a/tools/uav_self_check.py b/tools/uav_self_check.py index 1efd5eb..15706b2 100644 --- a/tools/uav_self_check.py +++ b/tools/uav_self_check.py @@ -17,8 +17,10 @@ class Tool(BaseTool): 解决:Arming denied: Resolve system health failures first """ # 等待健康数据 + if not controller.is_connected: + if not controller.connect(): + return ToolResult(success=False, output="连接设备失败") - assert controller.connect(), "连接应成功" try: connection = controller.adapter.get_connection() check_list = [] @@ -118,6 +120,4 @@ class Tool(BaseTool): return ToolResult(success=True, output="\n".join(check_list)) except Exception as e: - return ToolResult(success=False, output=str(e)) - finally: - controller.disconnect() \ No newline at end of file + return ToolResult(success=False, output=str(e)) \ No newline at end of file