переделала шаблоны кода для дрона, исправила ошибки в saveResult
This commit is contained in:
+34
-41
@@ -1,54 +1,47 @@
|
|||||||
class ColorDetect():
|
def color_detection(data, print_type='str'):
|
||||||
def __init__(self):
|
'''определение цвета'''
|
||||||
self.color = None
|
|
||||||
|
|
||||||
def getColor(self):
|
frame = bridge.imgmsg_to_cv2(data, 'bgr8')
|
||||||
return self.color
|
height, width = frame.shape[:2]
|
||||||
|
y_start = int(height * 0.33)
|
||||||
|
y_end = int(height * 0.67)
|
||||||
|
x_start = int(width * 0.31)
|
||||||
|
x_end = int(width * 0.69)
|
||||||
|
|
||||||
def detect_color_callback(self, data, print_type='str'):
|
cropped_frame = frame[y_start:y_end, x_start:x_end]
|
||||||
'''определение цвета'''
|
|
||||||
|
|
||||||
frame = bridge.imgmsg_to_cv2(data, 'bgr8')
|
if cropped_frame.size == 0:
|
||||||
height, width = frame.shape[:2]
|
return
|
||||||
y_start = int(height * 0.33)
|
|
||||||
y_end = int(height * 0.67)
|
|
||||||
x_start = int(width * 0.31)
|
|
||||||
x_end = int(width * 0.69)
|
|
||||||
|
|
||||||
cropped_frame = frame[y_start:y_end, x_start:x_end]
|
|
||||||
|
|
||||||
if cropped_frame.size == 0:
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
if print_type == 'rgb':
|
if print_type == 'rgb':
|
||||||
|
|
||||||
mean_bgr = cv2.mean(cropped_frame)[:3]
|
mean_bgr = cv2.mean(cropped_frame)[:3]
|
||||||
mean_rgb = (int(mean_bgr[2]), int(mean_bgr[1]), int(mean_bgr[0]))
|
mean_rgb = (int(mean_bgr[2]), int(mean_bgr[1]), int(mean_bgr[0]))
|
||||||
self.color = str(mean_rgb)
|
color = str(mean_rgb)
|
||||||
|
|
||||||
|
|
||||||
elif print_type == 'str':
|
elif print_type == 'str':
|
||||||
|
|
||||||
# Получаем средние значения BGR
|
# Получаем средние значения BGR
|
||||||
mean_bgr = cv2.mean(cropped_frame)[:3]
|
mean_bgr = cv2.mean(cropped_frame)[:3]
|
||||||
b, g, r = int(mean_bgr[0]), int(mean_bgr[1]), int(mean_bgr[2])
|
b, g, r = int(mean_bgr[0]), int(mean_bgr[1]), int(mean_bgr[2])
|
||||||
|
|
||||||
|
|
||||||
if b > g and b > r and b > 100:
|
if b > g + 20 and b > r + 20 and b > 100 + 20:
|
||||||
self.color = 'blue'
|
color = 'blue'
|
||||||
elif g > b and g > r and g > 100:
|
elif g > b + 20 and g > r + 20 and g > 100:
|
||||||
self.color = 'green'
|
color = 'green'
|
||||||
elif r > b and r > g and r > 100:
|
elif r > b + 20 and r > g + 20 and r > 100:
|
||||||
self.color = 'red'
|
color = 'red'
|
||||||
else:
|
elif r > 150 and g > 150 and g > 150:
|
||||||
self.color = None
|
color= 'white'
|
||||||
|
else:
|
||||||
|
color = None
|
||||||
|
|
||||||
#в MAIN для вызова функции должно быть:
|
#в MAIN для вызова функции должно быть:
|
||||||
# cd = ColorDetect()
|
#color_sub = rospy.Subscriber('main_camera/image_raw', Image,
|
||||||
#color_sub = rospy.Subscriber('main_camera/image_raw', Image,
|
#lambda img: color_detection(img, print_type='rgb'),
|
||||||
#lambda img: cd.detect_color_callback(img, print_type='rgb'),
|
#queue_size=1)
|
||||||
#queue_size=1)
|
#rospy.sleep(2)
|
||||||
# print(cd.getColor())
|
#color_sub.unregister()
|
||||||
#rospy.sleep(2)
|
|
||||||
#color_sub.unregister()
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry) #сеов
|
|||||||
navigate = rospy.ServiceProxy('navigate', srv.Navigate) #сервис для полета по указаным координатам
|
navigate = rospy.ServiceProxy('navigate', srv.Navigate) #сервис для полета по указаным координатам
|
||||||
land = rospy.ServiceProxy('land', Trigger) #сервис для посадки
|
land = rospy.ServiceProxy('land', Trigger) #сервис для посадки
|
||||||
|
|
||||||
|
rospy.init_node('flight')
|
||||||
|
bridge = CvBridge()
|
||||||
|
|
||||||
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):
|
||||||
"""
|
"""
|
||||||
|
|||||||
+6
-15
@@ -1,16 +1,7 @@
|
|||||||
class QrDetect():
|
def qr_detection(data):
|
||||||
def __init__(self):
|
cv_image = bridge.imgmsg_to_cv2(data, 'bgr8')
|
||||||
self.qr_data = ''
|
barcodes = pyzbar.decode(cv_image)
|
||||||
|
|
||||||
def getQrData(self):
|
if barcodes:
|
||||||
return self.qr_data
|
qr_data = barcodes[0].data.decode('utf-8')
|
||||||
|
return 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')
|
|
||||||
+11
-14
@@ -11,14 +11,12 @@ const clickCount = ref(1); // Счетчик нажатий
|
|||||||
const listOfTrips = ref([]);
|
const listOfTrips = ref([]);
|
||||||
const isModalVisible = ref(false);
|
const isModalVisible = ref(false);
|
||||||
let finallyText = "";
|
let finallyText = "";
|
||||||
const qr_sub_text = [
|
const qr_sub_text = `
|
||||||
"\tqd = QrDetect()\n",
|
\tqr_sub = rospy.Subscriber('main_camera/image_raw',Image, qr_detection,queue_size=1)\n
|
||||||
"\tqr_sub = rospy.Subscriber('main_camera/image_raw',Image, qd.qr_detection,queue_size=1)\n",
|
\trospy.sleep(2)\n
|
||||||
"\trospy.sleep(2)\n",
|
\tqr_sub.unregister()\n
|
||||||
"\tqr_sub.unregister()\n"
|
`
|
||||||
];
|
let is_qr__head_used = 0;
|
||||||
let is_qr_used = 0;
|
|
||||||
let head = "";
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
for (let i = 0; i < 100; i++) {
|
for (let i = 0; i < 100; i++) {
|
||||||
@@ -58,8 +56,8 @@ function saveResult() {
|
|||||||
for (const item of listOfTrips.value) {
|
for (const item of listOfTrips.value) {
|
||||||
navigate_waites += `\tnavigate_wait(${item.x}, ${item.y})\n`;
|
navigate_waites += `\tnavigate_wait(${item.x}, ${item.y})\n`;
|
||||||
if (item.x===1 && item.y === 1) {
|
if (item.x===1 && item.y === 1) {
|
||||||
navigate_waites += qr_sub_text.join('')
|
navigate_waites += qr_sub_text
|
||||||
is_qr_used=1
|
is_qr__head_used=1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,9 +67,9 @@ function saveResult() {
|
|||||||
finallyText = textOfCode.replace("<<navigate_wait>>", navigate_waites);
|
finallyText = textOfCode.replace("<<navigate_wait>>", navigate_waites);
|
||||||
});
|
});
|
||||||
isModalVisible.value = true;
|
isModalVisible.value = true;
|
||||||
if (is_qr_used === 1) {
|
if (is_qr__head_used === 1) {
|
||||||
Qr_head()
|
Qr_head()
|
||||||
is_qr_used +=1
|
is_qr__head_used +=1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,8 +77,7 @@ function Qr_head() {
|
|||||||
fetch("/shablons/qr.txt")
|
fetch("/shablons/qr.txt")
|
||||||
.then((response) => response.text())
|
.then((response) => response.text())
|
||||||
.then((textOfCode) => {
|
.then((textOfCode) => {
|
||||||
head = textOfCode;
|
finallyText = finallyText.replace("<<qr_function>>", textOfCode);
|
||||||
finallyText = finallyText.replace("<<qr_function>>", head);
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user