ФАЙЛ «FRENET_FRAME.PY»
Файл «Frenet_frame.py» представляет собой основной скрипт для запуска ровера и управления его движением. Он содержит функции для планирования траектории, управления ровером и взаимодействия с внешними системами.
ИНИЦИАЛИЗАЦИЯ БИБЛИОТЕК
asyncio
: библиотека для работы с асинхронными операциями в Python.json
: библиотека для работы с форматом JSON.socket
: библиотека для работы с сетевыми сокетами.threading
: библиотека для работы с многопоточностью.tracemalloc
: библиотека для отслеживания использования памяти.math
: библиотека для математических операций.sys
: библиотека для работы с системными функциями.pathlib
: библиотека для работы с файловыми путями.numpy
: библиотека для работы с числами и массивами.matplotlib
: библиотека для создания графиков и визуализации данных.plotly
: библиотека для создания интерактивных графиков и визуализации данных.video_processing
: отдельный код для работы с видеопотоком (см. раздел "Нейронная сеть и машинное зрение" -> Описание программы машинного зрения -> ФАЙЛ "VIDEO_PROCESSING")Realsense
: класс, хранящийся в файле video_processing.tornado
: библиотека для создания веб-серверов и работы с веб-сокетами.quintic_polynomials_planner
: отдельный код для работы с методом навигации (см. раздел "Описание навигационной части программы (одномерное пространство и математическое вычисление пути)" -> Навигация методом математических вычислений на графике -> ФАЙЛ "QUINTIC_POLYNOMIALS_PLANNER.PY")cubic_spline_planner
: отдельный код для работы с методом навигации (см. раздел "Описание навигационной части программы (одномерное пространство и математическое вычисление пути)" -> Навигация в одномерном пространстве (график) -> ФАЙЛ «CUBIC_SPLINE_PLANNER.PY»)
ИНИЦИАЛИЗАЦИЯ КЛАССА
Атрибуты:
a0 (float): Свободный член полинома, начальное положение.
a1 (float): Коэффициент при первой степени t, начальная скорость.
a2 (float): Коэффициент при второй степени t, половина начального ускорения.
a3 (float): Коэффициент при третьей степени t.
a4 (float): Коэффициент при четвертой степени t.
Этот класс представляет собой квартический полином, используемый для планирования траектории ровера. При инициализации класса передаются начальные условия: положение, скорость и ускорение.
МЕТОД ПОСТРОЕНИЯ ТРАЕКТОРИИ
Этот метод генерирует пути в координатах Френе на основе заданных начальных и конечных условий. Он используется для планирования траектории ровера.
МЕТОД ПРЕОБРАЗОВАНИЯ ТРАЕКТОРИИ
Параметры:
- fplist (list of FrenetPath objects): Список объектов путей в системе координат Френе.
- csp (CubicSpline2D object): Объект кубического сплайна для пути.
Этот метод преобразует пути из координат Френе в глобальные координаты. Он используется для преобразования траектории ровера в глобальные координаты.
МЕТОД ПРОВЕРКИ СТОЛКНОВЕНИЯ
Параметры:
- fp (FrenetPath object): Объект пути в системе координат Френе.
- ob (numpy.ndarray): Массив препятствий, где каждое препятствие представлено координатами (x, y).
Этот метод проверяет столкновение траектории с препятствиями. Он используется для проверки безопасности траектории ровера.
МЕТОД ПРОВЕРКИ ПУТЕЙ И ОТСУТСТВИЕ ПРЕПЯТСТВИЙ
Параметры:
- fplist (list of FrenetPath objects): Список объектов путей в системе координат Френе.
- ob (list of tuples): Список препятствий в формате (x, y).
Функция итерируется по каждому пути в списке и проверяет его на соответствие максимальной скорости и кривизне.
МЕТОД ПЛАНИРОВАНИЯ ТРАЕКТОРИИ
Параметры:
- csp (CubicSpline2D object): Объект кубического сплайна, представляющий путь.
- s0 (float): Начальное значение длины дуги на сплайне.
- c_speed (float): Текущая скорость.
- c_accel (float): Текущее ускорение.
- c_d (float): Текущее боковое смещение.
- c_d_d (float): Текущая производная бокового смещения.
- c_d_dd (float): Текущая вторая производная бокового смещения.
- ob (list of tuples): Список препятствий в формате (x, y).
Этот метод планирует оптимальную траекторию в системе координат Френе. Он используется для планирования траектории ровера.
МЕТОД ГЕНЕРАЦИИ ЦЕЛЕВОГО КУРСА
Параметры:
- x (list): Список X-координат.
- y (list): Список Y-координат.
Этот метод генерирует целевой курс с использованием кубического сплайна. Он используется для генерации целевого курса для ровера.
МЕТОД ВЫЧИСЛЕНИЯ УГЛА
Этот метод вычисляет угол между начальной и конечной точками. Он используется для вычисления угла между начальной и конечной точками траектории ровера.
МЕТОД ОБРАБОТКИ ДАННЫХ О МАССЕ
Параметры:
- xs (float): X-координата начальной точки.
- ys (float): Y-координата начальной точки.
- tar (float): Целевой угол в градусах.
Функция пытается получить данные с помощью метода `give_mass`. В случае ошибки
используется заранее определённый массив данных. Затем функция ищет точки,
у которых расстояние до некоторой цели приблизительно равно 0.5 (с допуском 0.2).
МЕТОД ВЫЧИСЛЕНИЯ УГЛА МЕЖДУ НАЧАЛЬНОЙ И КОНЕЧНОЙ ТОЧКАМИ
Параметры:
- x (float): X-координата начальной точки.
- y (float): Y-координата начальной точки.
- dxs (float): X-координата конечной точки.
- dys (float): Y-координата конечной точки.
Этот метод вычисляет угол между начальной и конечной точками. Он используется для вычисления угла между начальной и конечной точками траектории ровера.
МЕТОД ЗАПУСКА РОВЕРА
Параметры:
- x (float): Начальная координата X объекта.
- y (float): Начальная координата Y объекта.
- dx (float): Конечная координата X объекта.
- dy (float): Конечная координата Y объекта.
- con (object): Объект управления, который может быть использован для отправки команд управления.
Функция `main` инициализирует начальное состояние объекта и планирует траекторию от начальной до конечной точки.
Она учитывает статические препятствия и использует метод оптимального планирования Френе для генерации пути.
В процессе планирования функция может адаптировать траекторию, если обнаруживаются новые препятствия.
Результаты планирования визуализируются с помощью библиотеки Plotly, если установлен флаг `show_animation`.
Функция также поддерживает отправку команд управления через объект `con`, если он предоставлен.
КЛАСС ЗАПУСКА С ВНЕШНЕГО ФАЙЛА
Процесс подготовки кода:
Создайте файл с названием Frenet_frame.py
Поэтапно копируйте код в файл:
Установите необходимые библиотеки: в данном случае в Python не предустановлены следующие библиотеки: matplotlib, numpy, plotly, tornado. Если эти библиотеки у вас не установлены, следуйте следующим шагам:
Откройте терминал в Visual Studio Code (Terminal -> New Terminal или комбинацией Ctrl + Shift + `)
Пропишите в терминал данные команды (записывать и запускать поочередно!): pip install numpy; pip install matplotlib; pip install tornado
Запускать код нет смысла, так как он является алгоритмизацией движения ровера.
Last updated