forked from drone/command-center-dashboard

shuishen
2025-04-16 115bd56702e2ce09b7a7c1e6bb5e93e2f6174cdf
src/hooks/controlDrone/useManualControl.js
@@ -1,19 +1,38 @@
import { DRC_METHOD } from '@/const/drc.js'
import { useMqtt } from '@/hooks/controlDrone/useMqtt'
import { ElMessage } from 'element-plus'
import { postPayloadCommands } from '@/api/payload'
let myInterval
export const KeyCode = {
   KEY_W: 'KeyW',
   KEY_A: 'KeyA',
   KEY_S: 'KeyS',
   KEY_D: 'KeyD',
   KEY_Q: 'KeyQ',
   KEY_E: 'KeyE',
   ARROW_UP: 'ArrowUp',
   ARROW_DOWN: 'ArrowDown',
}
export const KeyCode =  {
      KEY_W: 'KeyW',
      KEY_A: 'KeyA',
      KEY_S: 'KeyS',
      KEY_D: 'KeyD',
      KEY_Q: 'KeyQ',
      KEY_E: 'KeyE',
      KEY_J: 'KeyJ',
      KEY_K: 'KeyK',
      KEY_L: 'KeyL',
      KEY_X: 'KeyX',
      KEY_Z: 'KeyZ',
      KEY_C: 'KeyC',
      KEY_I: 'KeyI',
      KEY_O: 'KeyO',
      ARROW_UP: 'ArrowUp',
      ARROW_DOWN: 'ArrowDown',
      ARROW_LEFT: 'ArrowLeft',
      ARROW_RIGHT: 'ArrowRight',
      NUMPAD_SUBTRACT: 'NumpadSubtract',
      NUMPAD_ADD: 'NumpadAdd',
      // 提升速度
      KEY_EQUAL: 'Equal',
      KEY_MINUS: 'Minus',
      // 录音
      KEY_N: 'KeyN',
      KEY_M: 'KeyM',
   }
export function useManualControl(mqttState,deviceTopicInfo, isCurrentFlightController) {
   const activeCodeKey = ref(null)
@@ -35,34 +54,63 @@
      }, 50)
   }
   function handleKeyup(keyCode) {
   function handleKeyup(keyCode,params) {
      const {sn,speed} = params
      let genPortOne = false //是一代机场
      if (!deviceTopicInfo.pubTopic) {
         ElMessage.error('请确保已经建立DRC链路')
         return
      }
      const SPEED = 5 //  check
      const HEIGHT = 5 //  check
      const W_SPEED = 20 // 机头角速度
      if (sn === '4TADKCM0010016' || sn === 'BA0BA1C3D38157A49E1B16574FA474F7') {
         genPortOne = true
      }
      const SPEED = genPortOne ? (speed || 5) : 500 //  check
      const HEIGHT = genPortOne ? 5 : 500; //  check
      const W_SPEED = genPortOne ? 20 : 500 // 机头角速度
      seq = 0
      switch (keyCode) {
         case 'KeyA':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ y: -SPEED })
         case 'KeyQ':
            if (activeCodeKey === keyCode) return
            let objQ = { yaw: 1024-W_SPEED }
            if (genPortOne) {objQ = {w: -W_SPEED}}
            handlePublish(objQ)
            activeCodeKey.value = keyCode
            break
         case 'KeyW':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ x: SPEED })
            if (activeCodeKey === keyCode) return
            let objW = { pitch: 1024+SPEED }
            if (genPortOne) {objW = {x: SPEED}}
            handlePublish(objW)
            activeCodeKey.value = keyCode
            break
         case 'KeyE':
            if (activeCodeKey === 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
            let objA = { roll: 1024-SPEED }
            if (genPortOne) {objA = {y: -SPEED}}
            handlePublish(objA)
            activeCodeKey.value = keyCode
            break
         case 'KeyS':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ x: -SPEED })
            if (activeCodeKey === keyCode) return
            let objS = { pitch: 1024-SPEED }
            if (genPortOne) {objS = {x: -SPEED}}
            handlePublish(objS)
            activeCodeKey.value = keyCode
            break
         case 'KeyD':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ y: SPEED })
            if (activeCodeKey === keyCode) return
            let objD = { roll: 1024+SPEED }
            if (genPortOne) {objD = {y: SPEED}}
            handlePublish(objD)
            activeCodeKey.value = keyCode
            break
         case 'ArrowUp':
@@ -75,21 +123,23 @@
            handlePublish({ h: -HEIGHT })
            activeCodeKey.value = keyCode
            break
         case 'KeyQ':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ w: -W_SPEED })
            activeCodeKey.value = keyCode
            break
         case 'KeyE':
            if (activeCodeKey.value === keyCode) return
            handlePublish({ w: W_SPEED })
            activeCodeKey.value = keyCode
            break
         default:
            break
      }
   }
   const handlePayloadTurn = (params) => {
      handleClearInterval()
      if (!this.myInterval) {
         postPayloadCommands(this.sn, params)
      }
      this.myInterval = setInterval(() => {
         postPayloadCommands(this.sn, params)
      }, 500)
   }
   function handleClearInterval() {
      clearInterval(myInterval)
      myInterval = undefined