from typing import List from device import controller from tools.base_tool import BaseTool, ToolResult from uas.uas_control.command import CommandResult class Tool(BaseTool): name = "uav_control" description = ( "该工具用于对无人系统进行控制并在飞行控制中完成一系列的活动(Action),例如起飞、移动、悬停、照相等" ) parameters = { "type": "object", "properties": { "command": { "type": "string", "description": "无人系统飞行控制命令,例如arm、disarm、takeoff、rtl、goto等", }, "params": { "type": "object", "description": "控制命令参数" }, "actions": { "type": "array", "description": "过程中执行的一些列的动作,例如pause、capture_phone、standby等" } }, "required": ["command"], } def execute(self, command: str, params: dict={}, actions: List[object]=()) -> ToolResult: if not controller.is_connected: if not controller.connect(): return ToolResult(success=False, output="连接无人机失败") command_handler = getattr(controller, command) try: 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))