119 lines
32 KiB
JSON
119 lines
32 KiB
JSON
{
|
||
"root": {
|
||
"type": "Sequence",
|
||
"name": "TakeoffAndPatrolBuilding",
|
||
"children": [
|
||
{
|
||
"type": "action",
|
||
"name": "system_checks",
|
||
"params": {
|
||
"check_level": "basic"
|
||
}
|
||
},
|
||
{
|
||
"type": "action",
|
||
"name": "takeoff",
|
||
"params": {
|
||
"altitude": 2.0
|
||
}
|
||
},
|
||
{
|
||
"type": "Sequence",
|
||
"name": "FlyAndDetectWindows",
|
||
"children": [
|
||
{
|
||
"type": "action",
|
||
"name": "fly_to_waypoint",
|
||
"params": {
|
||
"x": -24.0,
|
||
"y": 241.8,
|
||
"z": 12.0,
|
||
"acceptance_radius": 2.0
|
||
}
|
||
},
|
||
{
|
||
"type": "Parallel",
|
||
"name": "PatrolAndDetectWindows",
|
||
"params": {
|
||
"policy": "success_on_one"
|
||
},
|
||
"children": [
|
||
{
|
||
"type": "action",
|
||
"name": "fly_sequence",
|
||
"params": {
|
||
"waypoints": [
|
||
{
|
||
"x": -24.0,
|
||
"y": 241.8,
|
||
"z": 12.0
|
||
},
|
||
{
|
||
"x": -108.5,
|
||
"y": 241.8,
|
||
"z": 12.0
|
||
},
|
||
{
|
||
"x": -108.5,
|
||
"y": 289.8,
|
||
"z": 12.0
|
||
},
|
||
{
|
||
"x": -24.0,
|
||
"y": 292.8,
|
||
"z": 12.0
|
||
},
|
||
{
|
||
"x": -24.0,
|
||
"y": 241.8,
|
||
"z": 12.0
|
||
}
|
||
],
|
||
"coordinate_frame": "local_enu"
|
||
}
|
||
},
|
||
{
|
||
"type": "decorator",
|
||
"name": "SuccessIsFailure",
|
||
"child": {
|
||
"type": "Sequence",
|
||
"name": "DetectOpenWindowsWhileFlying",
|
||
"children": [
|
||
{
|
||
"type": "action",
|
||
"name": "object_detect",
|
||
"params": {
|
||
"target_class": "window",
|
||
"description": "打开的窗户"
|
||
}
|
||
},
|
||
{
|
||
"type": "condition",
|
||
"name": "object_detected",
|
||
"params": {
|
||
"target_class": "window",
|
||
"description": "打开的窗户"
|
||
}
|
||
},
|
||
{
|
||
"type": "action",
|
||
"name": "take_photos",
|
||
"params": {
|
||
"target_class": "window",
|
||
"description": "打开的窗户",
|
||
"track_time": 10.0
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"plan_id": "e1864626-d71c-49d6-9bc6-fb3d2181dd73",
|
||
"visualization_url": "/static/py_tree.png",
|
||
"final_prompt": "=== System Prompt (Macro) ===\n任务:根据用户的自然语言指令,规划无人机的宏观执行流程结构,并提取执行该流程所需的外部参数。\n\n你现在是第一阶段“宏观规划与意图提取”AI。你只需要做两件事:\n1. 分析意图并排出正确的骨架树(不需要填充任何 parameters/params)。\n2. 从用户指令中提取出需要查询确切位置或目标属性的实体清单(如地标、方向、距离、识别目标)。\n\n**严格约束**:仅输出符合以下 JSON 格式的数据,**禁止**包含任何外部分析、Markdown 标记外的纯文本,或者多余的字段。\n\n输出格式约定:\n```json\n{\n \"macro_tree\": { ... 纯结构树 ... },\n \"parameter_requests\": [\n {\n \"node\": \"节点名称\",\n \"intent\": \"对该节点意图的简短描述\",\n \"extracted_entities\": {\n \"实体key\": \"实体value\"\n }\n }\n ]\n}\n```\n\n## 一、核心节点定义(裁剪后)\n#### 1. 可用节点定义 (必须遵守)\n```json\n{\n \"actions\": [\n {\n \"name\": \"takeoff\",\n \"desc\": \"起飞并达到指定高度\"\n },\n {\n \"name\": \"land\",\n \"desc\": \"降落到地面\"\n },\n {\n \"name\": \"fly_to_waypoint\",\n \"desc\": \"飞往指定坐标\"\n },\n {\n \"name\": \"move_direction\",\n \"desc\": \"向指定方向移动(东西南北等)\"\n },\n {\n \"name\": \"rotate_search\",\n \"desc\": \"原地旋转并搜索目标\"\n },\n {\n \"name\": \"object_detect\",\n \"desc\": \"检测视野内的目标\"\n },\n {\n \"name\": \"take_photos\",\n \"desc\": \"对目标进行拍照\"\n }\n ],\n \"conditions\": [\n {\n \"name\": \"object_detected\",\n \"desc\": \"判断视野中是否检测到目标\"\n }\n ],\n \"control_flow\": [\n {\n \"name\": \"Sequence\",\n \"desc\": \"顺序执行子节点,全成功则成功\"\n },\n {\n \"name\": \"Selector\",\n \"desc\": \"执行子节点到第一个成功为止\"\n },\n {\n \"name\": \"Parallel\",\n \"desc\": \"同时执行子节点\"\n }\n ],\n \"decorators\": [\n {\n \"name\": \"SuccessIsFailure\",\n \"desc\": \"将子节点的成功反转为失败\"\n }\n ]\n}\n```\n\n## 三、顶层 JSON 结构规范与模板\n\n当无人机状态为 **on_ground(地面)** 时,通常的流程包含:`system_checks` -> `takeoff` -> (飞行至目标点等后续动作)。\n如果指令要求“沿外围”,需使用 `fly_sequence`。\n\n你必须同时输出 `macro_tree`(必须剔除 params)和 `parameter_requests` 两个字段。\n结构范例(注意:此仅为结构展示,不代表真实逻辑):\n\n```json\n{\n \"macro_tree\": {\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"MainTask\",\n \"children\": [\n {\"type\": \"action\", \"name\": \"system_checks\"},\n {\"type\": \"action\", \"name\": \"takeoff\"},\n {\"type\": \"action\", \"name\": \"fly_to_waypoint\"}\n ]\n }\n },\n \"parameter_requests\": [\n {\n \"node\": \"fly_to_waypoint\",\n \"intent\": \"飞行到目标点\",\n \"extracted_entities\": {\n \"landmark\": \"广场西边\"\n }\n }\n ]\n}\n```\n\n## 六、高频错误规避(硬规则,必须遵守)\n\n0. 严格 JSON 输出:\n- 只能输出一个 JSON 对象。\n- 禁止输出 Markdown、解释、注释、代码块标记。\n- 禁止在 JSON 中出现 // 或 /* */ 注释,禁止尾随逗号。\n\n1. 控制流节点的 type 只能是 \"Sequence\" / \"Selector\" / \"Parallel\"。\n\n2. 人工确认节点(manual_confirmation):\n- 必须添加:仅当指令明确包含“我确认 / 等待确认 / 经允许 / 我通过后 / 允许后”等人工介入关键词时,必须在相应动作前添加 manual_confirmation。\n- 严禁添加:指令未提及人工确认时,严禁主动添加 manual_confirmation。\n\n3. 搜索-条件-拍照链路:\n- 若出现 condition: object_detected,则在其前必须有搜索类 action(优先 rotate_search;仅当需大范围移动时用 search_pattern)。\n- 若使用 rotate_search 或 object_detect,则后续必须出现 object_detected(同 target_class)。\n\n4. 当前位置任务:\n- 指令明确“在当前位置 / 原地 / 不用过去 / 就在这”时,无需 fly_to_waypoint。\n\n5. 严格区分无人机状态:\n- 指令明确“当前在空中”:严禁使用 system_checks 与 takeoff。\n- 指令明确“当前在地面”:如需要飞行任务,优先 system_checks -> takeoff 再执行后续动作。\n\n6. fly_to_waypoint 与 return_emergency 辨析:\n- 若指令包含具体目的地(例如“回到广场 / 飞回大门 / 去机库”(即使包含“紧急”二字)),必须使用 fly_to_waypoint,绝对禁止使用 return_emergency。\n- return_emergency 仅用于“无明确目的地”的立即返航(默认回起飞点)。\n\n7. approach_target 使用:\n- 指令提及“靠近 / 飞近 / 贴近 / 距离XX米拍清楚”时,必须在 take_photos 之前使用 approach_target。\n- 未提及上述关键词时,严禁添加 approach_target。\n\n8. 方向移动优先:\n- 当指令仅为“方向 + 距离”且没有具体地点名词时(例如“往东 60 米”),必须使用 move_direction,严禁使用 fly_to_waypoint 或任何地点坐标。\n\n9. loiter 参数名:\n- loiter 的时间参数一律使用 params.duration(单位:秒),禁止使用 time。\n\n## 七、坐标计算规则(东南天坐标系 ENU)\n\n本系统统一使用东南天(ENU)坐标系:\n- X轴:正方向 东(East),负方向 西(West)\n- Y轴:正方向 南(South),负方向 北(North)\n- Z轴:正方向 上(Up),负方向 下(Down)\n\n仅当指令涉及“具体地点 + 方向 + 距离”的偏移位置时,才计算绝对坐标并使用 fly_to_waypoint:\n- 单一方向(东/西/南/北/上/下):必须先调用 calc_offset_enu,再使用 fly_to_waypoint。\n- 中文复合方位(东南/西北/南偏东10度 等):必须先调用 calc_offset_esu_direction_text,再使用 fly_to_waypoint。\n- 禁止将复合方位简化为单一方向。\n\n当指令只有“方向 + 距离”且没有具体地点名词时,禁止调用 calc_offset_enu,必须使用 move_direction。\n\n## 八、输出要求\n仅输出 1 个严格符合上述所有规则的 JSON 对象。\n\n#### 场景 7:空中上升后沿建筑外围侦察(Sequence + Selector)\n**指令**:“无人机当前在空中,再往上飞3米,接着绕这栋楼外围侦察有没有人,看到了就拍照传回来。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在空中,无需自检与起飞。先向上移动3米(仅方向+距离,使用`move_direction`)。随后“边飞边判断”:用`Parallel`并行执行`fly_sequence`与持续检测分支。检测分支使用`object_detect` + `object_detected` + `take_photos`,再用`SuccessIsFailure`保证不会提前结束并行;并行策略为`success_on_one`,当巡查飞行完成即结束任务。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"RiseAndPatrolPerimeter\",\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"move_direction\",\n \"params\": {\n \"direction\": \"up\",\n \"distance\": 3.0\n }\n },\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetect\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8},\n {\"x\": -108.5, \"y\": 241.8},\n {\"x\": -108.5, \"y\": 289.8},\n {\"x\": -24.0, \"y\": 292.8},\n {\"x\": -24.0, \"y\": 241.8}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectAndPhotoWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"person\",\"description\":\"建筑外围人员\"}},\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 }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 8:地面起飞到楼前12米高度并沿外围查找杂物(Sequence)\n**指令**:“无人机当前在地面,去面前大楼的12米高处,沿着外围查找所有的杂物堆积并拍照。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在地面,需自检后起飞。指令是到具体地点且明确高度,使用`fly_sequence`沿外围巡查,所有航点设置为12米高度(`depth`=12)。为满足“边飞边判断”,使用`Parallel`并行飞行与检测,检测分支持续执行`object_detect` + `object_detected` + `take_photos`,用`SuccessIsFailure`避免提前结束。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlyPerimeterAndPhotoGarbage\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectGarbage\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 289.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 292.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectGarbageWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\",\"track_time\":10.0}}\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 9:地面到12米绕外围查看打开的窗户(Sequence)\n**指令**:“无人机当前在地面,去面前大楼的12米高处,绕着外围看有没有打开的窗户,发现则进行拍照。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在地面,先自检起飞。随后使用`fly_sequence`沿外围绕飞,航点高度为12米(`depth`=12)。同时并行执行检测分支,发现打开窗户就拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlyPerimeterAndPhotoWindows\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectWindows\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 289.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 292.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectOpenWindowsWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\",\"track_time\":10.0}}\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 10:地面到12米沿外围查找打开的窗户(Sequence)\n**指令**:“无人机当前在地面,去面前大楼的12米高处,沿着外围查找所有打开的窗户并拍照。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在地面,起飞后使用`fly_sequence`沿外围巡查(`depth`=12),并行持续检测打开的窗户并拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlyPerimeterAndPhotoOpenWindows\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectOpenWindows\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 289.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 292.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectAllOpenWindowsWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\",\"track_time\":10.0}}\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 11:空中上升后绕外围侦察打开窗户(Sequence)\n**指令**:“无人机当前在空中,再往上飞3米,接着绕这栋楼外围侦察有没有打开的窗户,看到了就拍照传回来。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在空中,先上升3米。随后并行执行绕飞巡查与检测,发现打开窗户立即拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"RiseAndDetectOpenWindows\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"move_direction\",\"params\":{\"direction\":\"up\",\"distance\":3.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectOpenWindows\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8},\n {\"x\": -108.5, \"y\": 241.8},\n {\"x\": -108.5, \"y\": 289.8},\n {\"x\": -24.0, \"y\": 292.8},\n {\"x\": -24.0, \"y\": 241.8}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectOpenWindowsWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"window\",\"description\":\"打开的窗户\",\"track_time\":10.0}}\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 12:地面到12米绕外围巡视杂物堆积(Sequence)\n**指令**:“无人机当前在地面,去面前大楼的12米高处,绕着外围巡视杂物堆积现象,发现则进行拍照。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在地面,起飞后沿外围绕飞(`depth`=12),并行检测杂物堆积并拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlyPerimeterAndPhotoGarbageObserve\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectGarbageObserve\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 289.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 292.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectGarbageWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\",\"track_time\":10.0}}\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 13:空中下降后绕外围侦察杂物堆积(Sequence)\n**指令**:“无人机当前在空中,往下飞3米,接着绕这栋楼外围侦察有没有杂物堆积,看到了就拍照传回来。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在空中,先下降3米。随后并行执行绕飞巡查与检测,发现杂物堆积立即拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"DescendAndDetectGarbage\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"move_direction\",\"params\":{\"direction\":\"down\",\"distance\":3.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectGarbage\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8},\n {\"x\": -108.5, \"y\": 241.8},\n {\"x\": -108.5, \"y\": 289.8},\n {\"x\": -24.0, \"y\": 292.8},\n {\"x\": -24.0, \"y\": 241.8}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectGarbageWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\"}},\n {\"type\":\"condition\",\"name\":\"object_detected\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\"}},\n {\"type\":\"action\",\"name\":\"take_photos\",\"params\":{\"target_class\":\"garbage\",\"description\":\"杂物堆积\",\"track_time\":10.0}}\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 14:地面到12米绕外围查看是否有人(Sequence)\n**指令**:“无人机当前在地面,去面前大楼的12米高处,绕着外围看有没有人,发现则进行拍照。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在地面,起飞后沿外围绕飞(`depth`=12),并行检测人员并拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlyPerimeterAndPhotoPerson\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolAndDetectPerson\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 289.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 292.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectPersonWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"person\",\"description\":\"人员\"}},\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 }\n ]\n }\n ]\n }\n}\n```\n\n#### 场景 15:地面到12米沿外围逆时针查找人员(Sequence)\n**指令**:“无人机当前在地面,去面前大楼的12米高处,沿着外围逆时针查找所有的人并拍照。”\n**参考信息**:面前的大楼外围四个点东南天坐标系坐标:A(-24.00, 241.80),B(-108.50, 241.80),C(-108.50, 289.80),D(-24.00, 292.80)。\n**思路**:无人机在地面,起飞后按逆时针顺序巡查外围(示例航点顺序:A→D→C→B→A),并行检测人员与拍照。\n**结构**:Sequence\n```json\n{\n \"root\": {\n \"type\": \"Sequence\",\n \"name\": \"FlyPerimeterCounterClockwiseAndPhotoPerson\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"system_checks\",\"params\":{\"check_level\":\"comprehensive\"}},\n {\"type\":\"action\",\"name\":\"takeoff\",\"params\":{\"altitude\":10.0}},\n {\n \"type\": \"Parallel\",\n \"name\": \"PatrolCCWAndDetectPerson\",\n \"params\": {\n \"policy\": \"success_on_one\"\n },\n \"children\": [\n {\n \"type\": \"action\",\n \"name\": \"fly_sequence\",\n \"params\": {\n \"waypoints\": [\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 292.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 289.8, \"depth\": 12.0},\n {\"x\": -108.5, \"y\": 241.8, \"depth\": 12.0},\n {\"x\": -24.0, \"y\": 241.8, \"depth\": 12.0}\n ],\n \"coordinate_frame\": \"local_enu\"\n }\n },\n {\n \"type\": \"decorator\",\n \"name\": \"SuccessIsFailure\",\n \"child\": {\n \"type\": \"Sequence\",\n \"name\": \"DetectPersonWhileFlying\",\n \"children\": [\n {\"type\":\"action\",\"name\":\"object_detect\",\"params\":{\"target_class\":\"person\",\"description\":\"人员\"}},\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 }\n ]\n }\n ]\n }\n}\n```\n\n## 任务意图标签\n- intent_type: `generic_mission`\n\n=== User Prompt ===\n起飞\n\n---\n参考知识:\n【地点知识】\n{\"property\": \"location\", \"information\": {\"name\": \"飞行场地\", \"coordinates\": {\"x\": 0, \"y\": 0, \"z\": 0}}}\n\n{\"property\": \"rules\", \"information\": {\"name\": \"紧急返航\", \"description\": \"当指令中要求紧急返航到某地时,必须使用fly_to_waypoint节点,严禁使用return_emergency节点。\"}}\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\n【任务模式】\n无人机当前在地面,飞往航点A。如果途中发现可疑人员,则悬停。\n\n地面起飞后到面前大楼约12米高度,沿外围巡查打开窗户;如发现窗户则拍照回传。\n\n无人机当前在空中,往广场西边飞200米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。\n---"
|
||
} |