You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
9.0 KiB
185 lines
9.0 KiB
# Tello_modules
|
|
|
|
## API дрона
|
|
|
|
Для начала необходимо установить любую либу которая будет кидать команды на дрон по websocket. Возмем например [эту](https://github.com/Virodroid/easyTello)
|
|
|
|
```bash
|
|
pip3 install easytello opencv-python
|
|
```
|
|
Далее необходимо включить дрон и подключится к сети, которую он создаст (название сети похоже на: ```TELLO-56D2T8```).
|
|
|
|
Протестировать работу можно простым скриптом, в результате которого дрон будет летать по квадрату со стороной 20 см.
|
|
|
|
```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()
|
|
```
|
|
|
|
Описание команд для дрона можно посмотреть [здесь](http://protello.com/tello-sdk-1/).
|
|
|
|
## Работа с модулями
|
|
|
|
1. Склонить данный репозиторий.
|
|
2. Вставить приемник Smart Bricks в компьютер.
|
|
3. Запустить модуль коротким нажатием на кнопку.
|
|
4. Запустить TelloModule.py в исходном коде указав какой модуль необходимо тестировать
|
|
|
|
```Python
|
|
# Select the module under test: distance OR sensor
|
|
module = 'sensor'
|
|
```
|
|
|
|
дабы убедится в работоспособности данного модуля.
|
|
|
|
```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 тестов в первом случае и 10 во втором то все хорошо, если нет то повторяем все сначала.
|
|
|
|
5. Запускаем test.py чтобы протестировать работу модуля.
|
|
|
|
```bash
|
|
pip3 install matplotlib
|
|
python3 test.py
|
|
```
|
|
6. Запускаем test2.py чтобы протестировать работу модуля вместе с коптером. Для этого необходимо быть подключенным к сети коптера (описано выше) и установить модуль на коптер.
|
|
|
|
В тестовом примере коптер подлетает к стене если она дальше 30 см, и отлетает от нее если она ближе 20 см (измерения по переднему сенсору).
|
|
|
|
```bash
|
|
python3 test2.py
|
|
```
|
|
7. Запускаем test3.py чтобы протестировать работу модуля sensor.
|
|
|
|
```bash
|
|
python3 test3.py
|
|
```
|
|
|
|
## Описание работы с библиотекой.
|
|
|
|
1. Необходимо добавить файл библиотеки в свой скрипт.
|
|
|
|
```python
|
|
from TelloModule import TelloModule
|
|
```
|
|
|
|
2. Необходимо создать экземпляр класса работающего с модулем, а также указать модуль с которым планируется работа, в даннос случае это distance.
|
|
|
|
```python
|
|
mod = TelloModule('distance')
|
|
```
|
|
|
|
3. У библиотеки есть два режима работы - блокирующий и неблокирующий.
|
|
|
|
### Блокирующий режим работы
|
|
|
|
В данном режиме при вызове метода приема информации с модуля, скрипт ждет когда придут новые значения, и только после этого продолжает исполнятся. Для его работы будет достаточно вызвать метод чтения значения и ждать его завершения.
|
|
|
|
```python
|
|
line = mod.get_block_dist()
|
|
```
|
|
|
|
Данный метод возвращает лист с шестью параметрами:
|
|
|
|
* счетчик (нужен для контроля количества пропущенных значений)
|
|
* передний дальномер
|
|
* правый дальномер
|
|
* задний дальномер
|
|
* левый дальномер
|
|
* значение датчика освещенности
|
|
|
|
Для возврата значений модуля sensor в длокирующим режиме необходимо сделать следующее:
|
|
|
|
```python
|
|
line = mod.get_block_sensor()
|
|
```
|
|
|
|
Данный метод возвращает лист с 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() #показание датчика освещенности
|
|
```
|
|
|