src/main/java/com/dji/sample/control/service/IControlService.java
@@ -4,7 +4,10 @@ import com.dji.sample.component.mqtt.model.CommonTopicReceiver; import com.dji.sample.control.model.enums.DroneAuthorityEnum; import com.dji.sample.control.model.param.*; import com.dji.sample.wayline.model.param.PointPOJO; import org.springframework.messaging.MessageHeaders; import java.util.List; /** * @author sean @@ -89,4 +92,15 @@ */ ResponseResult takePhoto(String sn,String payloadIndex) throws Exception; /** * 飞向下一个目标点 * @param targetList 目标点集合 * @param curIndex 当前飞行点索引 * @param sn * @param payloadIndex 负载 * @return * @throws Exception */ ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn, String payloadIndex) throws Exception; } src/main/java/com/dji/sample/control/service/IDrcService.java
@@ -45,6 +45,7 @@ /** * Make the dock enter drc mode. And grant relevant permissions. * 使机场进入drc模式。并授予相关权限 * @param workspaceId * @param param * @return src/main/java/com/dji/sample/control/service/impl/ControlServiceImpl.java
@@ -100,6 +100,16 @@ RedisOpsUtils.setWithExpire(serviceIdentifier + RedisConst.DELIMITER + bid, sn, RedisConst.DEVICE_ALIVE_SECOND * RedisConst.DEVICE_ALIVE_SECOND); } //当执行返航指令时,删除图斑redis if (serviceIdentifier == "return_home"){ if (RedisOpsUtils.checkExist("tuban:" + sn)){ RedisOpsUtils.del("tuban:" + sn); } } return ResponseResult.success(); } @@ -205,27 +215,32 @@ eventsReceiver.getStatus().getMessage() : eventsReceiver.getResult().getErrorMsg()) .result(eventsReceiver.getResult().getErrorCode()) .build()); //当飞向目标点成功后 if (eventsReceiver.getStatus().equals(FlyToStatusEnum.WAYLINE_OK)) { JSONObject jsonObject = (JSONObject) RedisOpsUtils.get("tuban:" + dockSn); if (jsonObject != null) { List<PointPOJO> targetList = (List<PointPOJO>) jsonObject.get("targetList"); int curIndex = (Integer) jsonObject.get("curIndex"); String payloadIndex = jsonObject.getString("payloadIndex"); flyToNextPoint(targetList, curIndex, dockSn, payloadIndex); flyToNextPoint(targetList, curIndex+1, dockSn, payloadIndex); } } return receiver; } private ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn, String payloadIndex) throws Exception { curIndex = curIndex + 1; @Override public ResponseResult flyToNextPoint(List<PointPOJO> targetList, int curIndex, String sn, String payloadIndex) throws Exception { //当无人机状态为人工时再发布下一个命令 while (true) { Optional<DeviceDTO> dockOpt = deviceRedisService.getDeviceOnline(sn); DeviceModeCodeEnum deviceMode = deviceService.getDeviceMode(dockOpt.get().getChildDeviceSn()); if (DeviceModeCodeEnum.MANUAL == deviceMode) { //执行拍照 ResponseResult responseResult = takePhoto(sn, payloadIndex); //发布飞行指令 if (curIndex == targetList.size()) { //当前是最后一个点,返航 ResponseResult returnHome = controlDockDebug(sn, "return_home", null); @@ -245,9 +260,6 @@ pointDTO.setLatitude(targetList.get(curIndex).getLat()); pointDTOS.add(pointDTO); flyToPointParam.setPoints(pointDTOS); //执行拍照 ResponseResult responseResult = takePhoto(sn, payloadIndex); //发布下一个飞行指令 ResponseResult flyToRes = flyToPoint(sn, flyToPointParam); src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java
@@ -1,5 +1,6 @@ package com.dji.sample.control.service.impl; import com.alibaba.fastjson.JSONObject; import com.dji.sample.common.model.ResponseResult; import com.dji.sample.component.mqtt.config.MqttConfiguration; import com.dji.sample.component.mqtt.model.*; @@ -18,6 +19,7 @@ import com.dji.sample.control.service.IControlService; import com.dji.sample.control.service.IDrcService; import com.dji.sample.manage.model.dto.DeviceDTO; import com.dji.sample.manage.model.enums.DockDrcStateEnum; import com.dji.sample.manage.model.enums.DockModeCodeEnum; import com.dji.sample.manage.model.enums.UserTypeEnum; import com.dji.sample.manage.model.receiver.OsdSubDeviceReceiver; @@ -26,6 +28,7 @@ import com.dji.sample.wayline.model.dto.WaylineTaskProgressReceiver; import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum; import com.dji.sample.wayline.model.enums.WaylineTaskStatusEnum; import com.dji.sample.wayline.model.param.PointPOJO; import com.dji.sample.wayline.model.param.UpdateJobParam; import com.dji.sample.wayline.service.IWaylineJobService; import com.dji.sample.wayline.service.IWaylineRedisService; @@ -149,7 +152,7 @@ String pubTopic = topic + TopicConst.DOWN; String subTopic = topic + TopicConst.UP; // If the dock is in drc mode, refresh the permissions directly. // If the dock is in drc mode, refresh the permissions directly. 如果dock处于drc模式,直接刷新权限 if (deviceService.checkDockDrcMode(param.getDockSn()) && param.getClientId().equals(this.getDrcModeInRedis(param.getDockSn()))) { refreshAcl(param.getDockSn(), param.getClientId(), topic, subTopic); @@ -209,7 +212,7 @@ } @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_DRC_STATUS_NOTIFY, outputChannel = ChannelName.OUTBOUND_EVENTS) public CommonTopicReceiver handleDrcStatusNotify(CommonTopicReceiver receiver, MessageHeaders headers) { public CommonTopicReceiver handleDrcStatusNotify(CommonTopicReceiver receiver, MessageHeaders headers) throws Exception { String dockSn = receiver.getGateway(); Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(dockSn); @@ -225,6 +228,26 @@ .message(eventsReceiver.getResult().getErrorMsg()) .result(eventsReceiver.getResult().getErrorCode()).build()); } //当进入控制时,停止当前的图斑飞行 if (eventsReceiver.getDrcState()==DockDrcStateEnum.CONNECTED){ JSONObject jsonObject = (JSONObject) RedisOpsUtils.get("tuban:" + dockSn); if (jsonObject != null) { controlService.flyToPointStop(dockSn); } } //当退出控制后,继续执行图斑飞行 if(eventsReceiver.getDrcState() == DockDrcStateEnum.DISCONNECTED){ JSONObject jsonObject = (JSONObject) RedisOpsUtils.get("tuban:" + dockSn); if (jsonObject != null) { List<PointPOJO> targetList = (List<PointPOJO>) jsonObject.get("targetList"); int curIndex = (Integer) jsonObject.get("curIndex"); String payloadIndex = jsonObject.getString("payloadIndex"); controlService.flyToNextPoint(targetList, curIndex, dockSn, payloadIndex); } } return receiver; } src/main/java/com/dji/sample/wayline/service/impl/WaylineJobServiceImpl.java
@@ -729,7 +729,7 @@ List<PointDTO> pointDTOS = new ArrayList<>(); PointDTO pointDTO = new PointDTO(); pointDTO.setHeight(150.0); pointDTO.setHeight(120.0); pointDTO.setLongitude(targetList.get(0).getLon()); pointDTO.setLatitude(targetList.get(0).getLat()); pointDTOS.add(pointDTO);