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; } 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,20 +246,65 @@ 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; } 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) { 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); } } 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; } 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; /** * 判断是否有下一次任务 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) {