Скрипт LED_hight_change

Скрипт LED_hight_change служит для изучения методов управления светодиодами и получения данных от дальномера на квадрокоптере Пионер Мини.

Разбор скрипта

  1. Импортируем необходимые библиотеки и определяем их назначение:

 from pioneer_sdk import Pioneer
 import time
  1. Создаём ряд переменных:

 delta_time = 0.1 # Переменная отвечающая за периодичность обработки данных от дальномера.

 r = 0 # Переменная отвечающая за яркость красного цвета.
 g = 0 # Переменная отвечающая за яркость зелёного цвета.
 b = 0 # Переменная отвечающая за яркость синего цвета.

 height_1 = 0.25 # Переменные отвечающие за первый, второй и третий пороги по высоте(м).
 height_2 = 0.5
 height_3 = 0.75
  1. Далее используем конструкцию if __name__ == „__main__“:, которая является точкой входа в программу. Всё, что идёт до этого условия, выполнятся всегда: и при вызове в качестве модуля и при вызове, как исполняемый файл. Подробное описание данной конструкции

 if __name__ == '__main__':
  1. Создаём экземпляр класса Pioneer, чтобы начать работать с квадрокоптером (Параметр logger = False отвечает за вывод в консоль логов MAVLink сообщений). Сохраняем текущее время в переменную curr_time. Подробное описание классов в Python

 pioneer_mini = Pioneer(logger=False)
 curr_time = time.time()
  1. В бесконечном цикле через указанные промежутки времени будем проверять показания дальномера и устанавливать цвет светодиода в соответствии с ними. Выполняем проверку на ожидание 0.1 секунды.

while True:
 if time.time() - curr_time > delta_time:
  1. Методом .get_dist_sensor_data() получаем от дальномера текущее расстояние в метрах и выводим полученную информацию в консоль:

 tof_data = pioneer_mini.get_dist_sensor_data()
 print(tof_data)
  1. С помощью конструкции if tof_data is not None: проверяем наличие какого-либо значения на дальномере. Если значение имеется, то запускаем ряд условий, которые проверяют то, в каком диапазоне находится значение по расстоянию, и в зависимости от этого выставляем значение красного, зелёного и синего цветов:

 if tof_data is not None:
     if tof_data <= height_1: # Если меньше 1-го порога, то..
         r = 255
         g = 0
         b = 0
     elif height_1 < tof_data <= height_2: # Если больше 1-го порога и меньше или равен 2-у, то..
         r = 0
         g = 255
         b = 0
     elif height_2 < tof_data <= height_3: # Если больше 2-го порога и меньше или равен 3-у, то..
         r = 0
         g = 0
         b = 255
     elif tof_data >= height_3: # Если больше или равен 3-у порогу, то..
         r = 255
         g = 255
         b = 255
  1. Затем методом .led_control(r=r, g=g, b=b) выводим получившиеся значение RGB. В конце, инструкцией curr_time = time.time() обновляем текущее время:

 pioneer_mini.led_control(r=r, g=g, b=b)
 curr_time = time.time()

Вопросы для самостоятельного разбора.

1) Перевести цвета в другие цветовые модели, например из RGB в HSV.
2) Инвертируйте цвета в примере.
3) Совместите данный скрипт со скриптом WASD_flight.