Примеры программ

Взлёт и посадка

from EurusEdu import EurusControl
import time

drone = EurusControl("10.42.0.1", 65432)
drone.connect()

drone.arm()
drone.takeoff(1.5)

time.sleep(6)  # Ждём стабилизации

drone.land()
drone.disconnect()

После каждого takeoff() локальные координаты сбрасываются в (0, 0, 0)

Полёт к локальной точке

from EurusEdu import EurusControl
import time

drone = EurusControl("10.42.0.1", 65432)
drone.connect()
time.sleep(3)

drone.arm()
drone.takeoff(1)

time.sleep(5)

# Летим на 2 метра вперёд и поворачиваемся на 90°
drone.move_to_local_point(
    x=2,
    y=0,
    z=1,
    yaw=90
)

time.sleep(5)
drone.land()

Движение относительно текущей позиции (Body Frame)

from EurusEdu import EurusControl
import time

drone = EurusControl("10.42.0.1", 65432)
drone.connect()

drone.arm()
drone.takeoff(1.5)
time.sleep(5)

# Диагональный полёт вперёд-влево
drone.move_in_body_frame(
    x=3,   # вперёд
    y=4,   # влево
    z=1.5, # текущая высота
    yaw=0
)

time.sleep(5)
drone.land()

Полёт по квадрату

import time
from EurusEdu import EurusControl

def run_square_mission():
    # --- НАСТРОЙКИ ---
    IP_ADDRESS = "10.42.0.1"
    PORT = 65432
    ALTITUDE = 1
    SIDE_LENGTH = 0.5
    LAPS = 1

    # Настройки LED
    # Количество светодиодов
    LEDS_COUNT = 20

    drone = EurusControl(ip=IP_ADDRESS, port=PORT)

    try:
        drone.connect()
        time.sleep(1)

        if not drone.is_connected:
            print("Не удалось подключиться к дрону.")
            return

        print("Начало миссии")

        # 1. ПОДГОТОВКА И ВЗЛЕТ (Эффект: BLINK, Желтый)
        print("Включаем мигание (желтый) перед взлетом...")
        drone.led_control(effect="blink", r=255, g=255, b=0, nLED=LEDS_COUNT)

        print("Арминг...")
        drone.arm()

        print(f"Взлет на высоту {ALTITUDE}м...")
        drone.takeoff(ALTITUDE)

        # Пауза, чтобы дрон стабилизировался перед полетом
        time.sleep(7)

        # 2. ПОЛЕТ ПО КВАДРАТУ
        print("Включаем эффект 'komet' (синий) для полета...")
        drone.led_control(effect="komet", r=0, g=0, b=255, nLED=LEDS_COUNT)

        for lap in range(1, LAPS + 1):
            print(f"\n--- Круг №{lap} ---")

            # Точка 1
            drone.move_to_local_point(x=SIDE_LENGTH, y=0, z=ALTITUDE)
            time.sleep(5)
            # Точка 2
            drone.move_to_local_point(x=SIDE_LENGTH, y=SIDE_LENGTH, z=ALTITUDE)
            time.sleep(5)
            # Точка 3
            drone.move_to_local_point(x=0, y=SIDE_LENGTH, z=ALTITUDE)
            time.sleep(5)
            # Точка 4 (Возврат)
            drone.move_to_local_point(x=0, y=0, z=ALTITUDE)
            time.sleep(5)

        print("\nПолетная программа завершена.")

    except KeyboardInterrupt:
        print("\nМиссия прервана пользователем!")
    except Exception as e:
        print(f"\nПроизошла ошибка: {e}")
    finally:
        # 3. ПОСАДКА
        if drone.is_connected:
            print("Включаем мигание (красный) для посадки...")
            drone.led_control(effect="blink", r=255, g=0, b=0, nLED=LEDS_COUNT)

            print("Приземление...")
            drone.land()

            # Ждем пока сядет
            time.sleep(3)

            # Выключаем ленту перед разрывом соединения
            print("Выключение подсветки...")
            drone.led_control(effect="static", r=0, g=0, b=0, nLED=LEDS_COUNT)

            print("Отключение...")
            drone.disconnect()

if __name__ == "__main__":
    run_square_mission()

Проверка светодиодной ленты

from EurusEdu import EurusControl
import time

drone = EurusControl("192.168.31.164", 65432)

drone.connect()
time.sleep(1)
print("Базовый режим - режим кометы с белым цветом")
drone.led_control("base")
time.sleep(5)
print("Статическое свечение")
drone.led_control("static", 255, 255, 0, brightness=0.5)
time.sleep(5)
print("Радуга")
drone.led_control("rainbow")
time.sleep(5)
print("Комета")
drone.led_control("komet", 255, 0, 0)
time.sleep(5)
drone.led_control(effect="blink", r=255, g=255, b=255, nLED=16, brightness=0.1)
time.sleep(5)

Отображение видеопотока с камеры дрона с визуализацией объектов, обнаруженных нейросетью YOLO.

import cv2
import time
import numpy as np
from EurusEdu import EurusCamera

def draw_targets(frame, targets_data):
    """
    Функция для отрисовки всех найденных целей на кадре.
    """
    if not targets_data or "all_targets" not in targets_data:
        return

    # Проверяем свежесть данных (опционально)
    data_age = time.time() - targets_data.get("received_at", time.time())
    if data_age > 0.5:
        return

    for target in targets_data["all_targets"]:
        try:
            # Получаем данные из JSON
            cx = target['x'] # Центр по X
            cy = target['y'] # Центр по Y
            w = target['w']  # Ширина
            h = target['h']  # Высота
            cls_name = target['class']
            conf = target.get('conf', 0.0)

            # --- Конвертация координат ---
            top_left_x = int(cx - w / 2)
            top_left_y = int(cy - h / 2)
            bottom_right_x = int(cx + w / 2)
            bottom_right_y = int(cy + h / 2)

            # --- Выбор цвета ---
            color = (0, 255, 0) # Зеленый по умолчанию
            if "red" in cls_name:
                color = (0, 0, 255) # Красный
            elif "blue" in cls_name:
                color = (255, 0, 0) # Синий

            # --- Рисование ---
            # Прямоугольник
            cv2.rectangle(frame, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), color, 2)

            # --- Текст над прямоугольником (ИЗМЕНЕНО) ---
            # Добавили W (width) и H (height), округлив до целого числа int()
            label = f"{cls_name} {conf:.2f} W:{int(w)} H:{int(h)}"

            cv2.putText(frame, label, (top_left_x, top_left_y - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

        except KeyError:
            continue

def main():
    # Укажите актуальный IP адрес
    cam = EurusCamera("192.168.31.166", 8001)

    try:
        cam.connect()
        cam.start_stream()

        # Даем немного времени на буферизацию
        time.sleep(1)

        print("Нажмите 'q' для выхода")

        while True:
            # 1. Читаем кадр (не блокирует)
            ret, frame = cam.read()

            if ret:
                # 2. Запрашиваем таргеты
                targets = cam.get_targets(blocking=False)

                # 3. Рисуем прямоугольники на кадре
                if targets:
                    draw_targets(frame, targets)

                # 4. Показываем результат
                cv2.imshow("Drone Feed + YOLO", frame)

            # Выход по кнопке 'q'
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

    except KeyboardInterrupt:
        print("Stopping by Ctrl+C...")
    except Exception as e:
        print(f"Error: {e}")
    finally:
        cam.stop_stream()
        cam.disconnect()
        cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

results matching ""

    No results matching ""