diff --git a/README.md b/README.md index 9d2dca5e..e730a35d 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,18 @@ ```bash ./llama-server -m ~/models/gguf/Qwen/Qwen3-8B-GGUF/Qwen3-8B-Q4_K_M.gguf --port 8081 --gpu-layers 36 --host 0.0.0.0 -c 8192 ``` + 至此llama.cpp推理框架就完成了,无需进一步即可启动后端 + + 如果使用vllm后端,则执行以下命令 + ```bash + vllm serve Qwen3-4B-AWQ --host=0.0.0.0 --port=8081 --dtype=auto --max-num-seqs=1 --max-model-len=16384 --served-model-name "qwen3-4b-awq" --trust-remote-code --gpu-memory-utilization=0.75 --uvicorn-log-level=debug + ``` + 由于调用vllm时,在发送HTTP请求时需要指定模型名称,所以在启动后端服务前需要添加环境变量,执行以下命令 + ```bash + export CLASSIFIER_MODEL="qwen3-4b-awq" + export SIMPLE_MODEL="qwen3-4b-awq" + export COMPLEX_MODEL="qwen3-4b-awq" + ``` 2. **Embedding模型部署** @@ -220,6 +232,7 @@ conda activate backend # 4. 启动FastAPI服务 cd backend_service/ +# 如果使用vllm后端此时还应当指定使用的模型名称 uvicorn src.main:app --host 0.0.0.0 --port 8000 ``` 当您看到日志中出现 `Uvicorn running on http://0.0.0.0:8000` 时,表示服务已成功启动。 diff --git a/backend_service/generated_visualizations/py_tree.png b/backend_service/generated_visualizations/py_tree.png index 074d6a2a..70f2e108 100644 Binary files a/backend_service/generated_visualizations/py_tree.png and b/backend_service/generated_visualizations/py_tree.png differ diff --git a/backend_service/src/prompts/system_prompt.txt b/backend_service/src/prompts/system_prompt.txt index b7bd923a..ea84edca 100644 --- a/backend_service/src/prompts/system_prompt.txt +++ b/backend_service/src/prompts/system_prompt.txt @@ -1,258 +1,60 @@ -你是一个无人机任务规划专家。你的唯一任务是根据用户提供的任务指令和参考知识,生成一个结构化、可执行的行为树(Pytree)JSON描述。 -你的输出必须是一个严格的、单一的JSON对象,不包含任何形式的解释、总结或自然语言描述。 +任务:根据用户任意任务指令,生成结构化可执行的无人机行为树(Pytree)JSON。**仅输出单一JSON对象,无任何自然语言、注释或额外内容**,需严格适配后端节点解析与Schema验证逻辑。 -#### 1. 物理约束与安全原则 (必须遵守) -在规划任何任务前,你必须遵守以下物理现实性和安全约束: -- **续航限制**:单次任务总时间不得超过2700秒(45分钟) -- **高度限制**:飞行高度必须在1-5000米范围内(z坐标≥1) -- **电池安全**:必须包含电池监控,电量低于0.3触发返航,低于0.2触发紧急降落 -- **坐标有效**:x,y坐标必须在±10000米范围内,z坐标必须在1-5000米范围内 -- **参数合理**:速度、加速度等参数必须在无人机性能范围内(但本任务中速度参数未直接使用,故主要关注坐标和高度) + +## 一、核心规则:确保后端能解析允许的节点(必严格遵守) +后端会从提示词中解析允许的节点列表,以下节点定义部分**格式不可修改**,否则会导致解析失败(进而触发节点非法错误)。 #### 2. 可用节点定义 (必须遵守) -你必须严格从以下JSON定义的列表中选择节点来构建行为树。不允许使用任何未定义的节点。 +你必须严格从以下JSON定义的列表中选择节点来构建行为树。不允许使用任何未定义的节点(如"lock_target"等)。 ```json { "actions": [ - { - "name": "takeoff", - "description": "无人机从当前位置垂直起飞到指定的海拔高度。", - "params": { - "altitude": "float, 目标海拔高度(米),范围[1, 100],默认为2" - } - }, - { - "name": "land", - "description": "降落无人机。可选择当前位置或返航点降落。", - "params": { - "mode": "string, 可选值: 'current'(当前位置), 'home'(返航点)" - } - }, - { - "name": "fly_to_waypoint", - "description": "导航至一个指定坐标点。无人机到达航点后该动作才算完成。使用相对坐标系(x,y,z),单位为米。", - "params": { - "x": "float, X轴坐标(米),相对起飞点的水平横向距离", - "y": "float, Y轴坐标(米),相对起飞点的水平纵向距离", - "z": "float, Z轴坐标(米),相对起飞点的垂直高度", - "acceptance_radius": "float, 可选,到达容差半径(米),默认2.0" - } - }, - { - "name": "move_direction", - "description": "按指定方向直线移动。方向可为绝对方位或相对机体朝向。", - "params": { - "direction": "string, 取值: 'north'(北), 'south'(南), 'east'(东), 'west'(西), 'forward'(前), 'backward'(后), 'left'(左), 'right'(右)", - "distance": "float, 可选,移动距离(米)[1,10000];缺省表示持续移动,直至外部条件停止" - } - }, - { - "name": "orbit_around_point", - "description": "以给定中心点为中心,等速圆周飞行指定圈数。", - "params": { - "center_x": "float, 中心点X坐标(米)", - "center_y": "float, 中心点Y坐标(米)", - "center_z": "float, 中心点Z坐标(米)", - "radius": "float, 半径(米)[5,1000]", - "laps": "int, 圈数[1,20]", - "clockwise": "boolean, 可选,顺时针为true,默认true", - "speed_mps": "float, 可选,线速度(米/秒)[0.5,15]", - "gimbal_lock": "boolean, 可选,云台持续指向中心,默认true" - } - }, - { - "name": "orbit_around_target", - "description": "以目标为中心,等速圆周飞行指定圈数。需要已确认目标。", - "params": { - "target_class": "string, 目标类别,取值同object_detect列表", - "description": "string, 可选,目标属性描述", - "radius": "float, 半径(米)[5,1000]", - "laps": "int, 圈数[1,20]", - "clockwise": "boolean, 可选,顺时针为true,默认true", - "speed_mps": "float, 可选,线速度(米/秒)[0.5,15]", - "gimbal_lock": "boolean, 可选,云台持续指向目标,默认true" - } - }, - { - "name": "loiter", - "description": "在当前位置上空悬停一段时间或直到条件触发。", - "params": { - "duration": "float, 可选,悬停时间(秒)[1,600]", - "until_condition": "string, 可选,等待的条件名称" - } - }, - { - "name": "object_detect", - "description": "在当前视野范围内识别特定目标对象。适用于定点检测,无人机应在目标大致位置悬停或保持稳定姿态。", - "params": { - "target_class": "string, 要识别的目标类别,必须为以下值之一: 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", - "description": "string, 可选,目标属性描述(如颜色、状态等)", - "count": "int, 可选,需要检测的目标个数,默认1" - } - }, - { - "name": "strike_target", - "description": "对已识别的目标进行打击。必须先使用object_detect成功识别目标后才能使用此动作。", - "params": { - "target_class": "string, 要打击的目标类别", - "description": "string, 可选,目标属性描述(用于确认目标身份)", - "count": "int, 可选,需要打击的目标个数,默认1" - } - }, - { - "name": "battle_damage_assessment", - "description": "对打击效果进行评估,确认目标是否被有效摧毁。", - "params": { - "target_class": "string, 被打击的目标类别", - "assessment_time": "float, 评估时间(秒)[5-60],默认15.0" - } - }, - { - "name": "search_pattern", - "description": "通过执行一个系统性的移动搜索模式,在指定区域内寻找特定目标。无人机会持续移动并分析视频流,直到找到目标或完成整个搜索模式。适用于在未知区域发现目标。", - "params": { - "pattern_type": "string, 搜索模式类型: 'spiral'(螺旋搜索), 'grid'(栅格搜索)", - "center_x": "float, 搜索中心X坐标(米)", - "center_y": "float, 搜索中心Y坐标(米)", - "center_z": "float, 搜索中心Z坐标(米)", - "radius": "float, 搜索半径(米)[5,1000]", - "target_class": "string, 要寻找的目标类别", - "description": "string, 可选,目标属性描述", - "count": "int, 可选,需要找到的目标个数,默认1" - } - }, - { - "name": "track_object", - "description": "持续跟踪已识别的目标对象。无人机将保持对目标的视觉锁定并跟随其移动。必须先使用object_detect成功识别目标后才能使用此动作。", - "params": { - "target_class": "string, 要跟踪的目标类别,必须为以下值之一: 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", - "description": "string, 可选,目标属性描述(如颜色、状态等)", - "track_time": "float, 跟踪持续时间(秒)[1,600],默认30.0", - "min_confidence": "float, 可选,跟踪置信度阈值[0.5-1.0],默认0.7", - "safe_distance": "float, 可选,保持的安全距离(米)[2-50],默认10.0" - } - }, - { - "name": "deliver_payload", - "description": "投放携带的物资。", - "params": { - "payload_type": "string, 物资类型", - "release_altitude": "float, 可选,投放高度(米)[2,100],默认5.0" - } - }, - { - "name": "preflight_checks", - "description": "执行飞行前系统自检。", - "params": { - "check_level": "string, 检查级别: 'basic'(基础), 'comprehensive'(全面)" - } - }, - { - "name": "emergency_return", - "description": "执行紧急返航程序。", - "params": { - "reason": "string, 紧急返航原因" - } - } + {"name":"takeoff","params":{"altitude":"float, 范围[1,100],默认2"}}, + {"name":"land","params":{"mode":"string, 'current'/'home'"}}, + {"name":"fly_to_waypoint","params":{"x":"±10000","y":"±10000","z":"[1,5000]","acceptance_radius":"默认2.0"}}, + {"name":"move_direction","params":{"direction":"north/south/east/west/forward/backward/left/right","distance":"[1,10000],缺省持续移动"}}, + {"name":"orbit_around_point","params":{"center_x":"±10000","center_y":"±10000","center_z":"[1,5000]","radius":"[5,1000]","laps":"[1,20]","clockwise":"默认true","speed_mps":"[0.5,15]","gimbal_lock":"默认true"}}, + {"name":"orbit_around_target","params":{"target_class":"见object_detect列表","description":"可选","radius":"[5,1000]","laps":"[1,20]","clockwise":"默认true","speed_mps":"[0.5,15]","gimbal_lock":"默认true"}}, + {"name":"loiter","params":{"duration":"[1,600]秒/until_condition:可选"}}, + {"name":"object_detect","params":{"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","description":"可选,目标属性(如'穿黑色衣服')","count":"默认1"}}, + {"name":"strike_target","params":{"target_class":"同object_detect","description":"可选,目标属性","count":"默认1"}}, + {"name":"battle_damage_assessment","params":{"target_class":"同object_detect","assessment_time":"[5,60],默认15"}}, + {"name":"search_pattern","params":{"pattern_type":"spiral/grid","center_x":"±10000","center_y":"±10000","center_z":"[1,5000]","radius":"[5,1000]","target_class":"同object_detect","description":"可选","count":"默认1"}}, + {"name":"track_object","params":{"target_class":"同object_detect","description":"可选","track_time":"[1,600]秒(必传,不可用'duration')","min_confidence":"[0.5,1.0]默认0.7","safe_distance":"[2,50]默认10"}}, + {"name":"deliver_payload","params":{"payload_type":"string","release_altitude":"[2,100]默认5"}}, + {"name":"preflight_checks","params":{"check_level":"basic/comprehensive"}}, + {"name":"emergency_return","params":{"reason":"string"}} ], "conditions": [ - { - "name": "battery_above", - "description": "检查电池电量是否高于指定阈值。", - "params": { - "threshold": "float, 电量阈值百分比[0.0,1.0]" - } - }, - { - "name": "at_waypoint", - "description": "检查无人机是否在指定坐标点的容差范围内。使用相对坐标系(x,y,z),单位为米。", - "params": { - "x": "float, 目标X坐标(米)", - "y": "float, 目标Y坐标(米)", - "z": "float, 目标Z坐标(米)", - "tolerance": "float, 可选,容差半径(米),默认3.0" - } - }, - { - "name": "object_detected", - "description": "检查是否检测到特定目标对象。可用于验证 object_detect 或 search_pattern 的结果,也可作为打击的前提条件。", - "params": { - "target_class": "string, 目标类型", - "description": "string, 可选,目标属性描述", - "count": "int, 可选,需要检测到的目标个数,默认1" - } - }, - { - "name": "target_destroyed", - "description": "检查目标是否已被成功摧毁。用于战损评估后的确认。", - "params": { - "target_class": "string, 目标类型", - "description": "string, 可选,目标属性描述", - "confidence": "float, 可选,摧毁置信度[0.5-1.0],默认0.8" - } - }, - { - "name": "time_elapsed", - "description": "检查自任务开始是否经过指定时间。", - "params": { - "duration": "float, 时间长度(秒)[1,2700]" - } - }, - { - "name": "gps_status", - "description": "检查GPS信号状态是否良好。", - "params": { - "min_satellites": "int, 最小卫星数量[6,15],默认10" - } - } + {"name":"battery_above","params":{"threshold":"[0.0,1.0],必传"}}, + {"name":"at_waypoint","params":{"x":"±10000","y":"±10000","z":"[1,5000]","tolerance":"默认3.0"}}, + {"name":"object_detected","params":{"target_class":"同object_detect(必传)","description":"可选","count":"默认1"}}, + {"name":"target_destroyed","params":{"target_class":"同object_detect","description":"可选","confidence":"[0.5,1.0]默认0.8"}}, + {"name":"time_elapsed","params":{"duration":"[1,2700]秒"}}, + {"name":"gps_status","params":{"min_satellites":"int, 范围[6,15],必传(如8)"}} ], "control_flow": [ - { - "name": "Sequence", - "description": "序列节点,按顺序执行其子节点。只有当所有子节点都成功时,它才成功。", - "params": {}, - "children": "array, 包含按顺序执行的子节点" - }, - { - "name": "Selector", - "description": "选择节点,按顺序执行子节点直到一个成功。如果所有子节点都失败,则失败。", - "params": { - "memory": "boolean, 可选,是否记忆执行状态,默认true" - }, - "children": "array, 包含备选执行的子节点" - }, - { - "name": "Parallel", - "description": "并行节点,同时执行所有子节点。支持不同的成功策略。", - "params": { - "policy": "string, 成功策略: 'all_success'(全部成功), 'one_success'(一个成功)" - }, - "children": "array, 包含并行执行的子节点" - } + {"name":"Sequence","params":{},"children":"子节点数组(按序执行,全成功则成功)"}, + {"name":"Selector","params":{"memory":"默认true"},"children":"子节点数组(执行到成功为止)"}, + {"name":"Parallel","params":{"policy":"all_success/one_success"},"children":"子节点数组(同时执行)"} ] } ``` -#### 3. JSON结构规范 (必须遵守) -生成的JSON对象必须有一个名为`root`的键,其值是一个有效的行为树节点对象。每个节点都必须包含正确的字段。 -- **根节点必须是控制流节点**(`Sequence`、`Selector`或`Parallel`),不能是动作(`action`)或条件(`condition`)节点。 -- **动作节点和条件节点是叶子节点**,不能有`children`字段。 -- 控制流节点必须有`children`字段,且其值是一个子节点数组。 -- **必须包含安全监控**:所有任务行为树必须包含实时安全监控,通常通过一个与主任务并行(Parallel)的Selector节点实现,该节点监控电池电量、GPS状态等安全条件,并在条件不满足时触发紧急返航或降落。 -- 每个节点必须包含: - - `type`: 节点类型,必须是`'action'`、`'condition'`、`'Sequence'`、`'Selector'`或`'Parallel'` - - `name`: 来自可用节点列表的确切名称 - - `params`: 对象,包含所需的参数(必须符合参数范围约束) - - `children`: 数组(仅控制流节点需要),包含子节点对象 -**安全监控要求详解**: -1. **必须使用Parallel节点**:根节点必须是Parallel节点,其策略必须设置为`"policy": "all_success"`,确保主任务和安全监控同时执行 -2. **必须包含安全监控Selector**:Parallel节点的子节点中必须包含一个Selector节点用于安全监控,通常命名为`"SafetyMonitor"` -3. **必须包含电池监控**:安全监控Selector必须包含`battery_above`条件节点,监控电池电量 -4. **必须包含GPS监控**:安全监控Selector应该包含`gps_status`条件节点,监控GPS信号状态 -5. **必须包含紧急处理流程**:安全监控Selector必须包含紧急处理Sequence,在安全条件不满足时执行紧急返航和降落 +## 二、节点必填字段(后端Schema强制要求,缺一验证失败) +每个节点必须包含以下字段,字段名不可自定义: +1. **`type`**:节点类型(严格匹配) + - 动作节点:`"action"` + - 条件节点:`"condition"` + - 控制流节点:`"Sequence"`/`"Selector"`/`"Parallel"`(与`name`字段值完全一致) +2. **`name`**:节点名称(必须是上述JSON中`actions`/`conditions`/`control_flow`下的`name`值,如"gps_status"而非其他) +3. **`params`**:参数对象(严格匹配上述JSON中对应节点的`params`定义,不可加自定义参数,如`object_detected`不可加"color",需用"description") +4. **`children`**:子节点数组(仅控制流节点必含,动作/条件节点无此字段) -**正确示例**: + +## 三、根节点与安全监控固定结构(后端安全验证必含) +根节点必须是`Parallel`,且`children`包含`MainTask`(Sequence)和`SafetyMonitor`(Selector),结构不可修改: ```json { "root": { @@ -263,9 +65,18 @@ { "type": "Sequence", "name": "MainTask", + "params": {}, "children": [ - // 主任务步骤 - {"type": "action", "name": "land", "params": {"mode": "home"}} + // 主任务步骤:按用户指令分解(如preflight_checks→takeoff→fly_to_waypoint→...→land) + // 示例步骤(需替换为用户任务): + {"type":"action","name":"preflight_checks","params":{"check_level":"comprehensive"}}, + {"type":"action","name":"takeoff","params":{"altitude":2.0}}, + {"type":"action","name":"fly_to_waypoint","params":{"x":100.0,"y":80.0,"z":10.0}}, + {"type":"action","name":"object_detect","params":{"target_class":"person","description":"穿黑色衣服"}}, + {"type":"condition","name":"object_detected","params":{"target_class":"person","description":"穿黑色衣服"}}, + {"type":"action","name":"track_object","params":{"target_class":"person","description":"穿黑色衣服","track_time":30.0}}, + {"type":"action","name":"strike_target","params":{"target_class":"person","description":"穿黑色衣服"}}, + {"type":"action","name":"land","params":{"mode":"home"}} ] }, { @@ -273,22 +84,16 @@ "name": "SafetyMonitor", "params": {"memory": true}, "children": [ + // 必含:电池监控(battery_above)、GPS监控(gps_status)、紧急处理(EmergencyHandler) + {"type":"condition","name":"battery_above","params":{"threshold":0.3}}, + {"type":"condition","name":"gps_status","params":{"min_satellites":8}}, { - "type": "condition", - "name": "battery_above", - "params": {"threshold": 0.3} - }, - { - "type": "condition", - "name": "gps_status", - "params": {"min_satellites": 8} - }, - { - "type": "Sequence", - "name": "EmergencyHandler", + "type":"Sequence", + "name":"EmergencyHandler", + "params": {}, "children": [ - {"type": "action", "name": "emergency_return", "params": {"reason": "safety_breach"}}, - {"type": "action", "name": "land", "params": {"mode": "home"}} + {"type":"action","name":"emergency_return","params":{"reason":"safety_breach"}}, + {"type":"action","name":"land","params":{"mode":"home"}} ] } ] @@ -298,464 +103,16 @@ } ``` -**错误示例**(缺少安全监控): -```json -{ - "root": { - "type": "Sequence", // 错误:根节点不是Parallel,无法同时运行安全监控 - "name": "MainTaskOnly", - "children": [ - // 只有主任务,没有安全监控 - ] - } -} -``` -错误示例(根节点为动作节点): -```json -{ - "root": { - "type": "action", - "name": "land", - "children": [ ... ], // 错误:动作节点不能有子节点 - "params": {"mode": "home"} - } -} -``` +## 四、高频错误规避(后端验证常失败点) +1. **禁止自定义节点**:如"lock_target"是未定义节点,必须删除,用"object_detect"+"object_detected"替代锁定逻辑。 +2. **参数名严格匹配**: + - `track_object`用`track_time`(不可用`duration`); + - `object_detected`描述目标属性用`description`(不可用`color`/`target`等); + - `gps_status`必传`min_satellites`(范围6-15,如8)。 +3. **条件节点`object_detected`必含`target_class`**:值必须是上述JSON中`object_detect`的`target_class`列表中的值(如"person")。 +4. **控制流节点`name`与`type`一致**:如`type:"Sequence"`则`name:"Sequence"`,不可自定义`name`。 -##### 重要安全警告:Parallel节点使用禁忌 -**严禁**在安全监控场景中使用 `"policy": "one_success"` 的Parallel节点! - -错误模式(会导致任务中断): -```json -{ - "type": "Parallel", - "params": {"policy": "one_success"}, // 严禁这样使用! - "children": [ - {"type": "Sequence", "name": "MainTask"}, // 主任务会被意外终止 - {"type": "Selector", "name": "SafetyMonitor"} // 监控条件成功会杀死主任务 - ] -} -``` - -#### 4. Selector节点memory参数使用规范 -- **默认使用** `"memory": true`:用于任务执行和监控检查,避免不必要的任务中断。 -- **仅在高优先级安全中断**时使用 `"memory": false`:如急停按钮,每个tick都检查。 -- **决策流程**: - - Selector用于选择长时任务 → `"memory": true` - - Selector用于持续监控安全条件 → `"memory": true` - - Selector用于最高优先级安全中断 → `"memory": false`(谨慎使用) - -#### 5. 搜索与检测节点使用区分 -- **object_detect**:用于已知位置的定点检测(无人机悬停或稳定时识别)。 -- **search_pattern**:用于未知区域的移动搜索(无人机按模式飞行覆盖区域)。 -- 严禁混淆使用:例如,在search_pattern后不应立即使用object_detect,除非需要进一步验证。 - -#### 6. 参数约束检查 (必须遵守) -在生成JSON时,你必须确保所有参数值符合物理约束: -- `altitude` (takeoff): [1, 100] -- `z` (fly_to_waypoint): [1, 5000] -- `x`, `y` (fly_to_waypoint): [-10000, 10000] -- `radius` (search_pattern): [5, 1000] -- `distance` (move_direction): [1, 10000] -- `radius` (orbit_around_point/orbit_around_target): [5, 1000] -- `laps` (orbit_around_point/orbit_around_target): [1, 20] -- `speed_mps` (orbit_around_point/orbit_around_target): [0.5, 15] -- 电池阈值: [0.0, 1.0] -- 等等其他参数范围。 - -如果用户指令或参考知识提供坐标,必须使用这些坐标,但确保调整到约束范围内(例如,如果z<5,则设置为5.0)。 - -#### 7. 标准任务范式 -所有任务必须包含安全监控。使用以下范式作为模板: -```json -{ - "root": { - "type": "Parallel", - "name": "MissionWithSafety", - "params": {"policy": "all_success"}, - "children": [ - { - "type": "Sequence", - "name": "MainTask", - "children": [ - // 主任务步骤,最后以land结束 - {"type": "action", "name": "land", "params": {"mode": "home"}} - ] - }, - { - "type": "Selector", - "name": "SafetyMonitor", - "params": {"memory": true}, - "children": [ - { - "type": "condition", - "name": "battery_above", - "params": {"threshold": 0.3} - }, - { - "type": "Sequence", - "name": "EmergencyHandler", - "children": [ - {"type": "action", "name": "emergency_return", "params": {"reason": "low_battery"}}, - {"type": "action", "name": "land", "params": {"mode": "home"}} - ] - } - ] - } - ] - } -} -``` - -#### 8. 打击任务范式 -所有任务必须包含安全监控。使用以下范式作为模板: -{ - "root": { - "type": "Parallel", - "name": "CompleteStrikeMission", - "params": { - "policy": "all_success" - }, - "children": [ - { - "type": "Sequence", - "name": "MainStrikeSequence", - "children": [ - { - "type": "action", - "name": "preflight_checks", - "params": { - "check_level": "comprehensive" - } - }, - { - "type": "action", - "name": "takeoff", - "params": { - "altitude": 2.0 - } - }, - { - "type": "action", - "name": "fly_to_waypoint", - "params": { - "x": 200.0, - "y": 150.0, - "z": 2.0, - "acceptance_radius": 2.0 - } - }, - { - "type": "Selector", - "name": "TargetAcquisitionSelector", - "params": { - "memory": true - }, - "children": [ - { - "type": "Sequence", - "name": "DirectDetectionSequence", - "children": [ - { - "type": "action", - "name": "loiter", - "params": { - "duration": 10.0 - } - }, - { - "type": "action", - "name": "object_detect", - "params": { - "target_class": "truck", - "description": "军事卡车", - "count": 1 - } - }, - { - "type": "condition", - "name": "object_detected", - "params": { - "target_class": "truck", - "description": "军事卡车", - "count": 1 - } - } - ] - }, - { - "type": "action", - "name": "search_pattern", - "params": { - "pattern_type": "grid", - "center_x": 200.0, - "center_y": 150.0, - "center_z": 2.0, - "radius": 80.0, - "target_class": "truck", - "description": "军事卡车", - "count": 1 - } - } - ] - }, - { - "type": "action", - "name": "strike_target", - "params": { - "target_class": "truck", - "description": "军事卡车", - "count": 1 - } - }, - { - "type": "action", - "name": "battle_damage_assessment", - "params": { - "target_class": "truck", - "assessment_time": 20.0 - } - }, - { - "type": "Selector", - "name": "DamageConfirmationSelector", - "params": { - "memory": true - }, - "children": [ - { - "type": "condition", - "name": "target_destroyed", - "params": { - "target_class": "truck", - "description": "军事卡车", - "confidence": 0.8 - } - }, - { - "type": "Sequence", - "name": "ReStrikeSequence", - "children": [ - { - "type": "action", - "name": "strike_target", - "params": { - "target_class": "truck", - "description": "军事卡车", - "count": 1 - } - }, - { - "type": "action", - "name": "battle_damage_assessment", - "params": { - "target_class": "truck", - "assessment_time": 15.0 - } - } - ] - } - ] - }, - { - "type": "action", - "name": "land", - "params": { - "mode": "home" - } - } - ] - }, - { - "type": "Selector", - "name": "SafetyMonitor", - "params": { - "memory": true - }, - "children": [ - { - "type": "condition", - "name": "battery_above", - "params": { - "threshold": 0.35 - } - }, - { - "type": "condition", - "name": "gps_status", - "params": { - "min_satellites": 8 - } - }, - { - "type": "Sequence", - "name": "EmergencyHandler", - "children": [ - { - "type": "action", - "name": "emergency_return", - "params": { - "reason": "safety_breach" - } - }, - { - "type": "action", - "name": "land", - "params": { - "mode": "home" - } - } - ] - } - ] - } - ] - } -} - -#### 9. 跟踪任务范式 -所有任务必须包含安全监控。使用以下范式作为模板: -```json -{ - "root": { - "type": "Parallel", - "name": "TrackingMission", - "params": {"policy": "all_success"}, - "children": [ - { - "type": "Sequence", - "name": "MainTrackingTask", - "children": [ - { - "type": "action", - "name": "preflight_checks", - "params": {"check_level": "comprehensive"} - }, - { - "type": "action", - "name": "takeoff", - "params": {"altitude": 15.0} - }, - { - "type": "action", - "name": "fly_to_waypoint", - "params": { - "x": 100.0, - "y": 80.0, - "z": 15.0, - "acceptance_radius": 3.0 - } - }, - { - "type": "Selector", - "name": "TargetAcquisitionSelector", - "params": {"memory": true}, - "children": [ - { - "type": "Sequence", - "name": "DirectDetectionSequence", - "children": [ - { - "type": "action", - "name": "loiter", - "params": {"duration": 10.0} - }, - { - "type": "action", - "name": "object_detect", - "params": { - "target_class": "car", - "description": "红色轿车", - "count": 1 - } - } - ] - }, - { - "type": "action", - "name": "search_pattern", - "params": { - "pattern_type": "spiral", - "center_x": 100.0, - "center_y": 80.0, - "center_z": 15.0, - "radius": 50.0, - "target_class": "car", - "description": "红色轿车", - "count": 1 - } - } - ] - }, - { - "type": "action", - "name": "track_object", - "params": { - "target_class": "car", - "description": "红色轿车", - "track_time": 120.0, - "min_confidence": 0.7, - "safe_distance": 15.0 - } - }, - { - "type": "action", - "name": "land", - "params": {"mode": "home"} - } - ] - }, - { - "type": "Selector", - "name": "SafetyMonitor", - "params": {"memory": true}, - "children": [ - { - "type": "condition", - "name": "battery_above", - "params": {"threshold": 0.35} - }, - { - "type": "condition", - "name": "gps_status", - "params": {"min_satellites": 8} - }, - { - "type": "Sequence", - "name": "EmergencyHandler", - "children": [ - { - "type": "action", - "name": "emergency_return", - "params": {"reason": "safety_breach"} - }, - { - "type": "action", - "name": "land", - "params": {"mode": "home"} - } - ] - } - ] - } - ] - } -} -``` - -#### 10. 如何使用参考知识 -当用户提供"参考知识"(如坐标信息)时,你必须使用这些信息填充参数。例如: -- 如果参考知识说"目标坐标: (x: 120.5, y: 80.2, z: 60.0)",则在使用`fly_to_waypoint`时设置这些值。 -- 确保坐标符合约束(如z≥1)。 - -环绕口令到参数的映射规则(当口令涉及“环绕/绕圈”等): -- “环绕XY圈” → `radius=X`, `laps=Y`,默认 `clockwise=true`, `gimbal_lock=true`,比如环绕三十两圈,意思就是以目标点为圆心,30米为半径绕2圈 -- 明确“顺时针/逆时针”时 → 设置 `clockwise=true/false` -- 出现“等速”时 → 若未给速度则 `speed_mps` 使用默认值(如3.0);若口令给出速度,裁剪到[0.5,15] -- “以(中心坐标)为中心/当前位置为中心” → 使用 `orbit_around_point` 并填写 `center_x/center_y/center_z` -- “以目标为中心/围绕目标” → 使用 `orbit_around_target`;若任务未提供目标来源,则需要在主任务中先行确认目标(通过检测/跟踪或参考知识) - -#### 11. 输出要求 -你的输出必须是严格的、单一的JSON对象,符合上述所有规则。不包含任何自然语言描述。 \ No newline at end of file +## 五、输出要求 +仅输出1个严格符合上述所有规则的JSON对象,**确保后端能解析到所有节点(尤其是conditions中的gps_status),且无任何冗余内容**。 \ No newline at end of file diff --git a/tools/test_api.py b/tools/test_api.py index fcdb6b85..384f4809 100644 --- a/tools/test_api.py +++ b/tools/test_api.py @@ -12,7 +12,7 @@ BASE_URL = "http://127.0.0.1:8000" ENDPOINT = "/generate_plan" # The user prompt we will send for the test -TEST_PROMPT = "起飞" +TEST_PROMPT = "无人机起飞后移动到学生宿舍投放救援物资" def test_generate_plan(): """ diff --git a/tools/test_validate/test_run_20251011_175309/api_test_log.txt b/tools/test_validate/test_run_20251011_175309/api_test_log.txt new file mode 100644 index 00000000..219426e4 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/api_test_log.txt @@ -0,0 +1,1340 @@ + +================================================================================ +指令 #1 - 运行 #1 - 2025-10-11 17:53:27 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.87秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #2 - 2025-10-11 17:53:46 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.77秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #3 - 2025-10-11 17:54:04 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.66秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #4 - 2025-10-11 17:54:23 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.94秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #5 - 2025-10-11 17:54:42 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.66秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #6 - 2025-10-11 17:55:01 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.69秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #7 - 2025-10-11 17:55:19 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.66秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #8 - 2025-10-11 17:55:38 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 18.01秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #9 - 2025-10-11 17:55:57 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.35秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #1 - 运行 #10 - 2025-10-11 17:56:15 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方降落 +尝试次数: 1 +响应时间: 17.69秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #1 - 2025-10-11 17:56:42 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.67秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #2 - 2025-10-11 17:57:08 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.27秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #3 - 2025-10-11 17:57:34 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.66秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #4 - 2025-10-11 17:58:01 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.68秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #5 - 2025-10-11 17:58:27 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.91秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #6 - 2025-10-11 17:58:53 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.96秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #7 - 2025-10-11 17:59:19 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.09秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #8 - 2025-10-11 17:59:45 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.49秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #9 - 2025-10-11 18:00:11 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.90秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #2 - 运行 #10 - 2025-10-11 18:00:37 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.23秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #1 - 2025-10-11 18:01:03 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.77秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #2 - 2025-10-11 18:01:29 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 25.14秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #3 - 2025-10-11 18:01:55 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.99秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #4 - 2025-10-11 18:02:21 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.54秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #5 - 2025-10-11 18:02:47 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.77秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #6 - 2025-10-11 18:03:13 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.91秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #7 - 2025-10-11 18:03:38 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.64秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #8 - 2025-10-11 18:04:04 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.82秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #9 - 2025-10-11 18:04:30 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.99秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #3 - 运行 #10 - 2025-10-11 18:04:56 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方寻找蓝色的车 +尝试次数: 1 +响应时间: 24.92秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #1 - 2025-10-11 18:05:21 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 24.56秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #2 - 2025-10-11 18:05:47 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 24.80秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #3 - 2025-10-11 18:06:13 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 25.19秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #4 - 2025-10-11 18:06:40 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 25.21秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #5 - 2025-10-11 18:07:06 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 24.85秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #6 - 2025-10-11 18:07:32 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 25.07秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #7 - 2025-10-11 18:07:58 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 25.33秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #8 - 2025-10-11 18:08:24 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 25.09秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #9 - 2025-10-11 18:08:50 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 24.55秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #4 - 运行 #10 - 2025-10-11 18:09:16 +HTTP状态: 200 +指令: 起飞后移动到学生宿舍上方检测蓝色的车 +尝试次数: 1 +响应时间: 25.44秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #1 - 2025-10-11 18:09:42 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.35秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #2 - 2025-10-11 18:10:08 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 25.07秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #3 - 2025-10-11 18:10:34 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.53秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #4 - 2025-10-11 18:11:00 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.92秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #5 - 2025-10-11 18:11:26 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.93秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #6 - 2025-10-11 18:11:52 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.89秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #7 - 2025-10-11 18:12:17 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.27秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #8 - 2025-10-11 18:12:42 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.40秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #9 - 2025-10-11 18:13:08 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.54秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #5 - 运行 #10 - 2025-10-11 18:13:33 +HTTP状态: 200 +指令: 飞到学生宿舍上方查找蓝色的车 +尝试次数: 1 +响应时间: 24.25秒 +结果: ✅ 成功 +验证结果: + is_dict: ✅ + has_root: ✅ + root_has_children: ✅ + has_plan_id: ✅ + has_visualization_url: ✅ + leaf_nodes_valid: ✅ + has_safety: ✅ + +================================================================================ +指令 #6 - 运行 #1 - 2025-10-11 18:16:38 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #2 - 2025-10-11 18:19:44 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #3 - 2025-10-11 18:22:49 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #4 - 2025-10-11 18:25:54 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #5 - 2025-10-11 18:28:59 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #6 - 2025-10-11 18:32:04 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #7 - 2025-10-11 18:35:09 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #8 - 2025-10-11 18:38:14 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #9 - 2025-10-11 18:41:20 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #6 - 运行 #10 - 2025-10-11 18:44:25 +HTTP状态: None +指令: 飞到学生宿舍上方查找蓝色车辆并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #1 - 2025-10-11 18:47:30 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #2 - 2025-10-11 18:50:35 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #3 - 2025-10-11 18:53:40 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #4 - 2025-10-11 18:56:45 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #5 - 2025-10-11 18:59:51 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #6 - 2025-10-11 19:02:56 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #7 - 2025-10-11 19:06:01 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #8 - 2025-10-11 19:09:06 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #9 - 2025-10-11 19:12:11 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #7 - 运行 #10 - 2025-10-11 19:15:16 +HTTP状态: None +指令: 起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #1 - 2025-10-11 19:18:21 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #2 - 2025-10-11 19:21:27 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #3 - 2025-10-11 19:24:32 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #4 - 2025-10-11 19:27:37 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #5 - 2025-10-11 19:30:43 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #6 - 2025-10-11 19:33:48 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #7 - 2025-10-11 19:36:53 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #8 - 2025-10-11 19:39:58 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #9 - 2025-10-11 19:43:03 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #8 - 运行 #10 - 2025-10-11 19:46:08 +HTTP状态: None +指令: 起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #1 - 2025-10-11 19:49:13 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #2 - 2025-10-11 19:52:19 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #3 - 2025-10-11 19:55:24 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #4 - 2025-10-11 19:58:29 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #5 - 2025-10-11 20:01:34 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #6 - 2025-10-11 20:04:39 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #7 - 2025-10-11 20:07:44 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #8 - 2025-10-11 20:10:50 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #9 - 2025-10-11 20:13:55 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #9 - 运行 #10 - 2025-10-11 20:17:00 +HTTP状态: None +指令: 飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #1 - 2025-10-11 20:20:05 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #2 - 2025-10-11 20:23:10 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #3 - 2025-10-11 20:26:15 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #4 - 2025-10-11 20:29:20 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #5 - 2025-10-11 20:32:28 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #6 - 2025-10-11 20:35:35 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #7 - 2025-10-11 20:38:42 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #8 - 2025-10-11 20:41:49 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #9 - 2025-10-11 20:44:57 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #10 - 运行 #10 - 2025-10-11 20:48:05 +HTTP状态: None +指令: 飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #1 - 2025-10-11 20:51:13 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #2 - 2025-10-11 20:54:21 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #3 - 2025-10-11 20:57:29 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #4 - 2025-10-11 21:00:35 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #5 - 2025-10-11 21:03:40 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #6 - 2025-10-11 21:06:45 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #7 - 2025-10-11 21:09:50 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #8 - 2025-10-11 21:12:55 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #9 - 2025-10-11 21:16:01 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) + +================================================================================ +指令 #11 - 运行 #10 - 2025-10-11 21:19:06 +HTTP状态: None +指令: 起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资 +尝试次数: 3 +响应时间: 0.00秒 +结果: ❌ 失败 +错误信息: 请求失败: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=60) diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_10_b99d8d9a-84e6-474c-a512-61f8e74945e8.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_10_b99d8d9a-84e6-474c-a512-61f8e74945e8.json new file mode 100644 index 00000000..1fc140d0 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_10_b99d8d9a-84e6-474c-a512-61f8e74945e8.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "b99d8d9a-84e6-474c-a512-61f8e74945e8", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_10_b99d8d9a-84e6-474c-a512-61f8e74945e8.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_10_b99d8d9a-84e6-474c-a512-61f8e74945e8.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_10_b99d8d9a-84e6-474c-a512-61f8e74945e8.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_1_c74dd92d-450c-4a95-80eb-84441812b7e5.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_1_c74dd92d-450c-4a95-80eb-84441812b7e5.json new file mode 100644 index 00000000..dbc598c4 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_1_c74dd92d-450c-4a95-80eb-84441812b7e5.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "c74dd92d-450c-4a95-80eb-84441812b7e5", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_1_c74dd92d-450c-4a95-80eb-84441812b7e5.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_1_c74dd92d-450c-4a95-80eb-84441812b7e5.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_1_c74dd92d-450c-4a95-80eb-84441812b7e5.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_2_c9a68f7d-e8c0-4446-8fcf-e5a9325827b6.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_2_c9a68f7d-e8c0-4446-8fcf-e5a9325827b6.json new file mode 100644 index 00000000..4f8c919d --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_2_c9a68f7d-e8c0-4446-8fcf-e5a9325827b6.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "c9a68f7d-e8c0-4446-8fcf-e5a9325827b6", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_2_c9a68f7d-e8c0-4446-8fcf-e5a9325827b6.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_2_c9a68f7d-e8c0-4446-8fcf-e5a9325827b6.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_2_c9a68f7d-e8c0-4446-8fcf-e5a9325827b6.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_3_9e34b939-8410-4aec-a9bb-2261e6a21c48.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_3_9e34b939-8410-4aec-a9bb-2261e6a21c48.json new file mode 100644 index 00000000..c95e66f6 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_3_9e34b939-8410-4aec-a9bb-2261e6a21c48.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "9e34b939-8410-4aec-a9bb-2261e6a21c48", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_3_9e34b939-8410-4aec-a9bb-2261e6a21c48.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_3_9e34b939-8410-4aec-a9bb-2261e6a21c48.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_3_9e34b939-8410-4aec-a9bb-2261e6a21c48.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_4_09c44e51-9323-4072-9cb4-61c623d49f76.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_4_09c44e51-9323-4072-9cb4-61c623d49f76.json new file mode 100644 index 00000000..5e589dd2 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_4_09c44e51-9323-4072-9cb4-61c623d49f76.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "09c44e51-9323-4072-9cb4-61c623d49f76", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_4_09c44e51-9323-4072-9cb4-61c623d49f76.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_4_09c44e51-9323-4072-9cb4-61c623d49f76.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_4_09c44e51-9323-4072-9cb4-61c623d49f76.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_5_5110f6fe-778d-4191-b321-f1a8c6de9877.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_5_5110f6fe-778d-4191-b321-f1a8c6de9877.json new file mode 100644 index 00000000..9708b92e --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_5_5110f6fe-778d-4191-b321-f1a8c6de9877.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "5110f6fe-778d-4191-b321-f1a8c6de9877", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_5_5110f6fe-778d-4191-b321-f1a8c6de9877.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_5_5110f6fe-778d-4191-b321-f1a8c6de9877.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_5_5110f6fe-778d-4191-b321-f1a8c6de9877.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_6_51bb856d-4804-48fc-9a72-564c4c2f13ba.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_6_51bb856d-4804-48fc-9a72-564c4c2f13ba.json new file mode 100644 index 00000000..9c56ad4e --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_6_51bb856d-4804-48fc-9a72-564c4c2f13ba.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "51bb856d-4804-48fc-9a72-564c4c2f13ba", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_6_51bb856d-4804-48fc-9a72-564c4c2f13ba.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_6_51bb856d-4804-48fc-9a72-564c4c2f13ba.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_6_51bb856d-4804-48fc-9a72-564c4c2f13ba.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_7_61fe6be0-5252-45f1-9b89-bf23387a9ada.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_7_61fe6be0-5252-45f1-9b89-bf23387a9ada.json new file mode 100644 index 00000000..0148f4cf --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_7_61fe6be0-5252-45f1-9b89-bf23387a9ada.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "61fe6be0-5252-45f1-9b89-bf23387a9ada", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_7_61fe6be0-5252-45f1-9b89-bf23387a9ada.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_7_61fe6be0-5252-45f1-9b89-bf23387a9ada.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_7_61fe6be0-5252-45f1-9b89-bf23387a9ada.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_8_2fdeb41f-99da-4055-adab-ea795def40d6.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_8_2fdeb41f-99da-4055-adab-ea795def40d6.json new file mode 100644 index 00000000..962516fb --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_8_2fdeb41f-99da-4055-adab-ea795def40d6.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "2fdeb41f-99da-4055-adab-ea795def40d6", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_8_2fdeb41f-99da-4055-adab-ea795def40d6.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_8_2fdeb41f-99da-4055-adab-ea795def40d6.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_8_2fdeb41f-99da-4055-adab-ea795def40d6.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_9_6259d34d-4ac3-4a45-a683-e36cd219fe8e.json b/tools/test_validate/test_run_20251011_175309/instruction_1/run_9_6259d34d-4ac3-4a45-a683-e36cd219fe8e.json new file mode 100644 index 00000000..0f37ce5f --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_1/run_9_6259d34d-4ac3-4a45-a683-e36cd219fe8e.json @@ -0,0 +1,93 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "current" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.3 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "6259d34d-4ac3-4a45-a683-e36cd219fe8e", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_1/run_9_6259d34d-4ac3-4a45-a683-e36cd219fe8e.png b/tools/test_validate/test_run_20251011_175309/instruction_1/run_9_6259d34d-4ac3-4a45-a683-e36cd219fe8e.png new file mode 100644 index 00000000..a49a7288 Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_1/run_9_6259d34d-4ac3-4a45-a683-e36cd219fe8e.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_10_96546010-2887-463b-96aa-e9a4237944f2.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_10_96546010-2887-463b-96aa-e9a4237944f2.json new file mode 100644 index 00000000..4cf5984c --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_10_96546010-2887-463b-96aa-e9a4237944f2.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "96546010-2887-463b-96aa-e9a4237944f2", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_10_96546010-2887-463b-96aa-e9a4237944f2.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_10_96546010-2887-463b-96aa-e9a4237944f2.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_10_96546010-2887-463b-96aa-e9a4237944f2.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_1_92d92c59-b3cd-47d0-9371-967d6086dc11.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_1_92d92c59-b3cd-47d0-9371-967d6086dc11.json new file mode 100644 index 00000000..c981c420 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_1_92d92c59-b3cd-47d0-9371-967d6086dc11.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "92d92c59-b3cd-47d0-9371-967d6086dc11", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_1_92d92c59-b3cd-47d0-9371-967d6086dc11.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_1_92d92c59-b3cd-47d0-9371-967d6086dc11.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_1_92d92c59-b3cd-47d0-9371-967d6086dc11.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_2_a2f5a53d-c90d-4cd8-9a28-22399aab3b05.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_2_a2f5a53d-c90d-4cd8-9a28-22399aab3b05.json new file mode 100644 index 00000000..b54d5187 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_2_a2f5a53d-c90d-4cd8-9a28-22399aab3b05.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "a2f5a53d-c90d-4cd8-9a28-22399aab3b05", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_2_a2f5a53d-c90d-4cd8-9a28-22399aab3b05.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_2_a2f5a53d-c90d-4cd8-9a28-22399aab3b05.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_2_a2f5a53d-c90d-4cd8-9a28-22399aab3b05.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_3_12f71128-f676-443f-89bc-8f0b5e16e9cd.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_3_12f71128-f676-443f-89bc-8f0b5e16e9cd.json new file mode 100644 index 00000000..99e8e6f0 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_3_12f71128-f676-443f-89bc-8f0b5e16e9cd.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "12f71128-f676-443f-89bc-8f0b5e16e9cd", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_3_12f71128-f676-443f-89bc-8f0b5e16e9cd.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_3_12f71128-f676-443f-89bc-8f0b5e16e9cd.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_3_12f71128-f676-443f-89bc-8f0b5e16e9cd.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_4_4c0c5cb7-5438-444f-9278-741fd65d370a.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_4_4c0c5cb7-5438-444f-9278-741fd65d370a.json new file mode 100644 index 00000000..1ffd9523 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_4_4c0c5cb7-5438-444f-9278-741fd65d370a.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "4c0c5cb7-5438-444f-9278-741fd65d370a", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_4_4c0c5cb7-5438-444f-9278-741fd65d370a.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_4_4c0c5cb7-5438-444f-9278-741fd65d370a.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_4_4c0c5cb7-5438-444f-9278-741fd65d370a.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_5_65d91ac8-2526-4447-b5f6-113c8033f956.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_5_65d91ac8-2526-4447-b5f6-113c8033f956.json new file mode 100644 index 00000000..97a5ffa4 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_5_65d91ac8-2526-4447-b5f6-113c8033f956.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "65d91ac8-2526-4447-b5f6-113c8033f956", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_5_65d91ac8-2526-4447-b5f6-113c8033f956.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_5_65d91ac8-2526-4447-b5f6-113c8033f956.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_5_65d91ac8-2526-4447-b5f6-113c8033f956.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_6_46a40452-9535-49aa-8eb9-e8ef77cfb0a1.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_6_46a40452-9535-49aa-8eb9-e8ef77cfb0a1.json new file mode 100644 index 00000000..721f5e62 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_6_46a40452-9535-49aa-8eb9-e8ef77cfb0a1.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "46a40452-9535-49aa-8eb9-e8ef77cfb0a1", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_6_46a40452-9535-49aa-8eb9-e8ef77cfb0a1.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_6_46a40452-9535-49aa-8eb9-e8ef77cfb0a1.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_6_46a40452-9535-49aa-8eb9-e8ef77cfb0a1.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_7_aa95931b-6e05-4cd9-aadc-33405bef45a9.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_7_aa95931b-6e05-4cd9-aadc-33405bef45a9.json new file mode 100644 index 00000000..66c6f73d --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_7_aa95931b-6e05-4cd9-aadc-33405bef45a9.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "aa95931b-6e05-4cd9-aadc-33405bef45a9", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_7_aa95931b-6e05-4cd9-aadc-33405bef45a9.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_7_aa95931b-6e05-4cd9-aadc-33405bef45a9.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_7_aa95931b-6e05-4cd9-aadc-33405bef45a9.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_8_2bd7d8df-bfcd-487b-a313-645373b450d5.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_8_2bd7d8df-bfcd-487b-a313-645373b450d5.json new file mode 100644 index 00000000..5dec653c --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_8_2bd7d8df-bfcd-487b-a313-645373b450d5.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "2bd7d8df-bfcd-487b-a313-645373b450d5", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_8_2bd7d8df-bfcd-487b-a313-645373b450d5.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_8_2bd7d8df-bfcd-487b-a313-645373b450d5.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_8_2bd7d8df-bfcd-487b-a313-645373b450d5.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_9_9eeccc4a-ab3b-469f-8aa5-ce9c5c921190.json b/tools/test_validate/test_run_20251011_175309/instruction_2/run_9_9eeccc4a-ab3b-469f-8aa5-ce9c5c921190.json new file mode 100644 index 00000000..a1683e58 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_2/run_9_9eeccc4a-ab3b-469f-8aa5-ce9c5c921190.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "9eeccc4a-ab3b-469f-8aa5-ce9c5c921190", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_2/run_9_9eeccc4a-ab3b-469f-8aa5-ce9c5c921190.png b/tools/test_validate/test_run_20251011_175309/instruction_2/run_9_9eeccc4a-ab3b-469f-8aa5-ce9c5c921190.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_2/run_9_9eeccc4a-ab3b-469f-8aa5-ce9c5c921190.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_10_3b541f31-120d-4283-86c1-6a98cd6bf4a6.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_10_3b541f31-120d-4283-86c1-6a98cd6bf4a6.json new file mode 100644 index 00000000..40100f5c --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_10_3b541f31-120d-4283-86c1-6a98cd6bf4a6.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "3b541f31-120d-4283-86c1-6a98cd6bf4a6", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_10_3b541f31-120d-4283-86c1-6a98cd6bf4a6.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_10_3b541f31-120d-4283-86c1-6a98cd6bf4a6.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_10_3b541f31-120d-4283-86c1-6a98cd6bf4a6.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_1_5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_1_5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199.json new file mode 100644 index 00000000..c9abb271 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_1_5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_1_5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_1_5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_1_5b81b00f-fd8d-4e7b-97e5-5ad5f25b8199.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_2_26cdb6ce-bb70-4a58-92c6-19470551a931.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_2_26cdb6ce-bb70-4a58-92c6-19470551a931.json new file mode 100644 index 00000000..7e266558 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_2_26cdb6ce-bb70-4a58-92c6-19470551a931.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "26cdb6ce-bb70-4a58-92c6-19470551a931", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_2_26cdb6ce-bb70-4a58-92c6-19470551a931.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_2_26cdb6ce-bb70-4a58-92c6-19470551a931.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_2_26cdb6ce-bb70-4a58-92c6-19470551a931.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_3_6703241e-5367-42e9-bbcf-8518f7a7982f.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_3_6703241e-5367-42e9-bbcf-8518f7a7982f.json new file mode 100644 index 00000000..a237f761 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_3_6703241e-5367-42e9-bbcf-8518f7a7982f.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "6703241e-5367-42e9-bbcf-8518f7a7982f", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_3_6703241e-5367-42e9-bbcf-8518f7a7982f.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_3_6703241e-5367-42e9-bbcf-8518f7a7982f.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_3_6703241e-5367-42e9-bbcf-8518f7a7982f.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_4_71c89dc5-5e3b-46d5-9c0b-59535d5c12b2.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_4_71c89dc5-5e3b-46d5-9c0b-59535d5c12b2.json new file mode 100644 index 00000000..d68f02d1 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_4_71c89dc5-5e3b-46d5-9c0b-59535d5c12b2.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "71c89dc5-5e3b-46d5-9c0b-59535d5c12b2", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_4_71c89dc5-5e3b-46d5-9c0b-59535d5c12b2.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_4_71c89dc5-5e3b-46d5-9c0b-59535d5c12b2.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_4_71c89dc5-5e3b-46d5-9c0b-59535d5c12b2.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_5_1142491e-1a37-4a09-a64d-ed5773cea09e.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_5_1142491e-1a37-4a09-a64d-ed5773cea09e.json new file mode 100644 index 00000000..1b11e727 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_5_1142491e-1a37-4a09-a64d-ed5773cea09e.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "1142491e-1a37-4a09-a64d-ed5773cea09e", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_5_1142491e-1a37-4a09-a64d-ed5773cea09e.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_5_1142491e-1a37-4a09-a64d-ed5773cea09e.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_5_1142491e-1a37-4a09-a64d-ed5773cea09e.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_6_35ff42a3-2871-4b6e-820d-69a2b05411f6.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_6_35ff42a3-2871-4b6e-820d-69a2b05411f6.json new file mode 100644 index 00000000..57680a3d --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_6_35ff42a3-2871-4b6e-820d-69a2b05411f6.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "35ff42a3-2871-4b6e-820d-69a2b05411f6", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_6_35ff42a3-2871-4b6e-820d-69a2b05411f6.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_6_35ff42a3-2871-4b6e-820d-69a2b05411f6.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_6_35ff42a3-2871-4b6e-820d-69a2b05411f6.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_7_a836fb2c-74b1-4451-94a7-83ea9dc04fc5.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_7_a836fb2c-74b1-4451-94a7-83ea9dc04fc5.json new file mode 100644 index 00000000..b9c88981 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_7_a836fb2c-74b1-4451-94a7-83ea9dc04fc5.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "a836fb2c-74b1-4451-94a7-83ea9dc04fc5", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_7_a836fb2c-74b1-4451-94a7-83ea9dc04fc5.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_7_a836fb2c-74b1-4451-94a7-83ea9dc04fc5.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_7_a836fb2c-74b1-4451-94a7-83ea9dc04fc5.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_8_d716a58c-8cb1-4792-98a1-c2a44d86ba72.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_8_d716a58c-8cb1-4792-98a1-c2a44d86ba72.json new file mode 100644 index 00000000..29707083 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_8_d716a58c-8cb1-4792-98a1-c2a44d86ba72.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "d716a58c-8cb1-4792-98a1-c2a44d86ba72", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_8_d716a58c-8cb1-4792-98a1-c2a44d86ba72.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_8_d716a58c-8cb1-4792-98a1-c2a44d86ba72.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_8_d716a58c-8cb1-4792-98a1-c2a44d86ba72.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_9_cbb57237-e84d-4de8-bba1-a1f7a7dd8538.json b/tools/test_validate/test_run_20251011_175309/instruction_3/run_9_cbb57237-e84d-4de8-bba1-a1f7a7dd8538.json new file mode 100644 index 00000000..d5d8f786 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_3/run_9_cbb57237-e84d-4de8-bba1-a1f7a7dd8538.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "cbb57237-e84d-4de8-bba1-a1f7a7dd8538", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_3/run_9_cbb57237-e84d-4de8-bba1-a1f7a7dd8538.png b/tools/test_validate/test_run_20251011_175309/instruction_3/run_9_cbb57237-e84d-4de8-bba1-a1f7a7dd8538.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_3/run_9_cbb57237-e84d-4de8-bba1-a1f7a7dd8538.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_10_619957a5-92b3-4f1f-b556-7d744aee247f.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_10_619957a5-92b3-4f1f-b556-7d744aee247f.json new file mode 100644 index 00000000..ef9cb972 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_10_619957a5-92b3-4f1f-b556-7d744aee247f.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "619957a5-92b3-4f1f-b556-7d744aee247f", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_10_619957a5-92b3-4f1f-b556-7d744aee247f.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_10_619957a5-92b3-4f1f-b556-7d744aee247f.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_10_619957a5-92b3-4f1f-b556-7d744aee247f.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_1_7d1394a0-595f-4745-8c05-7c27bbe6a893.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_1_7d1394a0-595f-4745-8c05-7c27bbe6a893.json new file mode 100644 index 00000000..b96dabcc --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_1_7d1394a0-595f-4745-8c05-7c27bbe6a893.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "7d1394a0-595f-4745-8c05-7c27bbe6a893", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_1_7d1394a0-595f-4745-8c05-7c27bbe6a893.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_1_7d1394a0-595f-4745-8c05-7c27bbe6a893.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_1_7d1394a0-595f-4745-8c05-7c27bbe6a893.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_2_172d07ff-4746-48e0-a47c-ce721dbfd9da.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_2_172d07ff-4746-48e0-a47c-ce721dbfd9da.json new file mode 100644 index 00000000..d7513735 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_2_172d07ff-4746-48e0-a47c-ce721dbfd9da.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "172d07ff-4746-48e0-a47c-ce721dbfd9da", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_2_172d07ff-4746-48e0-a47c-ce721dbfd9da.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_2_172d07ff-4746-48e0-a47c-ce721dbfd9da.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_2_172d07ff-4746-48e0-a47c-ce721dbfd9da.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_3_15364c4e-badb-4cf0-ad55-9507b3f42ca6.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_3_15364c4e-badb-4cf0-ad55-9507b3f42ca6.json new file mode 100644 index 00000000..70cbc467 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_3_15364c4e-badb-4cf0-ad55-9507b3f42ca6.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "15364c4e-badb-4cf0-ad55-9507b3f42ca6", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_3_15364c4e-badb-4cf0-ad55-9507b3f42ca6.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_3_15364c4e-badb-4cf0-ad55-9507b3f42ca6.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_3_15364c4e-badb-4cf0-ad55-9507b3f42ca6.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_4_ba86bac9-b1c9-4ea8-a255-f0589b776622.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_4_ba86bac9-b1c9-4ea8-a255-f0589b776622.json new file mode 100644 index 00000000..581b9adb --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_4_ba86bac9-b1c9-4ea8-a255-f0589b776622.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "ba86bac9-b1c9-4ea8-a255-f0589b776622", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_4_ba86bac9-b1c9-4ea8-a255-f0589b776622.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_4_ba86bac9-b1c9-4ea8-a255-f0589b776622.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_4_ba86bac9-b1c9-4ea8-a255-f0589b776622.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_5_3518e34d-d5ab-4750-98e3-4aa5272b4617.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_5_3518e34d-d5ab-4750-98e3-4aa5272b4617.json new file mode 100644 index 00000000..a35b3411 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_5_3518e34d-d5ab-4750-98e3-4aa5272b4617.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "3518e34d-d5ab-4750-98e3-4aa5272b4617", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_5_3518e34d-d5ab-4750-98e3-4aa5272b4617.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_5_3518e34d-d5ab-4750-98e3-4aa5272b4617.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_5_3518e34d-d5ab-4750-98e3-4aa5272b4617.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_6_410d15c8-a536-4ecc-a0e1-e0f8b0299285.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_6_410d15c8-a536-4ecc-a0e1-e0f8b0299285.json new file mode 100644 index 00000000..ead96581 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_6_410d15c8-a536-4ecc-a0e1-e0f8b0299285.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "410d15c8-a536-4ecc-a0e1-e0f8b0299285", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_6_410d15c8-a536-4ecc-a0e1-e0f8b0299285.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_6_410d15c8-a536-4ecc-a0e1-e0f8b0299285.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_6_410d15c8-a536-4ecc-a0e1-e0f8b0299285.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_7_c3f8c7f7-85d7-4be3-8c41-10731cae7d35.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_7_c3f8c7f7-85d7-4be3-8c41-10731cae7d35.json new file mode 100644 index 00000000..29d1a8cb --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_7_c3f8c7f7-85d7-4be3-8c41-10731cae7d35.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "c3f8c7f7-85d7-4be3-8c41-10731cae7d35", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_7_c3f8c7f7-85d7-4be3-8c41-10731cae7d35.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_7_c3f8c7f7-85d7-4be3-8c41-10731cae7d35.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_7_c3f8c7f7-85d7-4be3-8c41-10731cae7d35.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_8_c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_8_c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc.json new file mode 100644 index 00000000..bb12aaf4 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_8_c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_8_c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_8_c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_8_c4c5e35b-f1d1-4b0a-8b3a-c664322a6ffc.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_9_a486685e-679c-4a63-8582-192ea188e03a.json b/tools/test_validate/test_run_20251011_175309/instruction_4/run_9_a486685e-679c-4a63-8582-192ea188e03a.json new file mode 100644 index 00000000..6e0ff3ee --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_4/run_9_a486685e-679c-4a63-8582-192ea188e03a.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "a486685e-679c-4a63-8582-192ea188e03a", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_4/run_9_a486685e-679c-4a63-8582-192ea188e03a.png b/tools/test_validate/test_run_20251011_175309/instruction_4/run_9_a486685e-679c-4a63-8582-192ea188e03a.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_4/run_9_a486685e-679c-4a63-8582-192ea188e03a.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_10_776b10d3-2c2f-45d5-89df-8984ee0d4f1c.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_10_776b10d3-2c2f-45d5-89df-8984ee0d4f1c.json new file mode 100644 index 00000000..be1bdda8 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_10_776b10d3-2c2f-45d5-89df-8984ee0d4f1c.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "776b10d3-2c2f-45d5-89df-8984ee0d4f1c", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_10_776b10d3-2c2f-45d5-89df-8984ee0d4f1c.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_10_776b10d3-2c2f-45d5-89df-8984ee0d4f1c.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_10_776b10d3-2c2f-45d5-89df-8984ee0d4f1c.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_1_10d9fbf4-e712-4556-9417-acb5bcb32580.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_1_10d9fbf4-e712-4556-9417-acb5bcb32580.json new file mode 100644 index 00000000..fe6e9819 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_1_10d9fbf4-e712-4556-9417-acb5bcb32580.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "10d9fbf4-e712-4556-9417-acb5bcb32580", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_1_10d9fbf4-e712-4556-9417-acb5bcb32580.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_1_10d9fbf4-e712-4556-9417-acb5bcb32580.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_1_10d9fbf4-e712-4556-9417-acb5bcb32580.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_2_99820c0c-f8db-4880-9520-1b3fb86e0527.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_2_99820c0c-f8db-4880-9520-1b3fb86e0527.json new file mode 100644 index 00000000..675b7406 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_2_99820c0c-f8db-4880-9520-1b3fb86e0527.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "99820c0c-f8db-4880-9520-1b3fb86e0527", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_2_99820c0c-f8db-4880-9520-1b3fb86e0527.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_2_99820c0c-f8db-4880-9520-1b3fb86e0527.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_2_99820c0c-f8db-4880-9520-1b3fb86e0527.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_3_156bdcef-d545-4c82-9237-d3016cb42eb2.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_3_156bdcef-d545-4c82-9237-d3016cb42eb2.json new file mode 100644 index 00000000..5081f59f --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_3_156bdcef-d545-4c82-9237-d3016cb42eb2.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "156bdcef-d545-4c82-9237-d3016cb42eb2", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_3_156bdcef-d545-4c82-9237-d3016cb42eb2.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_3_156bdcef-d545-4c82-9237-d3016cb42eb2.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_3_156bdcef-d545-4c82-9237-d3016cb42eb2.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_4_45867aa4-300a-4a3a-97fc-cfbd2dd5f372.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_4_45867aa4-300a-4a3a-97fc-cfbd2dd5f372.json new file mode 100644 index 00000000..75bbd7e0 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_4_45867aa4-300a-4a3a-97fc-cfbd2dd5f372.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "45867aa4-300a-4a3a-97fc-cfbd2dd5f372", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_4_45867aa4-300a-4a3a-97fc-cfbd2dd5f372.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_4_45867aa4-300a-4a3a-97fc-cfbd2dd5f372.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_4_45867aa4-300a-4a3a-97fc-cfbd2dd5f372.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_5_eca0d3a0-527e-487f-91e8-b047fec0bcfb.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_5_eca0d3a0-527e-487f-91e8-b047fec0bcfb.json new file mode 100644 index 00000000..6bfe0094 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_5_eca0d3a0-527e-487f-91e8-b047fec0bcfb.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "SearchForBlueCar", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainSearchSequence", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "eca0d3a0-527e-487f-91e8-b047fec0bcfb", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_5_eca0d3a0-527e-487f-91e8-b047fec0bcfb.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_5_eca0d3a0-527e-487f-91e8-b047fec0bcfb.png new file mode 100644 index 00000000..17ff432d Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_5_eca0d3a0-527e-487f-91e8-b047fec0bcfb.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_6_c36664d0-5a9d-4f95-b9ea-55e0f082861a.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_6_c36664d0-5a9d-4f95-b9ea-55e0f082861a.json new file mode 100644 index 00000000..6b027f9d --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_6_c36664d0-5a9d-4f95-b9ea-55e0f082861a.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "c36664d0-5a9d-4f95-b9ea-55e0f082861a", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_6_c36664d0-5a9d-4f95-b9ea-55e0f082861a.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_6_c36664d0-5a9d-4f95-b9ea-55e0f082861a.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_6_c36664d0-5a9d-4f95-b9ea-55e0f082861a.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_7_87d1eccf-f838-4970-8c7f-a3319997bf0e.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_7_87d1eccf-f838-4970-8c7f-a3319997bf0e.json new file mode 100644 index 00000000..615a710d --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_7_87d1eccf-f838-4970-8c7f-a3319997bf0e.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "87d1eccf-f838-4970-8c7f-a3319997bf0e", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_7_87d1eccf-f838-4970-8c7f-a3319997bf0e.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_7_87d1eccf-f838-4970-8c7f-a3319997bf0e.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_7_87d1eccf-f838-4970-8c7f-a3319997bf0e.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_8_16caf84c-d2c6-4550-bb91-bf2944b6e79e.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_8_16caf84c-d2c6-4550-bb91-bf2944b6e79e.json new file mode 100644 index 00000000..c4ccba51 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_8_16caf84c-d2c6-4550-bb91-bf2944b6e79e.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "16caf84c-d2c6-4550-bb91-bf2944b6e79e", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_8_16caf84c-d2c6-4550-bb91-bf2944b6e79e.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_8_16caf84c-d2c6-4550-bb91-bf2944b6e79e.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_8_16caf84c-d2c6-4550-bb91-bf2944b6e79e.png differ diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_9_c0dc8273-4a8a-4c32-aff4-494640073f58.json b/tools/test_validate/test_run_20251011_175309/instruction_5/run_9_c0dc8273-4a8a-4c32-aff4-494640073f58.json new file mode 100644 index 00000000..88dc63a3 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/instruction_5/run_9_c0dc8273-4a8a-4c32-aff4-494640073f58.json @@ -0,0 +1,138 @@ +{ + "root": { + "type": "Parallel", + "name": "MissionWithSafety", + "params": { + "policy": "all_success" + }, + "children": [ + { + "type": "Sequence", + "name": "MainTask", + "children": [ + { + "type": "action", + "name": "preflight_checks", + "params": { + "check_level": "comprehensive" + } + }, + { + "type": "action", + "name": "takeoff", + "params": { + "altitude": 2.0 + } + }, + { + "type": "action", + "name": "fly_to_waypoint", + "params": { + "x": 5.0, + "y": 3.0, + "z": 2.0, + "acceptance_radius": 2.0 + } + }, + { + "type": "Selector", + "name": "TargetAcquisitionSelector", + "params": { + "memory": true + }, + "children": [ + { + "type": "Sequence", + "name": "DirectDetectionSequence", + "children": [ + { + "type": "action", + "name": "loiter", + "params": { + "duration": 10.0 + } + }, + { + "type": "action", + "name": "object_detect", + "params": { + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "search_pattern", + "params": { + "pattern_type": "grid", + "center_x": 5.0, + "center_y": 3.0, + "center_z": 2.0, + "radius": 80.0, + "target_class": "car", + "description": "蓝色的车", + "count": 1 + } + } + ] + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + }, + { + "type": "Selector", + "name": "SafetyMonitor", + "params": { + "memory": true + }, + "children": [ + { + "type": "condition", + "name": "battery_above", + "params": { + "threshold": 0.35 + } + }, + { + "type": "condition", + "name": "gps_status", + "params": { + "min_satellites": 8 + } + }, + { + "type": "Sequence", + "name": "EmergencyHandler", + "children": [ + { + "type": "action", + "name": "emergency_return", + "params": { + "reason": "safety_breach" + } + }, + { + "type": "action", + "name": "land", + "params": { + "mode": "home" + } + } + ] + } + ] + } + ] + }, + "plan_id": "c0dc8273-4a8a-4c32-aff4-494640073f58", + "visualization_url": "/static/py_tree.png" +} \ No newline at end of file diff --git a/tools/test_validate/test_run_20251011_175309/instruction_5/run_9_c0dc8273-4a8a-4c32-aff4-494640073f58.png b/tools/test_validate/test_run_20251011_175309/instruction_5/run_9_c0dc8273-4a8a-4c32-aff4-494640073f58.png new file mode 100644 index 00000000..2d8cb84e Binary files /dev/null and b/tools/test_validate/test_run_20251011_175309/instruction_5/run_9_c0dc8273-4a8a-4c32-aff4-494640073f58.png differ diff --git a/tools/test_validate/test_run_20251011_175309/test_results.csv b/tools/test_validate/test_run_20251011_175309/test_results.csv new file mode 100644 index 00000000..bd84e811 --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/test_results.csv @@ -0,0 +1 @@ +instruction_index,instruction,run_number,success,attempts,response_time,plan_id,error,timestamp diff --git a/tools/test_validate/test_run_20251011_175309/test_summary.csv b/tools/test_validate/test_run_20251011_175309/test_summary.csv new file mode 100644 index 00000000..649bd88b --- /dev/null +++ b/tools/test_validate/test_run_20251011_175309/test_summary.csv @@ -0,0 +1,12 @@ +instruction_index,instruction,total_runs,successful_runs,success_rate,avg_response_time,min_response_time,max_response_time,total_response_time +1,起飞后移动到学生宿舍上方降落,10,10,100.00%,17.73s,17.35s,18.01s,177.29s +2,起飞后移动到学生宿舍上方查找蓝色的车,10,10,100.00%,25.19s,24.66s,25.68s,251.86s +3,起飞后移动到学生宿舍上方寻找蓝色的车,10,10,100.00%,24.85s,24.54s,25.14s,248.49s +4,起飞后移动到学生宿舍上方检测蓝色的车,10,10,100.00%,25.01s,24.55s,25.44s,250.09s +5,飞到学生宿舍上方查找蓝色的车,10,10,100.00%,24.71s,24.25s,25.35s,247.14s +6,飞到学生宿舍上方查找蓝色车辆并进行打击,10,0,0.00%,N/A,N/A,N/A,0.00s +7,起飞后移动到学生宿舍上方搜索蓝色车辆,并进行打击,10,0,0.00%,N/A,N/A,N/A,0.00s +8,起飞到学生宿舍上方搜索被困人员,并为被困人员投递救援物资,10,0,0.00%,N/A,N/A,N/A,0.00s +9,飞到学生宿舍上方搜索方圆10米范围内的蓝色车辆,10,0,0.00%,N/A,N/A,N/A,0.00s +10,飞到学生宿舍上方搜索半径为10米区域范围内的蓝色车辆,10,0,0.00%,N/A,N/A,N/A,0.00s +11,起飞到学生宿舍搜索有没有被困人员,然后抛洒救援物资,10,0,0.00%,N/A,N/A,N/A,0.00s diff --git a/tools/test_validate/test_validity.py b/tools/test_validate/test_validity.py index 0d3f05f9..9715e0e9 100644 --- a/tools/test_validate/test_validity.py +++ b/tools/test_validate/test_validity.py @@ -232,12 +232,12 @@ def write_log_entry(log_file, instruction_idx, run_number, prompt, result): else: f.write(f"错误信息: {result['error']}\n") -def generate_summary_report(instructions, results_summary): +def generate_summary_report(instructions, results_summary, summary_csv_path): """ - 生成统计摘要报告(修复除零错误) + 生成统计摘要报告 """ try: - with open(SUMMARY_CSV, 'w', newline='', encoding='utf-8') as csvfile: + with open(summary_csv_path, 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['instruction_index', 'instruction', 'total_runs', 'successful_runs', 'success_rate', 'avg_response_time', 'min_response_time', 'max_response_time', 'total_response_time'] @@ -249,7 +249,6 @@ def generate_summary_report(instructions, results_summary): summary = results_summary[i] success_count = summary['success_count'] - # 防止除零错误 avg_time = "N/A" min_time = "N/A" max_time = "N/A" @@ -271,14 +270,25 @@ def generate_summary_report(instructions, results_summary): 'total_response_time': f"{summary['total_response_time']:.2f}s" }) - print(f"📊 统计摘要已保存至: {SUMMARY_CSV}") + print(f"📊 统计摘要已保存至: {summary_csv_path}") except Exception as e: print(f"❌ 保存统计摘要时出错: {e}") def main(): """主测试函数""" + # 创建带时间戳的结果目录 + timestamp_str = datetime.now().strftime("%Y%m%d_%H%M%S") + RESULTS_DIR = f"test_run_{timestamp_str}" + os.makedirs(RESULTS_DIR, exist_ok=True) + + # 定义顶层结果文件的完整路径 + log_file_path = os.path.join(RESULTS_DIR, "api_test_log.txt") + results_csv_path = os.path.join(RESULTS_DIR, "test_results.csv") + summary_csv_path = os.path.join(RESULTS_DIR, "test_summary.csv") + print("🚀 开始批量API测试") print(f"每个指令测试 {TESTS_PER_INSTRUCTION} 次") + print(f"所有结果将保存在: {RESULTS_DIR}") instructions = read_instructions(INSTRUCTIONS_FILE) if not instructions: @@ -304,11 +314,17 @@ def main(): print(f"指令: {prompt[:80]}{'...' if len(prompt) > 80 else ''}") print(f"{'='*60}") + # 为当前指令创建子目录 + instruction_dir = os.path.join(RESULTS_DIR, f"instruction_{instruction_idx}") + os.makedirs(instruction_dir, exist_ok=True) + for run_number in range(1, TESTS_PER_INSTRUCTION + 1): print(f" 运行 {run_number}/{TESTS_PER_INSTRUCTION}...", end=" ", flush=True) result = send_api_request(prompt, instruction_idx, run_number) - write_log_entry(LOG_FILE, instruction_idx, run_number, prompt, result) + write_log_entry(log_file_path, instruction_idx, run_number, prompt, result) + + plan_id = result.get('data', {}).get('plan_id') if result.get('data') else None # 记录结果 detailed_result = { @@ -318,6 +334,7 @@ def main(): "success": result["success"], "attempts": result["attempts"], "response_time": result["response_time"], + "plan_id": plan_id, "http_status": result.get("http_status"), "error": result["error"] or "", "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S") @@ -335,44 +352,73 @@ def main(): results_summary[idx]['max_response_time'] = max( results_summary[idx]['max_response_time'], result['response_time'] ) + + # 保存JSON和可视化图片 + plan_id_str = plan_id or 'unknown_plan' + + # 1. 保存JSON + json_filename = os.path.join(instruction_dir, f"run_{run_number}_{plan_id_str}.json") + try: + with open(json_filename, 'w', encoding='utf-8') as f: + json.dump(result['data'], f, indent=4, ensure_ascii=False) + except Exception as e: + print(f" ⚠️ 保存JSON失败: {e}") + + # 2. 下载并保存图片 + viz_url = result['data'].get('visualization_url') + if viz_url: + img_filename = os.path.join(instruction_dir, f"run_{run_number}_{plan_id_str}.png") + try: + if viz_url.startswith('/'): + viz_url = BASE_URL + viz_url + + img_response = requests.get(viz_url) + img_response.raise_for_status() + with open(img_filename, 'wb') as f: + f.write(img_response.content) + except requests.exceptions.RequestException as e: + print(f" ⚠️ 下载图片失败: {e}") + print(f"✅ 成功 ({result['response_time']:.1f}s)") else: print(f"❌ 失败 (HTTP: {result.get('http_status', 'N/A')})") - # 记录HTTP状态 if 'http_status' in result: results_summary[idx]['http_statuses'].append(result['http_status']) - time.sleep(1) # 避免服务器过载 + time.sleep(1) # 生成详细结果CSV try: - with open(RESULTS_CSV, 'w', newline='', encoding='utf-8') as csvfile: + with open(results_csv_path, 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['instruction_index', 'instruction', 'run_number', 'success', 'attempts', 'response_time', 'plan_id', 'error', 'timestamp'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() - for result in detailed_results: - writer.writerow(result) + for res in detailed_results: + writer.writerow(res) - print(f"\n📊 详细结果已保存至: {RESULTS_CSV}") + print(f"\n📊 详细结果已保存至: {results_csv_path}") except Exception as e: print(f"❌ 保存详细结果时出错: {e}") # 生成统计摘要 - generate_summary_report(instructions, results_summary) + generate_summary_report(instructions, results_summary, summary_csv_path) + + # 计算并打印最终统计 + total_tests = len(instructions) * TESTS_PER_INSTRUCTION + total_successful = sum(s['success_count'] for s in results_summary) - # 打印最终统计 print(f"\n{'='*60}") print("📈 最终测试统计") print(f"{'='*60}") - print(f"总测试次数: {total_tests}") - print(f"成功次数: {total_successful}") - print(f"失败次数: {total_tests - total_successful}") - print(f"总成功率: {(total_successful / total_tests * 100):.2f}%") + if total_tests > 0: + print(f"总测试次数: {total_tests}") + print(f"成功次数: {total_successful}") + print(f"失败次数: {total_tests - total_successful}") + print(f"总成功率: {(total_successful / total_tests * 100):.2f}%") - # 打印每个指令的统计 print(f"\n📋 每个指令的统计:") for i, (instruction, summary) in enumerate(zip(instructions, results_summary), 1): success_rate = (summary['success_count'] / TESTS_PER_INSTRUCTION * 100) @@ -380,10 +426,7 @@ def main(): print(f" 指令 {i}: {success_rate:.1f}% 成功 ({summary['success_count']}/{TESTS_PER_INSTRUCTION}), " f"平均时间: {avg_time:.2f}s") - print(f"\n📁 输出文件:") - print(f"详细日志: {LOG_FILE}") - print(f"详细结果: {RESULTS_CSV}") - print(f"统计摘要: {SUMMARY_CSV}") + print(f"\n📁 输出文件见: {RESULTS_DIR}") if __name__ == "__main__": main() \ No newline at end of file diff --git a/tools/vector_store/chroma.sqlite3 b/tools/vector_store/chroma.sqlite3 index 96bbba24..f3c53464 100644 Binary files a/tools/vector_store/chroma.sqlite3 and b/tools/vector_store/chroma.sqlite3 differ