|
@@ -1,334 +0,0 @@
|
|
|
-//package com.css.simulation.resource.scheduler.service;
|
|
|
-//
|
|
|
-//import api.common.pojo.po.scene.VehicleTypePO;
|
|
|
-//import api.common.pojo.vo.model.VehicleVO;
|
|
|
-//import api.common.util.FileUtil;
|
|
|
-//import api.common.util.LinuxUtil;
|
|
|
-//import com.css.simulation.resource.scheduler.mapper.ConfigMapper;
|
|
|
-//import com.css.simulation.resource.scheduler.mapper.SimulationAutomaticProjectMapper;
|
|
|
-//import com.css.simulation.resource.scheduler.mapper.VehicleMapper;
|
|
|
-//import com.css.simulation.resource.scheduler.util.MinioUtil;
|
|
|
-//import io.minio.MinioClient;
|
|
|
-//import lombok.SneakyThrows;
|
|
|
-//import org.dom4j.Attribute;
|
|
|
-//import org.dom4j.Document;
|
|
|
-//import org.dom4j.Element;
|
|
|
-//import org.dom4j.io.OutputFormat;
|
|
|
-//import org.dom4j.io.SAXReader;
|
|
|
-//import org.dom4j.io.XMLWriter;
|
|
|
-//import org.springframework.beans.factory.annotation.Value;
|
|
|
-//import org.springframework.stereotype.Service;
|
|
|
-//
|
|
|
-//import javax.annotation.Resource;
|
|
|
-//import java.io.File;
|
|
|
-//import java.io.OutputStreamWriter;
|
|
|
-//import java.io.Writer;
|
|
|
-//import java.math.BigDecimal;
|
|
|
-//import java.nio.file.Files;
|
|
|
-//import java.nio.file.Paths;
|
|
|
-//import java.util.Iterator;
|
|
|
-//
|
|
|
-//@Service
|
|
|
-//public class VideoService {
|
|
|
-// @Resource
|
|
|
-// VehicleMapper vehicleMapper;
|
|
|
-// @Resource
|
|
|
-// ConfigMapper configMapper;
|
|
|
-// @Resource
|
|
|
-// SimulationAutomaticProjectMapper simulationAutomaticProjectMapper;
|
|
|
-// @Resource
|
|
|
-// MinioClient minioClient;
|
|
|
-//
|
|
|
-//
|
|
|
-// //* -------------------------------- Comment --------------------------------
|
|
|
-//
|
|
|
-// public static final String oldXoscName = "simulation_my0.xosc";
|
|
|
-// public static final String newXoscName = "simulation_my05.xosc";
|
|
|
-// public static final String oldXoscRelativePath = "xosc/simulation_my0.xosc";
|
|
|
-// public static final String[] csvNameArray = {"Ego.csv", "evaluation.csv"};
|
|
|
-//
|
|
|
-// //* -------------------------------- Comment --------------------------------
|
|
|
-// @Value("${scheduler.linux-path.temp}")
|
|
|
-// String linuxTempPath;
|
|
|
-// @Value("${scheduler.minio-path.project-result}")
|
|
|
-// String projectResultPathOfMinio;
|
|
|
-// @Value("${minio.bucket-name}")
|
|
|
-// String bucketName;
|
|
|
-//
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 生成视频
|
|
|
-// */
|
|
|
-// @SneakyThrows
|
|
|
-// public void generateVideo(String projectId, String projectType, String taskId) {
|
|
|
-// //1 获取两个 csv 的目录,和 xodr 和 osgb 三个路径
|
|
|
-// String csvDirectoryPath = linuxTempPath + "video/" + projectId + "/" + taskId + "/";
|
|
|
-// String xodrPath = FileUtil.listAbsolutePathByFiletype(csvDirectoryPath, ".xodr").get(0); // xodr 文件在创建项目时已经下载好了
|
|
|
-// String osgbPath = FileUtil.listAbsolutePathByFiletype(csvDirectoryPath, ".osgb").get(0); // osgb 文件在创建项目时已经下载好了
|
|
|
-// //2 下载 csv 文件
|
|
|
-// for (String csvName : csvNameArray) {
|
|
|
-// MinioUtil.downloadToFile(minioClient, bucketName, projectResultPathOfMinio + projectId + "/" + taskId + "/" + csvName, csvDirectoryPath + "/" + csvName);
|
|
|
-// }
|
|
|
-// //3 生成 xosc 文件
|
|
|
-// String xoscPath = generateXosc(csvDirectoryPath, xodrPath, osgbPath, projectId, projectType);
|
|
|
-// //4 生成图片
|
|
|
-// String pictureDirectoryPath = csvDirectoryPath + "picture";
|
|
|
-// FileUtil.createDirectory(pictureDirectoryPath);
|
|
|
-// String esminiCommand = "/root/disk1/simulation-cloud/esmini/build/EnvironmentSimulator/code-examples/image-capture/image-capture "
|
|
|
-// + xoscPath + " " + pictureDirectoryPath + "/screenshot";
|
|
|
-// String esminiResult = LinuxUtil.execute(esminiCommand);
|
|
|
-// //5 生成视频
|
|
|
-// String videoName = "simulation_output.mp4";
|
|
|
-// String videoTargetPathOfLinux = csvDirectoryPath + "video";
|
|
|
-// FileUtil.createDirectory(videoTargetPathOfLinux);
|
|
|
-// String videoTargetPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + videoName;
|
|
|
-//
|
|
|
-// String execute = LinuxUtil.execute("ffmpeg"
|
|
|
-// + " -f image2 -framerate 30 "
|
|
|
-// + " -i " + pictureDirectoryPath + "/screenshot_%05d.tga"
|
|
|
-// + " -c:v libx264 -vf format=yuv420p -crf 20 "
|
|
|
-// + videoTargetPathOfLinux + "/" + videoName
|
|
|
-// );
|
|
|
-// //6 将视频上传到 minio
|
|
|
-// MinioUtil.uploadFromFile(minioClient, videoTargetPathOfLinux + videoName, bucketName, videoTargetPathOfMinio);
|
|
|
-// }
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * Xosc
|
|
|
-// */
|
|
|
-// @SneakyThrows
|
|
|
-// private String generateXosc(String csvDirectoryPath, String xodrPath, String osgbPath, String projectId, String projectType) {
|
|
|
-// //1 生成 xosc 文件
|
|
|
-// String command = "D:\\Users\\anaconda3\\envs\\flaskProject\\python.exe C:/Users/CSS/Desktop/simulation/gqSw/simulation_my.py " + csvDirectoryPath;
|
|
|
-// String execute = LinuxUtil.execute(command); // 执行命令后生成 xosc 到目录下
|
|
|
-// String oldXoscPath = csvDirectoryPath + oldXoscRelativePath; // 生成文件的路径是固定的
|
|
|
-// //2 调用修改xosc
|
|
|
-// return modifyXosc(oldXoscPath, xodrPath, osgbPath, projectId, projectType); // 返回最新的xosc文件全路径
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 修改 xosc 文件
|
|
|
-// */
|
|
|
-// @SneakyThrows
|
|
|
-// private String modifyXosc(String oldXoscPath, String xodrPath, String osgbPath, String projectId, String projectType) {
|
|
|
-// String newXoscPath = oldXoscPath.replace(oldXoscName, newXoscName);
|
|
|
-// //获取三维自车对象
|
|
|
-// VehicleTypePO po = vehicleById(projectId, projectType);
|
|
|
-//
|
|
|
-// //1 创建Reader对象
|
|
|
-// SAXReader reader = new SAXReader();
|
|
|
-// //2 加载xml
|
|
|
-// // Document document = reader.read(new File("D:\\simulation_my0.xosc"));
|
|
|
-// Document document = reader.read(new File(oldXoscPath));
|
|
|
-// //3 获取根节点
|
|
|
-// Element root = document.getRootElement();
|
|
|
-// Iterator<Element> iterator0 = root.elementIterator();
|
|
|
-// while (iterator0.hasNext()) { // 第一层遍历
|
|
|
-// Element node1 = iterator0.next();
|
|
|
-// if ("Entities".equals(node1.getName())) { // 找到第一层节点后进入第二层遍历
|
|
|
-// Iterator<Element> iterator1 = node1.elementIterator();
|
|
|
-// while (iterator1.hasNext()) {
|
|
|
-// Element node2 = iterator1.next();
|
|
|
-// // 添加节点
|
|
|
-// if ("ScenarioObject".equals(node2.getName())) {
|
|
|
-// String scenarioObjectName = node2.attribute("name").getValue();
|
|
|
-// if (scenarioObjectName.equals("Ego")) {
|
|
|
-// Iterator<Element> iterator2 = node2.elementIterator();
|
|
|
-// while (iterator2.hasNext()) {
|
|
|
-// Element node3 = iterator2.next();
|
|
|
-// if ("Vehicle".equals(node3.getName())) {
|
|
|
-// Attribute name = node3.attribute("name");
|
|
|
-// name.setText("Audi_A3_2009_red");
|
|
|
-// Attribute vehicleCategory = node3.attribute("vehicleCategory");
|
|
|
-// vehicleCategory.setText(po.getVehicleCategory());
|
|
|
-// node3.addAttribute("model3d",po.getModel3d());//自车渲染
|
|
|
-// Iterator<Element> iterator4 = node3.elementIterator();
|
|
|
-// while (iterator4.hasNext()) {
|
|
|
-// Element node4 = iterator4.next();
|
|
|
-// if ("Performance".equals(node4.getName())) {
|
|
|
-// Attribute maxSpeed = node4.attribute("maxSpeed");
|
|
|
-// maxSpeed.setText(po.getPerformanceMaxSpeed() + "");
|
|
|
-// Attribute maxDeceleration = node4.attribute("maxDeceleration");
|
|
|
-// maxDeceleration.setText(po.getPerformanceMaxDeceleration() + "");
|
|
|
-// Attribute maxAcceleration = node4.attribute("maxAcceleration");
|
|
|
-// maxAcceleration.setText(po.getPerformanceMaxAcceleration());
|
|
|
-// } else if ("BoundingBox".equals(node4.getName())) {
|
|
|
-// Iterator<Element> iterator5 = node4.elementIterator();
|
|
|
-// while (iterator5.hasNext()) {
|
|
|
-// Element node5 = iterator5.next();
|
|
|
-// if ("Center".equals(node5.getName())) {
|
|
|
-// Attribute x = node5.attribute("x");
|
|
|
-// x.setText(po.getCenterX() + "");
|
|
|
-// Attribute y = node5.attribute("y");
|
|
|
-// y.setText(po.getCenterY() + "");
|
|
|
-// Attribute z = node5.attribute("z");
|
|
|
-// z.setText(po.getCenterZ() + "");
|
|
|
-// }
|
|
|
-// if ("Dimensions".equals(node5.getName())) {
|
|
|
-// Attribute width = node5.attribute("width");
|
|
|
-// width.setText(po.getDimensionsWidth() + "");
|
|
|
-// Attribute length = node5.attribute("length");
|
|
|
-// length.setText(po.getDimensionsHeight() + "");
|
|
|
-// Attribute height = node5.attribute("height");
|
|
|
-// height.setText(po.getDimensionsHeight() + "");
|
|
|
-// }
|
|
|
-// }
|
|
|
-// } else if ("Axles".equals(node4.getName())) {
|
|
|
-// Iterator<Element> iterator5 = node4.elementIterator();
|
|
|
-// while (iterator5.hasNext()) {
|
|
|
-// Element node5 = iterator5.next();
|
|
|
-// if ("FrontAxle".equals(node5.getName())) {
|
|
|
-// Attribute maxSteering = node5.attribute("maxSteering");
|
|
|
-// maxSteering.setText(po.getFrontAxleMaxSteering() + "");
|
|
|
-// Attribute wheelDiameter = node5.attribute("wheelDiameter");
|
|
|
-// wheelDiameter.setText(po.getFrontAxleWheelDiameter() + "");
|
|
|
-// Attribute trackWidth = node5.attribute("trackWidth");
|
|
|
-// trackWidth.setText(po.getFrontAxleTrackWidth() + "");
|
|
|
-// Attribute positionX = node5.attribute("positionX");
|
|
|
-// positionX.setText(po.getFrontAxlePositionX() + "");
|
|
|
-// Attribute positionZ = node5.attribute("positionZ");
|
|
|
-// positionZ.setText(po.getFrontAxlePositionZ() + "");
|
|
|
-// }
|
|
|
-// if ("RearAxle".equals(node5.getName())) {
|
|
|
-// Attribute maxSteering = node5.attribute("maxSteering");
|
|
|
-// maxSteering.setText(po.getRearAxleMaxSteering());
|
|
|
-// Attribute wheelDiameter = node5.attribute("wheelDiameter");
|
|
|
-// wheelDiameter.setText(po.getRearAxleWheelDiameter() + "");
|
|
|
-// Attribute trackWidth = node5.attribute("trackWidth");
|
|
|
-// trackWidth.setText(po.getRearAxleTrackWidth() + "");
|
|
|
-// Attribute positionX = node5.attribute("positionX");
|
|
|
-// positionX.setText(po.getRearAxlePositionX() + "");
|
|
|
-// Attribute positionZ = node5.attribute("positionZ");
|
|
|
-// positionZ.setText(po.getRearAxlePositionZ() + "");
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 保存文件
|
|
|
-// // Writer osWrite = new OutputStreamWriter(Files.newOutputStream(Paths.get("D:\\simulation_my0000.xosc")));// 创建输出流
|
|
|
-//
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// if ("RoadNetwork".equals(node1.getName())) { // 找到第一层节点后进入第二层遍历
|
|
|
-// Iterator<Element> iterator1 = node1.elementIterator();
|
|
|
-// while (iterator1.hasNext()) {
|
|
|
-// Element node2 = iterator1.next();
|
|
|
-// // 添加节点
|
|
|
-// if ("LogicFile".equals(node2.getName())) {
|
|
|
-// Attribute name = node2.attribute("filepath");
|
|
|
-// name.setText(xodrPath);
|
|
|
-// }
|
|
|
-// if ("SceneGraphFile".equals(node2.getName())) {
|
|
|
-// Attribute name = node2.attribute("filepath");
|
|
|
-// name.setText(osgbPath);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// Writer osWrite = new OutputStreamWriter(Files.newOutputStream(Paths.get(newXoscPath)));
|
|
|
-// OutputFormat format = OutputFormat.createPrettyPrint(); // 获取输出的指定格式
|
|
|
-// format.setEncoding("UTF-8");// 设置编码 ,确保解析的xml为UTF-8格式
|
|
|
-// XMLWriter writer = new XMLWriter(osWrite, format);// XMLWriter
|
|
|
-// writer.write(document);// 把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)
|
|
|
-// writer.flush();
|
|
|
-// writer.close();
|
|
|
-// }
|
|
|
-// return newXoscPath;
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// //获取三维自车对象
|
|
|
-// @SneakyThrows
|
|
|
-// private VehicleTypePO vehicleById(String projectId, String projectType) {
|
|
|
-// VehicleTypePO po = new VehicleTypePO();
|
|
|
-// //项目类型 1.手动;2.自动
|
|
|
-// String vehicle = "";
|
|
|
-// if (projectType.equals("1")) {
|
|
|
-// vehicle = simulationAutomaticProjectMapper.vehicleBySdId(projectId);
|
|
|
-// } else if (projectType.equals("2")) {
|
|
|
-// vehicle = simulationAutomaticProjectMapper.vehicleByZdId(projectId);
|
|
|
-// }
|
|
|
-// String vehicleId = configMapper.getVehicleId(vehicle);
|
|
|
-//
|
|
|
-// VehicleVO vehicleInfo = vehicleMapper.getVehicleInfo(vehicleId);
|
|
|
-//
|
|
|
-// //自车模型
|
|
|
-// String car = vehicleInfo.getVehicleTypeStr().substring(0, vehicleInfo.getVehicleTypeStr().indexOf(","));
|
|
|
-// car = car.substring(0, 1).toLowerCase() + car.substring(1);
|
|
|
-// if (car.contains("truck")) {
|
|
|
-// po.setVehicleCategory("truck");
|
|
|
-// } else if (car.contains("trailer")) {
|
|
|
-// po.setVehicleCategory("trailer");
|
|
|
-// } else if (car.contains("van")) {
|
|
|
-// po.setVehicleCategory("van");
|
|
|
-// } else if (car.contains("semitrailer")) {
|
|
|
-// po.setVehicleCategory("semitrailer");
|
|
|
-// } else if (car.contains("bus")) {
|
|
|
-// po.setVehicleCategory("bus");
|
|
|
-// } else if (car.contains("motorbike")) {
|
|
|
-// po.setVehicleCategory("motorbike");
|
|
|
-// } else if (car.contains("bicycle")) {
|
|
|
-// po.setVehicleCategory("bicycle");
|
|
|
-// } else if (car.contains("bicycle")) {
|
|
|
-// po.setVehicleCategory("bicycle");
|
|
|
-// } else if (car.contains("train")) {
|
|
|
-// po.setVehicleCategory("train");
|
|
|
-// } else if (car.contains("tram")) {
|
|
|
-// po.setVehicleCategory("tram");
|
|
|
-// } else {
|
|
|
-// po.setVehicleCategory("car");
|
|
|
-// }
|
|
|
-//
|
|
|
-// //车前距
|
|
|
-// BigDecimal frontDistance = vehicleInfo.getFrontDistance();
|
|
|
-// //车后距
|
|
|
-// BigDecimal mo2 = new BigDecimal("2");
|
|
|
-// BigDecimal rearDistance = vehicleInfo.getRearDistance();
|
|
|
-// if (frontDistance.compareTo(rearDistance) > 0) {
|
|
|
-// BigDecimal CenterX = (frontDistance.add(rearDistance)).divide(mo2).subtract(rearDistance);
|
|
|
-// po.setCenterX(CenterX);
|
|
|
-// } else {
|
|
|
-// BigDecimal CenterX = (frontDistance.add(rearDistance)).divide(mo2).subtract(frontDistance);
|
|
|
-// po.setCenterX(CenterX);
|
|
|
-// }
|
|
|
-// //车高
|
|
|
-// BigDecimal mo3 = new BigDecimal("3");
|
|
|
-// po.setCenterZ(vehicleInfo.getHeightDistance().divide(mo3));
|
|
|
-// //车左距 车右距
|
|
|
-// BigDecimal LeftDistance = vehicleInfo.getLeftDistance();
|
|
|
-// BigDecimal RightDistance = vehicleInfo.getRightDistance();
|
|
|
-// po.setDimensionsWidth(LeftDistance.add(RightDistance));
|
|
|
-// po.setDimensionsHeight(vehicleInfo.getHeightDistance());
|
|
|
-// po.setDimensionsLength(frontDistance.add(rearDistance));
|
|
|
-//
|
|
|
-// po.setPerformanceMaxSpeed(vehicleInfo.getMaxSpeed());
|
|
|
-// po.setPerformanceMaxDeceleration(vehicleInfo.getMaxDeceleration());
|
|
|
-// BigDecimal moπ = new BigDecimal("3.141516");
|
|
|
-// BigDecimal mo180 = new BigDecimal("180");
|
|
|
-// po.setFrontAxleMaxSteering(vehicleInfo.getMaxSteeringAngle().multiply(moπ).divide(mo180));
|
|
|
-// po.setFrontAxleWheelDiameter(vehicleInfo.getWheelDiameter());
|
|
|
-// BigDecimal mo4 = new BigDecimal("4");
|
|
|
-// BigDecimal mo5 = new BigDecimal("5");
|
|
|
-// po.setFrontAxleTrackWidth(LeftDistance.add(RightDistance).multiply(mo4).divide(mo5));
|
|
|
-// po.setFrontAxlePositionX(po.getCenterX());
|
|
|
-// po.setFrontAxlePositionZ(po.getCenterZ());
|
|
|
-//
|
|
|
-// po.setRearAxleWheelDiameter(vehicleInfo.getWheelDiameter());
|
|
|
-// po.setRearAxleTrackWidth(po.getFrontAxleTrackWidth());
|
|
|
-// po.setRearAxlePositionX(po.getFrontAxlePositionX());
|
|
|
-// po.setRearAxlePositionZ(po.getFrontAxlePositionZ());
|
|
|
-// return po;
|
|
|
-//
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-//}
|