From 69829d85fad407f5099667fc6562290ddf543a6c Mon Sep 17 00:00:00 2001 From: russian_proger Date: Sat, 10 Jan 2026 17:44:56 +0300 Subject: [PATCH] chore: remove old sources --- old/advanced_autopilot.py | 418 ------------------------------ old/autopilot.zip | Bin 166301 -> 0 bytes old/examples.py | 222 ---------------- old/main.py | 13 - old/requirements.txt | 56 ---- old/simulator.py | 173 ------------- old/test.ipynb | 55 ---- old/test_center_coordinates.py | 96 ------- old/test_tracking.py | 204 --------------- old/test_unified_visualization.py | 65 ----- old/test_visualization_only.py | 67 ----- old/visualization.py | 277 -------------------- 12 files changed, 1646 deletions(-) delete mode 100644 old/advanced_autopilot.py delete mode 100644 old/autopilot.zip delete mode 100644 old/examples.py delete mode 100644 old/main.py delete mode 100644 old/requirements.txt delete mode 100644 old/simulator.py delete mode 100644 old/test.ipynb delete mode 100644 old/test_center_coordinates.py delete mode 100644 old/test_tracking.py delete mode 100644 old/test_unified_visualization.py delete mode 100644 old/test_visualization_only.py delete mode 100644 old/visualization.py diff --git a/old/advanced_autopilot.py b/old/advanced_autopilot.py deleted file mode 100644 index 41178f7..0000000 --- a/old/advanced_autopilot.py +++ /dev/null @@ -1,418 +0,0 @@ -""" -Расширенная система автопилота с улучшенным отслеживанием координат и угла БПЛА -""" - -import random -import cv2 -import numpy as np -from PIL import Image -import math -from typing import Optional, Tuple, Dict, List -from dataclasses import dataclass -import time - -random.seed(1) - -@dataclass -class DroneState: - """Структура для хранения состояния БПЛА""" - x: float = 0.0 - y: float = 0.0 - altitude: float = 10.0 - angle: float = 0.0 - velocity_x: float = 0.0 - velocity_y: float = 0.0 - angular_velocity: float = 0.0 - timestamp: float = 0.0 - confidence: float = 1.0 - -class AdvancedAutoPilot: - """ - Расширенный автопилот с улучшенным отслеживанием координат и угла БПЛА - """ - - def __init__(self, - initial_x: float = 0.0, - initial_y: float = 0.0, - initial_altitude: float = 10.0, - camera_fov: float = 60.0, - image_width: int = 640, - image_height: int = 480): - - # Состояние БПЛА - self.state = DroneState( - x=initial_x, - y=initial_y, - altitude=initial_altitude, - timestamp=time.time() - ) - - # Параметры камеры - self.camera_fov = math.radians(camera_fov) - self.image_width = image_width - self.image_height = image_height - - # Вычисляем коэффициент перевода пикселей в метры - self.update_pixel_to_meter_ratio() - - # История состояний для фильтрации - self.state_history: List[DroneState] = [] - self.max_history_size = 10 - - # Параметры фильтрации - self.velocity_filter_alpha = 0.3 # Коэффициент сглаживания скорости - self.position_filter_alpha = 0.7 # Коэффициент сглаживания позиции - - # Инициализация детекторов - self.orb_detector = cv2.ORB_create( - nfeatures=2000, - scaleFactor=1.2, - nlevels=8, - edgeThreshold=31, - firstLevel=0, - WTA_K=2, - patchSize=31, - fastThreshold=20 - ) - - self.bf_matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) - - # Предыдущее изображение - self.prev_image: Optional[np.ndarray] = None - self.prev_timestamp: float = 0.0 - - # Счетчики - self.frame_count = 0 - self.successful_tracking_frames = 0 - - # Статистика - self.tracking_stats = { - 'total_frames': 0, - 'successful_frames': 0, - 'failed_frames': 0, - 'avg_processing_time': 0.0 - } - - def update_pixel_to_meter_ratio(self): - """Обновляет коэффициент перевода пикселей в метры на основе высоты и FOV камеры""" - # Вычисляем размер пикселя на земле при текущей высоте - ground_distance = 2 * self.state.altitude * math.tan(self.camera_fov / 2) - self.pixel_to_meter_ratio = ground_distance / self.image_width - - def detect_and_match_keypoints(self, img1: np.ndarray, img2: np.ndarray) -> Tuple[Optional[np.ndarray], Optional[np.ndarray], Optional[List], Optional[List], Optional[List]]: - """Обнаруживает и сопоставляет ключевые точки между двумя изображениями""" - # Обнаружение ключевых точек и дескрипторов - kp1, des1 = self.orb_detector.detectAndCompute(img1, None) - kp2, des2 = self.orb_detector.detectAndCompute(img2, None) - - if des1 is None or des2 is None or len(kp1) < 10 or len(kp2) < 10: - return None, None, None, None, None - - # Сопоставление ключевых точек - matches = self.bf_matcher.match(des1, des2) - matches = sorted(matches, key=lambda x: x.distance) - - # Фильтрация хороших совпадений - good_matches = [] - for match in matches: - if match.distance < 50: # Порог расстояния - good_matches.append(match) - - if len(good_matches) < 8: # Увеличиваем минимальное количество совпадений - return None, None, None, None, None - - # Извлечение координат сопоставленных точек - src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2) - dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2) - - return src_pts, dst_pts, good_matches, kp1, kp2 - - def estimate_transformation_matrix(self, src_pts: np.ndarray, dst_pts: np.ndarray) -> Optional[Dict]: - """Оценивает матрицу трансформации с улучшенной обработкой ошибок""" - try: - # Используем RANSAC для оценки матрицы гомографии - H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 3.0) - - if H is None: - return None - - # Проверяем качество матрицы - if not self.is_valid_homography(H): - return None - - # Извлекаем параметры трансформации - a11, a12 = H[0, 0], H[0, 1] - a21, a22 = H[1, 0], H[1, 1] - tx, ty = H[0, 2], H[1, 2] - - # Вычисляем угол поворота - angle = np.arctan2(a21, a11) - - # Вычисляем масштаб - scale_x = np.sqrt(a11**2 + a21**2) - scale_y = np.sqrt(a12**2 + a22**2) - scale = (scale_x + scale_y) / 2 - - # Проверяем разумность масштаба - if scale < 0.5 or scale > 2.0: - return None - - return { - 'translation': (tx, ty), - 'rotation': angle, - 'scale': scale, - 'homography': H, - 'mask': mask, - 'inliers_ratio': np.sum(mask) / len(mask) if mask is not None else 0.0 - } - except Exception as e: - print(f"Ошибка при оценке трансформации: {e}") - return None - - def is_valid_homography(self, H: np.ndarray) -> bool: - """Проверяет валидность матрицы гомографии""" - if H is None: - return False - - # Проверяем, что матрица не вырождена - det = np.linalg.det(H) - if abs(det) < 1e-6: - return False - - # Проверяем, что элементы матрицы разумны - if np.any(np.abs(H) > 1000): - return False - - return True - - def update_drone_position(self, transformation_info: Dict, dt: float): - """Обновляет позицию и состояние БПЛА с учетом временного интервала""" - tx, ty = transformation_info['translation'] - rotation = transformation_info['rotation'] - scale = transformation_info['scale'] - inliers_ratio = transformation_info.get('inliers_ratio', 1.0) - - # Конвертируем смещение в пикселях в метры - dx_meters = tx * self.pixel_to_meter_ratio - dy_meters = ty * self.pixel_to_meter_ratio - - # Применяем поворот к смещению (учитываем текущий угол БПЛА) - cos_angle = math.cos(self.state.angle) - sin_angle = math.sin(self.state.angle) - - # Поворачиваем смещение в глобальные координаты - dx_global = dx_meters * cos_angle - dy_meters * sin_angle - dy_global = dx_meters * sin_angle + dy_meters * cos_angle - - # Вычисляем скорости - velocity_x = dx_global / dt if dt > 0 else 0.0 - velocity_y = dy_global / dt if dt > 0 else 0.0 - angular_velocity = rotation / dt if dt > 0 else 0.0 - - # Применяем фильтрацию - self.state.velocity_x = (self.velocity_filter_alpha * velocity_x + - (1 - self.velocity_filter_alpha) * self.state.velocity_x) - self.state.velocity_y = (self.velocity_filter_alpha * velocity_y + - (1 - self.velocity_filter_alpha) * self.state.velocity_y) - self.state.angular_velocity = (self.velocity_filter_alpha * angular_velocity + - (1 - self.velocity_filter_alpha) * self.state.angular_velocity) - - # Обновляем позицию с фильтрацией - new_x = self.state.x + dx_global - new_y = self.state.y + dy_global - new_angle = self.state.angle + rotation - - self.state.x = (self.position_filter_alpha * new_x + - (1 - self.position_filter_alpha) * self.state.x) - self.state.y = (self.position_filter_alpha * new_y + - (1 - self.position_filter_alpha) * self.state.y) - self.state.angle = (self.position_filter_alpha * new_angle + - (1 - self.position_filter_alpha) * self.state.angle) - - # Нормализуем угол - self.state.angle = math.atan2(math.sin(self.state.angle), math.cos(self.state.angle)) - - # Обновляем временную метку и уверенность - self.state.timestamp = time.time() - self.state.confidence = min(1.0, inliers_ratio * 1.5) # Увеличиваем уверенность при хороших совпадениях - - def handle(self, image: Image.Image) -> bool: - """Обрабатывает новый кадр и обновляет состояние БПЛА""" - start_time = time.time() - self.frame_count += 1 - self.tracking_stats['total_frames'] += 1 - - # Конвертируем изображение - current_image = np.array(image) - current_timestamp = time.time() - - if self.prev_image is None: - self.prev_image = current_image - self.prev_timestamp = current_timestamp - return False - - # Вычисляем временной интервал - dt = current_timestamp - self.prev_timestamp - - # Обнаруживаем и сопоставляем ключевые точки - src_pts, dst_pts, matches, kp1, kp2 = self.detect_and_match_keypoints(self.prev_image, current_image) - - if src_pts is not None and dst_pts is not None: - # Оцениваем матрицу трансформации - transformation_info = self.estimate_transformation_matrix(src_pts, dst_pts) - - if transformation_info: - # Обновляем позицию БПЛА - self.update_drone_position(transformation_info, dt) - - # Добавляем состояние в историю - self.add_state_to_history() - - # Обновляем статистику - self.successful_tracking_frames += 1 - self.tracking_stats['successful_frames'] += 1 - - # Выводим информацию - self.print_tracking_info(transformation_info) - - # Визуализация - self.visualize_tracking(current_image, kp1, kp2, matches, transformation_info) - - success = True - else: - self.tracking_stats['failed_frames'] += 1 - success = False - else: - self.tracking_stats['failed_frames'] += 1 - success = False - - # Обновляем предыдущее изображение - self.prev_image = current_image - self.prev_timestamp = current_timestamp - - # Обновляем статистику времени обработки - processing_time = time.time() - start_time - self.tracking_stats['avg_processing_time'] = ( - (self.tracking_stats['avg_processing_time'] * (self.frame_count - 1) + processing_time) / self.frame_count - ) - - return success - - def add_state_to_history(self): - """Добавляет текущее состояние в историю""" - # Создаем копию текущего состояния - state_copy = DroneState( - x=self.state.x, - y=self.state.y, - altitude=self.state.altitude, - angle=self.state.angle, - velocity_x=self.state.velocity_x, - velocity_y=self.state.velocity_y, - angular_velocity=self.state.angular_velocity, - timestamp=self.state.timestamp, - confidence=self.state.confidence - ) - - self.state_history.append(state_copy) - - # Ограничиваем размер истории - if len(self.state_history) > self.max_history_size: - self.state_history.pop(0) - - def get_drone_state(self) -> Dict: - """Возвращает текущее состояние БПЛА в виде словаря""" - return { - 'x': self.state.x, - 'y': self.state.y, - 'altitude': self.state.altitude, - 'angle': self.state.angle, - 'angle_degrees': math.degrees(self.state.angle), - 'velocity_x': self.state.velocity_x, - 'velocity_y': self.state.velocity_y, - 'angular_velocity': self.state.angular_velocity, - 'confidence': self.state.confidence, - 'frame_count': self.frame_count, - 'timestamp': self.state.timestamp - } - - def get_tracking_stats(self) -> Dict: - """Возвращает статистику отслеживания""" - success_rate = (self.tracking_stats['successful_frames'] / - max(1, self.tracking_stats['total_frames'])) * 100 - - return { - **self.tracking_stats, - 'success_rate_percent': success_rate, - 'current_altitude': self.state.altitude, - 'pixel_to_meter_ratio': self.pixel_to_meter_ratio - } - - def set_altitude(self, altitude: float): - """Устанавливает высоту БПЛА и пересчитывает масштаб""" - self.state.altitude = altitude - self.update_pixel_to_meter_ratio() - - def reset_position(self, x: float = 0.0, y: float = 0.0, angle: float = 0.0): - """Сбрасывает позицию и угол БПЛА""" - self.state.x = x - self.state.y = y - self.state.angle = angle - self.state.velocity_x = 0.0 - self.state.velocity_y = 0.0 - self.state.angular_velocity = 0.0 - self.state_history.clear() - self.frame_count = 0 - self.successful_tracking_frames = 0 - - def print_tracking_info(self, transformation_info: Dict): - """Выводит информацию об отслеживании""" - state = self.get_drone_state() - stats = self.get_tracking_stats() - - print(f"Frame {self.frame_count}:") - print(f" Position: ({state['x']:.3f}, {state['y']:.3f}) m") - print(f" Angle: {state['angle_degrees']:.1f}°") - print(f" Velocity: ({state['velocity_x']:.2f}, {state['velocity_y']:.2f}) m/s") - print(f" Confidence: {state['confidence']:.2f}") - print(f" Success Rate: {stats['success_rate_percent']:.1f}%") - - def visualize_tracking(self, current_image: np.ndarray, kp1, kp2, matches, transformation_info: Dict): - """Визуализирует процесс отслеживания""" - if kp1 is None or kp2 is None or matches is None: - return - - # Рисуем сопоставления - img_matches = cv2.drawMatches(self.prev_image, kp1, current_image, kp2, matches, None, - flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) - - # Добавляем информацию о состоянии - state = self.get_drone_state() - stats = self.get_tracking_stats() - - info_lines = [ - f"Position: ({state['x']:.2f}, {state['y']:.2f}) m", - f"Angle: {state['angle_degrees']:.1f}°", - f"Velocity: ({state['velocity_x']:.2f}, {state['velocity_y']:.2f}) m/s", - f"Altitude: {state['altitude']:.1f} m", - f"Confidence: {state['confidence']:.2f}", - f"Success Rate: {stats['success_rate_percent']:.1f}%" - ] - - for i, line in enumerate(info_lines): - cv2.putText(img_matches, line, (10, 30 + i * 25), - cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) - - cv2.imshow('Advanced Drone Tracking', img_matches) - cv2.waitKey(1) - - def act(self) -> float: - """Возвращает угол поворота для управления дроном""" - return self.state.angle - - def get_trajectory_history(self) -> Tuple[List[float], List[float], List[float]]: - """Возвращает историю траектории""" - x_history = [state.x for state in self.state_history] - y_history = [state.y for state in self.state_history] - angle_history = [math.degrees(state.angle) for state in self.state_history] - - return x_history, y_history, angle_history \ No newline at end of file diff --git a/old/autopilot.zip b/old/autopilot.zip deleted file mode 100644 index 3daeb251c76c61b4858a27d4aab242ca9fe67817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166301 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�Sc8Y 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 Image.Image: - """ - Поворачивает картинку как будто съемка ведется с летящего дрона. - Выделяет концентрический квадрат, поворачивает его и извлекает результат. - """ - # Получаем размеры изображения - width, height = image.size - square_size = min(width, height) - cropped_image = image.crop((0, 0, square_size, square_size)) - cropped_image = cropped_image.rotate(angle / math.pi * 180, expand=True) - - # Определяем размер концентрического квадрата (80% от минимальной стороны) - local_square_size = int(square_size / 2 ** 0.5) - - # Вычисляем координаты для центрирования квадрата - left = (cropped_image.width - local_square_size) // 2 - top = (cropped_image.height - local_square_size) // 2 - right = left + local_square_size - bottom = top + local_square_size - - # Вырезаем концентрический квадрат - final_image = cropped_image.crop((left, top, right, bottom)) - - return final_image - - def update_trajectory(self, dx: float, dy: float): - """ - Обновляет траекторию полета беспилотника - """ - # Обновляем текущие координаты - self.current_x += dx - self.current_y += dy - - def update_map(self): - """ - Обновляет карту траектории полета - """ - self.viz_manager.update_global_map(self.current_x, self.current_y, self.mode) - - def loop(self): - - html = self.driver.find_element(By.TAG_NAME, 'html') - action = ActionChains(self.driver) - - # Добавляем начальную точку в траекторию - self.update_trajectory(0, 0) - self.viz_manager.update_global_map(self.current_x, self.current_y, self.mode) - - for i in range(1000): - signal = None - if self.mode == SimMode.OPERATOR: - signal = self.operatorPilot.act() - if signal is None: - self.mode = SimMode.AUTONOME - print("Режим возвращения домой!") - - if self.mode == SimMode.AUTONOME: - signal = self.autonomePilot.act() - - if signal is None: - break - - dangle, velocity = signal - drone_x, drone_y = self.autonomePilot.get_position() - self.viz_manager.update_error_plot(i, drone_x, drone_y, self.current_x, self.current_y) - - # Сдвиг камеры - action = ActionChains(self.driver) - action.move_to_element_with_offset(html, 200, 200) - action.click_and_hold() - - self.angle += dangle - dx = math.cos(self.angle) * velocity - dy = math.sin(self.angle) * velocity - action.move_by_offset(-dx, dy) - action.release() - action.perform() - - # Обновляем траекторию - self.update_trajectory(dx, dy) - - # Загрузка скриншота - png = self.driver.get_screenshot_as_png() - im = Image.open(BytesIO(png)) - im = im.crop([0, 80, im.width-80, im.height-60]) - - # Применяем поворот как будто съемка с дрона - rotated_im = self.rotate_image_like_drone(im, math.pi / 2 - self.angle) - - # Передаем изображение в AutoPilot для анализа - self.autonomePilot.handle(rotated_im) - - # Обновляем визуализацию каждые несколько итераций для производительности - self.update_map() - self.viz_manager.update_display() - - # Финальное обновление карты - self.update_map() - self.viz_manager.update_display() - print("last position: ", self.driver.current_url) - print(f"Финальная позиция: ({self.current_x:.2f}, {self.current_y:.2f})") - - # Показываем карту до закрытия, но не поднимаем на передний план - self.viz_manager.show_final() - print("Симуляция завершена. Окно визуализации остается открытым для анализа.") diff --git a/old/test.ipynb b/old/test.ipynb deleted file mode 100644 index 505f655..0000000 --- a/old/test.ipynb +++ /dev/null @@ -1,55 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "100.00078395707533 -0.0007839570753276348\n" - ] - } - ], - "source": [ - "h = 100\n", - "R = 6378 * 1000\n", - "\n", - "def solve_x2(a, b, c):\n", - " d = b ** 2 - 4 * a * c\n", - " x1 = (-b - d ** 0.5) / (2 * a)\n", - " x2 = (-b + d ** 0.5) / (2 * a)\n", - " return x1, x2\n", - "\n", - "x1, x2 = solve_x2(2, -2 * (h + R), 2 * h * R + h ** 2)\n", - "\n", - "y = h - x1\n", - "\n", - "print(x1, y)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/old/test_center_coordinates.py b/old/test_center_coordinates.py deleted file mode 100644 index 099060d..0000000 --- a/old/test_center_coordinates.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python3 -""" -Тестовый скрипт для проверки работы с координатами относительно центра изображения -""" - -import numpy as np -from PIL import Image -import cv2 -from autopilot import AutoPilot - -def test_center_coordinates(): - """Тестирует работу с координатами относительно центра изображения""" - print("Тест координат относительно центра изображения...") - - # Создаем тестовое изображение - width, height = 640, 480 - test_image = np.zeros((height, width, 3), dtype=np.uint8) - - # Добавляем некоторые объекты для отслеживания - cv2.circle(test_image, (width//2, height//2), 50, (255, 255, 255), -1) # Центр - cv2.circle(test_image, (100, 100), 20, (255, 0, 0), -1) # Левый верхний угол - cv2.circle(test_image, (width-100, height-100), 20, (0, 255, 0), -1) # Правый нижний угол - - # Создаем второе изображение с небольшим смещением - test_image2 = np.zeros((height, width, 3), dtype=np.uint8) - cv2.circle(test_image2, (width//2 + 10, height//2 + 5), 50, (255, 255, 255), -1) # Смещенный центр - cv2.circle(test_image2, (110, 105), 20, (255, 0, 0), -1) # Смещенный левый верхний угол - cv2.circle(test_image2, (width-90, height-95), 20, (0, 255, 0), -1) # Смещенный правый нижний угол - - # Конвертируем в PIL Image - pil_image1 = Image.fromarray(test_image) - pil_image2 = Image.fromarray(test_image2) - - # Создаем автопилот - pilot = AutoPilot(initial_x=0.0, initial_y=0.0) - - print(f"Размер изображения: {width}x{height}") - print(f"Ожидаемый центр: ({width//2}, {height//2})") - - # Обрабатываем первое изображение - pilot.handle(pil_image1) - print(f"Центр изображения после первого кадра: {pilot.image_center}") - - # Обрабатываем второе изображение - pilot.handle(pil_image2) - print(f"Центр изображения после второго кадра: {pilot.image_center}") - - # Получаем состояние дрона - drone_state = pilot.get_drone_state() - print(f"Позиция дрона: ({drone_state['x']:.2f}, {drone_state['y']:.2f})") - print(f"Угол дрона: {drone_state['angle_degrees']:.1f}°") - - print("\nАнализ отцентрированных координат:") - print("Ожидаемое смещение центра: (10, 5) пикселей") - print("Ожидаемое смещение левого верхнего угла: (10, 5) пикселей") - print("Ожидаемое смещение правого нижнего угла: (10, 5) пикселей") - - print("Тест завершен!") - -def test_keypoint_centering(): - """Тестирует отцентрирование ключевых точек""" - print("\nТест отцентрирования ключевых точек...") - - # Создаем простое изображение с одной точкой - width, height = 100, 100 - test_image = np.zeros((height, width, 3), dtype=np.uint8) - cv2.circle(test_image, (25, 25), 5, (255, 255, 255), -1) # Точка в (25, 25) - - # Создаем второе изображение с той же точкой - test_image2 = np.zeros((height, width, 3), dtype=np.uint8) - cv2.circle(test_image2, (25, 25), 5, (255, 255, 255), -1) - - # Конвертируем в PIL Image - pil_image1 = Image.fromarray(test_image) - pil_image2 = Image.fromarray(test_image2) - - # Создаем автопилот - pilot = AutoPilot(initial_x=0.0, initial_y=0.0) - - print(f"Размер изображения: {width}x{height}") - print(f"Центр изображения: ({width//2}, {height//2}) = (50, 50)") - print(f"Позиция точки: (25, 25)") - print(f"Ожидаемые отцентрированные координаты: (25-50, 25-50) = (-25, -25)") - - # Обрабатываем изображения - pilot.handle(pil_image1) - pilot.handle(pil_image2) - - drone_state = pilot.get_drone_state() - print(f"Результат: позиция дрона ({drone_state['x']:.2f}, {drone_state['y']:.2f})") - - print("Тест завершен!") - -if __name__ == "__main__": - test_center_coordinates() - test_keypoint_centering() \ No newline at end of file diff --git a/old/test_tracking.py b/old/test_tracking.py deleted file mode 100644 index 097af23..0000000 --- a/old/test_tracking.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env python3 -""" -Тестовый скрипт для проверки системы отслеживания траектории беспилотника -""" - -import numpy as np -from PIL import Image -import cv2 -from autopilot import AutoPilot, RandomPilot -from simulator import Simulator, SimMode -import matplotlib.pyplot as plt -import time - -def create_test_image(width=640, height=480, pattern_type="random"): - """Создает тестовое изображение с различными паттернами""" - if pattern_type == "random": - # Создаем изображение с случайными точками - img = np.random.randint(0, 255, (height, width, 3), dtype=np.uint8) - # Добавляем несколько четких объектов - cv2.rectangle(img, (100, 100), (200, 200), (255, 0, 0), -1) - cv2.circle(img, (400, 300), 50, (0, 255, 0), -1) - cv2.line(img, (50, 400), (550, 400), (0, 0, 255), 5) - elif pattern_type == "grid": - # Создаем сетку - img = np.zeros((height, width, 3), dtype=np.uint8) - for i in range(0, width, 50): - cv2.line(img, (i, 0), (i, height), (255, 255, 255), 1) - for i in range(0, height, 50): - cv2.line(img, (0, i), (width, i), (255, 255, 255), 1) - elif pattern_type == "circles": - # Создаем изображение с кругами - img = np.zeros((height, width, 3), dtype=np.uint8) - for i in range(5): - x = np.random.randint(50, width-50) - y = np.random.randint(50, height-50) - radius = np.random.randint(20, 80) - color = (np.random.randint(0, 255), np.random.randint(0, 255), np.random.randint(0, 255)) - cv2.circle(img, (x, y), radius, color, -1) - - return Image.fromarray(img) - -def simulate_drone_movement(base_image, dx, dy, rotation=0): - """Симулирует движение БПЛА, создавая смещенное изображение""" - img_array = np.array(base_image) - height, width = img_array.shape[:2] - - # Создаем матрицу трансформации - cos_rot = np.cos(rotation) - sin_rot = np.sin(rotation) - - # Матрица поворота и смещения - M = np.float32([ - [cos_rot, -sin_rot, dx], - [sin_rot, cos_rot, dy] - ]) - - # Применяем трансформацию - transformed = cv2.warpAffine(img_array, M, (width, height), - borderMode=cv2.BORDER_REPLICATE) - - return Image.fromarray(transformed) - -def test_drone_tracking(): - """Тестирует систему отслеживания БПЛА""" - print("Запуск тестирования системы отслеживания БПЛА...") - - # Создаем автопилот - autopilot = AutoPilot(initial_x=0.0, initial_y=0.0, initial_altitude=10.0) - - # Создаем базовое изображение - base_image = create_test_image(pattern_type="circles") - - # Траектория движения (dx, dy, rotation) - trajectory = [ - (10, 0, 0), # Движение вперед - (10, 5, 0.1), # Движение вперед с небольшим поворотом - (0, 10, 0), # Движение вправо - (-5, 5, -0.1), # Движение назад-вправо с поворотом - (5, -5, 0.05), # Движение вперед-влево - (0, -10, 0), # Движение влево - (-10, 0, 0), # Движение назад - ] - - # Массивы для хранения истории позиций - x_history = [] - y_history = [] - angle_history = [] - - # Обрабатываем каждое изображение в траектории - for i, (dx, dy, rotation) in enumerate(trajectory): - print(f"\n--- Кадр {i+1} ---") - - # Создаем смещенное изображение - current_image = simulate_drone_movement(base_image, dx, dy, rotation) - - # Обрабатываем изображение - autopilot.handle(current_image) - - # Получаем состояние БПЛА - state = autopilot.get_drone_state() - x_history.append(state['x']) - y_history.append(state['y']) - angle_history.append(state['angle_degrees']) - - # Обновляем базовое изображение для следующего кадра - base_image = current_image - - # Небольшая пауза для визуализации - time.sleep(0.5) - - # Закрываем окно OpenCV - cv2.destroyAllWindows() - - # Визуализируем траекторию - plot_trajectory(x_history, y_history, angle_history) - -def plot_trajectory(x_history, y_history, angle_history): - """Визуализирует траекторию движения БПЛА""" - fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6)) - - # График траектории - ax1.plot(x_history, y_history, 'b-o', linewidth=2, markersize=8) - ax1.plot(x_history[0], y_history[0], 'go', markersize=12, label='Начало') - ax1.plot(x_history[-1], y_history[-1], 'ro', markersize=12, label='Конец') - ax1.set_xlabel('X координата (м)') - ax1.set_ylabel('Y координата (м)') - ax1.set_title('Траектория движения БПЛА') - ax1.grid(True) - ax1.legend() - ax1.axis('equal') - - # График угла поворота - ax2.plot(range(len(angle_history)), angle_history, 'r-o', linewidth=2, markersize=8) - ax2.set_xlabel('Номер кадра') - ax2.set_ylabel('Угол поворота (градусы)') - ax2.set_title('Изменение угла поворота БПЛА') - ax2.grid(True) - - plt.tight_layout() - plt.show() - -def test_single_frame(): - """Тестирует обработку одного кадра""" - print("Тестирование обработки одного кадра...") - - autopilot = AutoPilot() - - # Создаем два похожих изображения - img1 = create_test_image(pattern_type="circles") - img2 = simulate_drone_movement(img1, 15, 10, 0.05) - - # Обрабатываем первое изображение - autopilot.handle(img1) - - # Обрабатываем второе изображение - autopilot.handle(img2) - - # Получаем состояние - state = autopilot.get_drone_state() - print(f"Позиция БПЛА: ({state['x']:.2f}, {state['y']:.2f})") - print(f"Угол БПЛА: {state['angle_degrees']:.1f}°") - - cv2.destroyAllWindows() - -def test_trajectory_tracking(): - """Тестирует систему отслеживания траектории""" - print("Запуск теста системы отслеживания траектории...") - - # Создаем пилотов - operator_pilot = RandomPilot(velocity=1.0) - autonome_pilot = AutoPilot(initial_x=0.0, initial_y=0.0) - - # Создаем симулятор - simulator = Simulator(operator_pilot, autonome_pilot) - - try: - # Запускаем симуляцию - simulator.loop() - - print("Симуляция завершена!") - print(f"Всего точек траектории: {len(simulator.trajectory_x)}") - print(f"Режим оператора: {sum(1 for mode in simulator.trajectory_modes if mode == SimMode.OPERATOR)} точек") - print(f"Автономный режим: {sum(1 for mode in simulator.trajectory_modes if mode == SimMode.AUTONOME)} точек") - - except Exception as e: - print(f"Ошибка во время симуляции: {e}") - finally: - # Закрываем браузер - simulator.driver.quit() - -if __name__ == "__main__": - print("Выберите тест:") - print("1. Тест одного кадра") - print("2. Тест полной траектории") - - choice = input("Введите номер теста (1 или 2): ").strip() - - if choice == "1": - test_single_frame() - elif choice == "2": - test_trajectory_tracking() - else: - print("Неверный выбор. Запускаю тест одного кадра...") - test_single_frame() \ No newline at end of file diff --git a/old/test_unified_visualization.py b/old/test_unified_visualization.py deleted file mode 100644 index 8e6efdd..0000000 --- a/old/test_unified_visualization.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 -""" -Тестовый скрипт для проверки единой системы визуализации -""" - -import numpy as np -from PIL import Image -import cv2 -from autopilot import AutoPilot, RandomPilot -from simulator import Simulator -from visualization import VisualizationManager, SimMode - -def test_unified_visualization(): - """Тестирует единую систему визуализации""" - print("Тест единой системы визуализации...") - - # Создаем менеджер визуализации - viz_manager = VisualizationManager("Test - Unified Visualization") - - # Создаем автопилот с менеджером визуализации - autonome_pilot = AutoPilot(initial_x=0.0, initial_y=0.0, viz_manager=viz_manager) - - # Создаем симулятор - simulator = Simulator(RandomPilot(), autonome_pilot) - - # Создаем тестовые изображения - width, height = 640, 480 - test_image1 = np.zeros((height, width, 3), dtype=np.uint8) - test_image2 = np.zeros((height, width, 3), dtype=np.uint8) - - # Добавляем объекты для отслеживания - cv2.circle(test_image1, (width//2, height//2), 50, (255, 255, 255), -1) - cv2.circle(test_image1, (100, 100), 20, (255, 0, 0), -1) - - cv2.circle(test_image2, (width//2 + 10, height//2 + 5), 50, (255, 255, 255), -1) - cv2.circle(test_image2, (110, 105), 20, (255, 0, 0), -1) - - # Конвертируем в PIL Image - pil_image1 = Image.fromarray(test_image1) - pil_image2 = Image.fromarray(test_image2) - - print("Обрабатываем первое изображение...") - autonome_pilot.handle(pil_image1) - - print("Обрабатываем второе изображение...") - autonome_pilot.handle(pil_image2) - - # Обновляем визуализацию - viz_manager.update_display() - - # Получаем состояние дрона - drone_state = autonome_pilot.get_drone_state() - print(f"Позиция дрона: ({drone_state['x']:.2f}, {drone_state['y']:.2f})") - print(f"Угол дрона: {drone_state['angle_degrees']:.1f}°") - - print("Тест завершен! Окно визуализации должно показывать:") - print("- Глобальную карту с траекторией") - print("- Детекцию ключевых точек") - print("- Сопоставление точек между кадрами") - - # Показываем финальное состояние - viz_manager.show_final() - -if __name__ == "__main__": - test_unified_visualization() \ No newline at end of file diff --git a/old/test_visualization_only.py b/old/test_visualization_only.py deleted file mode 100644 index 2f00f0b..0000000 --- a/old/test_visualization_only.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python3 -""" -Упрощенный тест для проверки системы визуализации без браузера -""" - -import numpy as np -from PIL import Image -import cv2 -from autopilot import AutoPilot -from visualization import VisualizationManager, SimMode - -def test_visualization_only(): - """Тестирует только систему визуализации без симулятора""" - print("Тест системы визуализации...") - - # Создаем менеджер визуализации - viz_manager = VisualizationManager("Test - Visualization Only") - - # Создаем автопилот с менеджером визуализации - autonome_pilot = AutoPilot(initial_x=0.0, initial_y=0.0, viz_manager=viz_manager) - - # Создаем тестовые изображения - width, height = 640, 480 - test_image1 = np.zeros((height, width, 3), dtype=np.uint8) - test_image2 = np.zeros((height, width, 3), dtype=np.uint8) - - # Добавляем объекты для отслеживания - cv2.circle(test_image1, (width//2, height//2), 50, (255, 255, 255), -1) - cv2.circle(test_image1, (100, 100), 20, (255, 0, 0), -1) - cv2.circle(test_image1, (width-100, height-100), 20, (0, 255, 0), -1) - - cv2.circle(test_image2, (width//2 + 10, height//2 + 5), 50, (255, 255, 255), -1) - cv2.circle(test_image2, (110, 105), 20, (255, 0, 0), -1) - cv2.circle(test_image2, (width-90, height-95), 20, (0, 255, 0), -1) - - # Конвертируем в PIL Image - pil_image1 = Image.fromarray(test_image1) - pil_image2 = Image.fromarray(test_image2) - - print("Обрабатываем первое изображение...") - autonome_pilot.handle(pil_image1) - - print("Обрабатываем второе изображение...") - autonome_pilot.handle(pil_image2) - - # Симулируем движение дрона - print("Симулируем движение дрона...") - for i in range(10): - # Обновляем глобальную карту - viz_manager.update_global_map(i * 10, i * 5, SimMode.OPERATOR if i < 5 else SimMode.AUTONOME) - viz_manager.update_display() - - # Получаем состояние дрона - drone_state = autonome_pilot.get_drone_state() - print(f"Позиция дрона: ({drone_state['x']:.2f}, {drone_state['y']:.2f})") - print(f"Угол дрона: {drone_state['angle_degrees']:.1f}°") - - print("Тест завершен! Окно визуализации должно показывать:") - print("- Глобальную карту с траекторией (синий - оператор, красный - автономный)") - print("- Детекцию ключевых точек на текущем кадре") - print("- Сопоставление точек между кадрами") - - # Показываем финальное состояние - viz_manager.show_final() - -if __name__ == "__main__": - test_visualization_only() \ No newline at end of file diff --git a/old/visualization.py b/old/visualization.py deleted file mode 100644 index de882b0..0000000 --- a/old/visualization.py +++ /dev/null @@ -1,277 +0,0 @@ -#!/usr/bin/env python3 -""" -Модуль для управления общим окном визуализации -""" - -import matplotlib.pyplot as plt -import matplotlib.patches as patches -import numpy as np -from enum import Enum -import cv2 -from PIL import Image -import matplotlib - -# Настройки matplotlib -matplotlib.use('TkAgg') -plt.rcParams['figure.raise_window'] = False - -class SimMode(Enum): - OPERATOR = 1 - AUTONOME = 2 - -class VisualizationManager: - """ - Менеджер для управления общим окном визуализации - """ - - def __init__(self, window_title="Drone Autopilot Visualization"): - self.window_title = window_title - self.fig = None - self.ax_error_plot = None # График погрешности позиции - self.ax_global_map = None - self.ax_detection = None - self.ax_matches = None - - # Данные для глобальной карты - self.trajectory_x = [] - self.trajectory_y = [] - self.trajectory_modes = [] - self.current_x = 0.0 - self.current_y = 0.0 - - # Данные для траектории БПЛА (его собственное видение) - self.drone_trajectory_x = [] - self.drone_trajectory_y = [] - - # Данные для графика погрешности - self.error_times = [] - self.position_errors = [] - - # Данные для детекции - self.current_frame = None - self.keypoints = [] - self.matches = [] - - self._setup_window() - - def _setup_window(self): - """Настраивает общее окно с несколькими областями""" - plt.ion() - self.fig = plt.figure(figsize=(16, 10)) - self.fig.canvas.manager.window.title(self.window_title) - - # Открываем окно на полный экран - self.fig.canvas.manager.window.state('zoomed') - - # Создаем сетку 2x2 с разными размерами колонок - gs = self.fig.add_gridspec(2, 2, hspace=0.3, wspace=0.3, width_ratios=[1, 1]) - - # График погрешности позиции (левый верхний угол) - self.ax_error_plot = self.fig.add_subplot(gs[0, 0]) - self.ax_error_plot.set_title('Погрешность позиции от времени') - self.ax_error_plot.set_xlabel('Время (кадры)') - self.ax_error_plot.set_ylabel('Погрешность (метры)') - self.ax_error_plot.grid(True, alpha=0.3) - - # Глобальная карта (левый нижний угол) - self.ax_global_map = self.fig.add_subplot(gs[1, 0]) - self.ax_global_map.set_title('Global Map - Траектория полета беспилотника') - self.ax_global_map.set_xlabel('X координата') - self.ax_global_map.set_ylabel('Y координата') - self.ax_global_map.grid(True, alpha=0.3) - self.ax_global_map.axhline(y=0, color='k', linestyle='-', alpha=0.3) - self.ax_global_map.axvline(x=0, color='k', linestyle='-', alpha=0.3) - - # Детекция ключевых точек (правый верхний угол) - self.ax_detection = self.fig.add_subplot(gs[0, 1]) - self.ax_detection.set_title('Keypoint Detection') - self.ax_detection.axis('off') - - # Сопоставление точек (правый нижний угол) - self.ax_matches = self.fig.add_subplot(gs[1, 1]) - self.ax_matches.set_title('Feature Matching') - self.ax_matches.axis('off') - - # Настройки окна - self.fig.canvas.manager.window.attributes('-topmost', False) - - plt.tight_layout() - - def update_global_map(self, x: float, y: float, mode: SimMode): - """Обновляет глобальную карту""" - self.current_x = x - self.current_y = y - self.trajectory_x.append(x) - self.trajectory_y.append(y) - self.trajectory_modes.append(mode) - - self.ax_global_map.clear() - self.ax_global_map.set_title('Global Map - Траектория полета беспилотника') - self.ax_global_map.set_xlabel('X координата') - self.ax_global_map.set_ylabel('Y координата') - self.ax_global_map.grid(True, alpha=0.3) - self.ax_global_map.axhline(y=0, color='k', linestyle='-', alpha=0.3) - self.ax_global_map.axvline(x=0, color='k', linestyle='-', alpha=0.3) - - if len(self.trajectory_x) > 1: - # Разделяем траекторию по режимам - operator_indices = [i for i, m in enumerate(self.trajectory_modes) if m == SimMode.OPERATOR] - autonome_indices = operator_indices[-1:] + [i for i, m in enumerate(self.trajectory_modes) if m == SimMode.AUTONOME] - - # Рисуем траекторию оператора (синий цвет) - if len(operator_indices) > 1: - operator_x = [self.trajectory_x[i] for i in operator_indices] - operator_y = [self.trajectory_y[i] for i in operator_indices] - self.ax_global_map.plot(operator_x, operator_y, 'b-', linewidth=2, label='Режим оператора') - - # Рисуем траекторию автономного режима (красный цвет) - if len(autonome_indices) > 1: - autonome_x = [self.trajectory_x[i] for i in autonome_indices] - autonome_y = [self.trajectory_y[i] for i in autonome_indices] - self.ax_global_map.plot(autonome_x, autonome_y, 'r-', linewidth=2, label='Автономный режим') - - # Рисуем траекторию БПЛА (пунктирная линия, тонкая) - if len(self.drone_trajectory_x) > 1: - self.ax_global_map.plot(self.drone_trajectory_x, self.drone_trajectory_y, - 'g--', linewidth=1, alpha=0.7, label='Данные по одометрии') - - # Рисуем начальную точку (зеленая) - self.ax_global_map.plot(self.trajectory_x[0], self.trajectory_y[0], 'go', markersize=8, label='Начальная точка') - - # Рисуем текущую позицию (черная) - self.ax_global_map.plot(self.current_x, self.current_y, 'ko', markersize=6, label='Текущая позиция') - - # Рисуем целевую точку (0, 0) - желтая - self.ax_global_map.plot(0, 0, 'yo', markersize=8, label='Цель (0, 0)') - - self.ax_global_map.legend() - - # Автоматически масштабируем оси - if len(self.trajectory_x) > 0: - margin = 50 - x_min, x_max = min(self.trajectory_x), max(self.trajectory_x) - y_min, y_max = min(self.trajectory_y), max(self.trajectory_y) - - # Учитываем также траекторию БПЛА при масштабировании - if len(self.drone_trajectory_x) > 0: - x_min = min(x_min, min(self.drone_trajectory_x)) - x_max = max(x_max, max(self.drone_trajectory_x)) - y_min = min(y_min, min(self.drone_trajectory_y)) - y_max = max(y_max, max(self.drone_trajectory_y)) - - x_min = min(x_min, 0) - x_max = max(x_max, 0) - y_min = min(y_min, 0) - y_max = max(y_max, 0) - - self.ax_global_map.set_xlim(x_min - margin, x_max + margin) - self.ax_global_map.set_ylim(y_min - margin, y_max + margin) - - def update_drone_trajectory(self, drone_x: float, drone_y: float): - """Обновляет траекторию БПЛА (его собственное видение позиции)""" - self.drone_trajectory_x.append(drone_x) - self.drone_trajectory_y.append(drone_y) - - def update_error_plot(self, frame_count: int, drone_x: float, drone_y: float, true_x: float, true_y: float): - """Обновляет график погрешности позиции""" - # Вычисляем погрешность как расстояние между реальной и предполагаемой позицией - error = np.sqrt((drone_x - true_x)**2 + (drone_y - true_y)**2) - - self.error_times.append(frame_count) - self.position_errors.append(error) - - self.ax_error_plot.clear() - self.ax_error_plot.set_title('Погрешность позиции от времени') - self.ax_error_plot.set_xlabel('Время (кадры)') - self.ax_error_plot.set_ylabel('Погрешность (метры)') - self.ax_error_plot.grid(True, alpha=0.3) - - if len(self.error_times) > 1: - self.ax_error_plot.plot(self.error_times, self.position_errors, 'b-', linewidth=2) - - # Автоматически масштабируем оси - if len(self.position_errors) > 0: - margin = 0.1 - error_min, error_max = min(self.position_errors), max(self.position_errors) - if error_max > error_min: - self.ax_error_plot.set_ylim(0, error_max + margin) - else: - self.ax_error_plot.set_ylim(0, 1) - - def update_detection(self, image: np.ndarray, keypoints): - """Обновляет визуализацию детекции ключевых точек""" - self.current_frame = image.copy() - self.keypoints = keypoints - - self.ax_detection.clear() - self.ax_detection.set_title('Keypoint Detection') - - if image is not None: - # Конвертируем BGR в RGB для matplotlib - if len(image.shape) == 3 and image.shape[2] == 3: - image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) - else: - image_rgb = image - - self.ax_detection.imshow(image_rgb) - - # Рисуем ключевые точки - if keypoints: - kp_coords = np.array([kp.pt for kp in keypoints]) - self.ax_detection.scatter(kp_coords[:, 0], kp_coords[:, 1], - c='red', s=20, alpha=0.7, marker='o') - - self.ax_detection.axis('off') - - def update_matches(self, img1: np.ndarray, img2: np.ndarray, - kp1, kp2, matches, transformation_info=None): - """Обновляет визуализацию сопоставления точек""" - self.ax_matches.clear() - self.ax_matches.set_title('Feature Matching') - - if img1 is not None and img2 is not None and matches: - # Рисуем сопоставления - img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches, None, - flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) - - # Конвертируем BGR в RGB - if len(img_matches.shape) == 3 and img_matches.shape[2] == 3: - img_matches_rgb = cv2.cvtColor(img_matches, cv2.COLOR_BGR2RGB) - else: - img_matches_rgb = img_matches - - self.ax_matches.imshow(img_matches_rgb) - - # Добавляем информацию о трансформации - if transformation_info: - tx, ty = transformation_info['translation'] - angle = transformation_info['rotation'] - - info_text = f"Translation: ({tx:.2f}, {ty:.2f})" - info_text2 = f"Rotation: {angle:.2f} rad ({np.degrees(angle):.1f}°)" - - self.ax_matches.text(10, 30, info_text, fontsize=8, color='green', - bbox=dict(boxstyle="round,pad=0.3", facecolor="white", alpha=0.8)) - self.ax_matches.text(10, 90, info_text2, fontsize=8, color='green', - bbox=dict(boxstyle="round,pad=0.3", facecolor="white", alpha=0.8)) - - self.ax_matches.axis('off') - - def update_display(self): - """Обновляет отображение всех областей""" - self.fig.canvas.draw() - self.fig.canvas.flush_events() - plt.pause(0.01) - - def close(self): - """Закрывает окно""" - plt.close(self.fig) - - def show_final(self): - """Показывает финальное состояние окна""" - plt.ioff() - print("Симуляция завершена. Окно визуализации остается открытым для анализа.") - plt.pause(100000) - - def pause(self, duration: float): - plt.pause(duration)