LingxinMeng 2 kuukautta sitten
vanhempi
commit
2eabd4ad10

+ 1 - 1
build/pjibot_guide-csv/EXE-00.toc

@@ -2677,7 +2677,7 @@
  [],
  False,
  False,
- 1741768620,
+ 1742180623,
  [('run',
    '/usr/local/lib/python2.7/dist-packages/PyInstaller/bootloader/Linux-64bit/run',
    'EXECUTABLE')])

BIN
build/pjibot_guide-csv/PKG-00.pkg


BIN
build/pjibot_guide-csv/pjibot_guide-csv


+ 8 - 5
config/pjibot_guide-csv.yaml

@@ -6,11 +6,14 @@ oss:
   bucket-name: pji-bucket1
   data-root: pjibot/
 log-file-path: /mnt/disk001/dcl_data_process/log/pjibot_guide-csv.log
-pdf-command-dir: /mnt/disk001/pdf_indoor/run
-pdf-command-config: /mnt/disk001/pdf_indoor/run/config.json
-xosc-command-dir: /mnt/disk001/dcl_data_process/src/python3/pjibot_indoor
-xosc-command-config: /mnt/disk001/dcl_data_process/src/python3/pjibot_indoor/filter_pos.py
-xosc-command-pgm: /mnt/disk001/dcl_data_process/src/python3/pjibot_indoor/resource/shiyanshi_newpgm_20240416.pgm
+pdf:
+  command: ./single_case_eval
+  dir: /mnt/disk001/pdf_indoor/run
+  config: /mnt/disk001/pdf_indoor/run/config.json
+merged-obstacles:
+  command: ./filter_pos 
+  dir: /mnt/disk001/merged-obstacles
+  pgm: /mnt/disk001/merged-obstacles/shiyanshi_newpgm_20240416.pgm
 temp-dir: /mnt/disk001/dcl_data_process/temp/pjibot_guide/csv/
 sleep-time: 60 # 每一轮休眠时间
 error-bag-json: /mnt/disk001/dcl_data_process/errorbag/pjibot_guide/csv-errorBag.json

+ 54 - 1
errorbag/pjibot_delivery/xosc-errorBag.json

@@ -148,5 +148,58 @@
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-45-05/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-46-29/", 
     "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Perception2024-11-08-16-48-55/", 
-    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-12-25-09-26-48_obstacledetection_30/"
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/2024-12-25-09-26-48_obstacledetection_30/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/TS100M36-BJ-dock-2024-09-29-15-47-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-09-52-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-06-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-09-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-11-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-12-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-33-53/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-34-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-37-46/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-40-05/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-42-33/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-10-43-45/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-Locate-2024-09-29-16-05-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-11-39-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-27-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-30-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-31-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-32-26/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-34-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-40-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-dock-2024-09-29-15-47-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-50-39/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-52-00/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-53-23/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-54-17/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-55-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-56-50/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-57-57/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-15-58-52/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-00-45/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-02-11/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-05-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-07-32/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-08-46/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-09-43/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-10-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-11-42/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VD100M6-BJ-movebase-2024-09-29-16-12-44/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/VP100M23-BJ-movebase-2024-11-15-14-19-41/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前倾10°_2024-09-29-15-47-59/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物穿梭2024-09-29-15-32-26/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩前方障碍物遮挡2024-09-29-15-31-10/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏斜30°_2024-09-29-15-43-02/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩右偏移15cm_2024-09-29-15-40-28/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩左偏移30°_2024-09-29-15-45-29/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩有电 轮廓遮挡2024-09-29-15-30-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电 轮廓遮挡2024-09-29-15-27-25/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/充电桩没电2024-09-29-11-39-55/", 
+    "pjibot_delivery/pjibot-P1YYPS1M227M00107/data_parse/障碍物跟随2024-09-29-15-34-00/"
 ]

+ 2 - 15
src/python2/pjibot_delivery/pjibot_delivery-2callback.py

@@ -18,45 +18,32 @@ def add_hour(date_string, hour_number):
 
 def judge_pcd(callback_json_oss_key):
     try:
-        # 从 OSS 获取对象内容
         json_content = bucket.get_object(callback_json_oss_key).read()
-        
-        # 尝试解析 JSON 数据
         json_object = json.loads(json_content)
-        
-        # 检查字段是否存在
         if 'check' not in json_object:
             logging.error("Missing 'check' field in %s", callback_json_oss_key)
             return False
-        
-        # 判断 'check' 字段内容
         check = json_object['check']
         if '点云缺失' in check:
             return True
-        
-        # 未匹配的情况
         return False
-
     except ValueError as e:
-        # JSON 数据解析失败
         logging.error("Failed to decode JSON from %s", e)
         return False
-
     except Exception as e:
-        # 捕获所有其他异常
         logging.error("Error processing %s", e)
         return False
 
 if __name__ == '__main__':
     # --------------------- 配置项 -----------------------------
     if len(sys.argv) != 2:
-        print("Usage: python script.py <config_file_path>")
+        print("请传入yaml配置文件地址参数!")
         sys.exit(1)
     config_file_path = sys.argv[1]
     try:
         config = yaml_utils.parse_yaml(config_file_path)
     except Exception as e:
-        print("Error parsing YAML file:", e)
+        print("解析yaml配置文件失败:", e)
         sys.exit(1)
     # --------------------------------------------------
     auth = oss2.Auth(config['oss']['access-key-id'], config['oss']['access-key-secret']) # oss 账号密码

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

@@ -69,13 +69,13 @@ def generate_xosc(parse_prefix, local_parse_dir, local_delete_list):
 if __name__ == '__main__':
     # --------------------------------------------------
     if len(sys.argv) != 2:
-        print("Usage: python script.py <config_file_path>")
+        print("请传入yaml配置文件地址参数!")
         sys.exit(1)
     config_file_path = sys.argv[1]
     try:
         config = yaml_utils.parse_yaml(config_file_path)
     except Exception as e:
-        print("Error parsing YAML file:", e)
+        print("解析yaml配置文件失败:", e)
         sys.exit(1)
     # --------------------------------------------------
     temp_dir = config['temp-dir'] # 临时文件目录

+ 17 - 46
src/python2/pjibot_guide/pjibot_guide-csv.py

@@ -12,7 +12,6 @@ import io
 from resource import bagtocsv_robot
 from utils import json_utils
 from utils import yaml_utils
-command_report = './single_case_eval'
 # -------------------------------------------------- 
 def parse_csv(costmap_bag, data_bag, parse_prefix, local_parse_dir, local_delete_list):
     try:
@@ -80,57 +79,24 @@ def parse_csv(costmap_bag, data_bag, parse_prefix, local_parse_dir, local_delete
         
 
         # ------- 生成 pdf 报告 - 开始 -------
-        # #  ------- 根据合并后的包和map.bag 生成轨迹图片 - 开始 -------
-        # # 获取只有1帧率的数据包
-        # map_key = parse_prefix + '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("命令输出:%s" % stdout.strip())
-        # if stderr:
-        #     logging.error("命令错误:%s" % stderr.strip())
-        # jpg_key = parse_prefix + 'track.png'
-        # logging.info("图片路径为:%s" % jpg_key)
-        # 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'
             track_png_path = os.path.join(local_csv_dir, 'track.png')
             bucket.get_object_to_file(track_png_key, track_png_path)
             os.chdir(pdf_command_dir)
-
-            # 构建生成PDF报告的命令
-            # data_bag_base = data_bag.split('/')[-1].split('.')[0]
-            # command1 = [command_report, local_csv_dir, local_csv_dir, track_png_path, data_bag_base]
             command1 = [command_report, local_csv_dir,track_png_path, config_json_path]
-
-            # 打印调用生成PDF报告命令的日志
             logging.info("调用生成pdf 报告命令: %s" % ' '.join(command1))
-
-            # 使用subprocess.call()执行命令(Python 2中没有直接的subprocess.run(),但可以用subprocess.call()或Popen())
             try:
-                # subprocess.call()会等待命令完成并返回退出码,但不直接提供stdout和stderr的访问
-                # 如果需要捕获输出,我们需要使用Popen()
                 process = subprocess.Popen(command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                 stdout, stderr = process.communicate()  # 等待进程完成并获取输出
                 exit_code = process.returncode
-
                 if exit_code == 0:
-                    # 命令成功执行
                     logging.info("PDF报告生成成功,输出:\n%s" % stdout.decode('utf-8'))  # Python 2中字符串需要解码
                 else:
-                    # 命令执行失败
                     logging.error("PDF报告生成失败,错误:\n%s" % stderr.decode('utf-8'))
                     json_utils.add_error(parse_prefix, error_bag_json)
             except Exception as e:
-                # 捕获其他可能的异常
                 logging.error("执行命令时发生异常: %s" % str(e))
                 json_utils.add_error(parse_prefix, error_bag_json)
             else:
@@ -146,8 +112,8 @@ def parse_csv(costmap_bag, data_bag, parse_prefix, local_parse_dir, local_delete
         
 
         # ------- 根据 merged_obstacles 和 机器人指定的pgm文件 生成新的 merged_obstacles 文件 -------
-        os.chdir(xosc_command_dir)
-        command2 = "python3 {} {} {}".format(xosc_command_config, xosc_command_pgm, local_csv_file_path3)
+        os.chdir(merged_obstacles_dir)
+        command2 = "{} {} {}".format(merged_obstacles_command, merged_obstacles_pgm, local_csv_file_path3)
         logging.info("调用命令 merged_obstacles_new.csv 生成命令: %s", command2)
         process = subprocess.Popen(command2, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
         stdout, stderr = process.communicate()  # 获取标准输出和错误输出
@@ -179,11 +145,12 @@ if __name__ == '__main__':
     bucket_name = config['oss']['bucket-name'] # oss 桶
     oss_data_root = config['oss']['data-root'] # 数据所在的oss根目录
     log_file_path = config['log-file-path'] # 日志文件地址
-    pdf_command_dir = config['pdf-command-dir']
-    config_json_path = config['pdf-command-config']
-    xosc_command_dir = config['xosc-command-dir']
-    xosc_command_config = config['xosc-command-config']
-    xosc_command_pgm = config['xosc-command-pgm']
+    pdf_command_dir = config['pdf']['dir']
+    command_report = config['pdf']['command']
+    config_json_path = config['pdf']['config']
+    merged_obstacles_command = config['merged-obstacles']['command']
+    merged_obstacles_dir = config['merged-obstacles']['dir']
+    merged_obstacles_pgm = config['merged-obstacles']['pgm']
     temp_dir = config['temp-dir']
     error_bag_json = config['error-bag-json']
     sleep_time = config['sleep-time']  # 每多少秒扫描一次
@@ -197,11 +164,12 @@ if __name__ == '__main__':
     logging.info("Bucket Name:%s", config['oss']['bucket-name'])
     logging.info("OSS Data Root:%s", config['oss']['data-root'])
     logging.info("Log File Path:%s", config['log-file-path'])
-    logging.info("PDF命令目录:%s", config['pdf-command-dir'])
-    logging.info("PDF命令配置文件路径:%s", config['pdf-command-config'])
-    logging.info("XOSC命令目录:%s", config['xosc-command-dir'])
-    logging.info("XOSC命令配置文件路径:%s", config['xosc-command-config'])
-    logging.info("XOSC命令pgm文件路径:%s", config['xosc-command-pgm'])
+    logging.info("PDF命令目录:%s", pdf_command_dir)
+    logging.info("PDF命令:%s", command_report)
+    logging.info("PDF命令配置文件路径:%s", config_json_path)
+    logging.info("merged_obstacles_command:%s", config['merged-obstacles']['command'])
+    logging.info("merged_obstacles_dir:%s", config['merged-obstacles']['dir'])
+    logging.info("merged_obstacles_pgm:%s", config['merged-obstacles']['pgm'])
     logging.info("临时文件目录:%s", config['temp-dir'])
     logging.info("错误目录json路径:%s", config['error-bag-json'])
     logging.info("Sleep Time:%s", config['sleep-time'])
@@ -225,6 +193,7 @@ if __name__ == '__main__':
                     csv1_done = False
                     csv2_done = False
                     csv3_done = False
+                    # csv4_done = False
                     pdf_done = False
                     track_done = False
                     for obj2 in oss2.ObjectIterator(bucket, prefix=parse_prefix_full):
@@ -234,6 +203,8 @@ if __name__ == '__main__':
                             csv2_done = True
                         if '/merged_obstacles.csv' in str(obj2.key):
                             csv3_done = True
+                        # if '/merged_obstacles_new.csv' in str(obj2.key): # todo 可以加上这个判断
+                        #     csv4_done = True
                         if '/report.pdf' in str(obj2.key):
                             pdf_done = True
                         if '/track.png' in str(obj2.key):