这里介绍了大疆Tello的UDP操作接口。将Tello作为黑匣子,如何来通过Tello UDP协议来进行交互控制。
a) 控制端(UDP socket) --> WiFi(UDP) --> Tello(port 8889)
b) 控制端(port 8890) <-- WiFi(UDP) <-- Tello(UDP socket)
注:有些脚本将控制端端口设置9000,不知道是否Tello后续有所变更,请知!
2. 异步通信,非同一链路(无 阻塞/非阻塞 及事务操作概念)
【未明确】规格参数,如:通信延迟,状态更新间隔
异常处理简单
a) Tello端异常处理:15秒内没有收到任何命令输入,将自动降落。
b) 控制端异常处理【未明确】
c) 链路检测:异常恢复处理
基于上述初步情况看,整体设计思路:It’s simply works!!!
通过上述设计思路可以非常明确的了解产品设计的目的。从产品的角度来看,架构也非常贴近产品定位。唯一比较可惜的是生态圈和产品长期规划及延伸的问题。
我们这里介绍主要以围绕报文格式和支持命令集展开。
UDP具有package格式优势,相较于TCP字符流。一包数据就是一条命令。
注:所有报文采用ASCII字符串明文方式。
控制端发送:“commands”
Tello 反馈:“ok” or “error” “”
控制端发送:“query”
Tello 反馈:约定格式字符串
Tello 反馈:约定格式字符串
命令 | 描述 |
---|---|
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) |
命令 | 描述 |
---|---|
speed x | 将当前速度设置为x cm/s,x = 10 ~ 100 |
rc roll pitch throttle yaw | 设置遥控器的4通道杆量, 范围:[-100, 100] |
wifi ssid pasword | 设置AP模式 |
mon | 打开识别卡探测,默认:同时打开前视和下视 |
moff | 关闭识别卡探测 |
mdirection x | x = 0/1/2, 0打开下视探测, 1打开前视探测, 2同时打开前视和下视探测。单个20Hz,两个方向10Hz频率。 |
ap ssid password | 转为STA模式,并连入到AP |
命令 | 描述 | 约定格式 |
---|---|---|
speed? | 获取当前设置速度(cm/s) | x, 范围:[10. 100] |
battery? | 获取当前电池剩余电量的百分比 | x, 范围:[10. 100] |
time? | 获取电机运转时间 | x, 单位:秒 |
wifi? | 获取WiFi信噪比 | 信噪比 |
sdk? | 获取SDK版本号 | xx(>=20) |
sn? | 获取模型SN号 | 生产序列号 |
打开挑战卡:“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轴加速度