From 55be62c63d9faedb48d47dd1c18cf1a74e3eea6c Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Wed, 15 Nov 2023 17:15:35 +0800
Subject: [PATCH] 图斑多点飞行,拍照
---
src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java | 4 +-
src/main/java/com/dji/sample/wayline/model/param/FlyAreaParam.java | 3 +
src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java | 22 ++++-------
src/main/java/com/dji/sample/control/service/IControlService.java | 12 +++++
src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java | 2
src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java | 63 ++++++++++++++++++++++++++-----
6 files changed, 78 insertions(+), 28 deletions(-)
diff --git a/src/main/java/com/dji/sample/control/service/IControlService.java b/src/main/java/com/dji/sample/control/service/IControlService.java
index ac49f0e..dfe0a7c 100644
--- a/src/main/java/com/dji/sample/control/service/IControlService.java
+++ b/src/main/java/com/dji/sample/control/service/IControlService.java
@@ -43,7 +43,7 @@
* @param headers
* @return
*/
- CommonTopicReceiver handleFlyToPointProgress(CommonTopicReceiver receiver, MessageHeaders headers);
+ CommonTopicReceiver handleFlyToPointProgress(CommonTopicReceiver receiver, MessageHeaders headers) throws Exception;
/**
* Control the drone to take off.
@@ -63,6 +63,7 @@
/**
* Seize the control authority of the drone or the payload control authority.
+ * 抢占无人机控制权限或有效载荷控制权限
* @param sn
* @param authority
* @param param
@@ -79,4 +80,13 @@
ResponseResult requestsConfig(String sn,String method, RequestsParam param);
+ /**
+ * 拍照
+ * @param sn
+ * @param payloadIndex
+ * @return
+ * @throws Exception
+ */
+ ResponseResult takePhoto(String sn,String payloadIndex) throws Exception;
+
}
diff --git a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
index 3cee5df..c186883 100644
--- a/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
+++ b/src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.dji.sample.common.error.CommonErrorEnum;
import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.common.util.SpringBeanUtils;
import com.dji.sample.component.mqtt.model.*;
import com.dji.sample.component.mqtt.service.IMessageSenderService;
import com.dji.sample.component.redis.RedisConst;
@@ -13,10 +14,7 @@
import com.dji.sample.control.model.dto.PointDTO;
import com.dji.sample.control.model.dto.ResultNotifyDTO;
import com.dji.sample.control.model.dto.TakeoffProgressReceiver;
-import com.dji.sample.control.model.enums.DroneAuthorityEnum;
-import com.dji.sample.control.model.enums.DroneControlMethodEnum;
-import com.dji.sample.control.model.enums.FlyToStatusEnum;
-import com.dji.sample.control.model.enums.RemoteDebugMethodEnum;
+import com.dji.sample.control.model.enums.*;
import com.dji.sample.control.model.param.*;
import com.dji.sample.control.service.IControlService;
import com.dji.sample.manage.model.dto.DeviceDTO;
@@ -189,7 +187,7 @@
}
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_FLY_TO_POINT_PROGRESS, outputChannel = ChannelName.OUTBOUND_EVENTS)
- public CommonTopicReceiver handleFlyToPointProgress(CommonTopicReceiver receiver, MessageHeaders headers) {
+ public CommonTopicReceiver handleFlyToPointProgress(CommonTopicReceiver receiver, MessageHeaders headers) throws Exception {
String dockSn = receiver.getGateway();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(dockSn);
@@ -213,13 +211,14 @@
if (jsonObject != null) {
List<PointPOJO> targetList = (List<PointPOJO>) jsonObject.get("targetList");
int curIndex = (Integer) jsonObject.get("curIndex");
- flyToNextPoint(targetList, curIndex, dockSn);
+ String payloadIndex = jsonObject.getString("payloadIndex");
+ flyToNextPoint(targetList, curIndex, dockSn, payloadIndex);
}
}
return receiver;
}
- private ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn) {
+ private ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn, String payloadIndex) throws Exception {
curIndex = curIndex + 1;
//当无人机状态为人工时再发布下一个命令
while (true) {
@@ -234,8 +233,7 @@
RedisOpsUtils.del("tuban:" + sn);
return returnHome;
- }
- else {
+ } else {
//当前不是最后一个点,飞行到下一个点
FlyToPointParam flyToPointParam = new FlyToPointParam();
flyToPointParam.setMaxSpeed(14);
@@ -248,22 +246,67 @@
pointDTOS.add(pointDTO);
flyToPointParam.setPoints(pointDTOS);
+ //执行拍照
+ ResponseResult responseResult = takePhoto(sn, payloadIndex);
+ //发布下一个飞行指令
ResponseResult flyToRes = flyToPoint(sn, flyToPointParam);
if (flyToRes.getCode() == ResponseResult.CODE_SUCCESS) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("targetList", targetList);
jsonObject.put("curIndex", curIndex);
+ jsonObject.put("payloadIndex",payloadIndex);
RedisOpsUtils.set("tuban:" + sn, jsonObject);
}
return flyToRes;
-
}
}
}
}
+ @Override
+ public ResponseResult takePhoto(String sn, String payloadIndex) throws Exception {
+
+ //获取负载控制权
+ DronePayloadParam dronePayloadParam = new DronePayloadParam();
+ dronePayloadParam.setPayloadIndex(payloadIndex);
+
+ ResponseResult seizeAuthorityRes = seizeAuthority(sn, DroneAuthorityEnum.PAYLOAD, dronePayloadParam);
+
+ //切换为相机模式
+ if (seizeAuthorityRes.getCode() != ResponseResult.CODE_SUCCESS) {
+ return seizeAuthorityRes;
+ }
+
+ PayloadCommandsParam payloadCommandsParam = new PayloadCommandsParam();
+
+// DronePayloadParam switchParam = new DronePayloadParam();
+// switchParam.setCameraMode(CameraModeEnum.PHOTO);
+// switchParam.setPayloadIndex(payloadIndex);
+
+// payloadCommandsParam.setSn(sn);
+// payloadCommandsParam.setCmd(PayloadCommandsEnum.CAMERA_MODE_SWitCH);
+// payloadCommandsParam.setData(switchParam);
+//
+// ResponseResult switchModeRes = payloadCommands(payloadCommandsParam);
+
+// if (switchModeRes.getCode() != ResponseResult.CODE_SUCCESS){
+// return switchModeRes;
+// }
+ //拍照
+ payloadCommandsParam.setCmd(PayloadCommandsEnum.CAMERA_PHOTO_TAKE);
+ DronePayloadParam takePhotoParam = new DronePayloadParam();
+ takePhotoParam.setPayloadIndex(payloadIndex);
+
+ payloadCommandsParam.setData(takePhotoParam);
+ payloadCommandsParam.setSn(sn);
+
+ ResponseResult responseResult = payloadCommands(payloadCommandsParam);
+
+ return responseResult;
+ }
+
private void checkTakeoffCondition(String dockSn) {
Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(dockSn);
diff --git a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
index 455ef03..58e73d7 100644
--- a/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
+++ b/src/main/java/com/dji/sample/wayline/controller/WaylineJobController.java
@@ -191,7 +191,7 @@
*/
@PostMapping("/{sn}/jobs/{device_sn}/flyByArea")
@SysLogAnnotation(operModul = "根据区域飞行", operType = "根据区域飞行", operDesc = "根据区域飞行")
- public ResponseResult flyByArea(@PathVariable(name = "sn") String sn, @RequestBody FlyAreaParam flyAreaParam,@PathVariable(name = "device_sn")String deviceSn) {
- return waylineJobService.flyByArea(sn, flyAreaParam,deviceSn);
+ public ResponseResult flyByArea(@PathVariable(name = "sn") String sn, @RequestBody FlyAreaParam flyAreaParam,@PathVariable(name = "device_sn")String deviceSn)throws Exception {
+ return waylineJobService.flyByArea(sn, flyAreaParam,deviceSn);
}
}
diff --git a/src/main/java/com/dji/sample/wayline/model/param/FlyAreaParam.java b/src/main/java/com/dji/sample/wayline/model/param/FlyAreaParam.java
index d477347..29798bc 100644
--- a/src/main/java/com/dji/sample/wayline/model/param/FlyAreaParam.java
+++ b/src/main/java/com/dji/sample/wayline/model/param/FlyAreaParam.java
@@ -18,4 +18,7 @@
private Double radius;
@JsonProperty(value = "jsonPath")
private String jsonPath;
+
+ @JsonProperty(value = "payloadIndex")
+ private String payloadIndex;
}
diff --git a/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java b/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
index f99ab2c..66093fe 100644
--- a/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
+++ b/src/main/java/com/dji/sample/wayline/service/IWaylineJobService.java
@@ -168,7 +168,7 @@
void updateJobCollect(WaylineJobEntity waylineJob);
- ResponseResult flyByArea(String sn, FlyAreaParam flyAreaParam,String deviceSn);
+ ResponseResult flyByArea(String sn, FlyAreaParam flyAreaParam,String deviceSn) throws Exception;
/**
* 判断是否有下一次任务
diff --git a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
index a009206..0d2d1a7 100644
--- a/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
+++ b/src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -12,14 +12,16 @@
import com.dji.sample.common.model.Pagination;
import com.dji.sample.common.model.PaginationData;
import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.common.util.SpringBeanUtils;
import com.dji.sample.component.mqtt.model.*;
import com.dji.sample.component.mqtt.service.IMessageSenderService;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils;
import com.dji.sample.control.model.dto.PointDTO;
-import com.dji.sample.control.model.param.DrcModeParam;
-import com.dji.sample.control.model.param.FlyToPointParam;
-import com.dji.sample.control.model.param.TakeoffToPointParam;
+import com.dji.sample.control.model.enums.CameraModeEnum;
+import com.dji.sample.control.model.enums.DroneAuthorityEnum;
+import com.dji.sample.control.model.enums.PayloadCommandsEnum;
+import com.dji.sample.control.model.param.*;
import com.dji.sample.control.service.IControlService;
import com.dji.sample.control.service.IDrcService;
import com.dji.sample.geo.entity.GeoJson;
@@ -701,7 +703,7 @@
}
@Override
- public ResponseResult flyByArea(String sn, FlyAreaParam flyAreaParam, String deviceSn) {
+ public ResponseResult flyByArea(String sn, FlyAreaParam flyAreaParam, String deviceSn) throws Exception {
//获取所有中心点
// List<PointPOJO> targetList = GeoUtils.caculatePointList(flyAreaParam);
@@ -738,25 +740,17 @@
if (flyToRes.getCode() == ResponseResult.CODE_SUCCESS) {
//第一个点指令飞行成功后,把数组存到redis中
- /**
- * {
- * targetList:[],
- * curIndex:
- * }
- */
-
JSONObject jsonObject = new JSONObject();
jsonObject.put("targetList",targetList);
+ jsonObject.put("payloadIndex",flyAreaParam.getPayloadIndex());
jsonObject.put("curIndex",0);
-
-
RedisOpsUtils.set("tuban:"+sn,jsonObject);
}
break;
}
}
- return ResponseResult.success();
+ return ResponseResult.success(targetList);
}
public TakeoffToPointParam buildTakeoffToPointParam(PointPOJO dockPoint) {
--
Gitblit v1.9.3