From f2236478e434b9d1b714b51d3586fb11a59e6f14 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 26 Oct 2024 16:40:28 +0800
Subject: [PATCH] 增加 控制权和起飞
---
ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java | 28 ++
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java | 12
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java | 35 ++
ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java | 100 +++++++
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java | 32 ++
ard-work/src/main/java/com/ard/tianyu/service/ITyService.java | 12
ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java | 63 ++++
ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java | 42 +++
ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java | 22 +
/dev/null | 181 -------------
ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java | 69 +++++
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java | 35 ++
ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java | 83 ++++++
ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java | 2
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java | 35 ++
15 files changed, 566 insertions(+), 185 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java
new file mode 100644
index 0000000..e7a70bc
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java
@@ -0,0 +1,83 @@
+package com.ard.tianyu.controller;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.tianyu.model.dto.BoxHistoryDTO;
+import com.ard.tianyu.model.dto.BoxPhotosDTO;
+import com.ard.tianyu.model.dto.BoxSettingsDTO;
+import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
+import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
+import com.ard.tianyu.model.receiver.BoxInfoReceiver;
+import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
+import com.ard.tianyu.service.ITyService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSort;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * UavBaseController
+ *
+ * @author liusuyi
+ * @date 2024年10月21日13:52
+ **/
+@Api(tags = "无人机基础接口")
+@ApiSort(value = 2)
+@RequestMapping("/uav/base")
+@RestController
+public class UavBaseController {
+
+ @Resource
+ private ITyService tyService;
+
+ @ApiOperation("获取天宇token信息")
+ @ApiOperationSupport(order = 1)
+ @GetMapping("/getToken")
+ public AjaxResult getToken() {
+ return AjaxResult.success(tyService.getAccessToken());
+ }
+
+ @ApiOperation("获取天宇盒子列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/getBoxList")
+ public AjaxResult getBoxList() {
+ List<BoxInfoReceiver> BoxList = tyService.getBoxList();
+ return AjaxResult.success(BoxList);
+ }
+
+
+ @ApiOperation("获取飞行历史")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/getBoxHistory")
+ public AjaxResult getBoxHistory(@RequestBody BoxHistoryDTO boxHistoryDTO) {
+ List<BoxHistoryReceiver> boxHistory = tyService.getBoxHistory(boxHistoryDTO);
+ return AjaxResult.success(boxHistory);
+ }
+
+ @ApiOperation("获取任务照片")
+ @ApiOperationSupport(order = 4)
+ @PostMapping("/getBoxPhotos")
+ public AjaxResult getBoxPhotos(@RequestBody BoxPhotosDTO boxPhotosDTO) {
+ List<BoxPhotosReceiver> boxPhotos = tyService.getBoxPhotos(boxPhotosDTO);
+ return AjaxResult.success(boxPhotos);
+ }
+
+ @ApiOperation("获取直播地址")
+ @ApiOperationSupport(order = 5)
+ @GetMapping("/getBoxList/{boxSn}")
+ public AjaxResult getBoxLiveUrl(@PathVariable("boxSn") String boxSn) {
+ BoxStreamUrlReceiver boxLiveUrl = tyService.getBoxLiveUrl(boxSn);
+ return AjaxResult.success(boxLiveUrl);
+ }
+
+ @ApiOperation("修改云盒设置")
+ @PostMapping("/updateBoxSettings")
+ public AjaxResult updateBoxSettings(@RequestBody BoxSettingsDTO boxSettingsDTO) {
+ Boolean state = tyService.updateBoxSettings(boxSettingsDTO);
+ return AjaxResult.success(state);
+ }
+
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java
new file mode 100644
index 0000000..a911e4b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java
@@ -0,0 +1,100 @@
+package com.ard.tianyu.controller;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.tianyu.model.dto.BoxHistoryDTO;
+import com.ard.tianyu.model.dto.BoxPhotosDTO;
+import com.ard.tianyu.model.dto.BoxSettingsDTO;
+import com.ard.tianyu.model.dto.camera.*;
+import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
+import com.ard.tianyu.model.dto.control.AngleControlDTO;
+import com.ard.tianyu.model.dto.control.SpeedControlDTO;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.signal.SignalInfo;
+import com.ard.tianyu.model.dto.state.UavState;
+import com.ard.tianyu.model.dto.telemetry.TelemetryData;
+import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
+import com.ard.tianyu.model.receiver.BoxInfoReceiver;
+import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
+import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
+import com.ard.tianyu.service.ITyService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * UavCameraController
+ *
+ * @author liusuyi
+ * @date 2024年10月21日13:52
+ **/
+@Api(tags = "无人机相机接口")
+@RequestMapping("/uav/camera")
+@RestController
+public class UavCameraController {
+
+ @Resource
+ private ITyService tyService;
+
+
+ @ApiOperation("拍照")
+ @ApiOperationSupport(order = 1)
+ @PostMapping("/capturePicDto")
+ public AjaxResult capturePic(@RequestBody CapturePicDTO capturePicDto) {
+ tyService.capturePic(capturePicDto);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation("录像")
+ @ApiOperationSupport(order = 2)
+ @PostMapping("/record")
+ public AjaxResult record(@RequestBody RecordDTO recordDto) {
+ tyService.record(recordDto);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation(value = "变倍", notes = "actionCode值:10变倍加 | 11变倍减 | 15复位 | 255停止")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/zoom")
+ public AjaxResult zoom(@RequestBody ZoomDTO zoomDTO) {
+ tyService.zoom(zoomDTO);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation("变倍指定倍数")
+ @ApiOperationSupport(order = 4)
+ @PostMapping("/zoomToLevel")
+ public AjaxResult zoomToLevel(@RequestBody ZoomToLevelDTO zoomToLevelDTO) {
+ tyService.zoomToLevel(zoomToLevelDTO);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation(value = "切换摄像头", notes = "actionParam值:0切换到FPV摄像头 | 1切换到载荷摄像头")
+ @ApiOperationSupport(order = 5)
+ @PostMapping("/switchCamera")
+ public AjaxResult switchCamera(@RequestBody SwitchCameraDTO switchCameraDTO) {
+ tyService.switchCamera(switchCameraDTO);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation(value = "切换视频源", notes = "相机在主相机镜头时有效,FPV镜头时无效 actionParam值:0-可见 1-变焦 2-红外")
+ @ApiOperationSupport(order = 6)
+ @PostMapping("/switchSource")
+ public AjaxResult switchSource(@RequestBody SwitchSourceDTO switchSourceDTO) {
+ tyService.switchSource(switchSourceDTO);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation(value = "打开或关闭照片回传", notes = "actionParam值:0-关闭,1-打开")
+ @ApiOperationSupport(order = 10)
+ @PostMapping("/photoReturnToggle")
+ public AjaxResult photoReturnToggle(@RequestBody PhotoReturnToggleDTO photoReturnToggleDTO) {
+ tyService.photoReturnToggle(photoReturnToggleDTO);
+ return AjaxResult.success();
+ }
+
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java
deleted file mode 100644
index 0f619e3..0000000
--- a/ard-work/src/main/java/com/ard/tianyu/controller/UavController.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package com.ard.tianyu.controller;
-
-import com.ard.common.core.domain.AjaxResult;
-import com.ard.tianyu.model.dto.BoxHistoryDTO;
-import com.ard.tianyu.model.dto.BoxPhotosDTO;
-import com.ard.tianyu.model.dto.BoxSettingsDTO;
-import com.ard.tianyu.model.dto.camera.*;
-import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
-import com.ard.tianyu.model.dto.control.AngleControlDTO;
-import com.ard.tianyu.model.dto.control.SpeedControlDTO;
-import com.ard.tianyu.model.dto.signal.SignalInfo;
-import com.ard.tianyu.model.dto.state.UavState;
-import com.ard.tianyu.model.dto.telemetry.TelemetryData;
-import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
-import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
-import com.ard.tianyu.model.receiver.BoxInfoReceiver;
-import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
-import com.ard.tianyu.service.ITyService;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-/**
- * UavTest
- *
- * @author liusuyi
- * @date 2024年10月21日13:52
- **/
-@Api(tags = "无人机接口")
-@RequestMapping("/uav")
-@RestController
-public class UavController {
-
- @Resource
- private ITyService tyService;
-
- @ApiOperation("获取天宇token信息")
- @GetMapping("/getToken")
- public AjaxResult getToken() {
- return AjaxResult.success(tyService.getAccessToken());
- }
-
- @ApiOperation("获取天宇盒子列表")
- @GetMapping("/getBoxList")
- public AjaxResult getBoxList() {
- List<BoxInfoReceiver> BoxList = tyService.getBoxList();
- return AjaxResult.success(BoxList);
- }
-
- @ApiOperation("获取直播地址")
- @GetMapping("/getBoxList/{boxSn}")
- public AjaxResult getBoxLiveUrl(@PathVariable("boxSn") String boxSn) {
- BoxStreamUrlReceiver boxLiveUrl = tyService.getBoxLiveUrl(boxSn);
- return AjaxResult.success(boxLiveUrl);
- }
-
- @ApiOperation("获取飞行历史")
- @PostMapping("/getBoxHistory")
- public AjaxResult getBoxHistory(@RequestBody BoxHistoryDTO boxHistoryDTO) {
- List<BoxHistoryReceiver> boxHistory = tyService.getBoxHistory(boxHistoryDTO);
- return AjaxResult.success(boxHistory);
- }
-
- @ApiOperation("获取任务照片")
- @PostMapping("/getBoxPhotos")
- public AjaxResult getBoxPhotos(@RequestBody BoxPhotosDTO boxPhotosDTO) {
- List<BoxPhotosReceiver> boxPhotos = tyService.getBoxPhotos(boxPhotosDTO);
- return AjaxResult.success(boxPhotos);
- }
-
- @ApiOperation("修改云盒设置")
- @PostMapping("/updateBoxSettings")
- public AjaxResult updateBoxSettings(@RequestBody BoxSettingsDTO boxSettingsDTO) {
- Boolean state = tyService.updateBoxSettings(boxSettingsDTO);
- return AjaxResult.success(state);
- }
-
- @ApiOperation(value = "云台转动(基于角度)", notes = "actionCode值:0-回中,1-上,2-右上,3-右,4-右下,5-下,6-左下,7-左,8-左上,254-停止")
- @ApiOperationSupport(order = 1)
- @PostMapping("/angleControl")
- public AjaxResult angleControl(@RequestBody AngleControlDTO angleControlDto) {
- tyService.angleControl(angleControlDto);
- return AjaxResult.success();
- }
-
- @ApiOperation(value = "云台绝对值控制(基于角度)", notes = "俯仰pitch范围:[-120°至+30°] 平移yaw范围:[-180°至+180°] 横滚roll范围:[-90°至+60°]")
- @ApiOperationSupport(order = 2)
- @PostMapping("/absAngleControl")
- public AjaxResult absAngleControl(@RequestBody @Validated AbsAngleControlDTO angleControlDto) {
- tyService.absAngleControl(angleControlDto);
- return AjaxResult.success();
- }
-
- @ApiOperation(value = "云台转动(基于速度)", notes = "俯仰转动速度:上正下负 平移转动速度:右正左负 横滚转动速度:顺时针正,逆时针负")
- @ApiOperationSupport(order = 3)
- @PostMapping("/speedControl")
- public AjaxResult speedControl(@RequestBody @Validated SpeedControlDTO speedControlDto) {
- tyService.speedControl(speedControlDto);
- return AjaxResult.success();
- }
-
- @ApiOperation("拍照")
- @ApiOperationSupport(order = 4)
- @PostMapping("/capturePicDto")
- public AjaxResult capturePic(@RequestBody CapturePicDTO capturePicDto) {
- tyService.capturePic(capturePicDto);
- return AjaxResult.success();
- }
-
- @ApiOperation("录像")
- @ApiOperationSupport(order = 5)
- @PostMapping("/record")
- public AjaxResult record(@RequestBody RecordDTO recordDto) {
- tyService.record(recordDto);
- return AjaxResult.success();
- }
-
- @ApiOperation(value = "变倍", notes = "actionCode值:10变倍加 | 11变倍减 | 15复位 | 255停止")
- @ApiOperationSupport(order = 6)
- @PostMapping("/zoom")
- public AjaxResult zoom(@RequestBody ZoomDTO zoomDTO) {
- tyService.zoom(zoomDTO);
- return AjaxResult.success();
- }
- @ApiOperation("变倍指定倍数")
- @ApiOperationSupport(order = 7)
- @PostMapping("/zoomToLevel")
- public AjaxResult zoomToLevel(@RequestBody ZoomToLevelDTO zoomToLevelDTO) {
- tyService.zoomToLevel(zoomToLevelDTO);
- return AjaxResult.success();
- }
-
- @ApiOperation(value = "切换摄像头", notes = "actionParam值:0切换到FPV摄像头 | 1切换到载荷摄像头")
- @ApiOperationSupport(order = 8)
- @PostMapping("/switchCamera")
- public AjaxResult switchCamera(@RequestBody SwitchCameraDTO switchCameraDTO) {
- tyService.switchCamera(switchCameraDTO);
- return AjaxResult.success();
- }
- @ApiOperation(value = "切换视频源", notes = "相机在主相机镜头时有效,FPV镜头时无效 actionParam值:0-可见 1-变焦 2-红外")
- @ApiOperationSupport(order = 8)
- @PostMapping("/switchSource")
- public AjaxResult switchSource(@RequestBody SwitchSourceDTO switchSourceDTO) {
- tyService.switchSource(switchSourceDTO);
- return AjaxResult.success();
- }
-
- @ApiOperation(value = "打开或关闭照片回传", notes = "actionParam值:0-关闭,1-打开")
- @ApiOperationSupport(order = 8)
- @PostMapping("/photoReturnToggle")
- public AjaxResult photoReturnToggle(@RequestBody PhotoReturnToggleDTO photoReturnToggleDTO) {
- tyService.photoReturnToggle(photoReturnToggleDTO);
- return AjaxResult.success();
- }
-
- @ApiOperation("获取无人机状态")
- @GetMapping("/getUavState")
- public AjaxResult getUavState(String boxSn) {
- UavState uavState = tyService.getUavState(boxSn);
- return AjaxResult.success(uavState);
- }
-
- @ApiOperation("获取无人机遥测数据")
- @GetMapping("/getUavTelemetryData")
- public AjaxResult getUavTelemetryData(String boxSn) {
- TelemetryData telemetryData = tyService.getUavTelemetryData(boxSn);
- return AjaxResult.success(telemetryData);
- }
-
- @ApiOperation("获取无人机信道质量数据")
- @GetMapping("/getSignalInfo")
- public AjaxResult getSignalInfo(String boxSn) {
- SignalInfo signalInfo = tyService.getSignalInfo(boxSn);
- return AjaxResult.success(signalInfo);
- }
-}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java
new file mode 100644
index 0000000..22ff46d
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java
@@ -0,0 +1,69 @@
+package com.ard.tianyu.controller;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.tianyu.model.dto.BoxHistoryDTO;
+import com.ard.tianyu.model.dto.BoxPhotosDTO;
+import com.ard.tianyu.model.dto.BoxSettingsDTO;
+import com.ard.tianyu.model.dto.camera.*;
+import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
+import com.ard.tianyu.model.dto.control.AngleControlDTO;
+import com.ard.tianyu.model.dto.control.SpeedControlDTO;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.signal.SignalInfo;
+import com.ard.tianyu.model.dto.state.UavState;
+import com.ard.tianyu.model.dto.telemetry.TelemetryData;
+import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
+import com.ard.tianyu.model.receiver.BoxInfoReceiver;
+import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
+import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
+import com.ard.tianyu.service.ITyService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * UavGimbalController
+ *
+ * @author liusuyi
+ * @date 2024年10月21日13:52
+ **/
+@Api(tags = "无人机云台控制接口")
+@RequestMapping("/uav/gimbal")
+@RestController
+public class UavGimbalController {
+
+ @Resource
+ private ITyService tyService;
+
+
+
+ @ApiOperation(value = "云台转动(基于角度)", notes = "actionCode值:0-回中,1-上,2-右上,3-右,4-右下,5-下,6-左下,7-左,8-左上,254-停止")
+ @ApiOperationSupport(order = 1)
+ @PostMapping("/angleControl")
+ public AjaxResult angleControl(@RequestBody AngleControlDTO angleControlDto) {
+ tyService.angleControl(angleControlDto);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation(value = "云台绝对值控制(基于角度)", notes = "俯仰pitch范围:[-120°至+30°] 平移yaw范围:[-180°至+180°] 横滚roll范围:[-90°至+60°]")
+ @ApiOperationSupport(order = 2)
+ @PostMapping("/absAngleControl")
+ public AjaxResult absAngleControl(@RequestBody @Validated AbsAngleControlDTO angleControlDto) {
+ tyService.absAngleControl(angleControlDto);
+ return AjaxResult.success();
+ }
+
+ @ApiOperation(value = "云台转动(基于速度)", notes = "俯仰转动速度:上正下负 平移转动速度:右正左负 横滚转动速度:顺时针正,逆时针负")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/speedControl")
+ public AjaxResult speedControl(@RequestBody @Validated SpeedControlDTO speedControlDto) {
+ tyService.speedControl(speedControlDto);
+ return AjaxResult.success();
+ }
+
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
new file mode 100644
index 0000000..808295a
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
@@ -0,0 +1,42 @@
+package com.ard.tianyu.controller;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.manual.TakeOffDTO;
+import com.ard.tianyu.service.ITyService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * UavManualFlyController
+ *
+ * @author liusuyi
+ * @date 2024年10月21日13:52
+ **/
+@Api(tags = "无人机手动飞行接口")
+@RequestMapping("/uav/manualFly")
+@RestController
+public class UavManualFlyController {
+
+ @Resource
+ private ITyService tyService;
+
+ @ApiOperation(value = "切换无人机控制权", notes = "actionParam值:0-云盒获取控制权, 1-云盒释放控制权")
+ @ApiOperationSupport(order = 1)
+ @PostMapping("/switchUavControl")
+ public AjaxResult switchUavControl(@RequestBody SwitchUavControlDTO switchUavControlDTO) {
+ tyService.switchUavControl(switchUavControlDTO);
+ return AjaxResult.success();
+ }
+ @ApiOperation(value = "起飞", notes = "起飞高度height取值范围:1.2~100,误差:+-0.4米")
+ @ApiOperationSupport(order = 2)
+ @PostMapping("/takeOff")
+ public AjaxResult takeOff(@RequestBody TakeOffDTO takeOffDTO) {
+ tyService.takeOff(takeOffDTO);
+ return AjaxResult.success();
+ }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java b/ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java
new file mode 100644
index 0000000..4caafd6
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java
@@ -0,0 +1,63 @@
+package com.ard.tianyu.controller;
+
+import com.ard.common.core.domain.AjaxResult;
+import com.ard.tianyu.model.dto.BoxHistoryDTO;
+import com.ard.tianyu.model.dto.BoxPhotosDTO;
+import com.ard.tianyu.model.dto.BoxSettingsDTO;
+import com.ard.tianyu.model.dto.camera.*;
+import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
+import com.ard.tianyu.model.dto.control.AngleControlDTO;
+import com.ard.tianyu.model.dto.control.SpeedControlDTO;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.signal.SignalInfo;
+import com.ard.tianyu.model.dto.state.UavState;
+import com.ard.tianyu.model.dto.telemetry.TelemetryData;
+import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
+import com.ard.tianyu.model.receiver.BoxInfoReceiver;
+import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
+import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
+import com.ard.tianyu.service.ITyService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * UavRealDataController
+ *
+ * @author liusuyi
+ * @date 2024年10月21日13:52
+ **/
+@Api(tags = "无人机实时数据接口")
+@RequestMapping("/uav/realData")
+@RestController
+public class UavRealDataController {
+
+ @Resource
+ private ITyService tyService;
+
+ @ApiOperation("获取无人机状态")
+ @GetMapping("/getUavState")
+ public AjaxResult getUavState(String boxSn) {
+ UavState uavState = tyService.getUavState(boxSn);
+ return AjaxResult.success(uavState);
+ }
+
+ @ApiOperation("获取无人机遥测数据")
+ @GetMapping("/getUavTelemetryData")
+ public AjaxResult getUavTelemetryData(String boxSn) {
+ TelemetryData telemetryData = tyService.getUavTelemetryData(boxSn);
+ return AjaxResult.success(telemetryData);
+ }
+
+ @ApiOperation("获取无人机信道质量数据")
+ @GetMapping("/getSignalInfo")
+ public AjaxResult getSignalInfo(String boxSn) {
+ SignalInfo signalInfo = tyService.getSignalInfo(boxSn);
+ return AjaxResult.success(signalInfo);
+ }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java
new file mode 100644
index 0000000..8732269
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java
@@ -0,0 +1,22 @@
+package com.ard.tianyu.model.dto.manual;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 切换视频源实体对象
+ *
+ * @author liusuyi
+ * @date 2024年10月26日9:02
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SwitchUavControlDTO {
+ private String boxSn;
+ // 0x00 云盒获取控制权, 0x01云盒释放控制权
+ private byte actionParam;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java b/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java
new file mode 100644
index 0000000..9c54e67
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java
@@ -0,0 +1,28 @@
+package com.ard.tianyu.model.dto.manual;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.DecimalMax;
+import javax.validation.constraints.DecimalMin;
+
+/**
+ * 起飞实体对象
+ *
+ * @author liusuyi
+ * @date 2024年10月26日9:02
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Validated
+public class TakeOffDTO {
+ private String boxSn;
+ @DecimalMin(value = "1.2", message = "起飞高度范围height最小值为 1.2")
+ @DecimalMax(value = "100", message = "起飞高度范围height最大值为 100")
+ private Float height;
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java
new file mode 100644
index 0000000..ba4c91f
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java
@@ -0,0 +1,35 @@
+package com.ard.tianyu.netty.command.manual;
+
+import com.ard.tianyu.model.dto.camera.SwitchSourceDTO;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * 切换无人机控制权指令
+ *
+ * @author liusuyi
+ * @date 2024年10月26日11:18
+ **/
+public class SwitchUavControlCmd extends BaseCmd {
+
+ private final byte actionParam; // 动作参数
+
+ public SwitchUavControlCmd(SwitchUavControlDTO switchUavControlDTO) {
+ setDataHeader((short) 0x7479);
+ setDataLength((short) 19);
+ setBoxSn(switchUavControlDTO.getBoxSn().getBytes());
+ setCmdCode((byte) 0xD1);
+ this.actionParam = switchUavControlDTO.getActionParam();
+ }
+
+ public void encode(ByteBuf out) {
+ out.writeShort(getDataHeader()); // 写入数据头
+ out.writeShort(getDataLength()); // 写入数据长度
+ out.writeBytes(getBoxSn()); // 写入盒子SN
+ out.writeByte(getCmdCode()); // 写入命令码
+ out.writeByte(0x00); // 写入加密标志
+ out.writeByte(0x30); // 写入动作编号
+ out.writeByte(actionParam); // 写入动作参数
+ }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
new file mode 100644
index 0000000..4dea279
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
@@ -0,0 +1,35 @@
+package com.ard.tianyu.netty.command.manual;
+
+import com.ard.tianyu.model.dto.manual.TakeOffDTO;
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * 起飞
+ *
+ * @author liusuyi
+ * @date 2024年10月26日15:43
+ **/
+public class TakeOffCmd extends BaseCmd {
+
+ private final Float height;
+
+ public TakeOffCmd(TakeOffDTO takeOffDTO) {
+ setDataHeader((short) 0x7479);
+ setDataLength((short) 22);
+ setBoxSn(takeOffDTO.getBoxSn().getBytes());
+ setCmdCode((byte) 0xD1);
+ this.height = takeOffDTO.getHeight();
+ }
+
+
+ public void encode(ByteBuf out) {
+ out.writeShort(getDataHeader()); // 写入数据头
+ out.writeShort(getDataLength()); // 写入数据长度
+ out.writeBytes(getBoxSn()); // 写入盒子SN
+ out.writeByte(getCmdCode()); // 写入命令码
+ out.writeByte(0x00); // 写入加密标志
+ out.writeByte(0x11); // 写入动作编号
+ out.writeFloat(height); // 写入飞起高度
+ }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java
new file mode 100644
index 0000000..bc4c221
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java
@@ -0,0 +1,32 @@
+package com.ard.tianyu.netty.command.manual;
+
+import com.ard.tianyu.netty.command.BaseCmd;
+import io.netty.buffer.ByteBuf;
+import lombok.Data;
+
+/**
+ * 起飞
+ *
+ * @author liusuyi
+ * @date 2024年10月26日15:43
+ **/
+@Data
+public class TakeOffReplyCmd extends BaseCmd {
+ private final byte encryptFlag = 0x00; // 加密标志
+ private final byte actionCode = 0x11; // 动作编号
+ private final byte result; // 执行结果
+ private final Integer errorCode; // 错误码
+
+ public TakeOffReplyCmd(String boxSn, Byte result, Integer errorCode) {
+ setDataHeader((short) 0x6A77);
+ setDataLength((short) 22);
+ setBoxSn(boxSn.getBytes());
+ setCmdCode((byte) 0xD1);
+ this.result = result;
+ this.errorCode = errorCode;
+ }
+
+ public void encode(ByteBuf out) {
+
+ }
+}
diff --git a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
index db9c7d1..0d20128 100644
--- a/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
+++ b/ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -5,6 +5,7 @@
import com.ard.tianyu.netty.command.camera.CapturePicReplyCmd;
import com.ard.tianyu.netty.command.camera.RecordStartReplyCmd;
import com.ard.tianyu.netty.command.camera.RecordStopReplyCmd;
+import com.ard.tianyu.netty.command.manual.TakeOffReplyCmd;
import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd;
import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
@@ -92,12 +93,21 @@
byte encryptionFlag = in.readByte();
byte actionCode = in.readByte();
switch (actionCode) {
- case 0x22:
+ case 0x11:
byte result = in.readByte();
int errorCode = in.readInt();
uavData = new byte[15];
in.readBytes(uavData);
String boxSn = new String(uavData);
+ baseCmd = new TakeOffReplyCmd(boxSn, result, errorCode);
+ log.debug("起飞回复: {}", boxSn);
+ break;
+ case 0x22:
+ result = in.readByte();
+ errorCode = in.readInt();
+ uavData = new byte[15];
+ in.readBytes(uavData);
+ boxSn = new String(uavData);
baseCmd = new CameraModeReplyCmd(boxSn, result, errorCode);
log.debug("设置相机模式回复: {}", boxSn);
break;
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java b/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
index d909b47..b304b82 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
@@ -7,6 +7,8 @@
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -122,6 +124,16 @@
void photoReturnToggle(PhotoReturnToggleDTO photoReturnToggleDTO);
/**
+ * 切换无人机控制权
+ */
+ void switchUavControl(SwitchUavControlDTO switchUavControlDTO);
+
+ /**
+ * 起飞
+ */
+ void takeOff(TakeOffDTO takeOffDTO);
+
+ /**
* 获取无人机状态
*/
UavState getUavState(String boxSn);
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index 637d878..1a3c1cd 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -15,6 +15,8 @@
import com.ard.tianyu.model.dto.converter.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.UavStateConverter;
import com.ard.tianyu.model.dto.converter.UavTelemetryDataConverter;
+import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
+import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -25,6 +27,9 @@
import com.ard.tianyu.netty.command.control.AbsAngleControlCmd;
import com.ard.tianyu.netty.command.control.AngleControlCmd;
import com.ard.tianyu.netty.command.control.SpeedControlCmd;
+import com.ard.tianyu.netty.command.manual.SwitchUavControlCmd;
+import com.ard.tianyu.netty.command.manual.TakeOffCmd;
+import com.ard.tianyu.netty.command.manual.TakeOffReplyCmd;
import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd;
import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
@@ -268,6 +273,24 @@
}
/**
+ * 切换无人机控制权
+ */
+ @Override
+ public void switchUavControl(SwitchUavControlDTO switchUavControlDTO) {
+ SwitchUavControlCmd switchUavControlCmd = new SwitchUavControlCmd(switchUavControlDTO);
+ this.sendMessage(tyConfiguration.getIpPort(), switchUavControlCmd);
+ }
+
+ /**
+ * 起飞
+ */
+ @Override
+ public void takeOff(TakeOffDTO takeOffDTO) {
+ TakeOffCmd takeOffCmd = new TakeOffCmd(takeOffDTO);
+ this.sendMessage(tyConfiguration.getIpPort(), takeOffCmd);
+ }
+
+ /**
* 获取无人机状态
*/
@Override
@@ -355,7 +378,7 @@
}
if (tyCommand instanceof UavReadyReplyCmd) {
UavReadyReplyCmd uavReadyReplyCmd = (UavReadyReplyCmd) tyCommand;
- log.info("收到无人机准备完成通知,电池电量{} 经度{} 纬度{} 海拔{}",uavReadyReplyCmd.getBatteryPower(),uavReadyReplyCmd.getLongitude(),uavReadyReplyCmd.getLatitude(),uavReadyReplyCmd.getAltitude());
+ log.info("收到无人机准备完成通知,电池电量{} 经度{} 纬度{} 海拔{}", uavReadyReplyCmd.getBatteryPower(), uavReadyReplyCmd.getLongitude(), uavReadyReplyCmd.getLatitude(), uavReadyReplyCmd.getAltitude());
}
if (tyCommand instanceof CameraModeReplyCmd) {
CameraModeReplyCmd cameraModeReplyCommand = (CameraModeReplyCmd) tyCommand;
@@ -363,7 +386,7 @@
}
if (tyCommand instanceof FlyWayEndReplyCmd) {
FlyWayEndReplyCmd flyWayEndReplyCmd = (FlyWayEndReplyCmd) tyCommand;
- log.info("收到无人机飞行结束通知:状态:{}",flyWayEndReplyCmd.getResult());
+ log.info("收到无人机飞行结束通知:状态:{}", flyWayEndReplyCmd.getResult());
}
if (tyCommand instanceof CapturePicReplyCmd) {
CapturePicReplyCmd capturePicReplyCommand = (CapturePicReplyCmd) tyCommand;
@@ -377,6 +400,11 @@
RecordStopReplyCmd recordStopReplyCommand = (RecordStopReplyCmd) tyCommand;
log.info("收到无人机停止录像回复:{} 错误码:{}", String.format("0x%02X", recordStopReplyCommand.getResult() & 0xFF), recordStopReplyCommand.getErrorCode());
}
+ //起飞回复
+ if (tyCommand instanceof TakeOffReplyCmd) {
+ TakeOffReplyCmd takeOffReplyCommand = (TakeOffReplyCmd) tyCommand;
+ log.info("收到无人机起飞回复:{} 错误码:{}", String.format("0x%02X", takeOffReplyCommand.getResult() & 0xFF), takeOffReplyCommand.getErrorCode());
+ }
break;
default:
// 处理其他消息
@@ -384,6 +412,9 @@
}
}
+ /**
+ * 定时3秒发送心跳指令
+ */
@Scheduled(fixedRate = 3000)
public void sendHeartBeat() {
long timestamp = System.currentTimeMillis();
diff --git a/ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java b/ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java
index 7653063..84c89a8 100644
--- a/ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java
+++ b/ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java
@@ -22,7 +22,7 @@
* @Version: 1.0
**/
@RestController
-@Api(tags = "mediaMTX接口")
+@Api(tags = "流媒体接口")
@RequestMapping("/mediamtx/media")
public class MediaController extends BaseController {
--
Gitblit v1.9.3