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