{ "timestamp": "2026-02-03T22:57:37.553450", "request": "无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。", "response": { "root": { "type": "Sequence", "name": "MainTask", "children": [ { "type": "action", "name": "fly_to_waypoint", "params": { "x": -50.0, "y": 0.0, "z": 0.0 } }, { "type": "Parallel", "name": "MonitorAndPhoto", "params": { "policy": "success_on_one" }, "children": [ { "type": "action", "name": "loiter", "params": { "duration": 300 } }, { "type": "decorator", "name": "SuccessIsFailure", "child": { "type": "Sequence", "name": "CheckAndPhoto", "children": [ { "type": "action", "name": "object_detect", "params": { "target_class": "person" } }, { "type": "condition", "name": "object_detected", "params": { "target_class": "person" } }, { "type": "action", "name": "take_photos", "params": { "target_class": "person" } } ] } } ] }, { "type": "action", "name": "return_emergency", "params": { "reason": "任务完成" } } ] }, "plan_id": "f54dd51c-b9f5-4a9a-802f-941bba44ca12", "visualization_url": "/static/py_tree.png", "final_prompt": "=== System Prompt ===\n任务:根据用户任意任务指令,生成结构化可执行的无人机行为树(Pytree)JSON。**仅输出单一JSON对象,无任何自然语言、注释或额外内容**。\n\n## 一、核心节点定义(格式不可修改,确保后端解析)\n#### 1. 可用节点定义 (必须遵守)\n你必须严格从以下JSON定义的列表中选择节点构建行为树,不允许使用未定义节点:\n```json\n{\n \"actions\": [\n {\n \"name\": \"takeoff\",\n \"params\": {\n \"altitude\": \"float[1,100],默认2\"\n }\n },\n {\n \"name\": \"land\",\n \"params\": {\n \"mode\": \"'current'/'home'\"\n }\n },\n {\n \"name\": \"fly_to_waypoint\",\n \"params\": {\n \"x\": \"±10000\",\n \"y\": \"±10000\",\n \"z\": \"[1,5000]\",\n \"acceptance_radius\": \"默认2.0\",\n \"desc\": \"仅当指令提及具体地点(如'去广场'、'去大门')或需计算明确坐标时使用\"\n }\n },\n {\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": \"list[dict] (e.g. [{'x':10,'y':20,'depth':5}, ...];depth可选,不填则保持当前高度)\",\n \"coordinate_frame\": \"'global'/'local_enu'(global:经纬度, local_enu:以起飞点为原点的东南天坐标系)\",\n \"speed\": \"float,可选\"\n }\n },\n {\n \"name\": \"move_direction\",\n \"params\": {\n \"direction\": \"north/south/east/west/forward/backward/left/right\",\n \"distance\": \"[1,10000],缺省则持续移动\",\n \"speed\": \"float,可选\",\n \"desc\": \"当指令仅包含'往东/西...飞xx米'且无具体地点名词时,必须使用此节点\"\n }\n },\n {\n \"name\": \"approach_target\",\n \"params\": {\n \"target_class\": \"string,要趋近的目标类别\",\n \"description\": \"string,可选,目标属性描述\",\n \"stop_distance\": \"float,期望的最终停止距离\",\n \"speed\": \"float,可选,期望的逼近速度\"\n }\n },\n {\n \"name\": \"rotate\",\n \"params\": {\n \"angle\": \"float,无人机自身旋转角度(正数逆时针,负数顺时针)\",\n \"angular_velocity\": \"rad/s,旋转角速度\"\n }\n },\n {\n \"name\": \"rotate_search\",\n \"params\": {\n \"target_class\": \"同object_detect\",\n \"description\": \"string,可选,目标属性描述\",\n \"step_angle\": \"float,可选,每一步旋转的角度\",\n \"total_rotation\": \"float,可选,总共旋转搜索的角度\"\n }\n },\n {\n \"name\": \"manual_confirmation\",\n \"params\": {}\n },\n {\n \"name\": \"loiter\",\n \"params\": {\n \"duration\": \"[1,600]秒/until_condition:可选\"\n }\n },\n {\n \"name\": \"object_detect\",\n \"params\": {\n \"target_class\": \"person,bicycle,car,motorcycle,airplane,bus,train,truck,boat,traffic_light,fire_hydrant,stop_sign,parking_meter,bench,bird,cat,dog,horse,sheep,cow,elephant,bear,zebra,giraffe,backpack,umbrella,handbag,tie,suitcase,frisbee,skis,snowboard,sports_ball,kite,baseball_bat,baseball_glove,skateboard,surfboard,tennis_racket,bottle,wine_glass,cup,fork,knife,spoon,bowl,banana,apple,sandwich,orange,broccoli,carrot,hot_dog,pizza,donut,cake,chair,couch,potted_plant,bed,dining_table,toilet,tv,laptop,mouse,remote,keyboard,cell_phone,microwave,oven,toaster,sink,refrigerator,book,clock,vase,scissors,teddy_bear,hair_drier,toothbrush,garbage\",\n \"description\": \"可选,\",\n \"count\": \"默认1\"\n }\n },\n {\n \"name\": \"search_pattern\",\n \"params\": {\n \"pattern_type\": \"spiral/grid\",\n \"center_x\": \"±10000\",\n \"center_y\": \"±10000\",\n \"center_z\": \"[1,5000]\",\n \"radius\": \"[5,1000]\",\n \"target_class\": \"同object_detect\",\n \"description\": \"可选,目标属性\",\n \"count\": \"默认1\"\n }\n },\n {\n \"name\": \"track_object\",\n \"params\": {\n \"target_class\": \"同object_detect\",\n \"description\": \"可选,目标属性\",\n \"track_time\": \"[1,600]秒(必传,不可用'duration')\",\n \"min_confidence\": \"[0.5,1.0]默认0.7\",\n \"safe_distance\": \"[2,50]默认10\"\n }\n },\n {\n \"name\": \"deliver_payload\",\n \"params\": {\n \"payload_type\": \"string\",\n \"release_altitude\": \"[2,100]默认5\"\n }\n },\n {\n \"name\": \"system_checks\",\n \"params\": {\n \"check_level\": \"basic/comprehensive,只能在起飞takeoff节点前使用,空中无需使用该节点\"\n }\n },\n {\n \"name\": \"return_emergency\",\n \"params\": {\n \"reason\": \"string,此节点仅用于【无明确目的地】的立即返航(默认回起飞点)。若指令包含“回到xx地”、“去xx地”(即使包含“紧急”二字),**严禁**使用此节点,必须使用fly_to_waypoint\"\n }\n },\n {\n \"name\": \"take_photos\",\n \"params\": {\n \"target_class\": \"同object_detect\",\n \"description\": \"可选,目标属性\",\n \"track_time\": \"[1,600]秒(必传,不可用'duration')\",\n \"min_confidence\": \"[0.5,1.0]默认0.7\",\n \"safe_distance\": \"[2,50]默认10\"\n }\n }\n ],\n \"conditions\": [\n {\n \"name\": \"at_waypoint\",\n \"params\": {\n \"x\": \"±10000\",\n \"y\": \"±10000\",\n \"z\": \"[1,5000]\",\n \"tolerance\": \"默认3.0\"\n }\n },\n {\n \"name\": \"object_detected\",\n \"params\": {\n \"target_class\": \"同object_detect(必传)\",\n \"description\": \"可选,目标属性\",\n \"count\": \"默认1\"\n }\n }\n ],\n \"control_flow\": [\n {\n \"name\": \"Sequence\",\n \"params\": {},\n \"children\": \"子节点数组(按序执行,全成功则成功)\"\n },\n {\n \"name\": \"Selector\",\n \"params\": {\n \"memory\": \"默认true\"\n },\n \"children\": \"子节点数组(执行到成功为止)\"\n },\n {\n \"name\": \"Parallel\",\n \"params\": {\n \"policy\": \"all_success/success_on_one\"\n },\n \"children\": \"子节点数组(同时执行,默认all_success)\"\n }\n ],\n \"decorators\": [\n {\n \"name\": \"SuccessIsFailure\",\n \"params\": {},\n \"child\": \"单一子节点(将子节点的成功结果反转为失败)\"\n }\n ]\n}\n```\n\n## 二、节点必填字段(后端Schema强制要求,缺一验证失败)\n每个节点必须包含以下字段,字段名/类型不可自定义:\n1. **`type`**: \n - 动作节点→`\"action\"`,条件节点→`\"condition\"`,控制流节点→`\"Sequence\"`/`\"Selector\"`/`\"Parallel\"`,装饰器节点→`\"decorator\"`;\n2. **`name`**:必须是上述JSON中定义的`name`值;\n3. **`params`**:严格匹配上述节点的`params`定义,无自定义参数;\n4. **`children`**:仅控制流节点必含(子节点数组);\n5. **`child`**:仅装饰器节点必含(单一子节点对象,非数组)。\n\n## 三、标准任务结构模板(单次起降流程)\n当无人机在地面时,大多数任务应遵循“起飞 -> 移动 -> 条件判断 -> 执行 -> 返航/降落”的单次闭环流程,参考结构如下:\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"MainTask\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\"type\":\"action\",\"name\":\"fly_to_waypoint\",\"params\":{\"x\":100.0,\"y\":50.0,\"z\":10.0}}, // 接近目标区域\n // --- 核心任务区 (根据指令替换) ---\n // 默认不需要降落节点,除非用户明确要求\n ]\n }\n}\n```\n而当无人机在空中时,则无需system_checks与takeoff环节,直接执行用户任务即可\n\n## 四、场景示例(请灵活参考)\n\n#### 场景 1:线性搜索任务(Sequence + Selector)\n**指令**:“无人机当前在地面,去研究所正大门,搜索扎辫子女子,找到后拍照。”\n**思路**:无人机在地面,则需要先自检然后起飞;获取研究所正大门坐标,调用fly_to_waypoint节点到达该地;然后调用rotate_search节点搜索目标女子,再使用object_detected条件节点,这样就可以作为take_photos节点的依据。\n**结构**:Sequence (按顺序执行)\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"MainSearchTask\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\"type\":\"action\",\"name\":\"fly_to_waypoint\",\"params\":{\"x\":100.0,\"y\":50.0,\"z\":10.0}}, \n {\"type\":\"action\",\"name\":\"rotate_search\",\"params\":{\"target_class\":\"person\",\"description\":\"扎辫子女子\"}},\n {\n \"type\": \"Selector\",\n \"name\": \"CheckAndPhoto\",\n \"children\": [\n {\n \"type\": \"Sequence\",\n \"name\": \"PhotoIfFound\",\n \"children\": [\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"person\",\"description\":\"扎辫子女子\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"person\",\"description\":\"扎辫子女子\",\"track_time\":10.0}}\n ]\n },\n {\"type\":\"action\",\"name\":\"loiter\",\"params\":{\"duration\":5.0}} // 未发现时的备选动作\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 2:带中断逻辑的巡逻(Selector 示例)\n**指令**:“无人机当前在地面,飞往航点A。如果途中发现可疑人员,则悬停。”\n**参考知识**:航点A的坐标(x:100.0,y:50.0)\n**思路**:无人机在地面,则需要先自检然后起飞;获取航点A的坐标,调用fly_to_waypoint节点到达该地;但同时需要注意看到可疑人员需要悬停,意味着一边进行识别,识别到进行悬停,因此要在object_detect节点后有一个object_detected条件节点,作为悬停的条件。\n**结构**:\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"basic\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Selector\",\n \"name\": \"FlyOrDetect\",\n \"children\": [\n {\n \"type\": \"Sequence\", \n \"name\": \"InterruptionLogic\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"person\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"person\"}},\n {\"type\":\"action\",\"name\":\"loiter\",\"params\":{\"duration\":5.0}}\n ]\n },\n {\"type\":\"action\",\"name\":\"fly_to_waypoint\",\"params\":{\"x\":100.0,\"y\":50.0,\"z\":10.0}}\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 3:长期监控任务(Parallel 示例)\n**指令**:“无人机当前在空中,往广场西边飞200米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。”\n**参考知识**:广场西边200米的坐标(x:50.0,y:50.0,z:10.0)\n**思路**:无人机在空中,直接前往目标点;到达后需要并行执行两件事:1. 倒计时5分钟(主控时间);2. 持续检测人并拍照(从属任务)。\n使用`Parallel`节点并设置策略为`success_on_one`,这样当倒计时(loiter)结束返回成功时,整个并行节点就会成功结束,从而强制停止拍照循环。为了让拍照循环不提前结束Parallel,拍照分支使用`decorator`(SuccessIsFailure)或无限重试逻辑。\n**结构**:\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"MainTask\",\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_to_waypoint\",\n \"params\": {\n \"x\": 50.0,\n \"y\": 50.0,\n \"z\": 10.0\n }\n },\n {\n \"type\": \"Parallel\",\n \"name\": \"MonitorAndPhoto\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"loiter\",\n \"params\": {\n \"time\": 300\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"CheckAndPhoto\",\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"object_detect\",\n \"params\": {\n \"target_class\": \"person\"\n }\n },\n {\n \"type\": \"condition\",\n \"name\": \"object_detected\",\n \"params\": {\n \"target_class\": \"person\"\n }\n },\n {\n \"type\": \"action\",\n \"name\": \"take_photos\",\n \"params\": {\n \"target_class\": \"person\"\n }\n }\n ]\n }\n }\n ]\n },\n {\n \"type\": \"action\",\n \"name\": \"return_emergency\",\n \"params\": {\n \"reason\": \"任务完成\"\n }\n }\n ]\n }\n}\n```\n\n#### 场景 4:交互式确认任务(Sequence + Manual Confirmation)\n**指令**:“无人机当前在空中,搜索小汽车,搜索到了我确认后再决定要不要拍照。”\n**思路**:无人机已在空中,无需起飞,直接进行搜索。首先使用`rotate_search`主动搜索目标,配合`object_detected`条件节点确认目标是否被检测到。检测到后,执行`manual_confirmation`节点等待用户确认。只有用户确认通过(返回Success),才会继续执行后续的`take_photos`动作。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"SearchConfirmPhoto\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"rotate_search\",\"params\":{\"target_class\":\"car\",\"description\":\"小汽车\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"car\",\"description\":\"小汽车\"}},\n {\"type\":\"action\",\"name\":\"manual_confirmation\",\"params\":{}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"car\",\"description\":\"小汽车\"}}\n ]\n }\n}\n```\n\n#### 场景 5:后置确认任务(Sequence + Manual Confirmation)\n**指令**:“无人机当前在地面,搜索小汽车,搜索到了拍张照,我确认后再决定要不要返航”\n**思路**:无人机在地面,需起飞。搜索小汽车(`rotate_search` + `object_detected`)。搜索到后,先执行拍照(`take_photos`)。之后执行人工确认(`manual_confirmation`),确认通过后才执行返航(`return_emergency`)。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"SearchPhotoConfirmReturn\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\"type\":\"action\",\"name\":\"rotate_search\",\"params\":{\"target_class\":\"car\",\"description\":\"小汽车\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"car\",\"description\":\"小汽车\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"car\",\"description\":\"小汽车\"}},\n {\"type\":\"action\",\"name\":\"manual_confirmation\",\"params\":{}},\n {\"type\":\"action\",\"name\":\"return_emergency\",\"params\":{\"reason\":\"确认后返航\"}}\n ]\n }\n}\n```\n\n#### 场景 6:移动后条件降落(Sequence)\n**指令**:“无人机当前在空中,紧急回到广场,看见了红绿灯之后直接降落。”\n**参考知识**:广场坐标(x:0.0, y:0.0, z:10.0)\n**思路**:无人机在空中,无需起飞。首先飞往广场(`fly_to_waypoint`),严禁使用`return_emergency`。到达后,为了满足“看见红绿灯”的条件,必须先执行主动搜索(`rotate_search`)。一旦检测到红绿灯(`object_detected`),即执行降落(`land`)。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlySearchLand\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"fly_to_waypoint\",\"params\":{\"x\":0.0,\"y\":0.0,\"z\":10.0}},\n {\"type\":\"action\",\"name\":\"rotate_search\",\"params\":{\"target_class\":\"traffic_light\",\"description\":\"红绿灯\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"traffic_light\",\"description\":\"红绿灯\"}},\n {\"type\":\"action\",\"name\":\"land\",\"params\":{\"mode\":\"current\"}}\n ]\n }\n}\n```\n\n## 六、高频错误规避\n1. 控制流节点的 `type` 必须是 `\"Sequence\"`, `\"Selector\"` 或 `\"Parallel\"`\n2. **人工确认节点 (`manual_confirmation`) 使用原则**:\n - **必须添加**:仅当指令中明确包含“我确认”、“等待确认”、“经允许”、“我通过后”等人工介入关键词时,**必须**在相应动作前添加此节点。\n - **严禁添加**:若指令未提及上述关键词,**严禁**主动添加此节点(即使是拍照、返航或降落等动作,只要用户没说要确认,就直接执行)。\n3. 在条件节点 `object_detected` 执行前,必须先安排搜索类动作节点(优先使用 `rotate_search`,仅当需大范围移动时用 `search_pattern`),确保无人机主动寻找目标。\n4. 当使用rotate_search或者object_detect节点时,必须有object_detected节点\n5. 用户指令中要求在当前位置执行任务时,无需fly_to_waypoint节点\n6. **严格区分无人机状态**:当用户指令明确无人机在**空中**时,严禁使用system_checks与takeoff节点;仅当用户指令明确在**地面**时,才可使用这两个节点\n7. **重点关注**:fly_to_waypoint与return_emergency节点辨析:当指令包含具体目的地(如“紧急回到广场”、“飞回大门”)时,**必须**使用fly_to_waypoint节点,**绝对禁止**使用return_emergency节点(该节点仅用于无目的地的“返航”指令)。\n8. 当用户指令中提及“靠近”、“飞近”、“贴近”目标时,**必须**在`take_photos`之前使用`approach_target`节点;若未提及此类关键词,则**严禁**使用`approach_target`节点。\n9. **方向移动优先原则**:当指令为“快速去往东边100米”,直接使用 `move_direction` 节点+距离参数,严禁使用fly_to_waypoint\n10. **无地点名词禁止飞点**:当指令仅包含“方向 + 距离”且**没有具体地点名词**时,**无论无人机在地面或空中**,都必须使用 `move_direction`,严禁使用 `fly_to_waypoint` 或任何地点坐标。\n\n示例(必须遵守):\n- “无人机当前在地面,快速去往东边60米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。” → 必须使用 `move_direction`(east, 60),不得生成 `fly_to_waypoint` 或引用任何地点坐标。\n- “无人机当前在空中,快速去往东边60米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。” → 同样必须使用 `move_direction`(east, 60),不得生成 `fly_to_waypoint` 或引用任何地点坐标。\n\n## 七、坐标计算规则(东南天坐标系 ENU)\n本系统统一使用东南天(ENU)坐标系:\n- **X轴**:正方向为**东** (East),负方向为**西** (West)\n- **Y轴**:正方向为**南** (South)向为**北** (North)\n- **Z轴**:正方向为**天** (Up),负方向为**地** (Down)\n\n**仅当指令涉及前往“具体地点”(如广场、大门)的偏移位置时,才需计算绝对坐标并使用`fly_to_waypoint`:**\n\n当指令包含“具体地点 + 方向 + 距离”的偏移时,按方向类型选择工具:\n- **单一方向**(东/西/南/北/上/下,如“广场西边200米”):**必须**先调用工具`calc_offset_enu`计算绝对坐标,再使用`fly_to_waypoint`。工具参数:\n - `base`: 参考地点的ENU坐标(含x/y/z)\n - `direction`: east/west/north/south/up/down\n - `distance`: 偏移距离(米)\n- **中文复合方位**(东南/西北/东北/西南/南偏东10度/北偏西15度等):**必须**先调用工具`calc_offset_esu_direction_text`计算绝对坐标,再使用`fly_to_waypoint`。工具参数:\n - `base`: 参考地点的ENU坐标(含x/y/z)\n - `direction_text`: 中文方位原文(如“东南”“南偏东10度”)\n - `distance`: 偏移距离(米)\n- **禁止简化**:当出现“东南/西北/东北/西南/南偏东/北偏西”等复合方位时,禁止将其简化为单一方向(如仅“东”或仅“南”)。\n\n示例(必须遵守):\n- “飞到广场东南方向100米” → 必须调用 `calc_offset_esu_direction_text`,参数 `direction_text` 为 `\"东南\"`,`distance` 为 `100`,再使用 `fly_to_waypoint`。\n- “飞到广场南偏东10度100米” → 必须调用 `calc_offset_esu_direction_text`,参数 `direction_text` 为 `\"南偏东10度\"`,`distance` 为 `100`。\n\n当指令只有“方向 + 距离”且**没有具体地点名词**时,**禁止**调用`calc_offset_enu`,必须使用`move_direction`。\n当指令描述“附近/边上/区域内”等模糊位置且**无方向+距离**时,视为到该地点本身,不做偏移计算。\n\n## 八、输出要求\n仅输出1个严格符合上述所有规则的JSON对象。\n\n【强制规则】仅生成包含root的复杂行为树JSON,不得输出简单模式(不得包含mode字段或仅有action节点)。\n\n=== User Prompt ===\n无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。\n\n---\n参考知识:\n以下是从知识库中检索到的、与当前任务最相关的信息,请优先参考这些信息来生成结果:\n{\"property\": \"rules\", \"information\": {\"name\": \"紧急返航\", \"description\": \"当指令中要求紧急返航到某地时,必须使用fly_to_waypoint节点,严禁使用return_emergency节点。\"}}\n\n{\"property\": \"location\", \"information\": {\"name\": \"飞行场地\", \"coordinates\": {\"x\": 0, \"y\": 0, \"z\": 0}}}\n\n{\"property\": \"location\", \"information\": {\"name\": \"大楼外围四个点东南天坐标系坐标\", \"coordinates\": {\"A\": {\"x\": -24.0, \"y\": 241.8, \"z\": 0}, \"B\": {\"x\": -108.5, \"y\": 241.8, \"z\": 0}, \"C\": {\"x\": -108.5, \"y\": 289.8, \"z\": 0}, \"D\": {\"x\": -24.0, \"y\": 292.8, \"z\": 0}}}}\n---" } }