LingxinMeng 5 月之前
父节点
当前提交
b3a9b2c6e3

+ 2 - 0
.gitignore

@@ -1,3 +1,5 @@
+.idea
+.idea/*
 src/python2/pjibot/camera
 src/python2/pjibot/log
 src/python2/pjibot/pcd

+ 51 - 54
src/python2/pjibot/camera-errorBag.json

@@ -1,71 +1,68 @@
 [
+    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-18-07-26-52_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-18-01-15_obstacledetection_3/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-05-16-03-53_obstacledetection_37/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-12-47-26_obstacledetection_34/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-05-04-32-26_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-08-07-53-47_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-08-26-06-33-08_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-10-16-07-35-09_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-07-13-54-13_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-07-18-01-52_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-08-09-34-44_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-01-02-37-18_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-43-07_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-09-02-09-23_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-17-59-21_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-06-07-55-18_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-08-07-53-47_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-11-07-58-14_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-18-07-26-52_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-25-09-54-00_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-11-03-41-15_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-12-31-11-01-15_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-20-01-06-56_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-11-07-16-39-17_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-12-01-58-10_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-35-32_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-16-39_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-17-29_obstacledetection_43/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-10-36-14_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
     "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-22-19_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-31-40_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-33-00_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-11-07-16-39-17_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-15-01-26-27_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-33-23_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-35-32_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-42-03_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-43-07_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-12-01-58-10_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-29-11-18-30_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-17-00-41-23_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-03-03-38-20_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-29-09-46-26_obstacledetection_42/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-10-02-45-27_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-33-00_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-42-03_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-04-02-04-27_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-05-04-32-26_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-09-04-07-16_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-11-03-41-15_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-12-02-05-06_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-18-02-55-46_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-23-03-56-04_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-24-01-30-02_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-06-09-35-05_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-09-02-09-23_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-10-02-45-27_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-11-04-18-13_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-14-09-15-22_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-15-01-26-27_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-16-05-31-12_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000131/data_parse/2024-11-11-02-40-36_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000131/data_parse/2024-11-11-02-45-56_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-12-09-44-23_obstacledetection_29/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-17-59-21_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-18-00-33_obstacledetection_3/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-18-01-15_obstacledetection_3/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-10-36-14_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-10-53-53_obstacledetection_44/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-23-03-56-04_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-17-29_obstacledetection_43/", 
+    "pjibot/pjibot-P1YNYD1M227000119/data_parse/2024-07-03-06-31-40_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-25-10-02-50_obstacledetection_45/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-18-02-55-46_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-14-36-20_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-14-37-08_obstacledetection_3/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-16-02-26_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-02-10-59_obstacledetection_25/", 
     "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
-    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-29-09-46-26_obstacledetection_42/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-29-11-18-30_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-12-05-07-17-30_obstacledetection_60/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-05-16-03-53_obstacledetection_37/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-03-03-38-20_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-15-15-20-20_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-12-20-06-07-28_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-12-23-01-07-36_obstacledetection_45/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-25-09-54-00_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-25-10-02-50_obstacledetection_45/"
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-10-53-53_obstacledetection_44/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-16-02-26_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000131/data_parse/2024-11-11-02-40-36_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-12-02-05-06_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-14-37-08_obstacledetection_3/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-24-01-30-02_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-12-09-44-23_obstacledetection_29/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-16-05-31-12_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-11-07-58-14_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-09-09-04-07-16_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-11-04-18-13_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
+    "pjibot/pjibot-P1YNYD1M227000116/data_parse/2024-09-01-02-37-18_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-02-45-20_obstacledetection_30/"
 ]

+ 7 - 1
src/python2/pjibot/csv-errorBag.json

@@ -28,11 +28,15 @@
     "pjibot/pjibot-P1YNYD1M225000112/data_parse/2024-09-04-10-54-22_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-05-23-31-44_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-03-13-16-13_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-12-47-26_obstacledetection_34/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-12-31-11-01-15_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-05-22-28-41_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-03-21-14_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-03-11-39-28_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000131/data_parse/2024-11-11-02-45-56_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-08-05-21-49-38_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-03-27-01_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-07-04-02-26-31_obstacledetection_38/", 
     "pjibot/pjibot-P1YNYD1M229000131/data_parse/2024-11-11-02-40-36_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-06-00-48-28_obstacledetection_30/", 
@@ -47,6 +51,7 @@
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-10-28-16-09-39_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
     "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-17-59-21_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-12-25-09-54-00_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-03-13-17-07_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-10-36-14_obstacledetection_30/", 
@@ -58,6 +63,7 @@
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-18-12-00-09_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-05-22-11-48_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-10-02-45-27_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-02-10-59_obstacledetection_25/", 
     "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-15-10-53-53_obstacledetection_44/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-10-27-21-12-31_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M229000129/data_parse/2024-08-13-16-01-31_obstacledetection_30/", 
@@ -68,7 +74,7 @@
     "pjibot/pjibot-P1YNYD1M225000112/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-07-09-14-21-33_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-03-12-46-11_obstacledetection_30/", 
-    "pjibot/pjibot-P1YNYD1M223000101/data_parse/2024-11-14-17-59-21_obstacledetection_30/", 
+    "pjibot/pjibot-P1YNYD1M229000129/data_parse/2025-01-01-02-45-20_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-03-13-05-05_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-05-19-34-05_obstacledetection_30/", 
     "pjibot/pjibot-P1YNYD1M227000115/data_parse/2024-09-03-12-41-00_obstacledetection_30/", 

+ 22 - 1
src/python2/pjibot/csv-pjibot_guide.py

@@ -97,6 +97,24 @@ def parse_csv(costmap_bag, data_bag, parse_prefix, local_parse_dir, local_delete
         
 
         # ------- 生成 pdf 报告 - 开始 -------
+        #  ------- 根据合并后的包和map.bag 生成轨迹图片 - 开始 -------
+        # 获取只有1帧率的数据包
+        map_key = parse_prefix.replace('data_parse/', '') + 'map.bag'
+        local_map_path = local_parse_dir + 'map.bag'
+        logging.info("map.bag包的key为: %s" % str(map_key))
+        bucket.get_object_to_file(map_key, local_map_path)
+        jpg_file = local_parse_dir + merged_bag_name.split('.')[0] + '.jpg'
+        command1 = ['rosrun', 'trajectory', 'demo_node', local_map_path, data_bag, jpg_file]
+        logging.info("调用命令轨迹图片生成命令: %s" % ' '.join(command1))
+        process = subprocess.Popen(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        stdout, stderr = process.communicate()
+        if stdout:
+            logging.info("命令输出:\n%s" % stdout.strip())
+        if stderr:
+            logging.error("命令错误:\n%s" % stderr.strip())
+        jpg_key = parse_prefix + 'track.png'
+        bucket.put_object_from_file(jpg_key, jpg_file)
+        #  ------- 根据合并后的包和map.bag 生成轨迹图片 - 结束 -------
         if '自车数据缺失' not in outputs and '位姿信息缺失' not in outputs:
             pdf_local_path = os.path.join(local_csv_dir, 'report.pdf')
             track_png_key = parse_prefix + 'track.png'
@@ -180,6 +198,7 @@ if __name__ == '__main__':
                     csv2_done = False
                     csv3_done = False
                     pdf_done = False
+                    track_done = False
                     for obj2 in oss2.ObjectIterator(bucket, prefix=parse_prefix_full):
                         if '/pos_pji.csv' in str(obj2.key):
                             csv1_done = True
@@ -189,7 +208,9 @@ if __name__ == '__main__':
                             csv3_done = True
                         if '/report.pdf' in str(obj2.key):
                             pdf_done = True
-                    if csv1_done and csv2_done and csv3_done and pdf_done:
+                        if '/track.png' in str(obj2.key):
+                            track_done = True
+                    if csv1_done and csv2_done and csv3_done and pdf_done and track_done:
                         continue
                     error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
                     if parse_prefix_full in error_bag_list:

+ 2 - 1
src/python2/pjibot/merge-pjibot_guide.py

@@ -65,7 +65,7 @@ def merge(local_bags, merged_prefix, local_merged_dir, merged_bag_name):
         bag_b.close()
         build_map_key = parse_prefix + 'build_map.bag'
         bucket.put_object_from_file(build_map_key, output_bag_file2)
-        # 根据合并后的包和map.bag 生成轨迹图片
+        #  ------- 根据合并后的包和map.bag 生成轨迹图片 - 开始 -------
         # 获取只有1帧率的数据包
         map_key = merged_prefix.replace('data_merge/', '') + 'map.bag'
         local_map_path = local_merged_dir + 'map.bag'
@@ -82,6 +82,7 @@ def merge(local_bags, merged_prefix, local_merged_dir, merged_bag_name):
             logging.error("命令错误:\n%s" % stderr.strip())
         jpg_key = parse_prefix + 'track.png'
         bucket.put_object_from_file(jpg_key, jpg_file)
+        #  ------- 根据合并后的包和map.bag 生成轨迹图片 - 结束 -------
 
         costmap_key = merged_prefix.replace('data_merge/', '') + 'costmap.bag'
         logging.info("costmap.bag包的key为: %s" % str(costmap_key))

+ 3 - 1
src/python2/pjibot_delivery/callback-pjibot_delivery.py

@@ -140,9 +140,11 @@ if __name__ == '__main__':
                         else:
                             # 如果 'check' 键不存在,记录日志或进行其他错误处理
                             logging.warning("'check' 键在 json_object 中不存在")
-                        check_order = ['自车数据缺失', '不在道路范围', '无规划路径', '目标点缺失','点云缺失', '点云丢帧', '解析程序错误', '还原程序错误', '评价程序错误']
+                        check_order = ['自车数据缺失', '不在道路范围', '无规划路径', '目标点缺失','点云缺失', '点云丢帧', '解析程序错误', '还原程序错误', '评价程序错误',"正常"]
                         check_order_dict = dict((item, idx) for idx, item in enumerate(check_order))
                         check = sorted(check, key=lambda x: check_order_dict.get(x, float('inf')))
+                        if len(check) > 1:
+                            check = [item for item in check if item != "正常"]
                         check = ','.join(check) # 数组元素拼接成字符串序列
                         if old_date is None:
                             old_date = ''

+ 75 - 38
src/python2/pjibot_delivery/pcd-errorBag.json

@@ -1,64 +1,64 @@
 [
-    "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-11-14-17-47-50/", 
-    "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-52-58/", 
-    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-53-56/", 
-    "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/2024-10-24-15-48-07/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-09-52-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-06-42/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-09-05/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-11-32/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-12-43/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-33-53/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-34-39/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-37-46/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-40-05/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-42-33/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-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-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-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-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-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-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-23-55/", 
+    "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-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-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-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-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-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-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-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-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-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-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-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-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-10-24-15-53-24/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-15/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-15/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-58/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-19-58/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-21-06/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-21-06/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-22-23/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-26-31/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-27-50/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-29-07/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-31-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-33-01/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-33-52/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-36-33/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-37-51/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-38-55/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-39-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-43-11/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-45-05/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-46-29/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-48-55/", 
@@ -99,5 +99,42 @@
     "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-29-15-34-00/", 
+    "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-11-14-17-47-50/", 
+    "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-52-58/", 
+    "pjibot_delivery/pjibot-P1YVPS1M22CM00020/data_parse/VD100M21-BJ-movebase-2024-11-14-17-53-56/", 
+    "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/2024-10-24-15-48-07/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-11-39-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-27-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-30-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-31-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-32-26/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-34-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-40-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-09-52-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-06-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-09-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-11-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-12-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-33-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-34-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-37-46/"
 ]

+ 2 - 2
src/python2/pjibot_delivery/pcd-nohup.sh

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

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

@@ -53,11 +53,8 @@ def parse_to_pcd_mp4(merged_bag_file_path, parse_prefix2, local_parse_dir, local
         logging.info("上传点云视频到: %s", oss_csv_object_key3)
         local_delete_list.append(local_mp4_path)
     except Exception as e:
-        local_delete_list.remove(merged_bag_file_path)
-        error_bag_list = json_utils.parse_json_to_string_array(error_bag_json)
-        error_bag_list.append(parse_prefix2)
-        json_utils.list_to_json_file(error_bag_list, error_bag_json)
         logging.exception("生成点云视频报错: %s" % str(e))
+        json_utils.add_error(parse_prefix,error_bag_json)
 
 
 if __name__ == '__main__':
@@ -101,6 +98,7 @@ if __name__ == '__main__':
                         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)
+                        local_delete_list.remove(local_merged_bag_path)
                 except Exception as e:
                     logging.exception("报错: %s" % str(e))
             # 删除本地临时文件

+ 39 - 46
src/python2/pjibot_delivery/resource/pcdtovideo_monitor_overlook.py

@@ -20,10 +20,10 @@ import datetime
 
 
 def draw_points(pic, filename):
-    colormap = np.array([[128, 130, 120], 
-             [235, 0, 205], 
-             [0, 215, 0], 
-             [235, 155, 0]]) / 255.0 
+    colormap = np.array([[128, 130, 120],
+                         [235, 0, 205],
+                         [0, 215, 0],
+                         [235, 155, 0]]) / 255.0
     f = open(filename, "r")
     ff = f.readlines()[11:]
 
@@ -36,10 +36,11 @@ def draw_points(pic, filename):
         if math.isnan(point_x):
             pass
         else:
-            cv2.circle(pic, (int(800 - point_x * 10), int(400 - point_y * 10)), 0, colormap[int(points_intensity) % colormap.shape[0]]*255, 2)
+            cv2.circle(pic, (int(800 - point_x * 10), int(400 - point_y * 10)), 0,
+                       colormap[int(points_intensity) % colormap.shape[0]] * 255, 2)
 
-def process_file(file):
 
+def process_file(file):
     root = file[0]
     inputFilePath = root + "/" + file[1]
     tempFilePath = root[:-3] + "pcd_ascii/" + file[1]
@@ -56,30 +57,27 @@ def process_file(file):
     cv2.imwrite(outputFilePath, pic)
 
 
-
-
 def parse(input_dir, output_dir):
-    s_time=datetime.datetime.now()
-    #input_dir = sys.argv[1]
+    s_time = datetime.datetime.now()
+    # input_dir = sys.argv[1]
     # input_dir='/media/dell/HIKSEMI/2024-09-06-11-54-36.bag'
-    #output_dir = sys.argv[2]
+    # output_dir = sys.argv[2]
     # output_dir = '/media/dell/HIKSEMI'
 
-
     bag_name = input_dir.split('/')[-1].split('.')[0]
     output_dir = os.path.join(output_dir, bag_name + '_pcd' + '/pcd')
     if not os.path.exists(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()
-        print('bag_start_time=',bag_start_time)
-        print('bag_end_time=',bag_end_time)
+        print('bag_start_time=', bag_start_time)
+        print('bag_end_time=', bag_end_time)
         num_count = 0
         for topic, msg, t in bag.read_messages(topics=['/velodyne_points']):
-             #/camera/depth/points   # /scan_map_icp_amcl_node/scan_point_transformed
-             num_count += 1
+            # /camera/depth/points   # /scan_map_icp_amcl_node/scan_point_transformed
+            num_count += 1
         start_time = bag.get_start_time()
         end_time = bag.get_end_time()
         # 计算rosbag的持续时间
@@ -88,7 +86,7 @@ def parse(input_dir, output_dir):
     bagtime = duration
     hz = str(float(float(num_count) / bagtime))
     print(hz)
-    
+
     #######################解析rosbag中的点云point_concat话题,获得原始pcd文件#######################
     command = ['rosrun', 'pcl_ros', 'bag_to_pcd'] + [input_dir] + ['/velodyne_points'] + [output_dir]
     command = ' '.join(command)
@@ -100,7 +98,7 @@ def parse(input_dir, output_dir):
         os.makedirs(file1)
     if not os.path.exists(file2):
         os.makedirs(file2)
-    
+
     #######################将原始pcd文件转化成pcd-ascii格式,并生成jpg文件#######################
     # Create a list of files to be processed
     files_to_process = []
@@ -108,7 +106,6 @@ def parse(input_dir, output_dir):
         for file in files:
             if file.endswith(".pcd"):
                 files_to_process.append((root, file))
-    
 
     num_processes = 4
 
@@ -116,7 +113,7 @@ def parse(input_dir, output_dir):
     pool.map(process_file, files_to_process)
     pool.close()
     pool.join()
-    
+
     #######################将转化的点云jpg合成视频#######################
     jpg_list = os.listdir(file2)
     if not jpg_list == []:
@@ -129,24 +126,24 @@ def parse(input_dir, output_dir):
         result_string = " ".join(command)
         p = Popen(result_string, shell=True, cwd=output_dir[0:-4] + '/', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
         p.wait()
-        
-        
+
+
         '''
-        
+
         '''
         下面这段代码是利用图像插值算法,通过指定一个频率将图像拼接成视频的代码
         '''
-        #指定视频帧率
-        hz=10.0
-        
+        # 指定视频帧率
+        hz = 10.0
+
         # 定义图片文件夹路径
         folder_path = file2
-        
+        '''
         #根据rosbag的起止时间生成黑色图片
         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')]
 
@@ -158,13 +155,11 @@ def parse(input_dir, output_dir):
 
         # 获取图片的形状
         image_shape = first_image.shape
-        
-        
-        
 
         # 创建视频写入对象
-        video_path=os.path.join(file2,'pcd_overlook.mp4')
-        video_writer = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), hz, (image_shape[1], image_shape[0]))
+        video_path = os.path.join(file2, 'pcd_overlook.mp4')
+        video_writer = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), hz,
+                                       (image_shape[1], image_shape[0]))
 
         # 遍历图片文件列表
         for i in range(len(image_files) - 1):
@@ -173,8 +168,8 @@ def parse(input_dir, output_dir):
             next_image = cv2.imread(os.path.join(folder_path, image_files[i + 1]))
 
             # 获取当前图片和下一张图片的时间戳
-            current_timestamp = float(image_files[i].split('.jpg')[0]) 
-            next_timestamp = float(image_files[i + 1].split('.jpg')[0]) 
+            current_timestamp = float(image_files[i].split('.jpg')[0])
+            next_timestamp = float(image_files[i + 1].split('.jpg')[0])
 
             # 计算时间间隔
             time_interval = next_timestamp - current_timestamp
@@ -182,14 +177,14 @@ def parse(input_dir, output_dir):
 
             # 根据实际时间间隔调整循环次数
             video_writer.write(current_image)
-            if int(time_interval * hz)>1.5:
-                for _ in range(int(time_interval * hz)):     
+            if int(time_interval * hz) > 1.5:
+                for _ in range(int(time_interval * hz)):
                     video_writer.write(current_image)
 
         # 释放资源
         video_writer.release()
         if os.path.exists(video_path):
-            video_output_path=os.path.join(output_dir[0:-4],'pcd_overlook.mp4')
+            video_output_path = os.path.join(output_dir[0:-4], 'pcd_overlook.mp4')
             command = ["ffmpeg", "-i", video_path, "-c:v", "libx264", video_output_path]
             p = Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
             p.communicate()
@@ -198,11 +193,9 @@ def parse(input_dir, output_dir):
             shutil.rmtree(file2)
             shutil.rmtree(file3)
 
-    
-    e_time=datetime.datetime.now()
-    print("using "+str(e_time-s_time)+ "s")
-    #shutil.rmtree(file1)
-    #shutil.rmtree(file2)
-    #shutil.rmtree(output_dir)
+    e_time = datetime.datetime.now()
+    print("using " + str(e_time - s_time) + "s")
+    # shutil.rmtree(file1)
+    # shutil.rmtree(file2)
+    # shutil.rmtree(output_dir)
     return output_dir[0:-4]
-    

+ 2 - 0
src/python2/pjibot_patrol/callback-pjibot_patrol.py

@@ -143,6 +143,8 @@ if __name__ == '__main__':
                         check_order = ['自车数据缺失', '不在道路范围', '无规划路径', '目标点缺失','点云缺失', '点云丢帧', '解析程序错误', '还原程序错误', '评价程序错误']
                         check_order_dict = dict((item, idx) for idx, item in enumerate(check_order))
                         check = sorted(check, key=lambda x: check_order_dict.get(x, float('inf')))
+                        if len(check) > 1:
+                            check = [item for item in check if item != "正常"]
                         check = ','.join(check) # 数组元素拼接成字符串序列
                         if old_date is None:
                             old_date = ''