При копировании копируется код целиком
This commit is contained in:
@@ -44,10 +44,6 @@ class ColorDetect():
|
|||||||
else:
|
else:
|
||||||
self.color = None
|
self.color = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#в MAIN для вызова функции должно быть:
|
#в MAIN для вызова функции должно быть:
|
||||||
# cd = ColorDetect()
|
# cd = ColorDetect()
|
||||||
#color_sub = rospy.Subscriber('main_camera/image_raw', Image,
|
#color_sub = rospy.Subscriber('main_camera/image_raw', Image,
|
||||||
@@ -56,4 +52,3 @@ class ColorDetect():
|
|||||||
# print(cd.getColor())
|
# print(cd.getColor())
|
||||||
#rospy.sleep(2)
|
#rospy.sleep(2)
|
||||||
#color_sub.unregister()
|
#color_sub.unregister()
|
||||||
|
|
||||||
@@ -18,8 +18,6 @@ navigate = rospy.ServiceProxy('navigate', srv.Navigate) #сервис для п
|
|||||||
land = rospy.ServiceProxy('land', Trigger) #сервис для посадки
|
land = rospy.ServiceProxy('land', Trigger) #сервис для посадки
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def navigate_wait(x=0, y=0, z=1, speed=0.5, frame_id='aruco_map', auto_arm=False, tolerance=0.2,sleep=2):
|
def navigate_wait(x=0, y=0, z=1, speed=0.5, frame_id='aruco_map', auto_arm=False, tolerance=0.2,sleep=2):
|
||||||
"""
|
"""
|
||||||
Летит в указанную точку и ждет, пока дрон туда ДОЛЕТИТ.
|
Летит в указанную точку и ждет, пока дрон туда ДОЛЕТИТ.
|
||||||
@@ -36,9 +34,6 @@ def navigate_wait(x=0, y=0, z=1, speed=0.5, frame_id='aruco_map', auto_arm=False
|
|||||||
rospy.sleep(sleep)
|
rospy.sleep(sleep)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def emergency_stop():
|
def emergency_stop():
|
||||||
|
|
||||||
"""Функция экстренной остановки, срабатывает при нажатии Ctrl + C"""
|
"""Функция экстренной остановки, срабатывает при нажатии Ctrl + C"""
|
||||||
@@ -78,8 +73,6 @@ def emergency_stop():
|
|||||||
print(f"Warning: {e}")
|
print(f"Warning: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def signal_handler(sig, frame):
|
def signal_handler(sig, frame):
|
||||||
|
|
||||||
"""Перехват Ctrl+C: вместо аварийного завершения программы
|
"""Перехват Ctrl+C: вместо аварийного завершения программы
|
||||||
@@ -98,9 +91,7 @@ def main():
|
|||||||
#в дальнейшем не передавать переменной auto_arm значение True
|
#в дальнейшем не передавать переменной auto_arm значение True
|
||||||
|
|
||||||
|
|
||||||
# тут будут navigate_wait и подписчики
|
<<navigate_wait>>
|
||||||
# navigate_wait(x=3,z=1,sleep=1)
|
|
||||||
# navigate_wait(y=5,x=2,z=1,sleep = 4)
|
|
||||||
|
|
||||||
|
|
||||||
land() #посадка
|
land() #посадка
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
class QrDetect():
|
||||||
|
def __init__(self):
|
||||||
|
self.qr_data = ''
|
||||||
|
|
||||||
|
def getQrData(self):
|
||||||
|
return self.qr_data
|
||||||
|
|
||||||
|
def qr_detection(self,data):
|
||||||
|
'''сканирование qr кода'''
|
||||||
|
if self.qr_data!= '':
|
||||||
|
return
|
||||||
|
cv_image = bridge.imgmsg_to_cv2(data, 'bgr8')
|
||||||
|
barcodes = pyzbar.decode(cv_image)
|
||||||
|
|
||||||
|
if barcodes:
|
||||||
|
self.qr_data = barcodes[0].data.decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
#в MAIN для вызова функции необходимо следующее:
|
||||||
|
#1. создаём и вызываем подписчика, который вызывает функцию чтения кьюаркода
|
||||||
|
qd = QrDetect()
|
||||||
|
qr_sub = rospy.Subscriber('main_camera/image_raw',Image, qd.qr_detection,queue_size=1)
|
||||||
|
#2. задаём время работы подписчика (за 1 секунду примерно 20 раз вызывается функция)
|
||||||
|
rospy.sleep(2)
|
||||||
|
#3. выключаем подписчика
|
||||||
|
qr_sub.unregister()
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
qr_data=''
|
|
||||||
|
|
||||||
def qr_detection(data):
|
|
||||||
'''сканирование qr кода'''
|
|
||||||
global qr_data
|
|
||||||
if qr_data!= '':
|
|
||||||
return
|
|
||||||
cv_image = bridge.imgmsg_to_cv2(data, 'bgr8')
|
|
||||||
barcodes = pyzbar.decode(cv_image)
|
|
||||||
|
|
||||||
if barcodes:
|
|
||||||
qr_data = barcodes[0].data.decode('utf-8')
|
|
||||||
|
|
||||||
return qr_data
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#в MAIN для вызова функции необходимо следующее:
|
|
||||||
#1. создаём и вызываем подписчика, который вызывает функцию чтения кьюаркода
|
|
||||||
qr_sub = rospy.Subscriber('main_camera/image_raw',Image, qr_detection,queue_size=1)
|
|
||||||
#2. задаём время работы подписчика (за 1 секунду примерно 20 раз вызывается функция)
|
|
||||||
rospy.sleep(2)
|
|
||||||
#3. выключаем подписчика
|
|
||||||
qr_sub.unregister()
|
|
||||||
|
|
||||||
+20
-12
@@ -13,7 +13,6 @@ const isModalVisible = ref(false)
|
|||||||
let finallyText = '';
|
let finallyText = '';
|
||||||
|
|
||||||
onMounted(()=>{
|
onMounted(()=>{
|
||||||
|
|
||||||
for (let i = 0; i < 100; i++) {
|
for (let i = 0; i < 100; i++) {
|
||||||
numbers.value.push({
|
numbers.value.push({
|
||||||
variable: [],
|
variable: [],
|
||||||
@@ -43,7 +42,10 @@ function setNumber(item) {
|
|||||||
//если нажимаем на ранее отмеченную клетку (не последнюю), то выводится ошибка
|
//если нажимаем на ранее отмеченную клетку (не последнюю), то выводится ошибка
|
||||||
listOfTrips.value.push(item)
|
listOfTrips.value.push(item)
|
||||||
if (numbers.value[item.index].variable.at(-1) === clickCount.value-1) {
|
if (numbers.value[item.index].variable.at(-1) === clickCount.value-1) {
|
||||||
izitoast.error({title:'Ошибка', message:'Нельзя выбирать один и тот же aruco маркер 2 раза подряд'})
|
izitoast.error({
|
||||||
|
title:'Ошибка',
|
||||||
|
message:'Нельзя выбирать один и тот же aruco маркер 2 раза подряд'
|
||||||
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
numbers.value[item.index].variable.push(clickCount.value)
|
numbers.value[item.index].variable.push(clickCount.value)
|
||||||
@@ -53,13 +55,14 @@ function setNumber(item) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function saveResult() {
|
function saveResult() {
|
||||||
|
let navigate_waites = ''
|
||||||
for (const item of listOfTrips.value) {
|
for (const item of listOfTrips.value) {
|
||||||
finallyText += `navigate_wait(${item.x}, ${item.y})\n`;
|
navigate_waites += `navigate_wait(${item.x}, ${item.y})\n\t`;
|
||||||
}
|
}
|
||||||
console.log(finallyText);
|
fetch('/shablons/emergency_and_navigate.txt')
|
||||||
izitoast.info({
|
.then(response => response.text())
|
||||||
title: 'Информация',
|
.then(textOfCode => {
|
||||||
message: "Посмотри в консоли путь дрона. Ctrl + Shift + I или F12"
|
finallyText = textOfCode.replace('<<navigate_wait>>', navigate_waites);
|
||||||
});
|
});
|
||||||
isModalVisible.value = true
|
isModalVisible.value = true
|
||||||
}
|
}
|
||||||
@@ -92,6 +95,14 @@ const handleKeydown = (event) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
useEventListener('keydown', handleKeydown);
|
useEventListener('keydown', handleKeydown);
|
||||||
|
|
||||||
|
function copyAndToast(text){
|
||||||
|
copyToclipboard(text)
|
||||||
|
izitoast.success({
|
||||||
|
title:'Успешно',
|
||||||
|
message:'Код скопирован в буфер обмена'
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -119,16 +130,13 @@ useEventListener('keydown', handleKeydown);
|
|||||||
<strong v-else>Код не готов!</strong>
|
<strong v-else>Код не готов!</strong>
|
||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
<p v-if="listOfTrips.length">Это тело модального окна.
|
<p v-if="listOfTrips.length">Скопируйте или скачайте ваш код</p>
|
||||||
{{ finallyText }}
|
|
||||||
|
|
||||||
</p>
|
|
||||||
<p v-else>Выстройте маршрут перед сохранением кода.
|
<p v-else>Выстройте маршрут перед сохранением кода.
|
||||||
</p>
|
</p>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<button type="button" class="btn-green" @click="isModalVisible = false">Скачать код</button>
|
<button type="button" class="btn-green" @click="isModalVisible = false">Скачать код</button>
|
||||||
<button type="button" class="btn-green" @click="copyToclipboard(finallyText)">Скопировать код</button>
|
<button type="button" class="btn-green" @click="copyAndToast(finallyText)">Скопировать код</button>
|
||||||
<button type="button" class="btn-green" @click="isModalVisible = false">ОК</button>
|
<button type="button" class="btn-green" @click="isModalVisible = false">ОК</button>
|
||||||
</template>
|
</template>
|
||||||
</MyDialog>
|
</MyDialog>
|
||||||
|
|||||||
@@ -94,6 +94,12 @@ function closeModal() {
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
margin: 0 5px;
|
margin: 0 5px;
|
||||||
}
|
}
|
||||||
|
.btn-green:hover {
|
||||||
|
background-color: #0fa386;
|
||||||
|
}
|
||||||
|
.btn-green:active {
|
||||||
|
background-color: #65ebd2;
|
||||||
|
}
|
||||||
|
|
||||||
.modal-fade-enter,
|
.modal-fade-enter,
|
||||||
.modal-fade-leave-active {
|
.modal-fade-leave-active {
|
||||||
|
|||||||
Reference in New Issue
Block a user