Pion

class pion.pion.Pion(ip: str = '10.1.100.114', mavlink_port: int = 5656, connection_method: str = 'udpout', position: Annotated[ndarray[tuple[Any, ...], dtype[Any]], 6] | Annotated[ndarray[tuple[Any, ...], dtype[Any]], 4] | None = None, attitude: Annotated[ndarray[tuple[Any, ...], dtype[Any]], 6] | Annotated[ndarray[tuple[Any, ...], dtype[Any]], 4] | None = None, combine_system: int = 0, count_of_checking_points: int = 20, name: str = 'Pion', mass: float = 0.3, dt: float = 0.0, logger: bool = False, start_message_handler_from_init: bool = True, checking_components: bool = True, accuracy: float = 0.05, max_speed: float = 2.0)

Класс Pion предназначен для управления дроном через протокол MAVLink.

Он включает функционал для инициализации соединения, отправки команд дрону, обработки сообщений, и управления движением. Pion также поддерживает многопоточность для выполнения различных параллельных задач

__init__(ip: str = '10.1.100.114', mavlink_port: int = 5656, connection_method: str = 'udpout', position: Annotated[ndarray[tuple[Any, ...], dtype[Any]], 6] | Annotated[ndarray[tuple[Any, ...], dtype[Any]], 4] | None = None, attitude: Annotated[ndarray[tuple[Any, ...], dtype[Any]], 6] | Annotated[ndarray[tuple[Any, ...], dtype[Any]], 4] | None = None, combine_system: int = 0, count_of_checking_points: int = 20, name: str = 'Pion', mass: float = 0.3, dt: float = 0.0, logger: bool = False, start_message_handler_from_init: bool = True, checking_components: bool = True, accuracy: float = 0.05, max_speed: float = 2.0)

Инициализация класса Pion, устанавливающего MAVLink соединение с дроном и управляющего взаимодействием по передаче и приему данных.

Параметры:
  • ip (str) – IP-адрес для подключения к дрону

  • mavlink_port (int) – Порт для MAVLink соединения.

  • connection_method (str) – Метод соединения, например, „udpout“ для MAVLink.

  • position (Union[Array6, Array4, None]) – Начальное состояние дрона вида [x, y, z, vx, vy, vz] или [x, y, vx, vy]

  • attitude (Union[Array6, None]) – Начальное состояние дрона вида [roll, pitch, yaw, v_roll, v_pitch, v_yaw]

  • combine_system (int) – Системный код для комбинированной системы управления: 1, 2, 3

  • count_of_checking_points (int) – Количество последних точек, используемых для проверки достижения цели.

  • name (str) – Название экземпляра

  • mass (float) – Масса дрона

  • dt (float) – Период приема всех сообщений с дрона

  • logger (bool) – Включить логирование

  • start_message_handler_from_init (bool) – Старт message handler при создании объекта

  • checking_components (bool) – Параметр для проверки номеров компонентов. Отключается в сторонних симуляторах для избежание ошибок.

  • accuracy (float) – Максимальное отклонение от целевой позиции для функции goto_from_outside

  • max_speed (float) – Максимальная скорость дрона в режиме управления по скорости

arm() None

Включает двигатели

Результат:

None

disarm() None

Отключает двигатели

Результат:

None

goto(x: float, y: float, z: float, yaw: float, accuracy: float = 0.05, autopilot_controller=False, wait: bool = False) None

Метод достижения целевой позиции.

Параметры:
  • x (float) – координата по x

  • y (float) – координата по y

  • z (float) – координата по z

  • yaw (float) – координата по yaw

  • accuracy (Optional[float]) – Погрешность целевой точки

  • goto_to_autopilot (bool) – Использовать ли регулятор автопилота

  • wait (bool) – Блокировка основного потока если True, запуск процесса в отдельном потоке, если False

Результат:

None

Тип результата:

None

Note:

Если goto_to_autopilot False, то используется PID регулятор данного модуля

goto_from_outside(x: float, y: float, z: float, yaw: float, accuracy: float | None = None, wait: bool = False) None

Метод достижения целевой позиции.

Предупреждение

Данная функуция выполняется при запуске вычислений с внешнего устройства - ПК.

Функция берет целевую координату и вычисляет необходимые скорости для достижения целевой позиции, посылая их в управление t_speed.Для использования необходимо включить цикл Pion.v_while() для посылки вектора скорости дрону. Максимальная скорость обрезается np.clip по полю self.max_speed

Параметры:
  • x (float) – координата по x

  • y (float) – координата по y

  • z (float) – координата по z

  • yaw (float) – координата по yaw

  • accuracy (Optional[float]) – Погрешность целевой точки

  • wait (bool) – Блокировка основного потока если True, запуск процесса в отдельном потоке, если False

Результат:

None

goto_process(x: float, y: float, z: float, yaw: float, accuracy: float | None = None, yaw_off: bool = True) None

Метод берет целевую координату и вычисляет необходимые скорости для достижения целевой позиции, посылая их в управление t_speed.

Для использования необходимо включить цикл Pion.v_while() для посылки вектора скорости дрону. Максимальная скорость обрезается np.clip по полю self.max_speed

Параметры:
  • x (float) – координата по x

  • y (float) – координата по y

  • z (float) – координата по z

  • yaw (float) – координата по yaw

  • accuracy (Optional[float]) – Погрешность целевой точки

  • yaw_off – достижение yaw

type yaw_off: bool :return: None

goto_to_autopilot(x: float, y: float, z: float, yaw: float) None

Полет к указанной точке в текущей системе координат навигации.

Предупреждение

Данная функуция выполняется при запуске вычислений с дрона.

Примечание

Координаты задаются в ENU (East-North-Up) системе координат, но будут автоматически преобразованы в NED (North-East-Down).

Параметры:
  • x (float | int) – Координата по оси X в ENU (East-North-Up) системе координат.

  • y (float | int) – Координата по оси Y в ENU (East-North-Up) системе координат.

  • z (float | int) – Координата по оси Z (высота) в ENU (East-North-Up) системе координат.

  • yaw (float | int, Optional) – Угол курса, на который должен повернуться дрон. По умолчанию 0.

Результат:

None

goto_yaw(yaw: float = 0.0, accuracy: float = 0.05) None

Метод берет целевую координату по yaw и вычисляет необходимые скорости для достижения целевой позиции, посылая их в управление t_speed.

Для использования необходимо включить цикл Pion.v_while() для посылки вектора скорости дрону. Максимальная скорость обрезается np.clip по полю self.max_speed

Параметры:
  • yaw (float) – координата по yaw (радианы)

  • accuracy (float) – Погрешность целевой точки

Результат:

None

land() None

Посадка дрона

Результат:

None

led_control(led_id=255, r=0, g=0, b=0) None

Управление светодиодами на дроне

Параметры:
  • led_id (int) – Идентификатор светодиода, который нужно управлять. Допустимые значения: 0, 1, 2, 3, 255. 255 — для управления всеми светодиодами одновременно.

  • r (int) – Значение интенсивности красного канала (от 0 до 255).

  • g (int) – Значение интенсивности зеленого канала (от 0 до 255).

  • b (int) – Значение интенсивности синего канала (от 0 до 255).

Исключение:

ValueError – Если переданы недопустимые значения для параметра led_id или для значений r, g, b.

Результат:

None

led_custom(mode: int = 1, timer: int = 0, color1: Tuple[int, int, int] = (0, 0, 0), color2: Tuple[int, int, int] = (0, 0, 0)) None

Управляет светодиодами устройства с Raspberry Pi, задавая два цвета и режим работы.

Цвета передаются в виде кортежей (R, G, B), где каждое значение находится в диапазоне [0, 255]. Цветовые параметры кодируются в 24-битные числа и передаются в команду MAVLink.

Параметры:
  • mode (int) – Режим работы светодиодов

  • timer (int) – Время работы режима (например, длительность мигания)

  • color1 (Tuple[int, int, int]) – Первый цвет в формате (R, G, B)

  • color2 (Tuple[int, int, int]) – Второй цвет в формате (R, G, B)

Результат:

None

point_tracking() None

Метод слежения за точкой. Целевая точка меняется в поле self.target_point.

Результат:

None

Тип результата:

None

poweroff() None

Метод отправляет команду на выключение Raspberry Pi.

Результат:

None

rc_while() None

Метод задает цикл while на отправку управляющих сигналов rc каналов с периодом period_send_rc

Результат:

None

reboot_board() None

Метод для перезагрузки дрона

Результат:

None

send_rc_channels(channel_1: int = 255, channel_2: int = 255, channel_3: int = 255, channel_4: int = 255) None

Метод отправляет управляющие сигналы RC-каналов дрону. Отсылать необходимо в цикле.

Параметры:
  • channel_1 (int) – высота (throttle)

  • channel_2 (int) – угол курса (yaw)

  • channel_3 (int) – движение влево/вправо (roll)

  • channel_4 (int) – движение вперед/назад (pitch)

Результат:

None

send_speed(vx: float, vy: float, vz: float, yaw_rate: float) None

Метод задает вектор скорости дрону. Отсылать необходимо в цикле.

Параметры:
  • vx (float) – скорость по оси x (м/с)

  • vy (float) – скорость по оси y (м/с)

  • vz (float) – скорость по оси z (м/с)

  • yaw_rate (float) – скорость поворота по оси z (рад/с)

Результат:

None

set_rc() None

Создает поток, который вызывает функцию Pion.rc_while() для параллельной отправки управляющего сигнала rc channels

Результат:

None

set_v() None

Создает поток, который вызывает функцию Pion.v_while() для параллельной отправки вектора скорости

Результат:

None

sland(hight_of_disarm: float = 0.3) None

Умная посадка дрона, выключает двигатели автоматически, если высота меньше hight_of_disarm

НЕ ПРОТЕСТИРОВАНА, НЕ ИСПОЛЬЗОВАТЬ!

Параметры:

hight_of_disarm (float) – высота выключения двигателей

Результат:

None

property speed: Annotated[ndarray[tuple[Any, ...], dtype[Any]], 2] | Annotated[ndarray[tuple[Any, ...], dtype[Any]], 3]

Метод вернет скорость [vx, vy, vz]

Результат:

Union[Array2, Array3]

stakeoff(hight: float = 1.5) None

Умный взлет, блокрует основной поток, пока не взлетит

Параметры:

hight (float) – Высота взлета

Результат:

None

start_track_point() None

Старт режима слежения за точкой дроном. Целевая точка меняется в поле self.target_point

Результат:

None

Тип результата:

None

stop() None

Останавливает все потоки внутри приложения

Результат:

None

takeoff() None

Взлет дрона

Результат:

None

trajectory_tracking(path_to_traj_file: str = './data.npy')

Функция обрабатывает файлы с траекторией полета дрона следующих форматов:

4: [x, y, z, time] 5: [x, y, z, yaw, time] 17: [x, y, z, vx, vy, vz, roll, pitch, yaw, v_roll, v_pitch, v_yaw, v_xc, v_yc, v_zc, v_yaw_c, t]

Параметры:

path_to_traj_file (str) – npy файл с траекторией размера nx4/5/17

trajectory_tracking_process(trajectory: ndarray[tuple[Any, ...], dtype[_ScalarT]]) None

Запуск процесса слежения за траекторией

Параметры:

trajectory – траектория размером nx5, вида [x, y, z, yaw, time]

v_while() None

Метод задает цикл while на отправку вектора скорости в body с периодом period_send_v

Результат:

None

wait_point(target_point: List | Annotated[ndarray[tuple[Any, ...], dtype[Any]], 3], accuracy: float = 0.05) None

Функция ожидания достижения таргетной точки

Блокирует ваш поток циклом, пока вы не долетите до target_point

Параметры:
  • target_point (Union[List, Array3]) – Целевая точка

  • accuracy (float) – точность atol

Результат:

None

Тип результата:

None