From d9a0ed26d8c4dced47878b23c7d7e65b75272b0b Mon Sep 17 00:00:00 2001 From: Zen Date: Fri, 31 Jul 2020 04:55:12 +0300 Subject: [PATCH] first commit --- TelloModule.py | 123 +++++++++++++++++++++++++++++++++++++++++++++++++ tast.py | 10 ++++ test.py | 28 +++++++++++ 3 files changed, 161 insertions(+) create mode 100644 TelloModule.py create mode 100644 tast.py create mode 100644 test.py diff --git a/TelloModule.py b/TelloModule.py new file mode 100644 index 0000000..dfd5e88 --- /dev/null +++ b/TelloModule.py @@ -0,0 +1,123 @@ +import serial +import time +import threading + +info = { 'count':0, + 'forward_dist':0, + 'right_dist':0, + 'back_dist':0, + 'left_dist':0, + 'light':0 } + +class SerialTread (threading.Thread): + c = 0 + def __init__(self, name, counter): + threading.Thread.__init__(self) + self.threadID = counter + self.name = name + self.counter = counter + def run(self): + while self.c == 0: + line = str(ser.readline())[4:-3].split() + info['count'] = int(line[0][2:]) + info['forward_dist'] = int(line[1][6:]) + info['right_dist'] = int(line[2][6:]) + info['back_dist'] = int(line[3][6:]) + info['left_dist'] = int(line[4][6:]) + info['light'] = int(line[5][6:]) + def join(self): + self.c = 1 + +class TelloModule(): + def __init__(self): + """Constructor""" + pass + + def module_init(self, module): + global type_module + global t + global ser + + t = SerialTread("Thread", 1) + ser = serial.Serial('/dev/ttyUSB0', 115200) + ser.readline() + + type_module = module + if type_module == 'distance': + t.start() + time.sleep(1) + else: + print ("Error: There is NO module with this name, please select \"distance\".") + + + + def module_deinit(self): + if type_module == 'distance': + t.join() + type_module == '' + else: + print ("Error: First you need to initialize the module.") + + + + def get_forward_dist(self): + return info['forward_dist'] + + def get_left_dist(self): + return info['left_dist'] + + def get_right_dist(self): + return info['right_dist'] + + def get_back_dist(self): + return info['back_dist'] + + def get_light(self): + return info['light'] + + def get_count(self): + return info['count'] + + def get_dist(self): + return [info['forward_dist'], info['right_dist'], info['left_dist'], info['back_dist']] + + def get_block_dist(self): # count + forward + right + back + left + light + ser = serial.Serial('/dev/ttyUSB0', 115200) + line = str(ser.readline())[4:-3].split() + ser.close() + if line[0][3] == "r" : + return [int(line[0][6:]), int(line[1][6:]), int(line[2][6:]), int(line[3][6:]), int(line[4][6:]), int(line[5][6:])] + else: + return [int(line[0]), int(line[1][6:]), int(line[2][6:]), int(line[3][6:]), int(line[4][6:]), int(line[5][6:])] + + +if __name__ == "__main__": + mod = TelloModule() + + print ("\n -------- Test blocking mode --------- \n") + for i in range(10): + line = mod.get_block_dist() + print ("Test " + str(i) + + " count = " + str(line[0]) + + " forward = " + str(line[1]) + + " right = " + str(line[2]) + + " back = " + str(line[3]) + + " left = " + str(line[4]) + + " light = " + str(line[5])) + + print ("\n ------ Test NON Blocking mode ------- \n") + mod.module_init('distance') + for i in range(10): + print ("Test " + str(i) + + " count = " + str(mod.get_count()) + + " forward = " + str(mod.get_forward_dist()) + + " right = " + str(mod.get_right_dist()) + + " back = " + str(mod.get_back_dist()) + + " left = " + str(mod.get_left_dist()) + + " light = " + str(mod.get_light())) + time.sleep(0.5) + mod.module_deinit() + + print ("\n ------------ Finish Test ------------ \n") + + \ No newline at end of file diff --git a/tast.py b/tast.py new file mode 100644 index 0000000..e0b8f4d --- /dev/null +++ b/tast.py @@ -0,0 +1,10 @@ +from easytello import tello + +drone = tello.Tello() +drone.takeoff() #Команда взлета + +for i in range(12): + drone.forward(30) #Лететь вперед на 30 см + drone.cw(90) #Повернутся на 90 градусов по часовой + +drone.land() \ No newline at end of file diff --git a/test.py b/test.py new file mode 100644 index 0000000..8cac1a3 --- /dev/null +++ b/test.py @@ -0,0 +1,28 @@ +from TelloModule import TelloModule +import time + +mod = TelloModule() + +print ("\n -------- Test blocking mode --------- \n") +for i in range(10): + line = mod.get_block_dist() + print ("Test " + str(i) + + " count = " + str(line[0]) + + " forward = " + str(line[1]) + + " right = " + str(line[2]) + + " back = " + str(line[3]) + + " left = " + str(line[4]) + + " light = " + str(line[5])) +print ("\n ------ Test NON Blocking mode ------- \n") +mod.module_init('distance') +for i in range(10): + print ("Test " + str(i) + + " count = " + str(mod.get_count()) + + " forward = " + str(mod.get_forward_dist()) + + " right = " + str(mod.get_right_dist()) + + " back = " + str(mod.get_back_dist()) + + " left = " + str(mod.get_left_dist()) + + " light = " + str(mod.get_light())) + time.sleep(0.5) +mod.module_deinit() +print ("\n ------------ Finish Test ------------ \n") \ No newline at end of file