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.
Zen 226666fd9d add module sensor 4 years ago
README.md add module sensor 4 years ago
TelloModule.py add module sensor 4 years ago
test.py add module sensor 4 years ago
test2.py add module sensor 4 years ago
test3.py add module sensor 4 years ago

README.md

Tello_modules

API дрона

Для начала необходимо установить любую либу которая будет кидать команды на дрон по websocket. Возмем например эту

pip3 install easytello opencv-python

Далее необходимо включить дрон и подключится к сети, которую он создаст (название сети похоже на: TELLO-56D2T8).

Протестировать работу можно простым скриптом, в результате которого дрон будет летать по квадрату со стороной 20 см.

from easytello import tello

drone = tello.Tello()
drone.takeoff()             #Команда взлета

for i in range(4):
	drone.forward(20)       #Лететь вперед на 20 см
	drone.cw(90)            #Повернутся на 90 градусов по часовой
	
drone.land()

Описание команд для дрона можно посмотреть здесь.

Работа с модулями

  1. Склонить данный репозиторий.
  2. Вставить приемник Smart Bricks в компьютер.
  3. Запустить модуль коротким нажатием на кнопку.
  4. Запустить TelloModule.py в исходном коде указав какой модуль необходимо тестировать
# Select the module under test: distance OR sensor
    module = 'sensor'

дабы убедится в работоспособности данного модуля.

cd tello_modules
python3 TelloModule.py

Вывод должен быть такой:

 -------- 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 во втором то все хорошо, если нет то повторяем все сначала.

  1. Запускаем test.py чтобы протестировать работу модуля.
pip3 install matplotlib
python3 test.py
  1. Запускаем test2.py чтобы протестировать работу модуля вместе с коптером. Для этого необходимо быть подключенным к сети коптера (описано выше) и установить модуль на коптер.

В тестовом примере коптер подлетает к стене если она дальше 30 см, и отлетает от нее если она ближе 20 см (измерения по переднему сенсору).

python3 test2.py
  1. Запускаем test3.py чтобы протестировать работу модуля sensor.
python3 test3.py

Описание работы с библиотекой.

  1. Необходимо добавить файл библиотеки в свой скрипт.
from TelloModule import TelloModule
  1. Необходимо создать экземпляр класса работающего с модулем, а также указать модуль с которым планируется работа, в даннос случае это distance.
mod = TelloModule('distance')
  1. У библиотеки есть два режима работы - блокирующий и неблокирующий.

Блокирующий режим работы

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

line = mod.get_block_dist()

Данный метод возвращает лист с шестью параметрами:

  • счетчик (нужен для контроля количества пропущенных значений)
  • передний дальномер
  • правый дальномер
  • задний дальномер
  • левый дальномер
  • значение датчика освещенности

Для возврата значений модуля sensor в длокирующим режиме необходимо сделать следующее:

line = mod.get_block_sensor()

Данный метод возвращает лист с 7-ю параметрами:

  • счетчик (нужен для контроля количества пропущенных значений)
  • температура
  • давление
  • относительная влажность воздуха
  • индекс качества воздуха
  • индекс содержания углекислоты в воздухе

Так же тут необходимо отметить что все команды для коптера работают в блокирующем режиме.

Неблокирующий режим работы

В этом режиме при вызове одного из методов происходит чтение прошлого значения с модуля из-за чего не происходит блокировки. Для использования этого режима нужна инициализация и деинициализация.

mod.module_init('distance')			# инициализация модуля 'distance', это название модуля с дальномерами

# ваш код

mod.module_deinit()				# Деинициализация модуля

Для данного режима модуля 'distance' реализованно большее количество методов:

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:

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()				#показание датчика освещенности