LingxinMeng 5 months ago
parent
commit
ebcef875e3

+ 2 - 8
resource/vtd_pod_template-pjibot.yaml

@@ -78,12 +78,6 @@ spec:
           value: start-position-z
         - name: START_POSITION_H
           value: start-position-h
-        - name: END_POSITION_X
-          value: end-position-x
-        - name: END_POSITION_Y
-          value: end-position-y
-        - name: END_POSITION_Z
-          value: end-position-z
-        - name: END_POSITION_H
-          value: end-position-h
+        - name: END_POSITION
+          value: end-position
   restartPolicy: Never

+ 18 - 9
src/package/application/run_task.go

@@ -195,19 +195,32 @@ func RunWaitingCluster() {
 			infra.GlobalLogger.Errorf("下载xosc文件【%v】失败,错误信息为:%v", xoscOssPath, err)
 			continue
 		}
-		startPositionX, startPositionY, startPositionZ, startPositionH, endPositionX, endPositionY, endPositionZ, endPositionH, xodrPath, osgbPath := util.ParseXosc(xoscLocalPath)
+		startPositionX, startPositionY, startPositionZ, startPositionH, _, _, _, _, xodrPath, osgbPath := util.ParseXosc(xoscLocalPath)
 		firstTaskCache.Task.Scenario.ScenarioOdr = xodrPath
 		firstTaskCache.Task.Scenario.ScenarioOsgb = osgbPath
 		lastIndex := strings.LastIndex(xoscLocalPath, "/")
 		dirPath := xoscLocalPath[:lastIndex+1] // 包括最后一个 /
 		destinationCsvOssKey := dirPath + global.DestinationCsvName
+		var endPoints []util.DataPoint
 		if exist, _ := tempOss.IsObjectExist(destinationCsvOssKey); exist {
 			destinationCsvLocalPath := tempDir + util.NewShortUUID() + ".xosc"
 			err = tempOss.GetObjectToFile(destinationCsvOssKey, destinationCsvLocalPath)
-			_, endPositionX, endPositionY, endPositionZ, endPositionH = util.ParseCsv(destinationCsvLocalPath)
+			endPoints, _ = util.ParseCsv(destinationCsvLocalPath)
 		} else {
-
+			endPositionX, endPositionY, endPositionZ, endPositionH := global.DefaultEndPositionX, global.DefaultEndPositionY, global.DefaultEndPositionZ, global.DefaultEndPositionH
+			tempEndPoint := util.DataPoint{X: endPositionX, Y: endPositionY, Z: endPositionZ, H: endPositionH}
+			endPoints = append(endPoints, tempEndPoint)
+		}
+		var endPosition string // export END_POSITION="x1,y1,z1,h1;x2,y2,z2,h2;x3,y3,z3,h3;x4,y4,z4,h4"
+		// 遍历生成字符串
+		var endPositionBuilder strings.Builder
+		for _, endPoint := range endPoints {
+			if endPositionBuilder.Len() > 0 {
+				endPositionBuilder.WriteByte(';')
+			}
+			endPositionBuilder.WriteString(fmt.Sprintf("%s,%s,%s,%s", endPoint.X, endPoint.Y, endPoint.Z, endPoint.H))
 		}
+		endPosition = endPositionBuilder.String()
 
 		// ------- 修改OGT传感器显示目标物框 -------
 		for i := range firstTaskCache.Task.Vehicle.Sensors.OGT {
@@ -317,12 +330,8 @@ func RunWaitingCluster() {
 		podString = strings.Replace(podString, "start-position-y", "\""+startPositionY+"\"", -1)
 		podString = strings.Replace(podString, "start-position-z", "\""+startPositionZ+"\"", -1)
 		podString = strings.Replace(podString, "start-position-h", "\""+startPositionH+"\"", -1)
-		podString = strings.Replace(podString, "end-position-x", "\""+endPositionX+"\"", -1)
-		podString = strings.Replace(podString, "end-position-y", "\""+endPositionY+"\"", -1)
-		podString = strings.Replace(podString, "end-position-Z", "\""+endPositionZ+"\"", -1)
-		podString = strings.Replace(podString, "end-position-H", "\""+endPositionH+"\"", -1)
-
-		// --------------- 保存成文件
+		podString = strings.Replace(podString, "end-position", "\""+endPosition+"\"", -1)
+		// --------------- 保存成文件 ----------------
 		err = util.WriteFile(podString, yamlPath)
 		err = util.WriteFile(podString, yamlPathBak)
 		if err != nil {

+ 4 - 0
src/package/infra/global/default.go

@@ -13,4 +13,8 @@ var (
 		  z 0.3002931752092615
 		  w 0.9538469525677271
 	*/
+	DefaultEndPositionX = ""
+	DefaultEndPositionY = ""
+	DefaultEndPositionZ = ""
+	DefaultEndPositionH = ""
 )

+ 32 - 38
src/package/util/u_csv.go

@@ -3,64 +3,58 @@ package util
 import (
 	"encoding/csv"
 	"fmt"
-	"log"
 	"os"
-	"strconv"
 )
 
-func ParseCsv(csvPath string) (timestampString string, xString string, yString string, zString string, hString string) {
-	var err error
-	// 假设你的 CSV 文件名为 "data.csv"
+// DataPoint 结构体用于存储解析后的数据点,所有字段都是字符串类型
+type DataPoint struct {
+	Timestamp string
+	X         string
+	Y         string
+	Z         string
+	H         string
+}
+
+// ParseCsv 解析CSV文件并返回DataPoint切片
+func ParseCsv(csvPath string) ([]DataPoint, error) {
+	var dataPoints []DataPoint
+
 	csvFile, err := os.Open(csvPath)
 	if err != nil {
-		log.Fatalf("无法打开文件: %v", err)
+		return nil, fmt.Errorf("无法打开文件: %v", err)
 	}
 	defer csvFile.Close()
 
 	reader := csv.NewReader(csvFile)
 
-	// 读取文件的头部(列名)
-	headers, err := reader.Read()
+	// 读取文件的头部(列名),这里我们不需要使用它们,但可以检查以确保格式正确
+	_, err = reader.Read()
 	if err != nil {
-		log.Fatalf("无法读取头部: %v", err)
+		return nil, fmt.Errorf("无法读取头部: %v", err)
 	}
-	fmt.Println("Headers:", headers)
+	// 打印或检查头部(可选)
+	// fmt.Println("Headers:", headers)
 
 	// 读取文件的内容
 	records, err := reader.ReadAll()
 	if err != nil {
-		log.Fatalf("无法读取所有记录: %v", err)
+		return nil, fmt.Errorf("无法读取所有记录: %v", err)
 	}
-	var timestamp int64
-	var x, y, z, h float64
+
 	// 处理每一行记录
 	for _, record := range records {
-		// 将时间戳和其他字段转换为适当的类型
-		timestamp, err = strconv.ParseInt(record[0], 10, 64)
-		if err != nil {
-			log.Fatalf("无法解析时间戳: %v", err)
-		}
-
-		x, err = strconv.ParseFloat(record[1], 64)
-		if err != nil {
-			log.Fatalf("无法解析 x: %v", err)
+		// 直接将读取的字符串值赋给DataPoint结构体的相应字段
+		dataPoint := DataPoint{
+			Timestamp: record[0],
+			X:         record[1],
+			Y:         record[2],
+			Z:         record[3],
+			H:         record[4],
 		}
 
-		y, err = strconv.ParseFloat(record[2], 64)
-		if err != nil {
-			log.Fatalf("无法解析 y: %v", err)
-		}
-
-		z, err = strconv.ParseFloat(record[3], 64)
-		if err != nil {
-			log.Fatalf("无法解析 z: %v", err)
-		}
-
-		h, err = strconv.ParseFloat(record[4], 64)
-		if err != nil {
-			log.Fatalf("无法解析 h: %v", err)
-		}
-		// 打印解析后的数据
+		// 将解析后的数据添加到切片中
+		dataPoints = append(dataPoints, dataPoint)
 	}
-	return fmt.Sprintf("%v", timestamp), fmt.Sprintf("%v", x), fmt.Sprintf("%v", y), fmt.Sprintf("%v", z), fmt.Sprintf("%v", h)
+
+	return dataPoints, nil
 }