diff --git a/public/shablons/color.txt b/public/shablons/color.txt index 6571542..ccd0997 100644 --- a/public/shablons/color.txt +++ b/public/shablons/color.txt @@ -1,54 +1,47 @@ -class ColorDetect(): - def __init__(self): - self.color = None +def color_detection(data, print_type='str'): + '''определение цвета''' - def getColor(self): - return self.color + frame = bridge.imgmsg_to_cv2(data, 'bgr8') + 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] + + if cropped_frame.size == 0: + return + - frame = bridge.imgmsg_to_cv2(data, 'bgr8') - 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) + if print_type == 'rgb': - cropped_frame = frame[y_start:y_end, x_start:x_end] + mean_bgr = cv2.mean(cropped_frame)[:3] + mean_rgb = (int(mean_bgr[2]), int(mean_bgr[1]), int(mean_bgr[0])) + color = str(mean_rgb) + + + elif print_type == 'str': + + # Получаем средние значения BGR + mean_bgr = cv2.mean(cropped_frame)[:3] + b, g, r = int(mean_bgr[0]), int(mean_bgr[1]), int(mean_bgr[2]) - if cropped_frame.size == 0: - return - - if print_type == 'rgb': - - mean_bgr = cv2.mean(cropped_frame)[:3] - mean_rgb = (int(mean_bgr[2]), int(mean_bgr[1]), int(mean_bgr[0])) - self.color = str(mean_rgb) - - - elif print_type == 'str': - - # Получаем средние значения BGR - mean_bgr = cv2.mean(cropped_frame)[:3] - b, g, r = int(mean_bgr[0]), int(mean_bgr[1]), int(mean_bgr[2]) - - - if b > g and b > r and b > 100: - self.color = 'blue' - elif g > b and g > r and g > 100: - self.color = 'green' - elif r > b and r > g and r > 100: - self.color = 'red' - else: - self.color = None + if b > g + 20 and b > r + 20 and b > 100 + 20: + color = 'blue' + elif g > b + 20 and g > r + 20 and g > 100: + color = 'green' + elif r > b + 20 and r > g + 20 and r > 100: + color = 'red' + elif r > 150 and g > 150 and g > 150: + color= 'white' + else: + color = None #в MAIN для вызова функции должно быть: -# cd = ColorDetect() - #color_sub = rospy.Subscriber('main_camera/image_raw', Image, - #lambda img: cd.detect_color_callback(img, print_type='rgb'), - #queue_size=1) - # print(cd.getColor()) - #rospy.sleep(2) - #color_sub.unregister() +#color_sub = rospy.Subscriber('main_camera/image_raw', Image, + #lambda img: color_detection(img, print_type='rgb'), + #queue_size=1) +#rospy.sleep(2) +#color_sub.unregister() diff --git a/public/shablons/emergency_and_navigate.txt b/public/shablons/emergency_and_navigate.txt index f80df0d..21aff07 100644 --- a/public/shablons/emergency_and_navigate.txt +++ b/public/shablons/emergency_and_navigate.txt @@ -17,6 +17,8 @@ get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry) #сеов navigate = rospy.ServiceProxy('navigate', srv.Navigate) #сервис для полета по указаным координатам 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): """ diff --git a/public/shablons/qr.txt b/public/shablons/qr.txt index 73e211e..32220f8 100644 --- a/public/shablons/qr.txt +++ b/public/shablons/qr.txt @@ -1,16 +1,7 @@ -class QrDetect(): - def __init__(self): - self.qr_data = '' - - def getQrData(self): - return self.qr_data +def qr_detection(data): + cv_image = bridge.imgmsg_to_cv2(data, 'bgr8') + barcodes = pyzbar.decode(cv_image) - 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') \ No newline at end of file + if barcodes: + qr_data = barcodes[0].data.decode('utf-8') + return qr_data \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 46a1257..368b9e3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -11,14 +11,12 @@ const clickCount = ref(1); // Счетчик нажатий const listOfTrips = ref([]); const isModalVisible = ref(false); let finallyText = ""; -const qr_sub_text = [ - "\tqd = QrDetect()\n", - "\tqr_sub = rospy.Subscriber('main_camera/image_raw',Image, qd.qr_detection,queue_size=1)\n", - "\trospy.sleep(2)\n", - "\tqr_sub.unregister()\n" -]; -let is_qr_used = 0; -let head = ""; +const qr_sub_text = ` + \tqr_sub = rospy.Subscriber('main_camera/image_raw',Image, qr_detection,queue_size=1)\n + \trospy.sleep(2)\n + \tqr_sub.unregister()\n +` +let is_qr__head_used = 0; onMounted(() => { for (let i = 0; i < 100; i++) { @@ -58,8 +56,8 @@ function saveResult() { for (const item of listOfTrips.value) { navigate_waites += `\tnavigate_wait(${item.x}, ${item.y})\n`; if (item.x===1 && item.y === 1) { - navigate_waites += qr_sub_text.join('') - is_qr_used=1 + navigate_waites += qr_sub_text + is_qr__head_used=1 } } @@ -69,9 +67,9 @@ function saveResult() { finallyText = textOfCode.replace("<>", navigate_waites); }); isModalVisible.value = true; - if (is_qr_used === 1) { + if (is_qr__head_used === 1) { Qr_head() - is_qr_used +=1 + is_qr__head_used +=1 } } @@ -79,8 +77,7 @@ function Qr_head() { fetch("/shablons/qr.txt") .then((response) => response.text()) .then((textOfCode) => { - head = textOfCode; - finallyText = finallyText.replace("<>", head); + finallyText = finallyText.replace("<>", textOfCode); }) }