From d81fdeef2ad2f7ecc548cebad6ab15455bf3da27 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Tue, 30 Jul 2024 14:53:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/ht-dev' into ht-dev
---
src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 104 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java b/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java
index 9ef5203..85dab35 100644
--- a/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java
+++ b/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java
@@ -1,6 +1,7 @@
package com.dji.sample.patches.xml.mode;
import com.dji.sample.patches.model.entity.LotInfo;
+import com.dji.sample.patches.utils.DistanceCalculator;
import com.dji.sample.patches.utils.GeoToolsUtil;
import com.dji.sample.patches.utils.PointPO;
import com.dji.sample.patches.xml.mode.share.*;
@@ -129,7 +130,7 @@
*/
public static XMLTemplateModel initPolygon(CreateWaylineParam param) {
- Folder folder = FolderUtils.setFloder(param.getTemplateType(), param.getAutoFlightSpeed());
+ Folder folder = FolderUtils.setFloder(param.getTemplateType(), param.getAutoFlightSpeed(),param.getExecuteHeightMode());
//坐标系参数
WaylineCoordinateSysParam wcs = new WaylineCoordinateSysParam("EGM96", String.valueOf(param.getHeight()), String.valueOf(param.getHeight()));
@@ -165,18 +166,118 @@
//航点
List<Coordinate> pointList = PlaneCourseUtils.createWaylinePoints(param);
List<Placemark> placemarkList = new ArrayList<>();
+ //计算距离
+ Coordinate droneC = param.getCoordinate();//机场经纬度
+ int pointListIndex = 0;
+ double distanceOne = 0.0; //第一个点到机场得距离
+ double distance = 0.0;
+ Coordinate pointTmp = null;
for (Coordinate c:pointList) {
+ //计算距离
+ if (pointListIndex == 0) {
+ distanceOne = DistanceCalculator.calculateDistance(droneC.y,droneC.x,c.y,c.x) * 1000;
+ distance += distanceOne;
+ pointTmp = c;
+ } else {
+ double distanceTmp = DistanceCalculator.calculateDistance(pointTmp.y,pointTmp.x,c.y,c.x) * 1000;
+ distance += distanceTmp;
+ pointTmp = c;
+ }
+ pointListIndex += 1;
+
Placemark placemark = new Placemark();
placemark.setCoordinates(c.x + "," + c.y);
placemark.setEllipsoidHeight(param.getHeight());
placemark.setHeight(param.getHeight());
+ placemark.setExecuteHeight(param.getHeight()); //执行高度 = 机场高度 + 飞行高度 *修改为前端直接传
placemark.setWaypointSpeed(param.getAutoFlightSpeed() + "");
placemark.setUseStraightLine(1);
- //事件暂时不考虑添加
+
+ //
+ WaypointTurnParam waypointTurnParam = new WaypointTurnParam();
+ waypointTurnParam.setWaypointTurnMode("coordinateTurn");
+ waypointTurnParam.setWaypointTurnDampingDist("0.2");
+ //添加事件 第一个和结尾需要添加事件
+ if (pointListIndex == 1) { //第一个航点事件
+
+ waypointTurnParam.setWaypointTurnMode("toPointAndStopWithDiscontinuityCurvature");
+ waypointTurnParam.setWaypointTurnDampingDist("0");
+
+ // 增加事件组
+ ActionGroup actionGroup = new ActionGroup();
+ actionGroup.setActionGroupId(0);
+ actionGroup.setActionGroupStartIndex(pointListIndex - 1);//动作组开始生效的航点
+ actionGroup.setActionGroupEndIndex(pointList.size() - 1);//动作组结束生效的航点
+ actionGroup.setActionGroupMode("sequence");
+ ActionTrigger at = new ActionTrigger();
+ at.setActionTriggerType("betweenAdjacentPoints");
+ actionGroup.setActionTrigger(at);
+ // 开始增加事件
+ List<ActionMode> list = new ArrayList<>();
+ ActionMode actionMode = new ActionMode();
+
+ actionMode.setActionId(0);
+ actionMode.setActionActuatorFunc("gimbalAngleLock");
+
+ ActionMode actionMode2 = new ActionMode();
+ actionMode2.setActionId(1);
+ actionMode2.setActionActuatorFunc(CameraActionEnum.GIMBAL_ROTATE.getDescription());//旋转云台
+ actionMode2.setActionActuatorFuncParam(ActionUtils.setGimbalRotateByPlane());
+
+ ActionMode actionMode3 = new ActionMode();
+ actionMode3.setActionId(2);
+ actionMode3.setActionActuatorFunc("startTimeLapse");
+ actionMode3.setActionActuatorFuncParam(ActionUtils.setStartTimeLapseByPlane());
+
+ list.add(actionMode);
+ list.add(actionMode2);
+ list.add(actionMode3);
+ actionGroup.setActions(list);
+
+ placemark.setActionGroup(actionGroup);
+
+ } else if(pointListIndex == pointList.size()) { // 结尾需要添加事件
+
+ waypointTurnParam.setWaypointTurnMode("toPointAndStopWithDiscontinuityCurvature");
+ waypointTurnParam.setWaypointTurnDampingDist("0");
+
+ // 增加事件组
+ ActionGroup actionGroup = new ActionGroup();
+ actionGroup.setActionGroupId(1);
+ actionGroup.setActionGroupStartIndex(pointListIndex - 1);//动作组开始生效的航点
+ actionGroup.setActionGroupEndIndex(pointList.size()-1);//动作组结束生效的航点
+ actionGroup.setActionGroupMode("sequence");
+ ActionTrigger at = new ActionTrigger();
+ at.setActionTriggerType("reachPoint");
+ actionGroup.setActionTrigger(at);
+ // 开始增加事件
+ List<ActionMode> list = new ArrayList<>();
+
+ ActionMode actionMode = new ActionMode();
+ actionMode.setActionId(0);
+ actionMode.setActionActuatorFunc("stopTimeLapse");
+ actionMode.setActionActuatorFuncParam(ActionUtils.setStopTimeLapseByPlane());
+
+ ActionMode actionMode2 = new ActionMode();
+ actionMode2.setActionId(1);
+ actionMode2.setActionActuatorFunc("gimbalAngleUnlock");
+
+ list.add(actionMode);
+ list.add(actionMode2);
+ actionGroup.setActions(list);
+
+ placemark.setActionGroup(actionGroup);
+ }
+
+ placemark.setWaypointTurnParam(waypointTurnParam);
placemarkList.add(placemark);
}
+
+ //距离和时间
+ folder.setDistance((distance - distanceOne) + "");
+ folder.setDuration((distance / param.getAutoFlightSpeed()) + "");//时间 = 长度 / 速度
folder.setPlacemarkList(placemarkList);
@@ -205,6 +306,7 @@
param.setSideRatio(0.8);
param.setFocal(10*6.9999943);
param.setFrame(100);
+ param.setDroneHeight(14.731968792284789);
List<double[]> polygon = new ArrayList<>();
double[] a = {116.028037250229,25.8948290570725};
double[] a2 = {116.031565260299,25.8950672687002};
--
Gitblit v1.9.3