From 01f329228c55cdbe3c1391b427c7a54c891efada Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 15 Apr 2025 20:42:08 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/drone/command-center-dashboard
---
src/hooks/controlDrone/useManualControl.js | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 159 insertions(+), 0 deletions(-)
diff --git a/src/hooks/controlDrone/useManualControl.js b/src/hooks/controlDrone/useManualControl.js
new file mode 100644
index 0000000..91417c9
--- /dev/null
+++ b/src/hooks/controlDrone/useManualControl.js
@@ -0,0 +1,159 @@
+import { DRC_METHOD } from '@/const/drc.js'
+import { useMqtt } from '@/hooks/controlDrone/useMqtt'
+import { ElMessage } from 'element-plus'
+
+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 function useManualControl(mqttState,deviceTopicInfo, isCurrentFlightController) {
+ const activeCodeKey = ref(null)
+
+ const mqttHooks = useMqtt(mqttState,deviceTopicInfo)
+ let seq = 0
+
+ function handlePublish(params) {
+ const body = {
+ method: DRC_METHOD.DRONE_CONTROL,
+ data: params,
+ }
+ handleClearInterval()
+ myInterval = setInterval(() => {
+ body.data.seq = seq++
+ seq++
+ window.console.log('keyCode>>>>', activeCodeKey.value, body)
+ mqttHooks?.publishMqtt(deviceTopicInfo.pubTopic, body, { qos: 0 })
+ }, 50)
+ }
+
+ function handleKeyup(keyCode) {
+ if (!deviceTopicInfo.pubTopic) {
+ ElMessage.error('请确保已经建立DRC链路')
+ return
+ }
+ const SPEED = 5 // check
+ const HEIGHT = 5 // check
+ const W_SPEED = 20 // 机头角速度
+ seq = 0
+ switch (keyCode) {
+ case 'KeyA':
+ if (activeCodeKey.value === keyCode) return
+ handlePublish({ y: -SPEED })
+ activeCodeKey.value = keyCode
+ break
+ case 'KeyW':
+ if (activeCodeKey.value === keyCode) return
+ handlePublish({ x: SPEED })
+ activeCodeKey.value = keyCode
+ break
+ case 'KeyS':
+ if (activeCodeKey.value === keyCode) return
+ handlePublish({ x: -SPEED })
+ activeCodeKey.value = keyCode
+ break
+ case 'KeyD':
+ if (activeCodeKey.value === keyCode) return
+ handlePublish({ y: SPEED })
+ activeCodeKey.value = keyCode
+ break
+ case 'ArrowUp':
+ if (activeCodeKey.value === keyCode) return
+ handlePublish({ h: HEIGHT })
+ activeCodeKey.value = keyCode
+ break
+ case 'ArrowDown':
+ if (activeCodeKey.value === keyCode) return
+ 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
+ }
+ }
+
+ function handleClearInterval() {
+ clearInterval(myInterval)
+ myInterval = undefined
+ }
+
+ function resetControlState() {
+ activeCodeKey.value = null
+ seq = 0
+ handleClearInterval()
+ }
+
+ function onKeyup() {
+ resetControlState()
+ }
+
+ function onKeydown(e) {
+ handleKeyup(e.code)
+ }
+
+ function startKeyboardManualControl() {
+ window.addEventListener('keydown', onKeydown)
+ window.addEventListener('keyup', onKeyup)
+ }
+
+ function closeKeyboardManualControl() {
+ resetControlState()
+ window.removeEventListener('keydown', onKeydown)
+ window.removeEventListener('keyup', onKeyup)
+ }
+
+ watch(
+ () => isCurrentFlightController.value,
+ val => {
+ if (val && deviceTopicInfo.pubTopic) {
+ startKeyboardManualControl()
+ } else {
+ closeKeyboardManualControl()
+ }
+ },
+ { immediate: true }
+ )
+
+ onUnmounted(() => {
+ closeKeyboardManualControl()
+ })
+
+ function handleEmergencyStop() {
+ if (!deviceTopicInfo.pubTopic) {
+ ElMessage.error('请确保已经建立DRC链路')
+ return
+ }
+ const body = {
+ method: DRC_METHOD.DRONE_EMERGENCY_STOP,
+ data: {},
+ }
+ resetControlState()
+ window.console.log('handleEmergencyStop>>>>', deviceTopicInfo.pubTopic, body)
+ mqttHooks?.publishMqtt(deviceTopicInfo.pubTopic, body, { qos: 1 })
+ }
+
+ return {
+ activeCodeKey,
+ handleKeyup,
+ handleEmergencyStop,
+ resetControlState,
+ }
+}
--
Gitblit v1.9.3