ФАЙЛ «FRENET_FRAME.PY»

Файл «Frenet_frame.py» представляет собой основной скрипт для запуска ровера и управления его движением. Он содержит функции для планирования траектории, управления ровером и взаимодействия с внешними системами.

ИНИЦИАЛИЗАЦИЯ БИБЛИОТЕК

import asyncio
import contextlib
import json
import socket
import threading
import tracemalloc
from matplotlib import markers
from matplotlib.transforms import Affine2D
import numpy as np
import copy
import math
import sys
import pathlib
from video_processing import Realsense
sys.path.append(str(pathlib.Path(__file__).parent.parent))
import plotly.graph_objs as go
from plotly.utils import PlotlyJSONEncoder
import tornado.ioloop
import tornado.web
import tornado.websocket
import json

from quintic_polynomials_planner import \
    QuinticPolynomial
import cubic_spline_planner
  • 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`, если он предоставлен.

КЛАСС ЗАПУСКА С ВНЕШНЕГО ФАЙЛА

Процесс подготовки кода:

  1. Создайте файл с названием Frenet_frame.py

Файл Frenet_frame.py в окне иерархии
  1. Поэтапно копируйте код в файл:

Окно программирования в файле frenet_frame.py. Часть 1
Окно программирования в файле frenet_frame.py. Часть 2
Окно программирования в файле frenet_frame.py. Часть 3
Окно программирования в файле frenet_frame.py. Часть 4
Окно программирования в файле frenet_frame.py. Часть 5
Окно программирования в файле frenet_frame.py. Часть 6
Окно программирования в файле frenet_frame.py. Часть 7
Окно программирования в файле frenet_frame.py. Часть 8
Окно программирования в файле frenet_frame.py. Часть 9
Окно программирования в файле frenet_frame.py. Часть 10
Окно программирования в файле frenet_frame.py. Часть 11
Окно программирования в файле frenet_frame.py. Часть 12
Окно программирования в файле frenet_frame.py. Часть 13
Окно программирования в файле frenet_frame.py. Часть 14
Окно программирования в файле frenet_frame.py. Часть 15
Окно программирования в файле frenet_frame.py. Часть 16
Окно программирования в файле frenet_frame.py. Часть 17
Окно программирования в файле frenet_frame.py. Часть 18
  1. Установите необходимые библиотеки: в данном случае в Python не предустановлены следующие библиотеки: matplotlib, numpy, plotly, tornado. Если эти библиотеки у вас не установлены, следуйте следующим шагам:

    1. Откройте терминал в Visual Studio Code (Terminal -> New Terminal или комбинацией Ctrl + Shift + `)

    2. Пропишите в терминал данные команды (записывать и запускать поочередно!): pip install numpy; pip install matplotlib; pip install tornado

    Запускать код нет смысла, так как он является алгоритмизацией движения ровера.

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