|
@@ -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):
|