Основные библиотеки Python, используемые в ровере
На этой странице представлены основные использующиеся библиотеке в коде под ровер "Контакт". Больше библиотек прописано в описаниях кодов. Рекомендуется для проверки кодов на этой странице создать отдельную папку.

ПРИМЕЧАНИЕ: Библиотеки, которые вы используете в VS Code, необходимо так же докачивать на Orange Pi (подробнее об установке Python и pip смотрите в разделе "Работа с Orange Pi" в статьях "Установка Python 3.10" и "Установка pip"). Команды установки библиотек в VS Code и в Orange Pi не отличаются.
asyncio:
Описание:
asyncioиспользуется в коде ровера для написания асинхронных программ, используя корутины, задачи и событийные циклы.Особенности:
Позволяет выполнять несколько задач ровера одновременно, не блокируя основной поток выполнения.
Используется для асинхронного ввода-вывода, что повышает производительность при работе с сетью.
Роль в проекте:
Асинхронная обработка соединений с клиентами через сокеты.
Асинхронное чтение файлов с помощью
aiofiles.Управление событиями и задачами в рамках основного цикла событий.
Пример кода с использование библиотеки asyncio:
Описание кода:
Функция move Имитирует движение ровера, выводя сообщения о начале, продолжении и остановке движения с 2-секундными интервалами.
Функция turn Имитирует поворот ровера в заданном направлении (налево или направо), выводя сообщения о начале и завершении поворота с 2-секундными интервалами.
Функция blink_lights Имитирует мигание фар ровера, выводя сообщение о мигании каждую секунду в течение 5 секунд.
Функция main: Функция
mainиспользуетasyncio.gatherдля одновременного запуска всех трех асинхронных задач (move(),turn("налево"),blink_lights()).Функцияmainиспользуетasyncio.gatherдля одновременного запуска всех трех асинхронных задач (move(),turn("налево"),blink_lights()).asyncio.run(main()) - запуск кода
Итоговый вывод:
Процесс запуска кода:
Откройте VS Code:
Запустите Visual Studio Code на вашем компьютере.

Первое окно при запуске Visual Studio Code Откройте папку с проектом:
В VS Code выберите
File->Open Folder...и выберите папку, которую вы создали.

Выбор действия во вкладе File 
Вот так выглядит окно иерархии сейчас Создайте файл с кодом:
Cоздайте новый файл с расширением
.py, назовите егоasynciolib.py, и вставьте в него предоставленный код.


ПРИМЕЧАНИЕ: Когда в списке действий в иерархии вы нажимаете New File, изначально создается внутренняя папка, где в дальнейшем будут храниться наши файлы. Назовите ее как хотите и после, наведя курсор на папку, создайте файл таким же образом. Так же не забывайте в конце названия файла прописывать .py - без типа файла VS Code автоматически создает txt файл.
Установите необходимые зависимости:
В данном случае библиотека предустановлена, так что в окно программирования вставляем наш код

Сохранение файла: перед запуском кода всегда сохраняйте свой файл комбинацией
ctrl + Sили черезfile - save.Запустите ваш код: в правом верхнем углу есть значок запуска кода. Нажав на него, у вас автоматически вылезет терминал, в который и будет выводиться результат. ВАЖНО: когда вы запустите код впервые, у вас попросят выбрать версию


contextlib:
Описание:
contextlibиспользуется в ровере для работы с контекстными менеджерами.Особенности:
Облегчает создание и использование контекстных менеджеров.
Содержит полезные утилиты, такие как
suppress, для обработки исключений.
Роль в проекте:
Управление контекстами и исключениями при выполнении задач, что позволяет обеспечить безопасное выполнение кода.
Пример кода с работой библиотеки contextlib:
Описание кода:
@contextlib.contextmanager - Создание контекстного менеджера
Функция open_file:
Функция open_file принимает два аргумента: filename (имя файла) и mode(режим открытия файла).
В блоке try, файл открывается и выводится сообщение о том, что файл открыт.
Ключевое слово yield используется для передачи управления обратно в блок with, где файл будет использоваться.
В блоке finally, файл закрывается и выводится сообщение о том, что файл закрыт.
Использование контекстного менеджера: В этом блоке with, файл example.txt открывается в режиме записи ('w'), и в него записывается строка 'Привет, ровер Контакт!'.
Чтение данных из файла: В этом блоке with, файл example.txt открывается в режиме чтения ('r'), и данные из файла считываются и выводятся на экран.
Итоговый вывод:
Процесс запуска кода:
Откройте VS Code:
при открытии VS Code повторно открывается ваша папка. Если он у вас уже открыт, то переходите к следующему пункту.

Создайте новый файл .py:
создайте в окне иерархии новый .py файл и назовите его my_contextlib.py
ПРИМЕЧАНИЕ: Если назвать файл contextlib.py, python будет ругаться на несоответствие файловой конфигурации!

Вставьте ваш код в окно программирования:

Обязательно сохраните файл комбинацией
ctrl + Sили черезfile - save.Скачайте необходимые зависимости: в данном случае придется докачать библиотеку, так как она не идет стандартом в Python. Установка идет следующим образом:\
Откройте терминал: если терминал у вас не открыт, перейдите в
Terminal - New terminal. Так же можно запустить через горячие клавишиCtrl + Shift + `
Запуск терминала Пропишите в консоль
pip install contextlib2и нажмите Enter, у вас запустится загрузка библиотеки

Запустите код:

В консоль выведется следующая информация:

Так же в иерархии добавится файл example.txt, содержащий в себе текст, который мы передали ему.

socket:
Описание:
socketиспользуется в ровере для работы с сетевыми соединениями.Особенности:
Обеспечивает низкоуровневый интерфейс для работы с сетевыми сокетами.
Роль в проекте:
Создание серверных и клиентских сокетов для обмена данными с ровером через локальную сеть.
Пример кода с использованием библиотеки socket:
Код сервера:
Описание кода сервера:
Создает сокет с использованием
socket.AF_INET(для IPv4) иsocket.SOCK_STREAM(для TCP).Привязывает сокет к адресу
localhostи порту10000.Слушает входящие соединения с помощью метода
listen.Принимает соединение с помощью метода
accept.Получает данные от клиента и отправляет обратно ответ.
Закрывает соединение после обработки.
Код клиента:
Описание кода клиента:
Создает сокет с использованием
socket.AF_INET(для IPv4) иsocket.SOCK_STREAM(для TCP).Подключается к серверу по адресу
localhostи порту10000.Отправляет сообщение серверу.
Получает ответ от сервера и выводит его на экран.
Закрывает соединение после обработки.
Как запустить:
Добавьте код сервера и клиента в Visual Studio Code
Запустите код сервера
Запустите код клиента
Если все правильно запущено, в консоль сервера начнут выводиться следующие данные:
в консоль клиента:
Процесс запуска кода:
Создайте два файла: server.py и client.py:

Вставьте соответвующие кода в нужные файлы:
Файл клиент:

Файл сервер:

Запустите код сервера: в данном случае нет необходимости качать дополнительные библиотеки, поэтому просто запускаем код сервера, в консоль выведется следующее:

Запустите код клиента: после запуска кода сервера нужно подключить клиент. Для этого перейдите в файл client.py и запустите код с помощью режима откладки:

Осмотрите консоли клиента и сервера: в клиент было отправлено сообщение "Получено сообщение от сервера":

В сервер было отправлено следующее выражение:

ПРИМЕЧАНИЕ: Ошибки, которые вывелись в консоль - это более подробное описания процесса закрытия соединения с клиентом, так что не пугайтесь этих ошибок!
threading:
Описание:
threadingиспользуется в ровере для работы с потоками.Особенности:
Позволяет выполнять задачи параллельно в разных потоках.
Поддерживает блокировки и события для синхронизации потоков.
Роль в проекте:
Управление потоками для выполнения фоновых задач, таких как обработка видеопотока.
пример кода с использованием библиотеки threading:
Описание кода:
Функции
moveиblink_lights:move: Имитирует движение ровера, выводя сообщения о начале, продолжении и остановке движения. Используетtime.sleepдля задержек.blink_lights: Имитирует мигание фар ровера, выводя сообщения о мигании фар и используяtime.sleepдля задержек.
Создание потоков:
move_threadиblink_lights_thread: Создаются объекты потоков, которые будут выполнять функцииmoveиblink_lightsсоответственно.
Запуск потоков:
move_thread.start()иblink_lights_thread.start(): Запускают потоки, чтобы они начали выполнение своих функций параллельно.
Ожидание завершения потоков:
move_thread.join()иblink_lights_thread.join(): Обеспечивают ожидание завершения выполнения потоков, чтобы основной поток не завершился раньше, чем потоки выполнят свои задачи.
Сообщение о завершении:
print("Все задачи завершены."): Выводит сообщение после того, как все потоки завершили свою работу.
Процесс запуска кода:
Создайте файл .py и назовите его threadinglib.py:

Вставьте код в окно программирования:

Запустите код: в данном случае устанавливать ничего не нужно. Просто запускаем код и смотрим на результат:

aiofiles:
Описание:
aiofilesиспользуется в ровере для асинхронной работы с файловой системой.Особенности:
Обеспечивает асинхронное чтение и запись файлов.
Поддерживает интерфейс, аналогичный стандартной библиотеке
open.
Роль в проекте:
Асинхронное чтение файлов, содержащих данные карты ArUco.
Пример кода с использованием библиотеки aiofiles:
Описание кода:
Функция
log_data:Принимает строку
dataи асинхронно записывает её в файлrover_log.txt.Использует
aiofiles.openдля асинхронного открытия файла в режиме добавления (mode='a').await file.write(data + '\n')асинхронно записывает данные в файл и добавляет перенос строки.Выводит сообщение о записанных данных.
Функция
main:Создает список задач
tasks, каждая из которых представляет собой вызов функцииlog_dataс различными сообщениями.Использует
asyncio.gatherдля одновременного выполнения всех задач.
Запуск событийного цикла:
asyncio.run(main())запускает асинхронную функциюmainи управляет событийным циклом.
Обратите внимание: в данном коде так же используется библиотека asyncio! Она описана выше!
Итоговый вывод:
Процесс запуска кода:
Создайте файл aiofiles.py:

Пока что файл подсвечен желтым, он подсвечивается как только вы добавляете код в файл. Это потому, что библиотека не установлена. Если вас смущает то, что после установки библиотеки файл до сих пор помечен желтым, можете перезагрузить Visual Studio Code и проблема решится.
Добавьте код в файл:

Установите необходимые зависимости: в данном случае библиотеку aiofiles надо докачать. Открываем терминал и прописываем туда следующую команду:
pip install aiofiles

Запустите код: после скачивания библиотеки можно приступать к тестированию кода. Запустите кода и посмотрите, что происходит:

В консоль выводится информация о записанных данных. Так же в иерархии создался новый текстовый файл rover_log.txt

logging:
Описание:
loggingиспользуется в ровере для ведения логов.Особенности:
Обеспечивает гибкую систему для создания логов различных уровней (информация, предупреждения, ошибки и т.д.).
Поддерживает вывод логов в консоль, файлы и другие обработчики.
Роль в проекте:
Ведение логов для отслеживания работы программы и отладки.
Пример кода с использованием библиотеки logging:
Описание кода:
Настройка логгера:
logging.basicConfigнастраивает базовую конфигурацию логгера.filename='rover_log.log'указывает, что логи будут записываться в файлrover_log.log.level=logging.DEBUGустанавливает минимальный уровень логирования наDEBUG, что означает, что все сообщения отDEBUGи выше будут записаны.format='%(asctime)s - %(levelname)s - %(message)s'задает формат записи логов, включая время, уровень сообщения и само сообщение.datefmt='%Y-%m-%d %H:%M:%S'задает формат времени.
Создание логгера:
logger = logging.getLogger('rover_logger')создает экземпляр логгера с именемrover_logger.
Примеры логирования сообщений:
logger.debug,logger.info,logger.warning,logger.error,logger.criticalиспользуются для логирования сообщений различных уровней важности.Вызов функции для логирования активности ровера:
log_rover_activity()вызывает функцию, которая логирует различные сообщения от ровера.
Итоговый вывод:
В консоль данных не выводится. Вместо этого данные записываются в лог
Процесс запуска кода:
Создайте файл с названием logginglib.py:

Добавьте код в окно программирования:

Запустите код: здесь не нужно докачивать библиотеки, поэтому просто запускаем код:

В консоль ничего не вывелось, однако в иерархии добавился файл rover_log.log:

queue:
Описание:
queueиспользуется в ровере для работы с очередями.Особенности:
Поддерживает различные типы очередей (FIFO, LIFO, приоритетные).
Безопасна для использования в многопоточных программах.
Роль в проекте:
Хранение кадров видеопотока для дальнейшей обработки.
Пример кода с использованием библиотеки logging:
Описание кода:
Создание очереди:
message_queue = queue.Queue()создает очередь для хранения сообщений.
Функция для добавления сообщений в очередь:
producerфункция добавляет 10 сообщений в очередь с интервалом в 1 секунду.
Функция для обработки сообщений из очереди:
consumerфункция бесконечно обрабатывает сообщения из очереди, пока не получит сигнал о завершении (None).
Создание и запуск потоков:
producer_threadиconsumer_threadсоздаются и запускаются для параллельной работы.
Ожидание завершения работы производителя:
producer_thread.join()ожидает завершения работы потока производителя.
Добавление сигнала о завершении для потребителя:
message_queue.put(None)добавляет сигнал о завершении для потребителя.
Ожидание завершения работы потребителя:
consumer_thread.join()ожидает завершения работы потока потребителя.
Итоговый вывод:
Процесс запуска кода:
Создайте файл queuelib.py:

Добавьте в окно программирования код:

Запустите код: в данном случае ничего устанавливать не нужно, поэтому просто запускаем код:

В итоге наше окно иерархии выглядит так, в нем есть различные файлы и это далеко не всё, что можно сделать с этими библиотеками!

Последнее обновление