allen 2 місяців тому
батько
коміт
5aa8f5243f

+ 78 - 0
uavps-framework/src/main/java/com/uavps/framework/udp/CoordinateSystem.java

@@ -0,0 +1,78 @@
+package com.uavps.framework.udp;
+
+public enum CoordinateSystem {
+    // 枚举实例,包含初始化坐标和转化比率
+    INSTANCE(0.0f, 0.0f, true, 1.0f);
+
+    // 枚举字段
+    private float x;
+    private float y;
+    private boolean initFlag;
+    private float conversionRate;
+    private final int initCenterPixel = 500;
+
+    // 枚举构造函数
+    private CoordinateSystem(float x, float y, boolean initFlag, float conversionRate) {
+        this.x = x;
+        this.y = y;
+        this.initFlag = initFlag;
+        this.conversionRate = conversionRate;
+    }
+
+    // 重置方法
+    public void reset() {
+        // 初始化
+        this.x = 0f;
+        this.y = 0f;
+        this.initFlag = true;
+        this.conversionRate = 0.00001f;
+    }
+
+    // Getter和Setter方法
+    public float getX() {
+        return x;
+    }
+
+    public void setX(float x) {
+        this.x = x;
+    }
+
+    public float getY() {
+        return y;
+    }
+
+    public void setY(float y) {
+        this.y = y;
+    }
+
+    public boolean getInitFlag() {
+        return initFlag;
+    }
+
+    public void setInitFlag(boolean initFlag) {
+        this.initFlag = initFlag;
+    }
+
+    public float getConversionRate() {
+        return conversionRate;
+    }
+
+    public void setConversionRate(float conversionRate) {
+        this.conversionRate = conversionRate;
+    }
+
+    // 转换坐标方法
+    public float convertValue(float value) {
+        return value * conversionRate;
+    }
+
+    public float getConversionCenterPixel() {
+        return initCenterPixel * conversionRate;
+    }
+
+    // 显示坐标信息
+    public void displayCoordinates() {
+        System.out.printf("%s 坐标系 - X: %.2f, Y: %.2f (初始化标识: %s, 转化比率: %.6f)%n",
+                this.name(), x, y, initFlag, conversionRate);
+    }
+}

+ 8 - 41
uavps-framework/src/main/java/com/uavps/framework/udp/UdpServerService.java

@@ -93,10 +93,6 @@ public class UdpServerService {
         try {
             //创建一个服务端对象,注册端口
             DatagramSocket socket = new DatagramSocket(udpConfig.getPort());
-            Boolean isFirst = true;
-            float initX = 0;
-            float initY = 0;
-            float level = 0.00001f;
             //创建一个数据包对象,用于接收数据
             byte[] data = new byte[1024];
             DatagramPacket packet = new DatagramPacket(data, data.length);
@@ -120,44 +116,15 @@ public class UdpServerService {
                     if (udpData != null) {
                         UdpDataUtils.time += 1;
                         udpData.setTime(UdpDataUtils.time);
-//                        for (int i = 0; i < udpData.getTargetAircraft().size(); i++) {
-//                            List<Aircraft> aircrafts = udpData.getTargetAircraft().get(i).getAircrafts();
-//                            for (int j = 0; j < aircrafts.size(); j++) {
-//                                Aircraft aircraft = aircrafts.get(j);
-//                                if (aircraft.getAircraftNumber().equals("1")) {
-//                                    if (UdpDataUtils.time > 100 && UdpDataUtils.time < 200) {
-//                                        aircraft.setCoordinateX(aircraft.getCoordinateX() + UdpDataUtils.time);
-//                                        aircraft.setCoordinateY(aircraft.getCoordinateY() + 100);
-//                                    } else if (UdpDataUtils.time > 200 && UdpDataUtils.time < 300) {
-//                                        aircraft.setCoordinateX(aircraft.getCoordinateX() + 200);
-//                                        aircraft.setCoordinateY(aircraft.getCoordinateY() + UdpDataUtils.time);
-//                                    } else {
-//                                        aircraft.setCoordinateX(aircraft.getCoordinateX() + UdpDataUtils.time);
-//                                        aircraft.setCoordinateY(aircraft.getCoordinateY() + UdpDataUtils.time);
-//                                    }
-//                                } else if (aircraft.getAircraftNumber().equals("2")) {
-//                                    if (UdpDataUtils.time > 100 && UdpDataUtils.time < 200) {
-//                                        aircraft.setCoordinateX(aircraft.getCoordinateX() + UdpDataUtils.time + 50);
-//                                        aircraft.setCoordinateY(aircraft.getCoordinateY() + 150);
-//                                    } else if (UdpDataUtils.time > 200 && UdpDataUtils.time < 300) {
-//                                        aircraft.setCoordinateX(aircraft.getCoordinateX() + 250);
-//                                        aircraft.setCoordinateY(aircraft.getCoordinateY() + UdpDataUtils.time + 50);
-//                                    } else {
-//                                        aircraft.setCoordinateX(aircraft.getCoordinateX() + UdpDataUtils.time + 50);
-//                                        aircraft.setCoordinateY(aircraft.getCoordinateY() + UdpDataUtils.time + 50);
-//                                    }
-//                                }
-//                            }
-//                        }
                         if(udpData.getTargetAircraft() != null){
                             for (AircraftFormation aircraftFormation : udpData.getTargetAircraft()) {
                                 for (Aircraft aircraft : aircraftFormation.getAircrafts()) {
-                                    if(isFirst){
-                                        initX=aircraft.getCoordinateX() - 500 * level;
-                                        initY=aircraft.getCoordinateY() - 500 * level;
-                                        isFirst = false;
+                                    if(CoordinateSystem.INSTANCE.getInitFlag()){
+                                        CoordinateSystem.INSTANCE.setX(aircraft.getCoordinateX() - CoordinateSystem.INSTANCE.getConversionCenterPixel());
+                                        CoordinateSystem.INSTANCE.setY(aircraft.getCoordinateY() - CoordinateSystem.INSTANCE.getConversionCenterPixel());
+                                        CoordinateSystem.INSTANCE.setInitFlag(false);
                                     }
-                                    getNewXYAircraftCoordinate(aircraft,initX,initY,level);
+                                    getNewXYAircraftCoordinate(aircraft);
                                 }
                             }
                         }
@@ -174,11 +141,11 @@ public class UdpServerService {
         }
     }
 
-    private void getNewXYAircraftCoordinate(Aircraft aircraft, float initX, float initY, float level) {
+    private void getNewXYAircraftCoordinate(Aircraft aircraft) {
         aircraft.setCoordinateOX(aircraft.getCoordinateX());
         aircraft.setCoordinateOY(aircraft.getCoordinateY());
         aircraft.setCoordinateOZ(aircraft.getCoordinateZ());
-        aircraft.setCoordinateX((aircraft.getCoordinateX()-initX)/level);
-        aircraft.setCoordinateY((aircraft.getCoordinateY()-initY)/level);
+        aircraft.setCoordinateX((aircraft.getCoordinateX()-CoordinateSystem.INSTANCE.getX())/CoordinateSystem.INSTANCE.getConversionRate());
+        aircraft.setCoordinateY((aircraft.getCoordinateY()-CoordinateSystem.INSTANCE.getY())/CoordinateSystem.INSTANCE.getConversionRate());
     }
 }

+ 16 - 16
uavps-framework/src/main/java/com/uavps/framework/udp/utils/UdpDataUtils.java

@@ -62,22 +62,22 @@ public class UdpDataUtils {
             udpData.setFinished("false");
             udpData.setTargetAircraft(targetAircraft);
             return udpData;
-//        } else if (start_1 == NOISE_TARGET_DATA_HEAD_1 && start_2 == NOISE_TARGET_DATA_HEAD_2) {
-//            // 噪声目标数据包
-//            index++;
-//            // 数据区
-//            byte[] data = Arrays.copyOfRange(frame, index, frame.length - 1);
-//            List<Aircraft> aircrafts = parseNoiseData(data);
-//            AircraftFormation formation = new AircraftFormation();
-//            formation.setFormationNumber("1");
-//            formation.setAircrafts(aircrafts);
-//            List<AircraftFormation> targetAircraft = new ArrayList<>();
-//            targetAircraft.add(formation);
-//            UdpData udpData = new UdpData();
-//            udpData.setBizId(bizId);
-//            udpData.setFinished("false");
-//            udpData.setTargetAircraft(targetAircraft);
-//            return udpData;
+        } else if (start_1 == NOISE_TARGET_DATA_HEAD_1 && start_2 == NOISE_TARGET_DATA_HEAD_2) {
+            // 噪声目标数据包
+            index++;
+            // 数据区
+            byte[] data = Arrays.copyOfRange(frame, index, frame.length - 1);
+            List<Aircraft> aircrafts = parseNoiseData(data);
+            AircraftFormation formation = new AircraftFormation();
+            formation.setFormationNumber("1");
+            formation.setAircrafts(aircrafts);
+            List<AircraftFormation> targetAircraft = new ArrayList<>();
+            targetAircraft.add(formation);
+            UdpData udpData = new UdpData();
+            udpData.setBizId(bizId);
+            udpData.setFinished("false");
+            udpData.setTargetAircraft(targetAircraft);
+            return udpData;
         } else if (start_1 == PLATFORM_DATA_HEAD_1 && start_2 == PLATFORM_DATA_HEAD_2) {
             //平台数据
             index++;

+ 4 - 0
uavps-framework/src/main/java/com/uavps/framework/websocket/WebSocketServer.java

@@ -2,6 +2,7 @@ package com.uavps.framework.websocket;
 
 import com.uavps.common.utils.spring.SpringUtils;
 import com.uavps.common.utils.uuid.IdUtils;
+import com.uavps.framework.udp.CoordinateSystem;
 import com.uavps.framework.udp.UdpClientService;
 import com.uavps.framework.udp.UdpServerService;
 import com.uavps.framework.udp.utils.UdpDataUtils;
@@ -100,6 +101,9 @@ public class WebSocketServer {
                         }
                     }
                 } else if (message.startsWith("RUN:")) {
+                    // 初始化 坐标转换参数
+                    CoordinateSystem.INSTANCE.reset();
+
                     String paramId = message.substring(4);
                     UavpsAlgorithmParameter param = algorithmParameterService.selectUavpsAlgorithmParameterById(Long.parseLong(paramId));
                     String parameter = UdpDataUtils.initAlgorithmParams(param);