- asyncio: Модуль для асинхронного программирования.
- contextlib: Модуль для управления контекстными менеджерами.
- socket: Модуль для сетевого взаимодействия.
- threading: Модуль для работы с потоками.
- aiofiles: Библиотека для асинхронной работы с файлами.
- logging: Модуль для ведения логов.
- Server_Controller: Импортирует классы Attachments и Site_run для управления внешними устройствами и веб-сервером.
- queue.SimpleQueue: Простая очередь для межпоточной коммуникации.
- Contact_state: Импортирует класс ContactState для представления состояния ровера.
- plotly.graph_objs: Библиотека для создания интерактивных графиков и визуализаций.
- Contact_controller: Импортирует классы SimulationController и RoverController для управления ровером.
- video_processing: Импортирует классы Connect_aruco и Connect_yolo для обработки видео.
КОНФИГУРАЦИЯ ПОДКЛЮЧЕНИЯ
Этот блок кода задает настройки подключения, такие как IP-адреса, порты и токен аутентификации. Обратите внимание! Ваши данные могут отличаться от данных в примере, пропишите правильные данные.
СОЗДАНИЕ СОБЫТИЙ И ОЧЕРЕДЕЙ
Здесь создаются объекты для событий, очередей и начальное состояние ровера. Эти объекты помогают координировать работу различных частей программы.
ФУНКЦИЯ ЗАГРУЗКИ КАРТЫ ARUCO
Эта асинхронная функция загружает карту маркеров ArUco из файла. Она считывает файл построчно и извлекает идентификаторы маркеров и их координаты.
ОСНОВНАЯ ФУНКЦИЯ
Эта функция координирует работу всех компонентов системы, включая загрузку карты ArUco, управление состоянием ровера, обработку видео, обнаружение маркеров и объектов, а также управление ровером или симулятором. Функция включает опциональное использование симулятора и управления светом на ровере.
ЗАПУСК ПРОГРАММЫ
Этот блок кода запускает основную функцию main и обеспечивает корректное завершение работы программы, включая остановку потоков и закрытие событий.
Процесс подготовки кода:
Создайте файл с названием main.py
Файл "main.py" в иерархии
Поэтапно копируйте код в свой файл
Окно программирования файла main.py. Часть 1
Окно программирования файла main.py. Часть 2
Окно программирования файла main.py. Часть 3
Окно программирования файла main.py. Часть 4
Окно программирования файла main.py. Часть 5
Установите необходимые библиотеки: в данном случае не предустановлены библиотеки: aiofiles и plotly. В случае, если они у вас не установлены, выполните следующие действия:
Откройте терминал VS Code (Terminal -> New Termial или комбинацией Ctrl + Shift + `)
В терминале поочередно введите и запустите следующие команды: pip install aiofiles; pip install plotly
Так же в инициализации библиотек имеются такие библиотеки, как: Server_controller, Contact_state, Contact_controller и video_processing. Это не библиотеки файлов, это файлы, которые вызываются в main. Для того, чтобы код работал корректно, в окне иерархии должны быть эти файлы.
event = asyncio.new_event_loop()
asyncio.set_event_loop(event)
video_frame_queue = SimpleQueue() Очередь для кадров видео
robot_state = ContactState(0, 0, 0) Начальное состояние робота
sayt_start = asyncio.Event()
sayt_stop = asyncio.Event() Событие для остановки видеопотока
thread_running = threading.Event()
thread_running.set()
async def load_aruco_map(filename):
aruco_map = {}
async with aiofiles.open(filename, mode='r', encoding='utf-8') as file:
async for line in file:
parts = line.strip().split()
if len(parts) == 8:
marker_id = int(parts[0])
x = float(parts[2])
y = float(parts[3])
aruco_map[marker_id] = {'x': x, 'y': y}
return aruco_map