LingxinMeng 6 месяцев назад
Родитель
Сommit
55b046a2ea

+ 1 - 0
.gitignore

@@ -4,6 +4,7 @@ src/python2/pjibot/pcd
 src/python2/pjibot/pjibot
 src/python2/pjibot_delivery/camera
 src/python2/pjibot_delivery/csv
+src/python2/pjibot_delivery/pcd
 src/python2/pjibot_delivery/log
 src/python2/pjibot_delivery/pjibot_delivery
 src/python2/pjibot_patrol/camera

+ 1 - 1
README.md

@@ -20,7 +20,7 @@ xosc-pjisuv.py
 6. pip2 install docker 
 7. pip2 install crypto
 
-# 四、python3(先设置国内镜像源)
+# 四、python3(先设置国内镜像源)(python3版本为3.7)
 1. apt install python3-pip
 2. pip3 install --upgrade pip
 3. pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/

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

@@ -12,7 +12,6 @@ logging.basicConfig(filename=path1 + 'log/2pcd.log', level=logging.INFO,
                     format='%(asctime)s - %(levelname)s - %(message)s')
 
 key1 = 'pjibot_delivery/'
-path1 = '/root/'
 sleep_time = 30  # 每多少秒扫描一次
 
 
@@ -21,10 +20,11 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
     try:
         local_pcd_mp4_dir = pcdtovideo_monitor_overlook.parse(merged_bag_file_path, local_parse_dir + '/pcd/')
         pcd_mp4_file_name = 'pcd_overlook'
-        local_delete_list.append(str(local_pcd_mp4_dir) + '/pcd_overlook.mp4')
+        local_mp4_path = str(local_pcd_mp4_dir) + '/jpg/'+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, str(local_pcd_mp4_dir) + '/' + pcd_mp4_file_name + '.mp4')
+        bucket.put_object_from_file(oss_csv_object_key3, local_mp4_path)
         logging.info("上传点云视频到: %s", oss_csv_object_key3)
+        local_delete_list.append(local_mp4_path)
     except Exception as e:
         logging.exception("生成点云视频报错: %s" % str(e))
 

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

@@ -23,7 +23,7 @@ def generate_xosc(parse_prefix, local_parse_dir, local_delete_list):
         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("上传 simulation.xosc(scenario.xosc) 成功: %s" % str(parse_prefix + 'scenario.xosc'))
+        logging.info("上传 scenario_hmi.xosc 成功: %s" % str(parse_prefix + 'scenario.xosc'))
         local_delete_list.append(local_xosc_path2)
     except Exception as e:
         logging.exception("生成xosc报错: %s" % str(e))
@@ -55,7 +55,7 @@ if __name__ == '__main__':
                         csv1_done = False
                         csv2_done = False
                         for obj3 in oss2.ObjectIterator(bucket, prefix=str(parse_prefix_full)):
-                            if '/simulation.xosc' in str(obj3.key) or '/scenario.xosc' in str(obj3.key):
+                            if '/scenario_hmi.xosc' in str(obj3.key): # 仿真使用的 scenario_hmi.xosc 所以必须有
                                 xosc_done = True
                             if '/objects_pji.csv' in str(obj3.key):
                                 csv1_done = True
@@ -70,7 +70,7 @@ if __name__ == '__main__':
                         if not csv2_done:
                             # logging.info("不存在 /pos_pji.csv: %s" % str(parse_prefix_full))
                             continue
-                        logging.info("需要生成 simulation.xosc(scenario.xosc): %s" % str(parse_prefix_full))
+                        logging.info("需要生成 scenario_hmi.xosc: %s" % str(parse_prefix_full))
                         local_dir_full = path1 + parse_prefix_full
                         if not os.path.exists(local_dir_full):
                             os.makedirs(local_dir_full)

+ 23 - 253
src/python2/pjibot_delivery/pcd-errorBag.json

@@ -1,5 +1,22 @@
 [
+    "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/", 
+    "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-P1YVPS1M22CM00020/data_parse/2024-10-23-14-10-28_obstacledetection_30/", 
+    "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/", 
@@ -24,266 +41,19 @@
     "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-movebase-2024-10-22-17-09-38/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-11-59/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-13-08/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-14-16/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-15-16/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-15-56/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-16-33/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-17-11/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-17-39/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-18-15/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-19-14/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-21-09/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-22-41/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-24-08/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-10-22-17-25-26/", 
-    "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-14-45-23/", 
-    "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/", 
-    "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/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-24-20/", 
-    "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-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-53-24/", 
-    "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-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-24-20/", 
-    "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-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-53-24/", 
-    "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-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-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-39-44/", 
-    "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/充电桩前倾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/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-32-42/", 
     "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-34-23/", 
     "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-14-17-37-00/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-44-11/", 
-    "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-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-14-17-38-45/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-11-15-15-44-42/", 
+    "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-55-28/", 
-    "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-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-57-57/", 
-    "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-16-02-11/", 
-    "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-15-52-00/", 
-    "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-05-42/", 
-    "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-00-45/", 
-    "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-09-43/", 
-    "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-11-42/", 
-    "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-07-32/", 
-    "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-08-46/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-12-44/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-12-44/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-47-50/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-52-58/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-45-20/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-50-25/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-51-19/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-53-56/", 
-    "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-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-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-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-23-27/", 
-    "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-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-49-45/", 
-    "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/VD100M21-BJ-movebase-2024-11-15-14-51-37/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M20-BJ-dock-2024-11-14-18-31-39/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M20-BJ-dock-2024-11-14-18-31-39/", 
-    "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-34-00/", 
-    "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-32-26/", 
-    "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-43-02/", 
-    "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-30-25/", 
-    "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-27-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-40-28/", 
-    "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-45-29/", 
-    "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-25-48/", 
-    "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-18-40/", 
-    "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-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-31-10/", 
-    "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-34-00/", 
-    "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-32-26/", 
-    "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-47-59/", 
-    "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-20-45/", 
-    "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-45-29/", 
-    "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-40-28/", 
-    "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-24-03/", 
-    "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-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-15-01/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-37-20/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-37-20/", 
-    "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-17-58/", 
-    "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-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-09-38/", 
-    "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-15-02/", 
-    "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-21-51/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-14-41-18/", 
-    "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-13-28/", 
-    "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-14-11-22-34/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-14-42-27/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-14-42-27/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-14-43-31/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-14-43-31/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-00-23/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-01-53/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-00-23/", 
     "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-14-15-23-22/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-21-24/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-27-01/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-27-01/", 
-    "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-09-55-03/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-09-56-08/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-03-19/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-09-56-08/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-17-10/", 
-    "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-09-20-10-17-51/", 
-    "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-09-20-10-21-10/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-21-10/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-21-43/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-21-43/"
+    "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/"
 ]

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

@@ -16,7 +16,6 @@ logging.basicConfig(filename=path1 + 'log/pcd-pjibot_delivery.log', level=loggin
                     format='%(asctime)s - %(levelname)s - %(message)s')
 
 key1 = 'pjibot_delivery/'
-path1 = '/root/'
 sleep_time = 10  # 每多少秒扫描一次
 error_bag_json = "/mnt/disk001/dcl_data_process/src/python2/pjibot_delivery/pcd-errorBag.json"
 
@@ -79,11 +78,13 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
     try:
         local_pcd_mp4_dir = pcdtovideo_monitor_overlook.parse(merged_bag_file_path, local_parse_dir + '/pcd/')
         pcd_mp4_file_name = 'pcd_overlook'
-        local_delete_list.append(str(local_pcd_mp4_dir) + '/pcd_overlook.mp4')
+        local_mp4_path = str(local_pcd_mp4_dir) + '/jpg/'+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, str(local_pcd_mp4_dir) + '/' + pcd_mp4_file_name + '.mp4')
+        bucket.put_object_from_file(oss_csv_object_key3, local_mp4_path)
         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 = parse_json_to_string_array(error_bag_json)
         error_bag_list.append(parse_prefix2)
         list_to_json_file(error_bag_list, error_bag_json)
@@ -139,6 +140,7 @@ if __name__ == '__main__':
                         merged_bag_full_name = merged_bag_object_key_split[-1]
                         merged_bag_name = merged_bag_full_name.split('.')[0]
                         bucket.get_object_to_file(merged_bag_object_key, local_merged_bag_path)
+                        logging.info("本地 bag 包路径为【%s】" % str(local_merged_bag_path))
                         local_delete_list.append(local_merged_bag_path)
                         # 2 生成 pos_orig.csv 和 pos_hmi.csv
                         parse_to_pcd_mp4(local_merged_bag_path, parse_prefix_full, local_parse_dir, local_delete_list)

+ 166 - 147
src/python2/pjibot_delivery/resource/bagtocsv_robot.py

@@ -1,9 +1,9 @@
 # coding: utf-8
-# !/usr/bin/env python2
+#!/usr/bin/env python2
 import os
 import rosbag
 import csv
-import math
+import math 
 import rospy
 import sys
 import time
@@ -16,203 +16,222 @@ import pandas as pd
 def quaternion_to_euler(x, y, z, w):
     # 将四元数归一化
     try:
-        length = np.sqrt(x ** 2 + y ** 2 + z ** 2 + w ** 2)
+        length = np.sqrt(x**2 + y**2 + z**2 + w**2)
         x /= length
         y /= length
         z /= length
         w /= length
-
+    
         # 计算欧拉角
-        # roll = np.arctan2(2*(w*x + y*z), 1 - 2*(x**2 + y**2))
-        # pitch = np.arcsin(2*(w*y - z*x))
-        yaw = np.arctan2(2 * (w * z + x * y), 1 - 2 * (y ** 2 + z ** 2))
-        return yaw
-    except:
+        #roll = np.arctan2(2*(w*x + y*z), 1 - 2*(x**2 + y**2))
+        #pitch = np.arcsin(2*(w*y - z*x))
+        yaw = np.arctan2(2*(w*z + x*y), 1 - 2*(y**2 + z**2))  
+        return  yaw
+    except :
         return 0
 
 
-def parsehancheng(input_dir, output_dir):
-    dic_trajectory = ['Time', 'simTime', 'simFrame', 'PointNumber', 'posX', 'posY', 'posZ', 'posH',
-                      'TargetX', 'TargetY', 'TargetZ', 'TargetH']
-    trajectory_file = open(output_dir + "/" + "trajectory_pji.csv", 'w')
+
+def parsehancheng(input_dir, output_dir):   
+    dic_trajectory = ['Time','simTime','simFrame','PointNumber','posX','posY','posZ','posH',
+    'TargetX','TargetY','TargetZ','TargetH']
+    trajectory_file = open(output_dir + "/"+"trajectory_pji.csv", 'w')
     writer_trajectory = csv.writer(trajectory_file)
     writer_trajectory.writerow(dic_trajectory)
-
-    dic_EgoState = ['Time', 'simTime', 'simFrame', 'posX', 'posY', 'posZ', 'posH', 'speedX', 'speedH', 'cmd_speedX',
-                    'cmd_speedH', 'obstacle', 'task_error_code']
-
-    EgoState_file = open(output_dir + "/" + "ego_pji.csv", 'w')
-
+    
+    dic_EgoState = ['Time','simTime','simFrame','posX','posY','posZ','posH','speedX','speedH','cmd_speedX','cmd_speedH','obstacle','task_error_code']
+    
+    EgoState_file = open(output_dir + "/"+"ego_pji.csv", 'w')
+    
     writer_EgoState = csv.writer(EgoState_file)
     writer_EgoState.writerow(dic_EgoState)
 
-    dic_robot_pos = ['Time', 'simtime', 'FrameID', 'HeadingAngle', 'X', 'Y', 'Z', 'latitude', 'longitude']
-    robot_pos_file = open(output_dir + "/" + "pos_pji.csv", 'w')
+    dic_robot_pos = ['Time','simtime','FrameID','HeadingAngle','X', 'Y' ,'Z','latitude','longitude']
+    robot_pos_file = open(output_dir + "/"+"pos_pji.csv", 'w')
     writer_robot_pos = csv.writer(robot_pos_file)
     writer_robot_pos.writerow(dic_robot_pos)
 
-    dic_objects = ['Time', 'simtime', 'FrameID', 'playerId', 'posH', 'posX', 'posY', 'posZ', 'label', 'dimX', 'dimY',
-                   'dimZ',
-                   'speedX', 'speedY', 'speedZ', 'speedH_X', 'speedH_Y', 'speedH_Z', 'accelX', 'accelY', 'accelZ',
-                   'accelH_X', 'accelH_Y', 'accelH_Z']
-    objects_file = open(output_dir + "/" + "objects_pji.csv", 'w')
+    dic_objects = ['Time','simtime','FrameID','playerId','posH','posX', 'posY' ,'posZ','label','dimX','dimY','dimZ',
+                   'speedX','speedY','speedZ','speedH_X','speedH_Y','speedH_Z','accelX','accelY','accelZ','accelH_X','accelH_Y','accelH_Z']
+    objects_file = open(output_dir + "/"+"objects_pji.csv", 'w')
     writer_objects = csv.writer(objects_file)
     writer_objects.writerow(dic_objects)
 
-    frame_max = sys.maxsize
-    with rosbag.Bag(input_dir, 'r') as bag:
-        # wheel_odom_flag=False
-        # cmd_vel_flag=False
+    frame_max=sys.maxsize
+    with rosbag.Bag(input_dir ,'r') as bag:
+        #wheel_odom_flag=False
+        #cmd_vel_flag=False
         first_message_time = None
-        Frame_robot_pose = 1
-        obstacle_state = 0
-        speed_linear = 0
-        speed_angular = 0
-        cmd_speed_angular = 0
-        cmd_speed_linear = 0
+        Frame_robot_pose=1
+        obstacle_state=0
+        speed_linear=0
+        speed_angular=0
+        speed_linear2=0
+        speed_angular2=0
+        cmd_speed_angular=0
+        cmd_speed_linear=0
         first_message_time = None
         framenum_ego = 1
-        task_error_code = 0
-        # framenum_obj = 1
-        locationsimtime = ' '
-        date_time = ' '
-        simFrame = 1
-        latitude = 0
-        longitude = 0
-        ego_posx, ego_posy, ego_posz, ego_posH = 0, 0, 0, 0
-        for topic, msg, t in bag.read_messages(
-                topics=['/obstacle_detection', '/wheel_odom', '/cmd_vel', '/robot_pose', '/tracking/objects',
-                        '/nav/task_feedback_info', '/robot/final_trajectory', '/gnss']):
-
-            if first_message_time is None:
+        task_error_code=0
+        #framenum_obj = 1
+        locationsimtime=' '
+        date_time=' '
+        simFrame=1
+        latitude=0
+        longitude=0
+        ego_posx,ego_posy,ego_posz,ego_posH=0,0,0,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']):   
+            
+            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)
-
+                
             if topic == "/gnss":
-                latitude = msg.latitude / 10000000
-                longitude = msg.longitude / 10000000
-
+                latitude=msg.latitude/10000000
+                longitude=msg.longitude/10000000
+            
             if topic == "/obstacle_detection":
-                obstacle_state = msg.data
-                # print(msg.data)
-
-            if topic == "/wheel_odom":
-                # wheel_odom_flag=True
-                speed_linear = msg.twist.twist.linear.x * 3.6
-                speed_angular = msg.twist.twist.angular.z
-
-            if topic == "/cmd_vel":
-                # cmd_vel_flag=True
-                cmd_speed_linear = msg.linear.x * 3.6
-                cmd_speed_angular = msg.angular.z
-
+                obstacle_state=msg.data
+                #print(msg.data)
+
+            
+            #之前的解析用的是这个话题,现在改成/wheel了
+            '''
+            if topic == "/wheel_odom": 
+                #wheel_odom_flag=True 
+                speed_linear=msg.twist.twist.linear.x*3.6
+                speed_angular=msg.twist.twist.angular.z
+            '''
+            
+            
+            if topic == "/wheel": 
+                #wheel_odom_flag=True 
+                speed_linear2=(msg.twist.twist.linear.x+msg.twist.twist.linear.y)*0.5*3.6
+                speed_angular2=(msg.twist.twist.linear.y-msg.twist.twist.linear.x)/0.5
+                #print('speed_linear2=',speed_linear2,'speed_angular2=',speed_angular2)
+             
+            if topic == "/cmd_vel": 
+                #cmd_vel_flag=True
+                cmd_speed_linear=msg.linear.x*3.6
+                cmd_speed_angular=msg.angular.z
+                
             if topic == "/nav/task_feedback_info":
-                task_error_code = msg.task_error_code
-
+                task_error_code=msg.task_error_code
+                
             if topic == "/robot_pose":
+                
                 timestamp = rospy.Time.to_sec(t)
                 date_time = datetime.fromtimestamp(timestamp)
-                locationsimtime = (date_time - first_message_time).total_seconds()
-                ego_posx = msg.pose.position.x
-                poseX = ego_posx
-                # poseX=ego_posx-88.96626338170609
-                ego_posy = msg.pose.position.y
-                poseY = ego_posy
-                # poseY=ego_posy-40.553671177476645
-                poseZ = msg.pose.position.z
-                orientationX = msg.pose.orientation.x
-                orientationY = msg.pose.orientation.y
-                orientationZ = msg.pose.orientation.z
-                orientationW = msg.pose.orientation.w
-                egoyaw = quaternion_to_euler(orientationX, orientationY, orientationZ, orientationW)
-                message_location = [date_time, locationsimtime, framenum_ego, egoyaw, poseX, poseY, poseZ, latitude,
-                                    longitude]
-                # print(f'date_time={date_time},  locationtime={locationsimtime}')
+                locationsimtime=(date_time-first_message_time).total_seconds()
+                ego_posx=msg.pose.position.x
+                poseX=ego_posx
+                #poseX=ego_posx-88.96626338170609
+                ego_posy=msg.pose.position.y
+                poseY=ego_posy
+                #poseY=ego_posy-40.553671177476645 
+                poseZ=msg.pose.position.z
+                orientationX=msg.pose.orientation.x
+                orientationY=msg.pose.orientation.y
+                orientationZ=msg.pose.orientation.z
+                orientationW=msg.pose.orientation.w
+                egoyaw=quaternion_to_euler(orientationX,orientationY,orientationZ,orientationW)
+                message_location =[date_time,locationsimtime,framenum_ego,egoyaw,poseX,poseY,poseZ,latitude,longitude]    
+                #print(f'date_time={date_time},  locationtime={locationsimtime}')
                 writer_robot_pos.writerow(message_location)
-                # if wheel_odom_flag and cmd_vel_flag:
-                message_EgoState = [date_time, locationsimtime, Frame_robot_pose, poseX, poseY, poseZ, egoyaw,
-                                    speed_linear, speed_angular, cmd_speed_linear, cmd_speed_angular, obstacle_state,
-                                    task_error_code]
-
+                #if wheel_odom_flag and cmd_vel_flag:
+                message_EgoState =[date_time,locationsimtime,Frame_robot_pose,poseX,poseY,poseZ,egoyaw,
+                                   speed_linear2,speed_angular2,cmd_speed_linear,cmd_speed_angular,obstacle_state,task_error_code]
+             
                 writer_EgoState.writerow(message_EgoState)
-                framenum_ego += 1
-                Frame_robot_pose += 1
+                framenum_ego+=1
+                Frame_robot_pose+=1
 
+        
             if topic == "/tracking/objects":
                 msg_l = len(msg.objects)
                 if msg_l and (locationsimtime != ' ') and (date_time != ' '):
-                    # timestamp = rospy.Time.to_sec(t)
-                    # date_time = datetime.fromtimestamp(timestamp)
-                    # simtime=(date_time-first_message_time).total_seconds()
+                    #timestamp = rospy.Time.to_sec(t)
+                    #date_time = datetime.fromtimestamp(timestamp)
+                    #simtime=(date_time-first_message_time).total_seconds()
                     for i in range(msg_l):
                         obj_ID = msg.objects[i].id
                         obj_x = msg.objects[i].pose.position.x
-                        # obj_x = msg.objects[i].pose.position.x-88.96626338170609
+                        #obj_x = msg.objects[i].pose.position.x-88.96626338170609
                         obj_y = msg.objects[i].pose.position.y
-                        # obj_y = msg.objects[i].pose.position.y-40.553671177476645
+                        #obj_y = msg.objects[i].pose.position.y-40.553671177476645
                         obj_z = msg.objects[i].pose.position.z
-                        obj_orientationX = msg.objects[i].pose.orientation.x
-                        obj_orientationY = msg.objects[i].pose.orientation.y
-                        obj_orientationZ = msg.objects[i].pose.orientation.z
-                        obj_orientationW = msg.objects[i].pose.orientation.w
-                        objyaw = quaternion_to_euler(obj_orientationX, obj_orientationY, obj_orientationZ,
-                                                     obj_orientationW)
-                        obj_lable = msg.objects[i].label
-                        obj_dimX = msg.objects[i].dimensions.x
-                        obj_dimY = msg.objects[i].dimensions.y
-                        obj_dimZ = msg.objects[i].dimensions.z
-                        velocity_linear_x = msg.objects[i].velocity.linear.x
-                        velocity_linear_y = msg.objects[i].velocity.linear.y
-                        velocity_linear_z = msg.objects[i].velocity.linear.z
-
-                        velocity_angular_x = msg.objects[i].velocity.angular.x
-                        velocity_angular_y = msg.objects[i].velocity.angular.y
-                        velocity_angular_z = msg.objects[i].velocity.angular.z
-
-                        acceleration_linear_x = msg.objects[i].acceleration.linear.x
-                        acceleration_linear_y = msg.objects[i].acceleration.linear.y
-                        acceleration_linear_z = msg.objects[i].acceleration.linear.z
-
-                        acceleration_angular_x = msg.objects[i].acceleration.angular.x
-                        acceleration_angular_y = msg.objects[i].acceleration.angular.y
-                        acceleration_angular_z = msg.objects[i].acceleration.angular.z
-
-                        message_obj = [date_time, locationsimtime, Frame_robot_pose, obj_ID, objyaw, obj_x, obj_y,
-                                       obj_z, obj_lable, obj_dimX, obj_dimY, obj_dimZ,
-                                       velocity_linear_x, velocity_linear_y, velocity_linear_z, velocity_angular_x,
-                                       velocity_angular_y,
-                                       velocity_angular_z, acceleration_linear_x, acceleration_linear_y,
-                                       acceleration_linear_z,
-                                       acceleration_angular_x, acceleration_angular_y, acceleration_angular_z]
-                        # print(f'{date_time},  {locationsimtime}')
+                        obj_orientationX=msg.objects[i].pose.orientation.x
+                        obj_orientationY=msg.objects[i].pose.orientation.y
+                        obj_orientationZ=msg.objects[i].pose.orientation.z
+                        obj_orientationW=msg.objects[i].pose.orientation.w
+                        objyaw=quaternion_to_euler(obj_orientationX,obj_orientationY,obj_orientationZ,obj_orientationW)
+                        obj_lable=msg.objects[i].label
+                        obj_dimX=msg.objects[i].dimensions.x
+                        obj_dimY=msg.objects[i].dimensions.y
+                        obj_dimZ=msg.objects[i].dimensions.z
+                        velocity_linear_x=msg.objects[i].velocity.linear.x
+                        velocity_linear_y=msg.objects[i].velocity.linear.y
+                        velocity_linear_z=msg.objects[i].velocity.linear.z
+                        
+                        velocity_angular_x=msg.objects[i].velocity.angular.x
+                        velocity_angular_y=msg.objects[i].velocity.angular.y
+                        velocity_angular_z=msg.objects[i].velocity.angular.z
+                        
+                        acceleration_linear_x=msg.objects[i].acceleration.linear.x
+                        acceleration_linear_y=msg.objects[i].acceleration.linear.y
+                        acceleration_linear_z=msg.objects[i].acceleration.linear.z
+                        
+                        acceleration_angular_x=msg.objects[i].acceleration.angular.x
+                        acceleration_angular_y=msg.objects[i].acceleration.angular.y
+                        acceleration_angular_z=msg.objects[i].acceleration.angular.z
+                        
+                        message_obj =[date_time,locationsimtime,Frame_robot_pose,obj_ID,objyaw,obj_x,obj_y,obj_z,obj_lable,obj_dimX,obj_dimY,obj_dimZ,
+                                      velocity_linear_x,velocity_linear_y,velocity_linear_z,velocity_angular_x,velocity_angular_y,
+                                      velocity_angular_z,acceleration_linear_x,acceleration_linear_y,acceleration_linear_z,
+                                      acceleration_angular_x,acceleration_angular_y,acceleration_angular_z]
+                        #print(f'{date_time},  {locationsimtime}')
                         writer_objects.writerow(message_obj)
-                    # framenum_obj+=1
+                    #framenum_obj+=1 
             if topic == "/robot/final_trajectory":
-                PointNumber = 1
+                PointNumber=1
                 timestamp1 = rospy.Time.to_sec(t)
                 date_time1 = datetime.fromtimestamp(timestamp1)
-                locationsimtime1 = (date_time1 - first_message_time).total_seconds()
-                if ego_posx != 0 or ego_posy != 0:
+                locationsimtime1=(date_time1-first_message_time).total_seconds()
+                if ego_posx!=0 or ego_posy!=0:
                     for i in range(len(msg.waypoints)):
-                        Targetx = msg.waypoints[i].pose.pose.position.x
-                        Targety = msg.waypoints[i].pose.pose.position.y
-                        Targetz = msg.waypoints[i].pose.pose.position.z
-                        orientationX = msg.waypoints[i].pose.pose.orientation.x
-                        orientationY = msg.waypoints[i].pose.pose.orientation.y
-                        orientationZ = msg.waypoints[i].pose.pose.orientation.z
-                        orientationW = msg.waypoints[i].pose.pose.orientation.w
-                        TargetH = quaternion_to_euler(orientationX, orientationY, orientationZ, orientationW)
-                        message_trajectory = [date_time1, locationsimtime1, simFrame, PointNumber, ego_posx, ego_posy,
-                                              poseZ, egoyaw, Targetx, Targety, Targetz, TargetH]
+                        Targetx=msg.waypoints[i].pose.pose.position.x
+                        Targety=msg.waypoints[i].pose.pose.position.y
+                        Targetz=msg.waypoints[i].pose.pose.position.z
+                        orientationX=msg.waypoints[i].pose.pose.orientation.x
+                        orientationY=msg.waypoints[i].pose.pose.orientation.y
+                        orientationZ=msg.waypoints[i].pose.pose.orientation.z
+                        orientationW=msg.waypoints[i].pose.pose.orientation.w
+                        TargetH=quaternion_to_euler(orientationX,orientationY,orientationZ,orientationW)
+                        message_trajectory =[date_time1,locationsimtime1,simFrame,PointNumber,ego_posx,ego_posy,poseZ,egoyaw,Targetx,Targety,Targetz,TargetH]
                         writer_trajectory.writerow(message_trajectory)
-                        PointNumber += 1
-                    simFrame += 1
-
+                        PointNumber+=1
+                    simFrame+=1
+                
         robot_pos_file.close()
         objects_file.close()
         EgoState_file.close()
         trajectory_file.close()
+        
+        
+
+# if __name__ == "__main__":
+#    input_dir='/media/dell/HIKSEMI/scenario_hmi._2024-11-20-02-21-25.bag'
+#    output_dir='/media/dell/HIKSEMI'
+#    #input_dir=sys.argv[1]
+#    #output_dir = sys.argv[2]
+#    bagname=input_dir.split('/')[-1].split('.bag')[0]
+
+   
+#    output_dir=os.path.join(output_dir, bagname)
+#    if not os.path.exists(output_dir):
+#        os.makedirs(output_dir)
+#    parsehancheng(input_dir, output_dir)
 
 
 # if __name__ == '__main__':

+ 8 - 0
src/python2/pjibot_delivery/resource/pcdtovideo_monitor_overlook.py

@@ -72,6 +72,8 @@ def parse(input_dir, output_dir):
         os.makedirs(output_dir)
     
     with rosbag.Bag(input_dir, 'r') as bag:
+        bag_start_time = bag.get_start_time()
+        bag_end_time = bag.get_end_time()
         num_count = 0
         for topic, msg, t in bag.read_messages():
             if topic == "/velodyne_points": #/camera/depth/points   # /scan_map_icp_amcl_node/scan_point_transformed
@@ -135,6 +137,12 @@ def parse(input_dir, output_dir):
         
         # 定义图片文件夹路径
         folder_path = file2
+        
+        #根据rosbag的起止时间生成黑色图片2024.11.22添加
+        black_image = np.zeros((512, 512, 3), dtype=np.uint8)
+        cv2.imwrite(os.path.join(file2,str(bag_start_time)+'.jpg'), black_image)
+        cv2.imwrite(os.path.join(file2,str(bag_end_time)+'.jpg'), black_image)
+        
 
         # 获取文件夹中的所有图片文件
         image_files = [f for f in os.listdir(folder_path) if f.endswith('.jpg')]

+ 36 - 145
src/python2/pjibot_delivery/xosc-errorBag.json

@@ -1,55 +1,15 @@
 [
-    "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/2024-10-23-14-10-28_obstacledetection_30/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物穿梭2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-32-12/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-33-00/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-Perception2024-10-23-17-33-27/", 
-    "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-movebase-2024-10-23-14-21-44/", 
-    "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/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-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/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/", 
@@ -62,55 +22,26 @@
     "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-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-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-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-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-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-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-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/", 
@@ -118,56 +49,16 @@
     "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/VD100M21-BJ-dock-2024-09-26-10-25-48/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M21-BJ-dock-2024-09-26-10-18-40/", 
-    "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/VD100M21-BJ-dock-2024-09-26-10-20-45/", 
-    "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-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-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-37-20/", 
-    "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-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-15-02/", 
-    "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-13-28/", 
-    "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-14-41-18/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-14-42-27/", 
-    "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-14-14-43-31/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-00-23/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-01-53/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-23-22/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-14-15-27-01/", 
-    "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-14-15-21-24/", 
-    "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-09-56-08/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-03-19/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-17-10/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-17-51/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-09-20-10-21-10/", 
-    "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-09-20-10-21-43/"
+    "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/"
 ]

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

@@ -95,7 +95,7 @@ def generate_xosc(parse_prefix, local_parse_dir, local_delete_list):
         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("上传 simulation.xosc(scenario.xosc) 成功: %s" % str(parse_prefix + 'scenario.xosc'))
+        logging.info("上传 scenario_hmi.xosc 成功: %s" % str(parse_prefix + 'scenario.xosc'))
         local_delete_list.append(local_xosc_path2)
     except Exception as e:
         error_bag_list = parse_json_to_string_array(error_bag_json)
@@ -137,7 +137,7 @@ if __name__ == '__main__':
                         csv1_done = False
                         csv2_done = False
                         for obj3 in oss2.ObjectIterator(bucket, prefix=str(parse_prefix_full)):
-                            if '/simulation.xosc' in str(obj3.key) or '/scenario.xosc' in str(obj3.key):
+                            if '/scenario_hmi.xosc' in str(obj3.key): # 仿真使用的 scenario_hmi.xosc 所以必须有
                                 xosc_done = True
                             if '/objects_pji.csv' in str(obj3.key):
                                 csv1_done = True
@@ -154,7 +154,7 @@ if __name__ == '__main__':
                         error_bag_list = parse_json_to_string_array(error_bag_json)
                         if str(parse_prefix_full) in error_bag_list:
                             continue
-                        logging.info("需要生成 simulation.xosc: %s" % str(parse_prefix_full))
+                        logging.info("需要生成 scenario_hmi.xosc: %s" % str(parse_prefix_full))
                         local_dir_full = path1 + parse_prefix_full
                         if not os.path.exists(local_dir_full):
                             os.makedirs(local_dir_full)

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

@@ -21,10 +21,11 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
     try:
         local_pcd_mp4_dir = pcdtovideo_monitor_overlook.parse(merged_bag_file_path, local_parse_dir + '/pcd/')
         pcd_mp4_file_name = 'pcd_overlook'
-        local_delete_list.append(str(local_pcd_mp4_dir) + '/pcd_overlook.mp4')
+        local_mp4_path = str(local_pcd_mp4_dir) + '/jpg/'+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, str(local_pcd_mp4_dir) + '/' + pcd_mp4_file_name + '.mp4')
+        bucket.put_object_from_file(oss_csv_object_key3, local_mp4_path)
         logging.info("上传点云视频到: %s", oss_csv_object_key3)
+        local_delete_list.append(local_mp4_path)
     except Exception as e:
         logging.exception("生成点云视频报错: %s" % str(e))
 

+ 166 - 147
src/python2/pjibot_patrol/resource/bagtocsv_robot.py

@@ -1,9 +1,9 @@
 # coding: utf-8
-# !/usr/bin/env python2
+#!/usr/bin/env python2
 import os
 import rosbag
 import csv
-import math
+import math 
 import rospy
 import sys
 import time
@@ -16,203 +16,222 @@ import pandas as pd
 def quaternion_to_euler(x, y, z, w):
     # 将四元数归一化
     try:
-        length = np.sqrt(x ** 2 + y ** 2 + z ** 2 + w ** 2)
+        length = np.sqrt(x**2 + y**2 + z**2 + w**2)
         x /= length
         y /= length
         z /= length
         w /= length
-
+    
         # 计算欧拉角
-        # roll = np.arctan2(2*(w*x + y*z), 1 - 2*(x**2 + y**2))
-        # pitch = np.arcsin(2*(w*y - z*x))
-        yaw = np.arctan2(2 * (w * z + x * y), 1 - 2 * (y ** 2 + z ** 2))
-        return yaw
-    except:
+        #roll = np.arctan2(2*(w*x + y*z), 1 - 2*(x**2 + y**2))
+        #pitch = np.arcsin(2*(w*y - z*x))
+        yaw = np.arctan2(2*(w*z + x*y), 1 - 2*(y**2 + z**2))  
+        return  yaw
+    except :
         return 0
 
 
-def parsehancheng(input_dir, output_dir):
-    dic_trajectory = ['Time', 'simTime', 'simFrame', 'PointNumber', 'posX', 'posY', 'posZ', 'posH',
-                      'TargetX', 'TargetY', 'TargetZ', 'TargetH']
-    trajectory_file = open(output_dir + "/" + "trajectory_pji.csv", 'w')
+
+def parsehancheng(input_dir, output_dir):   
+    dic_trajectory = ['Time','simTime','simFrame','PointNumber','posX','posY','posZ','posH',
+    'TargetX','TargetY','TargetZ','TargetH']
+    trajectory_file = open(output_dir + "/"+"trajectory_pji.csv", 'w')
     writer_trajectory = csv.writer(trajectory_file)
     writer_trajectory.writerow(dic_trajectory)
-
-    dic_EgoState = ['Time', 'simTime', 'simFrame', 'posX', 'posY', 'posZ', 'posH', 'speedX', 'speedH', 'cmd_speedX',
-                    'cmd_speedH', 'obstacle', 'task_error_code']
-
-    EgoState_file = open(output_dir + "/" + "ego_pji.csv", 'w')
-
+    
+    dic_EgoState = ['Time','simTime','simFrame','posX','posY','posZ','posH','speedX','speedH','cmd_speedX','cmd_speedH','obstacle','task_error_code']
+    
+    EgoState_file = open(output_dir + "/"+"ego_pji.csv", 'w')
+    
     writer_EgoState = csv.writer(EgoState_file)
     writer_EgoState.writerow(dic_EgoState)
 
-    dic_robot_pos = ['Time', 'simtime', 'FrameID', 'HeadingAngle', 'X', 'Y', 'Z', 'latitude', 'longitude']
-    robot_pos_file = open(output_dir + "/" + "pos_pji.csv", 'w')
+    dic_robot_pos = ['Time','simtime','FrameID','HeadingAngle','X', 'Y' ,'Z','latitude','longitude']
+    robot_pos_file = open(output_dir + "/"+"pos_pji.csv", 'w')
     writer_robot_pos = csv.writer(robot_pos_file)
     writer_robot_pos.writerow(dic_robot_pos)
 
-    dic_objects = ['Time', 'simtime', 'FrameID', 'playerId', 'posH', 'posX', 'posY', 'posZ', 'label', 'dimX', 'dimY',
-                   'dimZ',
-                   'speedX', 'speedY', 'speedZ', 'speedH_X', 'speedH_Y', 'speedH_Z', 'accelX', 'accelY', 'accelZ',
-                   'accelH_X', 'accelH_Y', 'accelH_Z']
-    objects_file = open(output_dir + "/" + "objects_pji.csv", 'w')
+    dic_objects = ['Time','simtime','FrameID','playerId','posH','posX', 'posY' ,'posZ','label','dimX','dimY','dimZ',
+                   'speedX','speedY','speedZ','speedH_X','speedH_Y','speedH_Z','accelX','accelY','accelZ','accelH_X','accelH_Y','accelH_Z']
+    objects_file = open(output_dir + "/"+"objects_pji.csv", 'w')
     writer_objects = csv.writer(objects_file)
     writer_objects.writerow(dic_objects)
 
-    frame_max = sys.maxsize
-    with rosbag.Bag(input_dir, 'r') as bag:
-        # wheel_odom_flag=False
-        # cmd_vel_flag=False
+    frame_max=sys.maxsize
+    with rosbag.Bag(input_dir ,'r') as bag:
+        #wheel_odom_flag=False
+        #cmd_vel_flag=False
         first_message_time = None
-        Frame_robot_pose = 1
-        obstacle_state = 0
-        speed_linear = 0
-        speed_angular = 0
-        cmd_speed_angular = 0
-        cmd_speed_linear = 0
+        Frame_robot_pose=1
+        obstacle_state=0
+        speed_linear=0
+        speed_angular=0
+        speed_linear2=0
+        speed_angular2=0
+        cmd_speed_angular=0
+        cmd_speed_linear=0
         first_message_time = None
         framenum_ego = 1
-        task_error_code = 0
-        # framenum_obj = 1
-        locationsimtime = ' '
-        date_time = ' '
-        simFrame = 1
-        latitude = 0
-        longitude = 0
-        ego_posx, ego_posy, ego_posz, ego_posH = 0, 0, 0, 0
-        for topic, msg, t in bag.read_messages(
-                topics=['/obstacle_detection', '/wheel_odom', '/cmd_vel', '/robot_pose', '/tracking/objects',
-                        '/nav/task_feedback_info', '/robot/final_trajectory', '/gnss']):
-
-            if first_message_time is None:
+        task_error_code=0
+        #framenum_obj = 1
+        locationsimtime=' '
+        date_time=' '
+        simFrame=1
+        latitude=0
+        longitude=0
+        ego_posx,ego_posy,ego_posz,ego_posH=0,0,0,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']):   
+            
+            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)
-
+                
             if topic == "/gnss":
-                latitude = msg.latitude / 10000000
-                longitude = msg.longitude / 10000000
-
+                latitude=msg.latitude/10000000
+                longitude=msg.longitude/10000000
+            
             if topic == "/obstacle_detection":
-                obstacle_state = msg.data
-                # print(msg.data)
-
-            if topic == "/wheel_odom":
-                # wheel_odom_flag=True
-                speed_linear = msg.twist.twist.linear.x * 3.6
-                speed_angular = msg.twist.twist.angular.z
-
-            if topic == "/cmd_vel":
-                # cmd_vel_flag=True
-                cmd_speed_linear = msg.linear.x * 3.6
-                cmd_speed_angular = msg.angular.z
-
+                obstacle_state=msg.data
+                #print(msg.data)
+
+            
+            #之前的解析用的是这个话题,现在改成/wheel了
+            '''
+            if topic == "/wheel_odom": 
+                #wheel_odom_flag=True 
+                speed_linear=msg.twist.twist.linear.x*3.6
+                speed_angular=msg.twist.twist.angular.z
+            '''
+            
+            
+            if topic == "/wheel": 
+                #wheel_odom_flag=True 
+                speed_linear2=(msg.twist.twist.linear.x+msg.twist.twist.linear.y)*0.5*3.6
+                speed_angular2=(msg.twist.twist.linear.y-msg.twist.twist.linear.x)/0.5
+                #print('speed_linear2=',speed_linear2,'speed_angular2=',speed_angular2)
+             
+            if topic == "/cmd_vel": 
+                #cmd_vel_flag=True
+                cmd_speed_linear=msg.linear.x*3.6
+                cmd_speed_angular=msg.angular.z
+                
             if topic == "/nav/task_feedback_info":
-                task_error_code = msg.task_error_code
-
+                task_error_code=msg.task_error_code
+                
             if topic == "/robot_pose":
+                
                 timestamp = rospy.Time.to_sec(t)
                 date_time = datetime.fromtimestamp(timestamp)
-                locationsimtime = (date_time - first_message_time).total_seconds()
-                ego_posx = msg.pose.position.x
-                poseX = ego_posx
-                # poseX=ego_posx-88.96626338170609
-                ego_posy = msg.pose.position.y
-                poseY = ego_posy
-                # poseY=ego_posy-40.553671177476645
-                poseZ = msg.pose.position.z
-                orientationX = msg.pose.orientation.x
-                orientationY = msg.pose.orientation.y
-                orientationZ = msg.pose.orientation.z
-                orientationW = msg.pose.orientation.w
-                egoyaw = quaternion_to_euler(orientationX, orientationY, orientationZ, orientationW)
-                message_location = [date_time, locationsimtime, framenum_ego, egoyaw, poseX, poseY, poseZ, latitude,
-                                    longitude]
-                # print(f'date_time={date_time},  locationtime={locationsimtime}')
+                locationsimtime=(date_time-first_message_time).total_seconds()
+                ego_posx=msg.pose.position.x
+                poseX=ego_posx
+                #poseX=ego_posx-88.96626338170609
+                ego_posy=msg.pose.position.y
+                poseY=ego_posy
+                #poseY=ego_posy-40.553671177476645 
+                poseZ=msg.pose.position.z
+                orientationX=msg.pose.orientation.x
+                orientationY=msg.pose.orientation.y
+                orientationZ=msg.pose.orientation.z
+                orientationW=msg.pose.orientation.w
+                egoyaw=quaternion_to_euler(orientationX,orientationY,orientationZ,orientationW)
+                message_location =[date_time,locationsimtime,framenum_ego,egoyaw,poseX,poseY,poseZ,latitude,longitude]    
+                #print(f'date_time={date_time},  locationtime={locationsimtime}')
                 writer_robot_pos.writerow(message_location)
-                # if wheel_odom_flag and cmd_vel_flag:
-                message_EgoState = [date_time, locationsimtime, Frame_robot_pose, poseX, poseY, poseZ, egoyaw,
-                                    speed_linear, speed_angular, cmd_speed_linear, cmd_speed_angular, obstacle_state,
-                                    task_error_code]
-
+                #if wheel_odom_flag and cmd_vel_flag:
+                message_EgoState =[date_time,locationsimtime,Frame_robot_pose,poseX,poseY,poseZ,egoyaw,
+                                   speed_linear2,speed_angular2,cmd_speed_linear,cmd_speed_angular,obstacle_state,task_error_code]
+             
                 writer_EgoState.writerow(message_EgoState)
-                framenum_ego += 1
-                Frame_robot_pose += 1
+                framenum_ego+=1
+                Frame_robot_pose+=1
 
+        
             if topic == "/tracking/objects":
                 msg_l = len(msg.objects)
                 if msg_l and (locationsimtime != ' ') and (date_time != ' '):
-                    # timestamp = rospy.Time.to_sec(t)
-                    # date_time = datetime.fromtimestamp(timestamp)
-                    # simtime=(date_time-first_message_time).total_seconds()
+                    #timestamp = rospy.Time.to_sec(t)
+                    #date_time = datetime.fromtimestamp(timestamp)
+                    #simtime=(date_time-first_message_time).total_seconds()
                     for i in range(msg_l):
                         obj_ID = msg.objects[i].id
                         obj_x = msg.objects[i].pose.position.x
-                        # obj_x = msg.objects[i].pose.position.x-88.96626338170609
+                        #obj_x = msg.objects[i].pose.position.x-88.96626338170609
                         obj_y = msg.objects[i].pose.position.y
-                        # obj_y = msg.objects[i].pose.position.y-40.553671177476645
+                        #obj_y = msg.objects[i].pose.position.y-40.553671177476645
                         obj_z = msg.objects[i].pose.position.z
-                        obj_orientationX = msg.objects[i].pose.orientation.x
-                        obj_orientationY = msg.objects[i].pose.orientation.y
-                        obj_orientationZ = msg.objects[i].pose.orientation.z
-                        obj_orientationW = msg.objects[i].pose.orientation.w
-                        objyaw = quaternion_to_euler(obj_orientationX, obj_orientationY, obj_orientationZ,
-                                                     obj_orientationW)
-                        obj_lable = msg.objects[i].label
-                        obj_dimX = msg.objects[i].dimensions.x
-                        obj_dimY = msg.objects[i].dimensions.y
-                        obj_dimZ = msg.objects[i].dimensions.z
-                        velocity_linear_x = msg.objects[i].velocity.linear.x
-                        velocity_linear_y = msg.objects[i].velocity.linear.y
-                        velocity_linear_z = msg.objects[i].velocity.linear.z
-
-                        velocity_angular_x = msg.objects[i].velocity.angular.x
-                        velocity_angular_y = msg.objects[i].velocity.angular.y
-                        velocity_angular_z = msg.objects[i].velocity.angular.z
-
-                        acceleration_linear_x = msg.objects[i].acceleration.linear.x
-                        acceleration_linear_y = msg.objects[i].acceleration.linear.y
-                        acceleration_linear_z = msg.objects[i].acceleration.linear.z
-
-                        acceleration_angular_x = msg.objects[i].acceleration.angular.x
-                        acceleration_angular_y = msg.objects[i].acceleration.angular.y
-                        acceleration_angular_z = msg.objects[i].acceleration.angular.z
-
-                        message_obj = [date_time, locationsimtime, Frame_robot_pose, obj_ID, objyaw, obj_x, obj_y,
-                                       obj_z, obj_lable, obj_dimX, obj_dimY, obj_dimZ,
-                                       velocity_linear_x, velocity_linear_y, velocity_linear_z, velocity_angular_x,
-                                       velocity_angular_y,
-                                       velocity_angular_z, acceleration_linear_x, acceleration_linear_y,
-                                       acceleration_linear_z,
-                                       acceleration_angular_x, acceleration_angular_y, acceleration_angular_z]
-                        # print(f'{date_time},  {locationsimtime}')
+                        obj_orientationX=msg.objects[i].pose.orientation.x
+                        obj_orientationY=msg.objects[i].pose.orientation.y
+                        obj_orientationZ=msg.objects[i].pose.orientation.z
+                        obj_orientationW=msg.objects[i].pose.orientation.w
+                        objyaw=quaternion_to_euler(obj_orientationX,obj_orientationY,obj_orientationZ,obj_orientationW)
+                        obj_lable=msg.objects[i].label
+                        obj_dimX=msg.objects[i].dimensions.x
+                        obj_dimY=msg.objects[i].dimensions.y
+                        obj_dimZ=msg.objects[i].dimensions.z
+                        velocity_linear_x=msg.objects[i].velocity.linear.x
+                        velocity_linear_y=msg.objects[i].velocity.linear.y
+                        velocity_linear_z=msg.objects[i].velocity.linear.z
+                        
+                        velocity_angular_x=msg.objects[i].velocity.angular.x
+                        velocity_angular_y=msg.objects[i].velocity.angular.y
+                        velocity_angular_z=msg.objects[i].velocity.angular.z
+                        
+                        acceleration_linear_x=msg.objects[i].acceleration.linear.x
+                        acceleration_linear_y=msg.objects[i].acceleration.linear.y
+                        acceleration_linear_z=msg.objects[i].acceleration.linear.z
+                        
+                        acceleration_angular_x=msg.objects[i].acceleration.angular.x
+                        acceleration_angular_y=msg.objects[i].acceleration.angular.y
+                        acceleration_angular_z=msg.objects[i].acceleration.angular.z
+                        
+                        message_obj =[date_time,locationsimtime,Frame_robot_pose,obj_ID,objyaw,obj_x,obj_y,obj_z,obj_lable,obj_dimX,obj_dimY,obj_dimZ,
+                                      velocity_linear_x,velocity_linear_y,velocity_linear_z,velocity_angular_x,velocity_angular_y,
+                                      velocity_angular_z,acceleration_linear_x,acceleration_linear_y,acceleration_linear_z,
+                                      acceleration_angular_x,acceleration_angular_y,acceleration_angular_z]
+                        #print(f'{date_time},  {locationsimtime}')
                         writer_objects.writerow(message_obj)
-                    # framenum_obj+=1
+                    #framenum_obj+=1 
             if topic == "/robot/final_trajectory":
-                PointNumber = 1
+                PointNumber=1
                 timestamp1 = rospy.Time.to_sec(t)
                 date_time1 = datetime.fromtimestamp(timestamp1)
-                locationsimtime1 = (date_time1 - first_message_time).total_seconds()
-                if ego_posx != 0 or ego_posy != 0:
+                locationsimtime1=(date_time1-first_message_time).total_seconds()
+                if ego_posx!=0 or ego_posy!=0:
                     for i in range(len(msg.waypoints)):
-                        Targetx = msg.waypoints[i].pose.pose.position.x
-                        Targety = msg.waypoints[i].pose.pose.position.y
-                        Targetz = msg.waypoints[i].pose.pose.position.z
-                        orientationX = msg.waypoints[i].pose.pose.orientation.x
-                        orientationY = msg.waypoints[i].pose.pose.orientation.y
-                        orientationZ = msg.waypoints[i].pose.pose.orientation.z
-                        orientationW = msg.waypoints[i].pose.pose.orientation.w
-                        TargetH = quaternion_to_euler(orientationX, orientationY, orientationZ, orientationW)
-                        message_trajectory = [date_time1, locationsimtime1, simFrame, PointNumber, ego_posx, ego_posy,
-                                              poseZ, egoyaw, Targetx, Targety, Targetz, TargetH]
+                        Targetx=msg.waypoints[i].pose.pose.position.x
+                        Targety=msg.waypoints[i].pose.pose.position.y
+                        Targetz=msg.waypoints[i].pose.pose.position.z
+                        orientationX=msg.waypoints[i].pose.pose.orientation.x
+                        orientationY=msg.waypoints[i].pose.pose.orientation.y
+                        orientationZ=msg.waypoints[i].pose.pose.orientation.z
+                        orientationW=msg.waypoints[i].pose.pose.orientation.w
+                        TargetH=quaternion_to_euler(orientationX,orientationY,orientationZ,orientationW)
+                        message_trajectory =[date_time1,locationsimtime1,simFrame,PointNumber,ego_posx,ego_posy,poseZ,egoyaw,Targetx,Targety,Targetz,TargetH]
                         writer_trajectory.writerow(message_trajectory)
-                        PointNumber += 1
-                    simFrame += 1
-
+                        PointNumber+=1
+                    simFrame+=1
+                
         robot_pos_file.close()
         objects_file.close()
         EgoState_file.close()
         trajectory_file.close()
+        
+        
+
+# if __name__ == "__main__":
+#    input_dir='/media/dell/HIKSEMI/scenario_hmi._2024-11-20-02-21-25.bag'
+#    output_dir='/media/dell/HIKSEMI'
+#    #input_dir=sys.argv[1]
+#    #output_dir = sys.argv[2]
+#    bagname=input_dir.split('/')[-1].split('.bag')[0]
+
+   
+#    output_dir=os.path.join(output_dir, bagname)
+#    if not os.path.exists(output_dir):
+#        os.makedirs(output_dir)
+#    parsehancheng(input_dir, output_dir)
 
 
 # if __name__ == '__main__':

+ 8 - 0
src/python2/pjibot_patrol/resource/pcdtovideo_monitor_overlook.py

@@ -72,6 +72,8 @@ def parse(input_dir, output_dir):
         os.makedirs(output_dir)
     
     with rosbag.Bag(input_dir, 'r') as bag:
+        bag_start_time = bag.get_start_time()
+        bag_end_time = bag.get_end_time()
         num_count = 0
         for topic, msg, t in bag.read_messages():
             if topic == "/velodyne_points": #/camera/depth/points   # /scan_map_icp_amcl_node/scan_point_transformed
@@ -135,6 +137,12 @@ def parse(input_dir, output_dir):
         
         # 定义图片文件夹路径
         folder_path = file2
+        
+        #根据rosbag的起止时间生成黑色图片2024.11.22添加
+        black_image = np.zeros((512, 512, 3), dtype=np.uint8)
+        cv2.imwrite(os.path.join(file2,str(bag_start_time)+'.jpg'), black_image)
+        cv2.imwrite(os.path.join(file2,str(bag_end_time)+'.jpg'), black_image)
+        
 
         # 获取文件夹中的所有图片文件
         image_files = [f for f in os.listdir(folder_path) if f.endswith('.jpg')]

+ 2 - 1
src/python2/pjisuv/errorBag.json

@@ -12,5 +12,6 @@
     "pjisuv/pjisuv-012/data_parse/2024-08-15-01-44-05_UnknownBigTargetAhead_23/", 
     "pjisuv/pjisuv-013/data_parse/2024-08-06-03-10-21_ControlJump_FindTrafficLight_40/", 
     "pjisuv/pjisuv-012/data_parse/2024-08-15-01-43-24_UnknownBigTargetAhead_MultiBicycleAhead_27/", 
-    "pjisuv/pjisuv-013/data_parse/2024-08-06-03-02-13_FindTrafficLight_117/"
+    "pjisuv/pjisuv-013/data_parse/2024-08-06-03-02-13_FindTrafficLight_117/", 
+    "pjisuv/pjisuv-012/data_parse/2024-07-06-14-11-05_TTC_brake_rapidaccel_23/"
 ]

BIN
test/ros/example.bag


+ 35 - 0
test/ros/write_test.py

@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+import rospy
+import rosbag
+from std_msgs.msg import String
+import time  # 导入time模块以获取当前时间
+
+def write_bag(bag_filename):
+    # 初始化ROS节点(虽然在这个脚本中我们并不真正发布消息到ROS网络)
+    rospy.init_node('bag_writer', anonymous=True)
+
+    # 创建一个rosbag.Bag对象,以写入模式打开文件
+    with rosbag.Bag(bag_filename, 'w') as bag:
+        # 写入一些示例消息
+        for i in range(10):
+            time.sleep(1)
+            # 创建一个String消息
+            msg = String()
+            # 在Python 2中,使用字符串格式化而不是f-string
+            msg.data = "Hello, ROS %d" % i
+
+            # 获取当前时间戳(使用time模块)
+            # 注意:在ROS 1的Python 2环境中,rospy.Time.now()可能不是有效的调用
+            # 这里我们使用time.time()来获取当前时间(秒),然后转换为rospy.Time
+            timestamp = rospy.Time.from_sec(time.time())
+
+            # 将消息写入bag文件,指定主题名和时间戳
+            bag.write('/chatter', msg, timestamp)
+
+if __name__ == '__main__':
+    # 指定bag文件的名称
+    bag_filename = 'example.bag'
+    # 调用函数写入bag文件
+    write_bag(bag_filename)
+    # 在Python 2中,使用print语句而不是print函数
+    print "Bag file '%s' written successfully." % bag_filename