master
Zen 4 years ago
parent 195e7a0782
commit bb70deacf8
  1. 8
      README.md
  2. 38
      TelloModule.py
  3. 55
      test.py
  4. 19
      test2.py

@ -92,7 +92,9 @@ mod = TelloModule()
3. Далее нужно понимать что есть 2 режима работы библиотеки это Блокирующий и не Блокирующий. 3. Далее нужно понимать что есть 2 режима работы библиотеки это Блокирующий и не Блокирующий.
В блокирующим режиме при вызове метода приема информации с модуля, ждем когда придут новые значения, и только после этого скрипт продолжит исполнятся. Для его работы будет достаточно вызвать метод чтения значения и ждать его завершения. ### Блокирующий режим работы
В данном режиме при вызове метода приема информации с модуля, ждем когда придут новые значения, и только после этого скрипт продолжит исполнятся. Для его работы будет достаточно вызвать метод чтения значения и ждать его завершения.
```python ```python
line = mod.get_block_dist() line = mod.get_block_dist()
@ -109,7 +111,9 @@ line = mod.get_block_dist()
Так-же тут необходимо отметить что все команды для коптера работают в блокирующем режиме. Так-же тут необходимо отметить что все команды для коптера работают в блокирующем режиме.
В не блокирующим режиме при вызове одного из методов происходит чтение прошлого значения с модуля из-за чего не происходит блокировки. Для использования этого режима нужна инициализация и де инициализация. ### НЕ Блокирующий режим работы
В этом режиме при вызове одного из методов происходит чтение прошлого значения с модуля из-за чего не происходит блокировки. Для использования этого режима нужна инициализация и де инициализация.
```python ```python
mod.module_init('distance') # инициализация модуля 'distance', это название модуля с дальномерами mod.module_init('distance') # инициализация модуля 'distance', это название модуля с дальномерами

@ -1,6 +1,7 @@
import serial import serial
import time import time
import threading import threading
import serial.tools.list_ports
info = { 'count':0, info = { 'count':0,
'forward_dist':0, 'forward_dist':0,
@ -29,20 +30,39 @@ class SerialTread (threading.Thread):
self.c = 1 self.c = 1
class TelloModule(): class TelloModule():
def __init__(self):
"""Constructor""" def __init__(self, module = 'distance'):
pass global serial_port
def module_init(self, module):
global type_module global type_module
serial_port = ""
type_module = module
ports = serial.tools.list_ports.comports()
for p in ports:
if p.manufacturer == 'SBRICKS':
serial_port = p.device
if serial_port == "":
print ("Error: SMART BRICKS receiver not found, please insert it into your computer's USB port.")
exit()
line = None
ser = serial.Serial(serial_port, 115200, timeout=2)
line = ser.readline()
ser.close()
if line == b'':
print ("Error: module " + module + " not found, please enable it.")
exit()
def module_init(self):
global t global t
global ser global ser
t = SerialTread("Thread", 1) t = SerialTread("Thread", 1)
ser = serial.Serial('/dev/ttyUSB0', 115200) ser = serial.Serial(serial_port, 115200)
ser.readline() ser.readline()
type_module = module
if type_module == 'distance': if type_module == 'distance':
t.start() t.start()
time.sleep(1) time.sleep(1)
@ -82,7 +102,7 @@ class TelloModule():
return [info['forward_dist'], info['right_dist'], info['left_dist'], info['back_dist']] return [info['forward_dist'], info['right_dist'], info['left_dist'], info['back_dist']]
def get_block_dist(self): # count + forward + right + back + left + light def get_block_dist(self): # count + forward + right + back + left + light
ser = serial.Serial('/dev/ttyUSB0', 115200) ser = serial.Serial(serial_port, 115200)
line = str(ser.readline())[4:-3].split() line = str(ser.readline())[4:-3].split()
ser.close() ser.close()
if line[0][3] == "r" : if line[0][3] == "r" :
@ -106,7 +126,7 @@ if __name__ == "__main__":
" light = " + str(line[5])) " light = " + str(line[5]))
print ("\n ------ Test NON Blocking mode ------- \n") print ("\n ------ Test NON Blocking mode ------- \n")
mod.module_init('distance') mod.module_init()
for i in range(10): for i in range(10):
print ("Test " + str(i) + print ("Test " + str(i) +
" count = " + str(mod.get_count()) + " count = " + str(mod.get_count()) +

@ -1,28 +1,35 @@
from TelloModule import TelloModule from TelloModule import TelloModule
import time import time
import matplotlib.pyplot as plt
import matplotlib.animation as animation
mod = TelloModule() mod = TelloModule()
fig = plt.figure()
print ("\n -------- Test blocking mode --------- \n") plt.ion()
for i in range(10):
line = mod.get_block_dist() x = 100
print ("Test " + str(i) + y = 150
" count = " + str(line[0]) + line1 = plt.plot([x, 0],[0, y], c = 'b')
" forward = " + str(line[1]) + line2 = plt.plot([-x, 0],[0, y], c = 'b')
" right = " + str(line[2]) + line3 = plt.plot([-x, 0],[0, -y], c = 'b')
" back = " + str(line[3]) + line4 = plt.plot([x, 0],[0, -y], c = 'b')
" left = " + str(line[4]) + line5 = plt.plot([-x/3, x/3], [y-y/3, y-y/3], c = 'b')
" light = " + str(line[5]))
print ("\n ------ Test NON Blocking mode ------- \n") mod.module_init()
mod.module_init('distance')
for i in range(10): point = [None, None, None, None]
print ("Test " + str(i) + while 1:
" count = " + str(mod.get_count()) + if (point[0] != None):
" forward = " + str(mod.get_forward_dist()) + for p in point:
" right = " + str(mod.get_right_dist()) + p.remove()
" back = " + str(mod.get_back_dist()) + point[0] = plt.scatter(0, mod.get_forward_dist(), c = 'r')
" left = " + str(mod.get_left_dist()) + point[1] = plt.scatter(mod.get_right_dist(), 0, c = 'r')
" light = " + str(mod.get_light())) point[2] = plt.scatter(-mod.get_left_dist(), 0, c = 'r')
time.sleep(0.5) point[3] = plt.scatter(0, -mod.get_back_dist(), c = 'r')
mod.module_deinit()
print ("\n ------------ Finish Test ------------ \n") plt.pause(0.1)
plt.ioff()
plt.show()
mod.module_deinit()

@ -0,0 +1,19 @@
from easytello import tello
from TelloModule import TelloModule
drone = tello.Tello()
mod = TelloModule()
def main():
drone.takeoff()
while 1:
line = mod.get_block_dist()
if int(line[1]) > 400:
drone.forward(20)
if int(line[1]) < 300:
drone.back(20)
try:
main()
except KeyboardInterrupt:
drone.land()
Loading…
Cancel
Save