# Tello_modules ## API квадрокоптера Для начала необходимо установить любую библиотеку, которая будет отправлять команды на квадракоптер по websocket. Возмем, например, [эту](https://github.com/Virodroid/easyTello) ```bash pip3 install easytello opencv-python ``` Далее необходимо включить квадрокоптер и подключится к сети Wi-Fi, которую он создаст (название сети похоже на: ```TELLO-56D2T8```). Протестировать работу можно простым скриптом на языке python, в результате которого квадрокоптер будет летать по квадрату со стороной 20 см. Создать скрипт можно по следующим шагами: 1. Создать файл test_script.py: ```bash touch test_script.py nano test_script.py ``` Или открыть любым другим редактором кроме nano. 2. Cкопировать в этот файл код: ```python from easytello import tello drone = tello.Tello() drone.takeoff() #Команда взлета for i in range(4): drone.forward(20) #Лететь вперед на 20 см drone.cw(90) #Повернутся на 90 градусов по часовой drone.land() ``` 3. Запустить скрипт: ```bash python3 test_script.py ``` Описание команд для квадрокоптера можно посмотреть [здесь](http://protello.com/tello-sdk-1/). ## Работа с модулями 1. Загрузить на компьютер данный репозиторий. Сделать это можно либо скачав его архивом, либо с помощью следующей команды: ```bash git clone <ссылка на репозиторий> ``` 2. Вставить приемник Smart Bricks в компьютер. 3. Запустить модуль коротким нажатием на кнопку. 4. Запустить TelloModule.py в исходном коде указав какой модуль необходимо тестировать. Для этого любым редактором нужно открыть файл, найти следующую строку и написать в кавычках distance или sensor: ```Python # Select the module under test: distance OR sensor module = 'sensor' ``` Для исполнения программы нужно перейти в папку с файлом TelloModule.py и запустить его: ```bash cd tello_modules python3 TelloModule.py ``` Программы должна вывести в консоль следующее: ```log -------- Test blocking mode --------- Test 0 count = 2168 forward = 208 right = 234 back = 190 left = 115 light = 852 Test 1 count = 2169 forward = 203 right = 234 back = 196 left = 111 light = 847 Test 2 count = 2170 forward = 203 right = 235 back = 195 left = 113 light = 847 Test 3 count = 2171 forward = 209 right = 235 back = 192 left = 112 light = 852 Test 4 count = 2172 forward = 209 right = 233 back = 190 left = 114 light = 847 Test 5 count = 2173 forward = 206 right = 234 back = 193 left = 112 light = 842 Test 6 count = 2174 forward = 206 right = 235 back = 193 left = 112 light = 847 Test 7 count = 2175 forward = 208 right = 237 back = 189 left = 110 light = 842 Test 8 count = 2176 forward = 206 right = 234 back = 192 left = 114 light = 847 Test 9 count = 2177 forward = 208 right = 233 back = 192 left = 114 light = 842 ------ Test NON Blocking mode ------- Test 0 count = 2179 forward = 205 right = 237 back = 193 left = 113 light = 847 Test 1 count = 2180 forward = 206 right = 234 back = 192 left = 114 light = 852 Test 2 count = 2181 forward = 204 right = 235 back = 191 left = 113 light = 847 Test 3 count = 2181 forward = 204 right = 235 back = 191 left = 113 light = 847 Test 4 count = 2182 forward = 207 right = 234 back = 192 left = 110 light = 842 Test 5 count = 2183 forward = 204 right = 235 back = 193 left = 114 light = 842 Test 6 count = 2184 forward = 208 right = 235 back = 190 left = 114 light = 847 Test 7 count = 2185 forward = 209 right = 233 back = 194 left = 114 light = 852 Test 8 count = 2185 forward = 209 right = 233 back = 194 left = 114 light = 852 Test 9 count = 2186 forward = 208 right = 236 back = 193 left = 113 light = 852 ------------ Finish Test ------------ ``` Для обоих (блокирующего и неблокирующего) режима должны пройти по 10 тестов. Если они прошли, то все работает корректно. Если нет, попробуйте выполнить инструкцию сначала. 5. Тестирование работы модуля 'distance' с помощью test.py. В результате выполнения скрипта должно открыться окно с графическим отображением показаний дальномеров. Для работы скрипта может понадобится установка модуля matplotlib. ```bash pip3 install matplotlib python3 test.py ``` 6. Тестирование работы модуля 'distance' вместе с квадракоптером с помощью скрипта test2.py. Для этого необходимо быть подключенным к Wi-Fi сети квадрокоптера (описано выше) и установить модуль на коптер. В тестовом примере квадрокоптер подлетает к стене, в случае если она находится на расстоянии больше 30 см, и отлетает от нее если она находится на расстоянии ближе 20 см (измерения ведутся по переднему сенсору). Команда для запуска второго теста: ```bash python3 test2.py ``` 7. Тестирования модуля 'sensor' с помощью test3.py. В результате выполнения команды в консоль будут выведены показатели датчиков. Команда для звпуска теста: ```bash python3 test3.py ``` ## Описание работы с библиотекой Для написания своиз скриптов с использованием библиотеки: 1. Необходимо добавить файл библиотеки в свой скрипт. ```python from TelloModule import TelloModule ``` 2. Необходимо создать экземпляр класса работающего с модулем, а также указать модуль с которым планируется работа, в данном случае это distance. ```python mod = TelloModule('distance') ``` 3. У библиотеки есть два режима работы - блокирующий и неблокирующий. ### Блокирующий режим работы В данном режиме при вызове метода приема информации с модуля, скрипт ждет когда придут новые значения, и только после этого продолжает исполнятся. Для его работы будет достаточно вызвать метод чтения значения и ждать его завершения. ```python line = mod.get_block_dist() ``` Данный метод возвращает список (list) с шестью параметрами: * счетчик (нужен для контроля количества пропущенных значений) * передний дальномер * правый дальномер * задний дальномер * левый дальномер * значение датчика освещенности Для возврата значений модуля sensor в блокирующим режиме необходимо вызвать следующий метод: ```python line = mod.get_block_sensor() ``` Данный метод возвращает список (list) с 7-ю параметрами: * счетчик (нужен для контроля количества пропущенных значений) * температура * давление * относительная влажность воздуха * индекс качества воздуха * индекс содержания углекислоты в воздухе Необходимо отметить, что все команды для квадрокоптера работают в блокирующем режиме. ### Неблокирующий режим работы В этом режиме при вызове одного из методов происходит чтение прошлого значения с модуля из-за чего не происходит блокировки. Для использования этого режима нужна инициализация и деинициализация. ```python mod.module_init('distance') # инициализация модуля 'distance', это название модуля с дальномерами # ваш код mod.module_deinit() # Деинициализация модуля ``` Для данного режима модуля 'distance' реализованно большее количество методов: ```python count = mod.get_count() #возвращает значение счетчика forward = mod.get_forward_dist() #возвращает показание переднего сенсора right = mod.get_right_dist() #возвращает показание правого сенсора back = mod.get_back_dist() #возвращает показание заднего сенсора left = mod.get_left_dist() #возвращает показание левого сенсора light = mod.get_light() #возвращает показание датчика освещенности dist = get_dist #возвращает лист из показания следующих сенсоров 0) передний 1) правый 2) левый 3) задний. ``` Для модуля sensor: ```python count = mod.get_count() #вернет значение счетчика temp = mod.get_temp() #вернет температуру pressure = mod.get_pressure() #вернет давление humidity = mod.get_humidity() #вернет относительную влажность воздуха TVO = mod.get_TVOC() #вернет индекс качества воздуха CO2 = mod.get_CO2() #индекс содержания углекислоты в воздухе light = mod.get_light() #показание датчика освещенности ```