LED-лента

LED-лента позволяет управлять светодиодами на квадрокоптере с помощью Python. Вы можете запускать готовые анимации, задавать один цвет для всей ленты или управлять каждым светодиодом отдельно.

Инициализация

from clover2 import Clover2

drone = Clover2()
# или с именем ноды:
drone = Clover2("my_drone")

Clover2 — обертка над ROS 2 Node. При создании объекта Clover2 создается нода и запускается фоновый поток для работы ROS 2.

Анимации

Самый простой способ управлять лентой — использовать встроенные анимации. Каждая анимация принимает параметр duration, который задает длительность анимации в секундах. Если duration не указан, анимация будет работать до тех пор, пока вы не запустите другую анимацию или не отправите прямую команду управления лентой.

drone.led().rainbow(period=2.0, duration=5.0)     # радуга, полный цикл за 2 с, 5 секунд
drone.led().blink(255, 0, 0, period=0.5)          # красное мигание, период 0.5 с
drone.led().solid_color(0, 255, 0, duration=1.0)  # зеленая заливка на 1 секунду
drone.led().clear()                               # выключение всех светодиодов

В параметре period задайте продолжительность одного цикла анимации. В параметре duration задайте общее время работы анимации. Например, led.rainbow(period=2.0, duration=5.0) означает, что один цикл анимации занимает 2 секунды, а сама анимация работает 5 секунд.

Параметры анимаций:

Метод

Аргументы

rainbow(period, brightness, duration)

period — время полного цикла радуги (по умолчанию 2.0)

blink(r, g, b, period, brightness, duration)

period — период полного цикла включения /выключения (по умолчанию 1.0)

solid_color(r, g, b, brightness, duration)

заливка всей ленты одним цветом

clear()

выключение всех светодиодов

Прямое управление

С помощью прямого управления вы можете задать один цвет для всей ленты.

# Заливка всей ленты
drone.led().fill(255, 255, 0)  # желтый

В этом примере все светодиоды получают одинаковый цвет.

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

Внимание

При попиксельном управлении количество элементов в массиве должно совпадать с количеством светодиодов в ленте.

count = drone.led().led_count   # количество светодиодов в ленте
leds = [(0, 0, 0)] * count      # выключает ленту
leds[4] = (0, 255, 0)           # делает 5-й светодиод зеленым

# Попиксельное управление - [(r, g, b), ...]
drone.led().send_frame(leds, brightness=0.5)

Каждый элемент массива leds задает цвет одного светодиода в формате (r, g, b).

В Python нумерация элементов массива начинается с нуля. Поэтому leds[4] соответствует пятому светодиоду на ленте.

Пример: демонстрация эффектов

В этом примере программа последовательно запускает несколько эффектов: радугу, мигание и заливку ленты тремя цветами.

import time
from clover2 import Clover2

drone = Clover2()

drone.led().rainbow(period=2.0, duration=5.0)
time.sleep(5.5)

drone.led().blink(255, 255, 255, period=0.5, duration=5.0)
time.sleep(5.5)

for r, g, b in [(255, 0, 0), (0, 255, 0), (0, 0, 255)]:
    drone.led().solid_color(r, g, b, duration=1.0)
    time.sleep(1.2)

drone.led().clear()

duration=5.0 задает продолжительность анимации, а time.sleep(5.5) не позволяет программе перейти к следующей команде сразу после запуска анимации.

После завершения последней заливки программа выполняет clear() и выключает все светодиоды.