• 大疆Tello UDP控制协议接口


    这里介绍了大疆Tello的UDP操作接口。将Tello作为黑匣子,如何来通过Tello UDP协议来进行交互控制。

    在这里插入图片描述

    1. 设计架构

    1. 控制流

    a) 控制端(UDP socket) --> WiFi(UDP) --> Tello(port 8889)
    b) 控制端(port 8890) <-- WiFi(UDP) <-- Tello(UDP socket)

    注:有些脚本将控制端端口设置9000,不知道是否Tello后续有所变更,请知!
    2. 异步通信,非同一链路(无 阻塞/非阻塞 及事务操作概念)

    1. 【未明确】规格参数,如:通信延迟,状态更新间隔

    2. 异常处理简单

    a) Tello端异常处理:15秒内没有收到任何命令输入,将自动降落。
    b) 控制端异常处理【未明确】
    c) 链路检测:异常恢复处理

    基于上述初步情况看,整体设计思路:It’s simply works!!!

    通过上述设计思路可以非常明确的了解产品设计的目的。从产品的角度来看,架构也非常贴近产品定位。唯一比较可惜的是生态圈和产品长期规划及延伸的问题。

    我们这里介绍主要以围绕报文格式和支持命令集展开。

    2. UDP报文格式

    UDP具有package格式优势,相较于TCP字符流。一包数据就是一条命令。

    注:所有报文采用ASCII字符串明文方式。

    2.1 控制报文

    控制端发送:“commands”
    Tello 反馈:“ok” or “error” “”

    2.2 查询报文

    控制端发送:“query”
    Tello 反馈:约定格式字符串

    2.3 状态报文

    Tello 反馈:约定格式字符串

    3. 命令集

    3.1 【控制报文】控制命令

    命令描述
    command进入SDK命令模式
    takeoff自动起飞
    land自动降落
    streamon打开视频流
    streamoff关闭视频流
    emergency停止电机转动
    up x向上飞x厘米,x = 200 ~ 500
    down x向下飞x厘米,x = 200 ~ 500
    left x向左飞x厘米,x = 200 ~ 500
    right x向右飞x厘米,x = 200 ~ 500
    forward x向前飞x厘米,x = 200 ~ 500
    back x向后飞x厘米,x = 200 ~ 500
    cw x顺时针旋转x度,x = 1 ~ 360
    ccw x逆时针旋转x度,x = 1 ~ 360
    flip x朝x方向翻滚,x = l (left)/r (right)/f (forward)/b (back)
    go x y z speed设置速度飞往坐标(x,y,z): x/y/z = [-500, 500]cm, speed = [10,100]cm/s, x/y/z不能同时在[-20, 20]之间。
    stop停止运动并悬停,任何时候都可以触发该急停操作
    curve x1 y1 z1 x2 y2 z2 speed设置速度飞弧线,经过p1到达p2,若弧线半径不在0.5-10米范围,返回提醒。x/y/z = [-500, 500]cm, speed = [10,100]cm/s, x/y/z不能同时在[-20, 20]之间。
    go x y z speed mid设置速度飞往识别卡坐标点。mid =m-2/m-1/m1/m2…/m8, m-1内部算法最快识别到的识别卡; m-2距离当前位置最近的识别卡。x/y/z = [-500, 500]cm, speed = [10,100]cm/s, x/y/z不能同时在[-20, 20]之间。
    curve x1 y1 z1 x2 y2 z2 speed mid设置速度飞弧线,经过p1到达p2,若弧线半径不在0.5-10米范围,返回提醒。mid =m-2/m-1/m1/m2…/m8, m-1内部算法最快识别到的识别卡; m-2距离当前位置最近的识别卡。x/y/z = [-500, 500]cm, speed = [10,100]cm/s, x/y/z不能同时在[-20, 20]之间。
    jump x y z speed yaw mid1 mid2飞往mid1坐标点悬停,识别mid2识别卡,并在mid2 (0, 0, z)的位置并转向到设置的yaw值(z>0)

    3.2 【控制报文】设置命令

    命令描述
    speed x将当前速度设置为x cm/s,x = 10 ~ 100
    rc roll pitch throttle yaw设置遥控器的4通道杆量, 范围:[-100, 100]
    wifi ssid pasword设置AP模式
    mon打开识别卡探测,默认:同时打开前视和下视
    moff关闭识别卡探测
    mdirection xx = 0/1/2, 0打开下视探测, 1打开前视探测, 2同时打开前视和下视探测。单个20Hz,两个方向10Hz频率。
    ap ssid password转为STA模式,并连入到AP

    3.3 【查询报文】读取命令

    命令描述约定格式
    speed?获取当前设置速度(cm/s)x, 范围:[10. 100]
    battery?获取当前电池剩余电量的百分比x, 范围:[10. 100]
    time?获取电机运转时间x, 单位:秒
    wifi?获取WiFi信噪比信噪比
    sdk?获取SDK版本号xx(>=20)
    sn?获取模型SN号生产序列号

    4. 状态报文

    打开挑战卡:“mid:%d;x:%d;y%d;z:%d;mpry:%d;pitch:%d;roll:%d;yaw:%d;vgx:%d;vgy:%d;vgz:%d;templ:%d;temph:%d;tof:%d;h:%d;bat:%d;baro:%f;\r\n”
    关闭挑战卡:“pitch:%d;roll:%d;yaw:%d;vgx:%d;vgy:%d;vgz:%d;templ:%d;temph:%d;tof:%d;h:%d;bat:%d;baro:%f;\r\n”

    mid: 检测到的挑战卡ID;若未检测到挑战卡,返回-1
    x: 飞行器相对于检测到的挑战卡的X轴坐标,厘米,若未检测到挑战卡,返回0
    y: 飞行器相对于检测到的挑战卡的Y轴坐标,厘米,若未检测到挑战卡,返回0
    z: 飞行器相对于检测到的挑战卡的Z轴坐标,厘米,若未检测到挑战卡,返回0
    mpry: 飞行器在挑战卡中的俯仰、横滚及偏航角度,若未检测到挑战卡,返回0
    pitch: 俯仰角度(度)
    roll: 横滚角度(度)
    yaw: 偏航角度(度)
    vgx: X轴速度
    vgy: Y轴速度
    vgz: Z轴速度
    templ: 主板最低温度(摄氏度)
    temph: 主板最高温度(摄氏度)
    tof: ToF距离,厘米
    h: 相对于起飞点高度,厘米
    bat: 当前电量百分比,%
    baro: 气压计测量高度,米
    time: 电机运转时间,秒
    agx: X轴加速度
    agy: Y轴加速度
    agz: Z轴加速度

  • 相关阅读:
    语音信号的短时频域分析
    老哥们平日是怎么排查线上问题的?
    ajax 接口上传
    Java学习记录
    自动化技术-图像识别
    Vue3 前置知识
    【温度检测】基于matlab GUI热红外图像温度检测系统【含Matlab源码 1920期】
    从0到1:CTFer成长之路——死亡 Ping 命令
    钉钉内嵌H5遇到的一些问题
    go搭建服务器基础
  • 原文地址:https://blog.csdn.net/lida2003/article/details/127896750