Dji RoboMaster Tello SDK封装.3(回复指令解包类)

老规矩,时间库+一个统计大类

初始化一些关于时间的的类变量

这里插一个Python列表的使用技巧,[:1]就是将当前列表的第一个元素丢掉

这个是类里面的所有的函数

我们这个函数倒着看,就是先看应用的地方

再看它的定义

可以看到是一堆选择结构,就像一个路由器的作用,就是它用来汇聚上层接口的指令,然后再分发给子函数去处理

因为信息的回应有字符有数字,就需要来逐个字符来处理

这两个是对偶的操作函数,收到不同的数据类型。

都是统一给最上面的函数,这样做的好处就是条例清晰

这个就是得到机器的回复,然后处理即可

from datetime import datetime

class Stats: # 统计运行时的一些数据 def __init__(self, command: str, id: int): self.command = command # 一个类 self.response = None # 回应信息的初始值 # 响应 self.id = id # 两个类变量 self.start_time = datetime.now() self.end_time = None # 结束时间 self.duration = None # 持续时间
def add_response(self, response: str): # 添加一个回复 self.response = str(response) # 将一个回复的字符串转换成str # 计算执行命令所用的总时间 self.end_time = datetime.now() self.duration = (self.end_time-self.start_time).total_seconds()
def got_response(self): # 对一个回复进行判空 if self.response is None: return False else: return True # 如果是收到了,返回真值
def get_raw_response(self): return self.response
def numeric_response(self, data: str): num_val = ''.join(i for i in data if i.isdigit() or i == '-' or i == '.') return num_val
def int_response(self, data: str): return int(self.numeric_response(data))
def float_response(self, data: str): return float(self.numeric_response(data))
def attitude_response(self): raw_att = self.response.split(';') att_data = (self.int_response(raw_att[0]), self.int_response(raw_att[1]), self.int_response(raw_att[2])) return att_data
def acceleration_response(self): raw_acc = self.response.split(';') acc_data = (self.float_response(raw_acc[0]), self.float_response( raw_acc[1]), self.float_response(raw_acc[2])) return acc_data
def temp_response(self): raw_temp = self.response.split('~') temp = (self.int_response( raw_temp[0]) + self.int_response(raw_temp[1]))/2 return temp
def get_response(self): if 'attitude?' in self.command: return self.attitude_response() elif 'acceleration?' in self.command: return self.acceleration_response() elif 'temp?' in self.command: return self.temp_response() elif 'baro?' in self.command or 'speed?' in self.command: return self.float_response(self.response) elif '?' not in self.command: return self.get_raw_response() else: return self.int_response(self.response)

完整的代码在这里

(0)

相关推荐