LingxinMeng 5 månader sedan
förälder
incheckning
0317300c88

+ 43 - 8
src/python2/pjibot_delivery/2callback-pjibot_delivery.py

@@ -31,11 +31,35 @@ def add_hour(date_string, hour_number):
     return new_date.strftime("%Y-%m-%d-%H-%M-%S")
 
 def judge_pcd(callback_json_oss_key):
-    json_content = bucket.get_object(callback_json_oss_key).read()
-    json_object = json.loads(json_content)
-    check = json_object['check']
-    if '点云缺失' in check:
-        return True
+    try:
+        # 从 OSS 获取对象内容
+        json_content = bucket.get_object(callback_json_oss_key).read()
+        
+        # 尝试解析 JSON 数据
+        json_object = json.loads(json_content)
+        
+        # 检查字段是否存在
+        if 'check' not in json_object:
+            logging.error("Missing 'check' field in %s", callback_json_oss_key)
+            return False
+        
+        # 判断 'check' 字段内容
+        check = json_object['check']
+        if '点云缺失' in check:
+            return True
+        
+        # 未匹配的情况
+        return False
+
+    except ValueError as e:
+        # JSON 数据解析失败
+        logging.error("Failed to decode JSON from %s", e)
+        return False
+
+    except Exception as e:
+        # 捕获所有其他异常
+        logging.error("Error processing %s", e)
+        return False
 
 
 if __name__ == '__main__':
@@ -75,15 +99,26 @@ if __name__ == '__main__':
                                 file8 = True
                             if '/trajectory_pji.csv' in str(obj2.key):
                                 file9 = True
+                        if file1 or not file2 or not file3 or not file5 or not file7 or not file8 or not file9:
+                            continue
                         if not pcd_ok:
                             pcd_ok = judge_pcd(str(obj1.key))
-                        if file1 or not file2 or not file3 or not pcd_ok or not file5 or not file7 or not file8 or not file9:
-                            continue
+                            if not pcd_ok:
+                                continue
                         time.sleep(1)
                         logging.info("发送:%s", prefix)
                         json_content = bucket.get_object(str(obj1.key)).read()
                         json_object = json.loads(json_content)
-                        data1 = {"equipmentNo": json_object['equipmentNo'],"secretKey": json_object['secretKey']}
+                        if  'secretKey' not in json_object:
+                            logging.warning("缺少'secretKey'键")
+                            data1 = {
+                                "equipmentNo": json_object['equipmentNo'],
+                                "secretKey": prefix.split('/')[1].split('-')[1]
+                            }
+                            logging.info("数据已处理:%s", data1)
+                        else:
+                            data1 = {"equipmentNo": json_object['equipmentNo'],"secretKey": json_object['secretKey']}
+                            # 如果任何一个键不存在,则记录日志或执行其他错误处理
                         json_data1 = json.dumps(data1)
                         logging.info("授权接口请求中: %s" % url1_private)
                         logging.info("授权发送参数为: %s" % str(data1))

+ 5 - 3
src/python2/pjibot_delivery/2csv-errorBag.json

@@ -4,8 +4,10 @@
     "pjibot_delivery/ps001/data_parse/2024-10-23-14-10-26_obstacledetection_30/", 
     "pjibot_delivery/ps001/data_parse/2024-10-23-14-10-27_obstacledetection_30/", 
     "pjibot_delivery/ps001/data_parse/2024-10-24-15-48-07/", 
-    "pjibot_delivery/ps001/data_parse/VD100M6-BJ-Perception2024-10-24-15-49-34/", 
-    "pjibot_delivery/ps001/data_parse/VP100M23-BJ-movebase-2024-11-15-14-19-41/", 
+    "pjibot_delivery/ps001/data_parse/VD100M6-BJ-Perception2024-10-24-15-49-34/",
     "pjibot_delivery/ps001/data_parse/test_1126_01/", 
-    "pjibot_delivery/ps001/data_parse/mlx11281/"
+    "pjibot_delivery/ps001/data_parse/mlx11281/", 
+    "pjibot_delivery/ps001/data_parse/VD100M21-BJ-movebase-2024-09-14-14-42-27/", 
+    "pjibot_delivery/ps001/data_parse/running2/", 
+    "pjibot_delivery/ps001/data_parse/running3/"
 ]

+ 16 - 9
src/python2/pjibot_delivery/2csv-pjibot_delivery.py

@@ -71,14 +71,18 @@ def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
             logging.error("没有 ego_pji.csv")
             json_utils.add_error(parse_prefix,error_bag_json)
 
-        csv_file_name3 = 'targetposition'
-        local_csv_file_path3 = str(local_csv_dir) + '/' + str(csv_file_name3) + '.csv'
-        oss_csv_object_key3 = parse_prefix + csv_file_name3 + '.csv'
-        if os.path.exists(local_csv_file_path3):
-            bucket.put_object_from_file(oss_csv_object_key3, local_csv_file_path3)
-        else:
-            logging.error("没有 targetposition.csv")
+        if '目标点缺失' in outputs:
+            logging.error("报错【目标点缺失】,不上传targetposition.csv了")
             json_utils.add_error(parse_prefix,error_bag_json)
+        else:
+            csv_file_name3 = 'targetposition'
+            local_csv_file_path3 = str(local_csv_dir) + '/' + str(csv_file_name3) + '.csv'
+            oss_csv_object_key3 = parse_prefix + csv_file_name3 + '.csv'
+            if os.path.exists(local_csv_file_path3):
+                bucket.put_object_from_file(oss_csv_object_key3, local_csv_file_path3)
+            else:
+                logging.error("没有 targetposition.csv")
+                json_utils.add_error(parse_prefix,error_bag_json)
 
         csv_file_name4 = 'objects_pji'
         local_csv_file_path4 = str(local_csv_dir) + '/' + str(csv_file_name4) + '.csv'
@@ -103,7 +107,7 @@ def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
         can_pdf = True
         for output in outputs:
             if str(output) in ['自车数据缺失','无规划路径']:
-                logging.error("【自车数据缺失无规划路径】导致无法生成评价报告PDF")
+                logging.error("【自车数据缺失】或【无规划路径】导致无法生成评价报告PDF")
                 can_pdf = False
         if can_pdf:
             os.chdir(path2)
@@ -159,6 +163,7 @@ if __name__ == '__main__':
                                                                                                           '/')  # data_parse 目录
                     csv1_done = False
                     csv2_done = False
+                    csv3_done = False
                     csv4_done = False
                     csv5_done = False
                     for obj2 in oss2.ObjectIterator(bucket, prefix=parse_prefix_full): # 判断 data_parse 目录下是否有解析后的文件
@@ -166,11 +171,13 @@ if __name__ == '__main__':
                             csv1_done = True
                         if '/ego_pji.csv' in str(obj2.key):
                             csv2_done = True
+                        if '/targetposition.csv' in str(obj2.key):
+                            csv3_done = True
                         if '/objects_pji.csv' in str(obj2.key):
                             csv4_done = True
                         if '/drive.csv' in str(obj2.key):
                             csv5_done = True
-                    if csv1_done and csv2_done and csv4_done and csv5_done:
+                    if csv1_done and csv2_done and csv3_done and csv4_done and csv5_done:
                         continue
                     error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
                     if parse_prefix_full in error_bag_list:

+ 1 - 1
src/python2/pjibot_delivery/2pcd-pjibot_delivery.py

@@ -32,7 +32,7 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
         local_delete_list.append(local_mp4_path)
     except Exception as e:
         local_delete_list.remove(merged_bag_file_path)
-        error_bag_list = json_utils.jsonparse_json_to_string_array(error_bag_json)
+        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
         error_bag_list.append(parse_prefix2)
         json_utils.list_to_json_file(error_bag_list, error_bag_json)
         logging.exception("生成点云视频报错: %s" % str(e))

+ 1 - 1
src/python2/pjibot_delivery/2xosc-pjibot_delivery.py

@@ -125,7 +125,7 @@ if __name__ == '__main__':
                     try:
                         os.remove(local_delete)
                     except Exception as e:
-                        logging.exception("删除本地临时文件报错: %s" % str(e))
+                        pass
             time.sleep(sleep_time)
         except Exception as e:
             logging.exception("全局异常处理: %s", str(e))

+ 1 - 1
src/python2/pjibot_delivery/callback-nohup.sh

@@ -5,5 +5,5 @@ if [ ! -d "./log" ]; then
 else
     echo "Directory './log' already exists."
 fi
-rm -rf log/callback-pjibot_delivery.out log/callback.out log/callback-pjibot_delivery.log log/callback.log
+rm -rf log/callback*
 nohup python2 callback-pjibot_delivery.py > log/callback-pjibot_delivery.out 2>&1 &

+ 58 - 20
src/python2/pjibot_delivery/callback-pjibot_delivery.py

@@ -31,13 +31,25 @@ def add_hour(date_string, hour_number):
     new_date = original_date + timedelta(hours=hour_number)
     return new_date.strftime("%Y-%m-%d-%H-%M-%S")
 
-def judge_pcd(callback_json_oss_key):
-    json_content = bucket.get_object(callback_json_oss_key).read()
-    json_object = json.loads(json_content)
-    check = json_object['check']
-    if '点云缺失' in check:
-        return True
-
+def judge_pcd_xosc(callback_json_oss_key):
+    pcd = False
+    xosc = False
+    try:
+        json_content = bucket.get_object(callback_json_oss_key).read()
+        json_object = json.loads(json_content)
+        if 'check' not in json_object:
+            logging.error("Missing 'check' field in %s", callback_json_oss_key)
+            return pcd,xosc
+        check = json_object['check']
+        if '点云缺失' in check:
+            pcd = True
+        if '不在道路范围' in check:
+            xosc = True
+    except ValueError as e:
+        logging.error("Failed to decode JSON from %s", e)
+    except Exception as e:
+        logging.error("Error processing %s", e)
+    return pcd,xosc
 
 if __name__ == '__main__':
     while True:
@@ -55,8 +67,7 @@ if __name__ == '__main__':
                         file3 = False
                         pcd_ok = False
                         file5 = False
-                        file7 = False
-                        file8 = False
+                        xosc_ok = False
                         file9 = False
                         for obj2 in oss2.ObjectIterator(bucket, prefix=prefix + '/'):
                             if '/callback_done.json' in str(obj2.key):
@@ -66,25 +77,38 @@ if __name__ == '__main__':
                                 file2 = True
                             if '/objects_pji.csv' in str(obj2.key):
                                 file3 = True
-                            if '/pcd_overlook.mp4' in str(obj2.key):
-                                pcd_ok = True
                             if '/drive.csv' in str(obj2.key):
                                 file5 = True
-                            if '/scenario_orig.mp4' in str(obj2.key):
-                                file7 = True
-                            if '/scenario_hmi.xosc' in str(obj2.key):
-                                file8 = True
                             if '/trajectory_pji.csv' in str(obj2.key):
                                 file9 = True
-                        if not pcd_ok:
-                            pcd_ok = judge_pcd(str(obj1.key))
-                        if file1 or not file2 or not file3 or not pcd_ok or not file5 or not file7 or not file8 or not file9:
+                            if '/pcd_overlook.mp4' in str(obj2.key):
+                                pcd_ok = True
+                            if '/scenario_hmi.xosc' in str(obj2.key):
+                                xosc_ok = True
+                        if file1 or not file2 or not file3 or not file5 or not file9:
                             continue
+                        if not pcd_ok:
+                            pcd_ok,temp = judge_pcd_xosc(str(obj1.key))
+                            if not pcd_ok:
+                                continue
+                        if not xosc_ok:
+                            temp,xosc_ok = judge_pcd_xosc(str(obj1.key))
+                            if not xosc_ok:
+                                continue
                         time.sleep(1)
                         logging.info("发送:%s", prefix)
                         json_content = bucket.get_object(str(obj1.key)).read()
                         json_object = json.loads(json_content)
-                        data1 = {"equipmentNo": json_object['equipmentNo'],"secretKey": json_object['secretKey']}
+                        if  'secretKey' not in json_object:
+                            logging.warning("缺少'secretKey'键")
+                            data1 = {
+                                "equipmentNo": json_object['equipmentNo'],
+                                "secretKey": prefix.split('/')[1].split('-')[1]
+                            }
+                            logging.info("数据已处理:%s", data1)
+                        else:
+                            data1 = {"equipmentNo": json_object['equipmentNo'],"secretKey": json_object['secretKey']}
+                            # 如果任何一个键不存在,则记录日志或执行其他错误处理
                         json_data1 = json.dumps(data1)
                         logging.info("授权接口请求中: %s" % url1_private)
                         logging.info("授权发送参数为: %s" % str(data1))
@@ -101,7 +125,21 @@ if __name__ == '__main__':
                         old_ros_bag_path = json_object['rosBagPath']
                         task_id = json_object['taskId']
                         trigger_id = json_object['triggerId']
-                        check = json_object['check']
+                        check = []
+                        # 检查 'check' 键的值是列表还是字符串
+                        if 'check' in json_object:
+                            if isinstance(json_object['check'], list):
+                                # 如果 'check' 是列表,则直接使用它(或者根据需要处理)
+                                check = json_object['check']  # 如果不需要修改列表,可以直接赋值
+                            elif isinstance(json_object['check'], basestring):
+                                # 如果 'check' 是字符串,则将其添加到空列表中
+                                check = [json_object['check']]
+                            else:
+                                # 如果 'check' 不是列表也不是字符串,记录日志或进行其他错误处理
+                                logging.warning("'check' 的类型不是列表也不是字符串,类型为:%s", type(json_object['check']))
+                        else:
+                            # 如果 'check' 键不存在,记录日志或进行其他错误处理
+                            logging.warning("'check' 键在 json_object 中不存在")
                         check_order = ['自车数据缺失', '不在道路范围', '无规划路径', '目标点缺失','点云缺失', '点云丢帧', '解析程序错误', '还原程序错误', '评价程序错误']
                         check_order_dict = dict((item, idx) for idx, item in enumerate(check_order))
                         check = sorted(check, key=lambda x: check_order_dict.get(x, float('inf')))

+ 141 - 144
src/python2/pjibot_delivery/csv-errorBag.json

@@ -1,58 +1,7 @@
 [
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-09-10-10-20-26_TaskFailed_30/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-17-06/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-18-01/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-21-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-14/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-23-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-20/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-43/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-26-54/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-27-39/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-28-17/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-33/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-30-32/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-31-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-32-50/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-33-35/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-38-36/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-44/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-11-32/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-34-39/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-37-46/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-39-09/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-12/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-45-19/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-47-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-48-07/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-49-34/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-51-51/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-52-51/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-15/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-58/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-21-06/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-22-23/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-23-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-24-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-09-52-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-06-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-09-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-12-43/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-33-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-40-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-42-33/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-43-45/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-16-05-42/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-47-55/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-54-12/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-21-44/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/2024-10-23-14-10-28_obstacledetection_30/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/36110-2024-10-24-15-49-34/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M20-BJ-dock-2024-11-14-18-31-39/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-23-26/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-24-07/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-24-29/", 
@@ -77,39 +26,6 @@
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-45-08/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-45-50/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-46-23/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-17-06/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-18-01/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-59/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-23-55/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-26-54/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-27-39/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-28-17/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-00/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-30-32/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-31-59/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-32-50/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-33-35/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-53/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-38-36/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-39-09/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-12/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-44/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-45-19/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-48-07/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-49-34/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-51-51/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-52-51/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-21-42/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-14/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-20/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-43/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-33/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-10/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-47-05/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/2024-10-23-14-10-28_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-31-57/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-32-42/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-33-17/", 
@@ -122,64 +38,10 @@
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-43-28/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-44-11/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-44-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-53-23/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-56-50/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-50-39/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-54-17/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-55-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-57-57/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-58-52/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-02-11/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-52-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-00-45/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-05-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-07-32/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-08-46/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-09-43/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-10-44/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-11-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-12-44/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-15-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VP100M23-BJ-movebase-2024-11-15-14-19-41/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-24-15-48-07/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/test_1128/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/pji-2024-10-24-15-48-07/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前倾10°_2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物穿梭2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物遮挡2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏斜30°_2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏移15cm_2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩左偏移30°_2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩有电 轮廓遮挡2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电 轮廓遮挡2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/障碍物跟随2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/36110-2024-10-24-15-49-34/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M20-BJ-dock-2024-11-14-18-31-39/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-12-11-29-38/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-12-16-46-00/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-09-38/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-13-28/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-15-02/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-17-58/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-19-08/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-21-51/", 
@@ -226,6 +88,7 @@
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-18-26/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-19-37/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-20-30/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-21-44/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-22-34/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-32-20/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-34-43/", 
@@ -234,11 +97,13 @@
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-46-03/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-46-40/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-47-16/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-47-55/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-48-25/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-49-08/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-50-00/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-51-26/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-52-46/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-54-12/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-55-20/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-00-26/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-01-26/", 
@@ -265,11 +130,47 @@
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-50-40/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-51-37/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-52-29/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-17-06/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-18-01/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-21-42/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-14/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-59/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-23-55/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-20/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-43/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-26-54/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-27-39/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-28-17/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-00/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-33/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-30-32/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-31-59/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-32-50/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-33-35/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-10/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-53/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-38-36/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-39-09/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-12/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-44/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-45-19/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-47-05/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-48-07/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-49-34/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-51-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-52-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VP100M23-BJ-movebase-2024-11-15-14-19-41/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/pji-2024-10-24-15-48-07/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/test_1128/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-09-10-10-20-26_TaskFailed_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-09-12-14-24-23_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-09-13-09-23-24_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-22-15-27-44_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-23-09-31-34_obstacledetection_30/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-24-15-48-07/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-25-09-58-21_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-11-04-15-23-40_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-11-04-15-38-12_obstacledetection_30/", 
@@ -282,6 +183,16 @@
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-11-12-17-29-31_obstacledetection_30/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-11-12-17-30-49_obstacledetection_3/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-11-12-17-38-35_obstacledetection_30/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-12-24/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-15-01/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-18-40/", 
@@ -289,6 +200,56 @@
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-24-03/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-25-48/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-37-20/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-09-52-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-06-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-09-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-11-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-12-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-33-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-34-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-37-46/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-40-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-42-33/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-43-45/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-16-05-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-17-06/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-18-01/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-21-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-14/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-23-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-20/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-26-54/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-27-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-28-17/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-33/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-30-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-31-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-32-50/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-33-35/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-38-36/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-39-09/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-12/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-44-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-45-19/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-47-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-48-07/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-49-34/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-51-51/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-52-51/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-15/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-58/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-21-06/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-22-23/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-23-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-24-00/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-26-31/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-27-50/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-29-07/", 
@@ -303,6 +264,42 @@
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-45-05/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-46-29/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-48-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-12-04-11-06-47/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/2024-12-04-10-32-38/"
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-11-39-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-27-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-30-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-31-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-32-26/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-34-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-40-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-47-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-50-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-52-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-53-23/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-54-17/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-55-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-56-50/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-57-57/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-58-52/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-00-45/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-02-11/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-05-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-07-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-08-46/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-09-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-10-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-11-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-12-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VP100M23-BJ-movebase-2024-11-15-14-19-41/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前倾10°_2024-09-29-15-47-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物穿梭2024-09-29-15-32-26/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物遮挡2024-09-29-15-31-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏斜30°_2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏移15cm_2024-09-29-15-40-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩左偏移30°_2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩有电 轮廓遮挡2024-09-29-15-30-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电 轮廓遮挡2024-09-29-15-27-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电2024-09-29-11-39-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/障碍物跟随2024-09-29-15-34-00/"
 ]

+ 17 - 9
src/python2/pjibot_delivery/csv-pjibot_delivery.py

@@ -26,6 +26,7 @@ error_bag_json = "/mnt/disk001/dcl_data_process/src/python2/pjibot_delivery/csv-
 # ------- 全局配置 -------
 
 
+    
 def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
     try:
         bagtocsv_robot.parse(data_bag, local_parse_dir + '/csv/')
@@ -72,14 +73,18 @@ def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
             logging.error("没有 ego_pji.csv")
             json_utils.add_error(parse_prefix,error_bag_json)
 
-        csv_file_name3 = 'targetposition'
-        local_csv_file_path3 = str(local_csv_dir) + '/' + str(csv_file_name3) + '.csv'
-        oss_csv_object_key3 = parse_prefix + csv_file_name3 + '.csv'
-        if os.path.exists(local_csv_file_path3):
-            bucket.put_object_from_file(oss_csv_object_key3, local_csv_file_path3)
-        else:
-            logging.error("没有 targetposition.csv")
+        if '目标点缺失' in outputs:
+            logging.error("报错【目标点缺失】,不上传targetposition.csv了")
             json_utils.add_error(parse_prefix,error_bag_json)
+        else:
+            csv_file_name3 = 'targetposition'
+            local_csv_file_path3 = str(local_csv_dir) + '/' + str(csv_file_name3) + '.csv'
+            oss_csv_object_key3 = parse_prefix + csv_file_name3 + '.csv'
+            if os.path.exists(local_csv_file_path3):
+                bucket.put_object_from_file(oss_csv_object_key3, local_csv_file_path3)
+            else:
+                logging.error("没有 targetposition.csv")
+                json_utils.add_error(parse_prefix,error_bag_json)
 
         csv_file_name4 = 'objects_pji'
         local_csv_file_path4 = str(local_csv_dir) + '/' + str(csv_file_name4) + '.csv'
@@ -104,7 +109,7 @@ def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
         can_pdf = True
         for output in outputs:
             if str(output) in ['自车数据缺失','无规划路径']:
-                logging.error("【自车数据缺失无规划路径】导致无法生成评价报告PDF")
+                logging.error("【自车数据缺失】或【无规划路径】导致无法生成评价报告PDF")
                 can_pdf = False
         if can_pdf:
             os.chdir(path2)
@@ -160,6 +165,7 @@ if __name__ == '__main__':
                                                                                                           '/')  # data_parse 目录
                     csv1_done = False
                     csv2_done = False
+                    csv3_done = False
                     csv4_done = False
                     csv5_done = False
                     for obj2 in oss2.ObjectIterator(bucket, prefix=parse_prefix_full): # 判断 data_parse 目录下是否有解析后的文件
@@ -167,11 +173,13 @@ if __name__ == '__main__':
                             csv1_done = True
                         if '/ego_pji.csv' in str(obj2.key):
                             csv2_done = True
+                        if '/targetposition.csv' in str(obj2.key):
+                            csv3_done = True
                         if '/objects_pji.csv' in str(obj2.key):
                             csv4_done = True
                         if '/drive.csv' in str(obj2.key):
                             csv5_done = True
-                    if csv1_done and csv2_done and csv4_done and csv5_done:
+                    if csv1_done and csv2_done and csv3_done and csv4_done and csv5_done:
                         continue
                     error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
                     if parse_prefix_full in error_bag_list:

+ 2 - 4
src/python2/pjibot_delivery/pcd-errorBag.json

@@ -17,6 +17,7 @@
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-24-15-48-07/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
@@ -98,8 +99,5 @@
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩有电 轮廓遮挡2024-09-29-15-30-25/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电 轮廓遮挡2024-09-29-15-27-25/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/障碍物跟随2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/2024-10-23-14-10-28_obstacledetection_30/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/test_1128/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-24-15-48-07/"
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/障碍物跟随2024-09-29-15-34-00/"
 ]

+ 23 - 1
src/python2/pjibot_delivery/pcd-pjibot_delivery.py

@@ -7,6 +7,8 @@ import os
 import time
 import oss2
 import logging
+import io
+import json
 from resource import pcdtovideo_monitor_overlook
 from utils import json_utils
 path1 = '/mnt/disk001/dcl_data_process/src/python2/pjibot_delivery/'
@@ -28,11 +30,31 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
         local_mp4_path = str(local_pcd_mp4_dir) + '/'+pcd_mp4_file_name+'.mp4'
         oss_csv_object_key3 = parse_prefix2 + pcd_mp4_file_name + '.mp4'
         bucket.put_object_from_file(oss_csv_object_key3, local_mp4_path)
+        if not os.path.exists(local_mp4_path):
+            # ------- 处理 output.json - 开始 -------
+            try:
+                # 2 将 output.json 添加到 callback.json 的 check 字段
+                callback_json_oss_key = parse_prefix+'callback.json'
+                callback_json_local = local_parse_dir+'/callback.json'
+                bucket.get_object_to_file(callback_json_oss_key, callback_json_local)
+                with io.open(callback_json_local, 'r', encoding='utf-8') as f:
+                    data = json.load(f)
+                if 'check' not in data:
+                    data['check'] = []
+                data['check'].extend(['点云缺失'])
+                data['check'] = list(set(data['check'])) # 去重
+                json_data = json.dumps(data, ensure_ascii=False, indent=4)
+                with io.open(callback_json_local, 'w', encoding='utf-8') as f:
+                    f.write(unicode(json_data))
+                bucket.put_object_from_file(callback_json_oss_key, callback_json_local)
+            except Exception as e3:
+                pass
+            # ------- 处理 output.json - 结束 -------
         logging.info("上传点云视频到: %s", oss_csv_object_key3)
         local_delete_list.append(local_mp4_path)
     except Exception as e:
         local_delete_list.remove(merged_bag_file_path)
-        error_bag_list = json_utils.jsonparse_json_to_string_array(error_bag_json)
+        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
         error_bag_list.append(parse_prefix2)
         json_utils.list_to_json_file(error_bag_list, error_bag_json)
         logging.exception("生成点云视频报错: %s" % str(e))

+ 25 - 6
src/python2/pjibot_delivery/resource/bagtocsv_robot.py

@@ -117,18 +117,23 @@ def parsehancheng(input_dir, output_dir):
             targetposition_lost_flag=True
             
             pcd_exist_flag=False
+            pre_targetposition_x=0
+            pre_targetposition_y=0
+            
+            
             
             
             #用来判断机器人点云/图像/规划/定位是否丢帧↑↑↑
             
             for topic,msg,t in bag.read_messages(topics=['/wheel','/obstacle_detection','/wheel_odom','/cmd_vel','/robot_pose','/tracking/objects','/nav/task_feedback_info',
-                                                         '/robot/final_trajectory','/gnss','/image_raw','/velodyne_points','/robot/targetposition']):   
+                                                         '/robot/final_trajectory','/gnss','/image_raw','/velodyne_points','/robot/targetposition','/robot/planning_end_pose']):   
                 
                 if first_message_time is None:  
                     first_message_time = t
                     first_message_time = rospy.Time.to_sec(first_message_time)
                     first_message_time = datetime.fromtimestamp(first_message_time)
                 
+                '''#原来目标点从这个话题里获取,但是这个话题不是每次都有,改用/robot/planning_end_pose
                 if topic == "/robot/targetposition":
                     targetposition_lost_flag=False
                     X=msg.pose.position.x
@@ -143,11 +148,25 @@ def parsehancheng(input_dir, output_dir):
                     H=quaternion_to_euler(OX,OY,OZ,OW)
                     message_targetposition=[str(t)[:-6],X,Y,Z,H]
                     writer_targetposition.writerow(message_targetposition)
-                   
-                    
-                    
-                    
-                    
+                '''   
+                if topic == "/robot/planning_end_pose":
+                    targetposition_lost_flag=False
+                    X=msg.pose.position.x
+
+                    Y=msg.pose.position.y
+
+                    Z=msg.pose.position.z
+                    if X!=0 and Y!=0 and (X!=pre_targetposition_x or Y!=pre_targetposition_y):
+                        OX=msg.pose.orientation.x
+                        OY=msg.pose.orientation.y
+                        OZ=msg.pose.orientation.z
+                        OW=msg.pose.orientation.w
+                        H=quaternion_to_euler(OX,OY,OZ,OW)
+                        message_targetposition=[str(t)[:-6],X,Y,Z,H]
+                        writer_targetposition.writerow(message_targetposition)  
+                        pre_targetposition_x=X
+                        pre_targetposition_y=Y
+                  
                     
                 if topic == "/velodyne_points":
                     pcd_exist_flag=True

+ 3 - 5
src/python2/pjibot_delivery/simulation-pjibot_delivery.py

@@ -6,16 +6,14 @@ import xml.etree.ElementTree as ET
 import shutil
 import docker
 import logging
-
 key1 = 'pjibot_delivery/'
 path1 = '/scenarios1/'
 path2 = '/mnt/disk001/dcl_data_process/src/python2/pjibot_delivery/'
-
 vehicle_name = 'PuJin_distribution'  # 配送 PuJin_distribution 巡检 PuJin_patrol_robot
 xoscName = 'scenario.xosc'
 logging.basicConfig(filename=path2 + 'log/simulation-pjibot_delivery.log', level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')
-
 sleep_time = 10  # 每多少秒扫描一次
+container_name = 'vtd1'
 
 
 def move_xosc_before_simulation(root_path):
@@ -70,7 +68,7 @@ def upload_simulation(parse_prefix, mp41):
 
 def simulation(parse_prefix, mp41):
     try:
-        os.system("docker start vtd1")
+        os.system('docker start '+container_name)
         # 实例化Docker客户端
         client = docker.from_env()
         while True:
@@ -80,7 +78,7 @@ def simulation(parse_prefix, mp41):
             run = False
             # 打印容器列表
             for container in containers:
-                if 'vtd1' == container.name:
+                if container_name == container.name:
                     run = True
                     break
             if not run:

+ 149 - 64
src/python2/pjibot_delivery/xosc-errorBag.json

@@ -1,66 +1,151 @@
 [
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/2024-10-23-14-10-28_obstacledetection_30/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-09-52-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-06-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-09-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-11-32/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-12-43/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-33-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-34-39/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-37-46/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-40-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-42-33/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-43-45/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-16-05-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-50-39/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-52-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-53-23/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-54-17/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-55-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-56-50/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-57-57/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-58-52/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-00-45/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-02-11/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-05-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-07-32/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-08-46/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-09-43/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-10-44/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-11-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-12-44/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前倾10°_2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物穿梭2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物遮挡2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏斜30°_2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏移15cm_2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩左偏移30°_2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩有电 轮廓遮挡2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电 轮廓遮挡2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/障碍物跟随2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-09-12-14-24-23_obstacledetection_30/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-09-13-09-23-24_obstacledetection_30/", 
-    "pjibot_patrol/pjibot-P1YVXJ1M231M00022/data_parse/2024-08-01-17-28-27_1038/", 
-    "pjibot_patrol/pjibot-P1YVXJ1M231M00023/data_parse/VP100M23-BJ-movebase-2024-11-15-11-23-25/"
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M20-BJ-dock-2024-11-14-18-31-39/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-23-26/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-24-07/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-24-29/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-25-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-26-31/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-27-16/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-43-32/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-44-11/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-44-41/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-45-08/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-45-50/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-46-23/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-31-57/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-32-42/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-33-17/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-34-23/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-34-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-35-28/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-37-00/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-37-29/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-38-45/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-43-28/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-44-11/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-44-42/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-09-38/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-13-28/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-15-02/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-17-58/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-19-08/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-21-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-11-22-34/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-09-55-03/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-16-24/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-27-42/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-28-56/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-29-48/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-14-37/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-15-36/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-16-14/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-16-46/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-17-43/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-18-26/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-19-37/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-20-30/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-21-44/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-22-34/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-32-20/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-34-43/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-14-44-45/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-00-26/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-01-26/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-02-28/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-03-20/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-04-06/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-04-43/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-23-15-05-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-15-05/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-15-55/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-17-20/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-20-23/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-22-37/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-23-27/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-24-41/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-18-25-42/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-49-45/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-50-40/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-51-37/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-15-14-52-29/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-17-06/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-18-01/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-21-42/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-14/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-59/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-23-55/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-20/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-43/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-26-54/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-27-39/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-28-17/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-00/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-33/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-30-32/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-31-59/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-32-50/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-33-35/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-10/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-53/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-38-36/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-39-09/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-51-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-52-51/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-23-09-31-34_obstacledetection_30/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-10-25-09-58-21_obstacledetection_30/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-12-24/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-15-01/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-18-40/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-20-45/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-24-03/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-25-48/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-37-20/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-18-01/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-21-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-14/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-22-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-23-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-20/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-24-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-26-54/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-27-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-28-17/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-29-33/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-30-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-31-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-32-50/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-33-35/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-35-15/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-36-31/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-37-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-38-36/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-39-09/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-51-51/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-52-51/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-10-24-15-53-24/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-15/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-58/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-21-06/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-22-23/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-23-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-24-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-26-31/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-27-50/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-29-07/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-31-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-33-01/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-33-52/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-36-33/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-37-51/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-38-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-39-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-43-11/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-45-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-46-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-48-55/"
 ]

+ 33 - 33
src/python2/pjibot_delivery/xosc-pjibot_delivery.py

@@ -33,48 +33,48 @@ def generate_xosc(parse_prefix, local_parse_dir, local_delete_list):
         if process.returncode == 0:
             logging.info("命令输出: %s", stdout.decode("utf-8"))
         else:
-            logging.error("命令执行失败,错误码: %d", process.returncode)
             logging.error("命令错误输出: %s", stderr.decode("utf-8"))
-        local_xosc_path2 = local_parse_dir + 'simulation/xosc/openx_outdoor0.xosc'
-        bucket.put_object_from_file(parse_prefix + 'scenario.xosc', local_xosc_path2)
-        bucket.put_object_from_file(parse_prefix + 'scenario_hmi.xosc', local_xosc_path2)
-        logging.info("上传 scenario_hmi.xosc 成功: %s" % str(parse_prefix + 'scenario.xosc'))
         
         # ------- 处理 output.json - 开始 -------
-        output_json_path = local_parse_dir + 'simulation/xosc/output.json'
+        output_json_path = local_parse_dir + 'output.json'
         callback_json_oss_key = parse_prefix+'callback.json'
-        callback_json_local = local_parse_dir+'/callback.json'
-        try:
-            # 1 解析 output.json
-            if os.path.exists(output_json_path):
-                outputs = json_utils.parse_json_to_string_array(output_json_path)
-                # 2 将 output.json 添加到 callback.json 的 check 字段
-                bucket.get_object_to_file(callback_json_oss_key, callback_json_local)
-                with io.open(callback_json_local, 'r', encoding='utf-8') as f:
-                    data = json.load(f)
-                if 'check' not in data:
-                    data['check'] = []
-                data['check'].extend(outputs)
-                json_data = json.dumps(data, ensure_ascii=False, indent=4)
-                with io.open(callback_json_local, 'w', encoding='utf-8') as f:
-                    f.write(unicode(json_data))
-                bucket.put_object_from_file(callback_json_oss_key, callback_json_local)
-        except Exception as e3:
-            # todo 可能没有callback.json,已经处理成 callback_done.json了,暂时不管
-            logging.exception("处理 output.json报错: %s" % str(e3))
-            pass
+        callback_json_local = local_parse_dir+'callback.json'
+        local_xosc_path2 = local_parse_dir + 'simulation/xosc/openx_outdoor0.xosc'
+        if os.path.exists(local_xosc_path2):
+            bucket.put_object_from_file(parse_prefix + 'scenario.xosc', local_xosc_path2)
+            bucket.put_object_from_file(parse_prefix + 'scenario_hmi.xosc', local_xosc_path2)
+            logging.info("上传 scenario_hmi.xosc 成功: %s" % str(parse_prefix + 'scenario.xosc'))
+        else:
+            try:
+                # 1 解析 output.json
+                if os.path.exists(output_json_path):
+                    outputs = json_utils.parse_json_to_string_array(output_json_path)
+                    # 2 将 output.json 添加到 callback.json 的 check 字段
+                    bucket.get_object_to_file(callback_json_oss_key, callback_json_local)
+                    with io.open(callback_json_local, 'r', encoding='utf-8') as f:
+                        data = json.load(f)
+                    if 'check' not in data:
+                        data['check'] = []
+                    data['check'].extend(outputs)
+                    data['check'] = list(set(data['check']))
+                    json_data = json.dumps(data, ensure_ascii=False, indent=4)
+                    with io.open(callback_json_local, 'w', encoding='utf-8') as f:
+                        f.write(unicode(json_data))
+                    bucket.put_object_from_file(callback_json_oss_key, callback_json_local)
+                    if '不在道路范围' in outputs:
+                        json_utils.add_error(parse_prefix,error_bag_json)
+            except Exception as e3:
+                # todo 可能没有callback.json,已经处理成 callback_done.json了,暂时不管
+                logging.exception("处理 output.json报错: %s" % str(e3))
+                pass
         # ------- 处理 output.json - 结束 -------
-        
-        
         # 处理删除
         local_delete_list.append(local_xosc_path2)
         local_delete_list.append(callback_json_local)
     except Exception as e:
-        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
-        error_bag_list.append(parse_prefix)
-        json_utils.list_to_json_file(error_bag_list, error_bag_json)
+        json_utils.add_error(parse_prefix,error_bag_json)
         logging.exception("生成xosc报错: %s" % str(e))
-
+        
 if __name__ == '__main__':
     while True:
         try:
@@ -126,7 +126,7 @@ if __name__ == '__main__':
                     try:
                         os.remove(local_delete)
                     except Exception as e:
-                        logging.exception("删除本地临时文件报错: %s" % str(e))
+                        pass
             time.sleep(sleep_time)
         except Exception as e:
             logging.exception("全局异常处理: %s", str(e))

+ 33 - 7
src/python2/pjibot_patrol/2callback-pjibot_patrol.py

@@ -31,11 +31,35 @@ def add_hour(date_string, hour_number):
     return new_date.strftime("%Y-%m-%d-%H-%M-%S")
 
 def judge_pcd(callback_json_oss_key):
-    json_content = bucket.get_object(callback_json_oss_key).read()
-    json_object = json.loads(json_content)
-    check = json_object['check']
-    if '点云缺失' in check:
-        return True
+    try:
+        # 从 OSS 获取对象内容
+        json_content = bucket.get_object(callback_json_oss_key).read()
+        
+        # 尝试解析 JSON 数据
+        json_object = json.loads(json_content)
+        
+        # 检查字段是否存在
+        if 'check' not in json_object:
+            logging.error("Missing 'check' field in %s", callback_json_oss_key)
+            return False
+        
+        # 判断 'check' 字段内容
+        check = json_object['check']
+        if '点云缺失' in check:
+            return True
+        
+        # 未匹配的情况
+        return False
+
+    except ValueError as e:
+        # JSON 数据解析失败
+        logging.error("Failed to decode JSON from %s", e)
+        return False
+
+    except Exception as e:
+        # 捕获所有其他异常
+        logging.error("Error processing %s", e)
+        return False
 
 
 if __name__ == '__main__':
@@ -75,10 +99,12 @@ if __name__ == '__main__':
                                 file8 = True
                             if '/trajectory_pji.csv' in str(obj2.key):
                                 file9 = True
+                        if file1 or not file2 or not file3 or not file5 or not file7 or not file8 or not file9:
+                            continue
                         if not pcd_ok:
                             pcd_ok = judge_pcd(str(obj1.key))
-                        if file1 or not file2 or not file3 or not pcd_ok or not file5 or not file7 or not file8 or not file9:
-                            continue
+                            if not pcd_ok:
+                                continue
                         time.sleep(1)
                         logging.info("发送:%s", prefix)
                         json_content = bucket.get_object(str(obj1.key)).read()

+ 1 - 1
src/python2/pjibot_patrol/2csv-pjibot_patrol.py

@@ -103,7 +103,7 @@ def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
         can_pdf = True
         for output in outputs:
             if str(output) in ['自车数据缺失','无规划路径']:
-                logging.error("【自车数据缺失无规划路径】导致无法生成评价报告PDF")
+                logging.error("【自车数据缺失】或【无规划路径】导致无法生成评价报告PDF")
                 can_pdf = False
         if can_pdf:
             os.chdir(path2)

+ 1 - 1
src/python2/pjibot_patrol/2pcd-pjibot_patrol.py

@@ -32,7 +32,7 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
         local_delete_list.append(local_mp4_path)
     except Exception as e:
         local_delete_list.remove(merged_bag_file_path)
-        error_bag_list = json_utils.jsonparse_json_to_string_array(error_bag_json)
+        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
         error_bag_list.append(parse_prefix2)
         json_utils.list_to_json_file(error_bag_list, error_bag_json)
         logging.exception("生成点云视频报错: %s" % str(e))

+ 27 - 14
src/python2/pjibot_patrol/callback-pjibot_patrol.py

@@ -31,14 +31,25 @@ def add_hour(date_string, hour_number):
     new_date = original_date + timedelta(hours=hour_number)
     return new_date.strftime("%Y-%m-%d-%H-%M-%S")
 
-def judge_pcd(callback_json_oss_key):
-    json_content = bucket.get_object(callback_json_oss_key).read()
-    json_object = json.loads(json_content)
-    check = json_object['check']
-    if '点云缺失' in check:
-        return True
-
-
+def judge_pcd_xosc(callback_json_oss_key):
+    pcd = False
+    xosc = False
+    try:
+        json_content = bucket.get_object(callback_json_oss_key).read()
+        json_object = json.loads(json_content)
+        if 'check' not in json_object:
+            logging.error("Missing 'check' field in %s", callback_json_oss_key)
+            return pcd,xosc
+        check = json_object['check']
+        if '点云缺失' in check:
+            pcd = True
+        if '不在道路范围' in check:
+            xosc = True
+    except ValueError as e:
+        logging.error("Failed to decode JSON from %s", e)
+    except Exception as e:
+        logging.error("Error processing %s", e)
+    return pcd,xosc
 if __name__ == '__main__':
     while True:
         logging.info("开始新一轮扫描")
@@ -56,7 +67,7 @@ if __name__ == '__main__':
                         pcd_ok = False
                         file5 = False
                         file7 = False
-                        file8 = False
+                        xosc_ok = False
                         file9 = False
                         for obj2 in oss2.ObjectIterator(bucket, prefix=prefix + '/'):
                             if '/callback_done.json' in str(obj2.key):
@@ -72,14 +83,16 @@ if __name__ == '__main__':
                                 file5 = True
                             if '/scenario_orig.mp4' in str(obj2.key):
                                 file7 = True
-                            if '/scenario_hmi.xosc' in str(obj2.key):
-                                file8 = True
                             if '/trajectory_pji.csv' in str(obj2.key):
                                 file9 = True
-                        if not pcd_ok:
-                            pcd_ok = judge_pcd(str(obj1.key))
-                        if file1 or not file2 or not file3 or not pcd_ok or not file5 or not file7 or not file8 or not file9:
+                        if file1 or not file2 or not file3 or not file5 or not file7 or not file9:
                             continue
+                        if not pcd_ok:
+                            pcd_ok,xosc_ok = judge_pcd_xosc(str(obj1.key))
+                            if not pcd_ok:
+                                continue
+                            if not xosc_ok:
+                                continue
                         time.sleep(1)
                         logging.info("发送:%s", prefix)
                         json_content = bucket.get_object(str(obj1.key)).read()

+ 1 - 1
src/python2/pjibot_patrol/csv-pjibot_patrol.py

@@ -104,7 +104,7 @@ def parse_csv(data_bag, parse_prefix, local_parse_dir, local_delete_list):
         can_pdf = True
         for output in outputs:
             if str(output) in ['自车数据缺失','无规划路径']:
-                logging.error("【自车数据缺失无规划路径】导致无法生成评价报告PDF")
+                logging.error("【自车数据缺失】或【无规划路径】导致无法生成评价报告PDF")
                 can_pdf = False
         if can_pdf:
             os.chdir(path2)

+ 1 - 1
src/python2/pjibot_patrol/pcd-pjibot_patrol.py

@@ -32,7 +32,7 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
         local_delete_list.append(local_mp4_path)
     except Exception as e:
         local_delete_list.remove(merged_bag_file_path)
-        error_bag_list = json_utils.jsonparse_json_to_string_array(error_bag_json)
+        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
         error_bag_list.append(parse_prefix2)
         json_utils.list_to_json_file(error_bag_list, error_bag_json)
         logging.exception("生成点云视频报错: %s" % str(e))

+ 30 - 30
src/python2/pjibot_patrol/xosc-pjibot_patrol.py

@@ -34,45 +34,45 @@ def generate_xosc(parse_prefix, local_parse_dir, local_delete_list):
             logging.info("命令输出: %s", stdout.decode("utf-8"))
         else:
             logging.error("命令错误输出: %s", stderr.decode("utf-8"))
-        local_xosc_path2 = local_parse_dir + 'simulation/xosc/openx_outdoor0.xosc'
-        bucket.put_object_from_file(parse_prefix + 'scenario.xosc', local_xosc_path2)
-        bucket.put_object_from_file(parse_prefix + 'scenario_hmi.xosc', local_xosc_path2)
-        logging.info("上传 scenario_hmi.xosc 成功: %s" % str(parse_prefix + 'scenario.xosc'))
         
         # ------- 处理 output.json - 开始 -------
-        output_json_path = local_parse_dir + 'simulation/xosc/output.json'
+        output_json_path = local_parse_dir + 'output.json'
         callback_json_oss_key = parse_prefix+'callback.json'
         callback_json_local = local_parse_dir+'callback.json'
-        try:
-            # 1 解析 output.json
-            if os.path.exists(output_json_path):
-                outputs = json_utils.parse_json_to_string_array(output_json_path)
-                # 2 将 output.json 添加到 callback.json 的 check 字段
-                bucket.get_object_to_file(callback_json_oss_key, callback_json_local)
-                with io.open(callback_json_local, 'r', encoding='utf-8') as f:
-                    data = json.load(f)
-                if 'check' not in data:
-                    data['check'] = []
-                data['check'].extend(outputs)
-                data['check'] = list(set(data['check']))
-                json_data = json.dumps(data, ensure_ascii=False, indent=4)
-                with io.open(callback_json_local, 'w', encoding='utf-8') as f:
-                    f.write(unicode(json_data))
-                bucket.put_object_from_file(callback_json_oss_key, callback_json_local)
-        except Exception as e3:
-            # todo 可能没有callback.json,已经处理成 callback_done.json了,暂时不管
-            logging.exception("处理 output.json报错: %s" % str(e3))
-            pass
+        local_xosc_path2 = local_parse_dir + 'simulation/xosc/openx_outdoor0.xosc'
+        if os.path.exists(local_xosc_path2):
+            bucket.put_object_from_file(parse_prefix + 'scenario.xosc', local_xosc_path2)
+            bucket.put_object_from_file(parse_prefix + 'scenario_hmi.xosc', local_xosc_path2)
+            logging.info("上传 scenario_hmi.xosc 成功: %s" % str(parse_prefix + 'scenario.xosc'))
+        else:
+            try:
+                # 1 解析 output.json
+                if os.path.exists(output_json_path):
+                    outputs = json_utils.parse_json_to_string_array(output_json_path)
+                    # 2 将 output.json 添加到 callback.json 的 check 字段
+                    bucket.get_object_to_file(callback_json_oss_key, callback_json_local)
+                    with io.open(callback_json_local, 'r', encoding='utf-8') as f:
+                        data = json.load(f)
+                    if 'check' not in data:
+                        data['check'] = []
+                    data['check'].extend(outputs)
+                    data['check'] = list(set(data['check']))
+                    json_data = json.dumps(data, ensure_ascii=False, indent=4)
+                    with io.open(callback_json_local, 'w', encoding='utf-8') as f:
+                        f.write(unicode(json_data))
+                    bucket.put_object_from_file(callback_json_oss_key, callback_json_local)
+                    if '不在道路范围' in outputs:
+                        json_utils.add_error(parse_prefix,error_bag_json)
+            except Exception as e3:
+                # todo 可能没有callback.json,已经处理成 callback_done.json了,暂时不管
+                logging.exception("处理 output.json报错: %s" % str(e3))
+                pass
         # ------- 处理 output.json - 结束 -------
-        
-        
         # 处理删除
         local_delete_list.append(local_xosc_path2)
         local_delete_list.append(callback_json_local)
     except Exception as e:
-        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
-        error_bag_list.append(parse_prefix)
-        json_utils.list_to_json_file(error_bag_list, error_bag_json)
+        json_utils.add_error(parse_prefix,error_bag_json)
         logging.exception("生成xosc报错: %s" % str(e))
 
 if __name__ == '__main__':