Работа с API
Установка библиотеки
1. Проверка наличия Git
Перед началом работы убедитесь, что Git установлен на вашем компьютере.
Откройте командную строку (cmd) или PowerShell и выполните команду: git --version при установленном Git вы увидите версию.
В случае если Git не найден, установите его с официального сайта, обязательно перезагрузите компьютер после установки
2. Установка библиотек через pip (рекомендуется)
Библиотеку можно установить напрямую из GitHub
pip3 install git+https://github.com/EurusAero/eurus_edu.git#subdirectory=libs/python/EurusEdu
3. Установка библиотек через клонирование репозитория
Склонируйте репозиторий
git clone https://github.com/EurusAero/eurus_edu.gitУстановите библиотеку из локальной директории
pip3 install ./eurus_edu/libs/python/EurusEdu/
Создание объектов дрона и камеры
drone = EurusControl(ip, drone_port)
camera = EurusCamera(ip, camera_port)
Входные параметры:
ip: ip дронаport: int портdo_log: bool true для переключения логированияlog_file: str файл для логированияsocket_timeout_time: Максимальное время ожидания подключения в секундах. Если соединение не установлено за указанное время, генерируется исключениеauto_connect: Если True, подключение к дрону выполняется автоматически при создании объекта. Если False, необходимо самостоятельно вызвать метод подключения
Подключение:
drone.connect()
camera.connect()
Методы дрона
connect
Подключиться к дрону / камере
Пример:
drone.connect()
camera.connect()
disconnect
Отключиться от дрона / камеры
Пример:
drone.connect()
camera.connect()
arm
Включить моторы дрона (ARM)
drone.arm()
disarm
Выключить моторы дрона (DISARM).
drone.disarm()
takeoff
Взлёт дрона на заданную высоту с указанной скоростью
Параметры:
altitude- высота взлёта (м)speed- скорость взлёта (м/с) (Значение по умолчанию: 1)
Пример:
drone.takeoff(altitude = 1.5, speed = 0.5)
time.sleep(6)
При взлёте дрон автоматически армится и переходит в режим управления полётом. Локальная система координат сбрасывается в точку (0, 0, 0)
Незаполненные числовые параметры устанавливаются в значение 0
land
Посадка дрона
drone.land()
Дрон плавно снижает высоту и выполняет посадку в текущей точке
move_to_local_point
Полет к заданной точке в локальной системе координат
Параметры:
x— координата X (м)y— координата Y (м)z— координата Z (м)yaw— угол поворота (градусы)- если задан (
float) — дрон повернётся на указанный угол - если
None— угол рысканья не изменяется
- если задан (
speed— скорость полёта к целевой точке (м/с). Значение по умолчанию: 1
Пример:
drone.takeoff(1)
time.sleep(5)
drone.move_to_local_point(
x=2,
y=0,
z=1,
yaw=90
) # Дрон летит на 2 метра вперёд и разворачивается на 90 градусов
move_in_body_frame
Полёт в системе координат, связанной с текущим местоположением дрона (body frame)
Параметры:
x- смещение вперёд относительно текущей позиции (м)y- смещение влево относительно текущей позиции (м)z- целевая высота относительно земли (м)yaw- угол поворота (градусы)- если задан (
float) — дрон повернётся на указанный угол - если
None— угол рысканья не изменяется
- если задан (
speed- скорость полёта (м/с). Значение по умолчанию: 1
Пример:
drone.takeoff(1)
time.sleep(6)
drone.move_in_body_frame(
x=4,
y=3,
z=1,
yaw = 90,
speed = 0.8)
Команда задаёт перемещение относительно текущей позиции дрона, где оси напралены вдоль корпуса коптера
set_velocity
Установка скоростей движения дрона.
Параметры:
- vx — скорость по X (м/с)
- vy — скорость по Y (м/с)
- vz — скорость по Z (м/с)
- yaw_rate — скорость вращения (град/с)
Пример:
drone.set_velocity(
vx=0.5,
vy=0,
vz=0,
yaw_rate=20
)
time.sleep(3)
drone.set_velocity(0, 0, 0, 0)
Команда действует до следующего вызова set_velocity
get_telemetry
Получить текущую телеметрию дрона
Формат ответа:
None- если телеметрия недоступнаdict- при успешном получении данных
Структура telemetry:
state
connected— есть ли соединениеarmed— состояние моторовmode— текущий режимsystem_status— состояние системы
battery
voltage- напряжение (В)cell_voltage- напряжение на одну ячейку (В)current- ток (А)percentage— заряд (%)
local_position
x, y, z- позиция (м)roll, pitch, yaw- углы (градусы)
velocity
vx, vy, vz- скорости (м/с)
point_reached
True- целевая точка достигнутаFalse- ошибка
Пример:
telemetry = drone.get_telemetry()
if telemetry:
print("Высота:", telemetry["local_position"]["z"])
print("Батарея:", telemetry["battery"]["percentage"], "%")
laser_shot
Произвести выстрел из лазерной пушки
Результат:
True- выстрел выполненFalse- ошибка
Пример:
if drone.laser_shot():
print("Выстрел выполнен")
Команда не блокирует управление полётом
Текущий поток блокируется на ~0.5 секунды до получения ответа
led_control
Управление светодиодной лентой
Параметры:
effect- режим свечения
Поддерживаемые режимы:
base- режим "комета" белого цветаstatic- статичный цветrainbow- радугаkomet- бегущий эффектblink- миганиеclear- выключение
Дополнительные параметры:
r, g, b- цвет (значения от 0 до 255)nLED- количество светодиодовbrightness- яркость (значения от 0 до 1)speed- скорость свечения (значения от 0 до 1)
Пример:
drone.led_control(
effect="static",
r=255,
g=0,
b=0,
brightness=0.8
speed=0.3
)
Методы камеры
start_stream
Запуск видеопотока
stop_stream
Остановка видеопотока
read
Возвращает последний кадр
Результат:
True / False- результат получения кадра- Сам кадр при успешном получении
get_detection
Возвращает словарь
Поддерживаются три состояния мишеней:
Выключенные мишени- не светятся, возвращаются в массиве targetsСиние мишени- светятся синим цветом, возвращаются в массиве blue_targetsКрасные мишени- светятся красным цветом,возвращаются в массиве red_targets
Описание полей ответа:
x- координата центра мишени по оси X (в пикселях)y- координата центра мишени по оси Y (в пикселях)w- ширина рамки мишени (в пикселях)h- высота рамки мишени (в пикселях)conf- уверенность детекции (от 0.0 до 1.0)class- класс обнаруженного объекта:target- выключенная мишеньblue target- синяя мишеньred target- красная мишень
Пример:
{
"command": "targets_response",
"red_targets": [
{
"x": 230.0,
"y": 277.5,
"w": 89.5,
"h": 96.75,
"conf": 0.75,
"class": "red target"
}
],
"blue_targets": [
{
"x": 213.25,
"y": 162.88,
"w": 101.0,
"h": 108.25,
"conf": 0.86,
"class": "blue target"
}
],
"targets": [
{
"x": 229.25,
"y": 278.25,
"w": 91.5,
"h": 98.5,
"conf": 0.88,
"class": "target"
},
{
"x": 213.88,
"y": 162.75,
"w": 100.75,
"h": 107.5,
"conf": 0.87,
"class": "target"
}
],
"all_targets": [
{
"x": 229.25,
"y": 278.25,
"w": 91.5,
"h": 98.5,
"conf": 0.88,
"class": "target"
},
{
"x": 213.88,
"y": 162.75,
"w": 100.75,
"h": 107.5,
"conf": 0.87,
"class": "target"
},
{
"x": 213.25,
"y": 162.88,
"w": 101.0,
"h": 108.25,
"conf": 0.86,
"class": "blue target"
},
{
"x": 230.0,
"y": 277.5,
"w": 89.5,
"h": 96.75,
"conf": 0.75,
"class": "red target"
}
],
"received_at": 1769432799.1361434
}
Ошибки подключения
Heartbeat
После успешного подключения к дрону библиотека автоматически начинает отправлять heartbeat-сообщения
Heartbeat отправляется каждые 0,5 секунды и используется для контроля активности соединения между компьютером и дроном
Если дрон не получает heartbeat более 2 секунд, соединение считается потерянным. В этом случае автоматически выполняются следующие действия:
Включается световая индикация ошибки подключения (Цвет, эффект и яркость индикации определяются параметрами секции [connection_error] файла eurus.ini)
Дрон инициирует автоматическую посадку
Данный механизм позволяет безопасно завершить полёт при потере связи с управляющим компьютером