前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dji RoboMaster Tello SDK封装.3(回复指令解包类)

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

作者头像
云深无际
发布2021-03-30 17:03:06
4240
发布2021-03-30 17:03:06
举报
文章被收录于专栏:云深之无迹云深之无迹

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

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

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

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

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

再看它的定义

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

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

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

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

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

代码语言:javascript
复制
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)

完整的代码在这里

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档