forked from drone/command-center-dashboard

chenyao
2025-04-18 949a21a036d3c5b5df4e07bd5ecc80b08eeff841
src/hooks/controlDrone/useManualControl.js
@@ -1,7 +1,8 @@
import { DRC_METHOD } from '@/const/drc.js'
import { useMqtt } from '@/hooks/controlDrone/useMqtt'
import { ElMessage } from 'element-plus'
import { postPayloadCommands } from '@/api/payload'
import { postPayloadCommands, ptzControlApi } from '@/api/payload'
import { throttle } from 'lodash'
let myInterval
@@ -34,15 +35,16 @@
      KEY_M: 'KeyM',
   }
export function useManualControl(mqttState,deviceTopicInfo, isCurrentFlightController) {
export function useManualControl(mqttState,deviceTopicInfo, isCurrentFlightController,paramsRef) {
   const activeCodeKey = ref(null)
   let genPortOne = true //是一代机场
   const mqttHooks = useMqtt(mqttState,deviceTopicInfo)
   let seq = 0
   let throttledPtz = null
   function handlePublish(params) {
      const body = {
         method: DRC_METHOD.DRONE_CONTROL,
         method: genPortOne ? DRC_METHOD.DRONE_CONTROL : DRC_METHOD.DRONE_CONTROL2,
         data: params,
      }
      handleClearInterval()
@@ -54,81 +56,108 @@
      }, 50)
   }
   function handleKeyup(keyCode,params) {
      const {sn,speed} = params
      let genPortOne = false //是一代机场
   function handleKeyup(keyCode) {
      const  {droneSn,speed} =  paramsRef.value
      if (!deviceTopicInfo.pubTopic) {
         ElMessage.error('请确保已经建立DRC链路')
         return
      }
      if (sn === '4TADKCM0010016' || sn === 'BA0BA1C3D38157A49E1B16574FA474F7') {
      if (droneSn.value === '4TADKCM0010016' || droneSn.value === 'BA0BA1C3D38157A49E1B16574FA474F7') {
         genPortOne = true
      }
      const SPEED = genPortOne ? (speed || 5) : 500 //  check
      const SPEED = genPortOne ? (speed.value || 5) : 500 //  check
      const HEIGHT = genPortOne ? 5 : 500; //  check
      const W_SPEED = genPortOne ? 20 : 500 // 机头角速度
      seq = 0
      switch (keyCode) {
         case 'KeyQ':
            if (activeCodeKey === keyCode) return
            if (activeCodeKey.value === keyCode) return
            let objQ = { yaw: 1024-W_SPEED }
            if (genPortOne) {objQ = {w: -W_SPEED}}
            handlePublish(objQ)
            activeCodeKey.value = keyCode
            break
         case 'KeyW':
            if (activeCodeKey === keyCode) return
            if (activeCodeKey.value === keyCode) return
            let objW = { pitch: 1024+SPEED }
            if (genPortOne) {objW = {x: SPEED}}
            handlePublish(objW)
            activeCodeKey.value = keyCode
            break
         case 'KeyE':
            if (activeCodeKey === keyCode) return
            if (activeCodeKey.value === keyCode) return
            let objE = { yaw: 1024+W_SPEED }
            if (genPortOne) {objE = {w: W_SPEED}}
            handlePublish(objE)
            activeCodeKey.value = keyCode
            break
         case 'KeyA':
            if (activeCodeKey === keyCode) return
            if (activeCodeKey.value === keyCode) return
            let objA = { roll: 1024-SPEED }
            if (genPortOne) {objA = {y: -SPEED}}
            handlePublish(objA)
            activeCodeKey.value = keyCode
            break
         case 'KeyS':
            if (activeCodeKey === keyCode) return
            if (activeCodeKey.value === keyCode) return
            let objS = { pitch: 1024-SPEED }
            if (genPortOne) {objS = {x: -SPEED}}
            handlePublish(objS)
            activeCodeKey.value = keyCode
            break
         case 'KeyD':
            if (activeCodeKey === keyCode) return
            if (activeCodeKey.value === keyCode) return
            let objD = { roll: 1024+SPEED }
            if (genPortOne) {objD = {y: SPEED}}
            handlePublish(objD)
            activeCodeKey.value = keyCode
            break
         case 'ArrowUp':
         case 'KeyZ':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ h: HEIGHT })
            let objZ = { throttle: 1024-HEIGHT }
            if (genPortOne) {objZ = {h: -HEIGHT}}
            handlePublish(objZ)
            activeCodeKey.value = keyCode
            break
         // case 'ArrowDown':
         case 'KeyC':
            if (activeCodeKey.value === keyCode) return
            let objC = { throttle: 1024+HEIGHT }
            if (genPortOne) {objC = {h: HEIGHT}}
            handlePublish(objC)
            activeCodeKey.value = keyCode
            break
         case 'ArrowUp':
            ptzThrottle[0]()
            break
         case 'ArrowDown':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ h: -HEIGHT })
            activeCodeKey.value = keyCode
            ptzThrottle[1]()
            break
         case 'ArrowLeft':
            ptzThrottle[2]()
            break
         case 'ArrowRight':
            ptzThrottle[3]()
            break
         default:
            break
      }
   }
   // 云台控制节流list
   const ptzThrottle = ['up','down','left','right'].map(key => throttle(()=>ptzControl(key), 500))
   // 云台上下左右
   function ptzControl(key) {
      const  {dockSn} =  paramsRef.value
      ptzControlApi(key, { sn: dockSn }).then(res => {
      })
   }
   const handlePayloadTurn = (params) => {
      handleClearInterval()
      if (!this.myInterval) {