在看本文章前,可以先看我以前写的安装:
Matlab控制Tello无人机(telent和Edu版本)安装 文档
在matlab里面,对tello的控制不是很丰富,仅满足了,简单的飞行控制和姿态信息输出以及前置摄像头的捕获等。
代码语言:javascript复制https://www.mathworks.com/hardware-support/tello-drone-matlab.html?s_tid=srchtitle
再发一下这个文档的位置
代码语言:javascript复制droneObj = ryze()
droneObj = ryze(droneName)
droneObj = ryze(droneID)
matlab是面向对象的,控制tello也是需要新建一个实例的对象,就是这样的创建形式。
代码语言:javascript复制droneObj = ryze() 通过无线网络连接到第一架可用的 Ryze 无人机。
例子
droneObj = ryze(droneName) 通过无线网络连接到具有指定名称的 Ryze 无人机。
例子
droneObj = ryze(droneID) 通过无线网络连接到具有特定 ID 的 Ryze 无人机。
第一种形式是适合只有一台飞机时候使用,剩下两个是多机体控制了。
代码语言:javascript复制droneName— Ryze 无人机的名称
"Tello"|"TelloEDU"
代码语言:javascript复制此属性是只读的。
已连接 Ryze 无人机的名称,指定为字符串。
例子: "Tello"
数据类型: string
无人机的名字
代码语言:javascript复制droneID— Ryze 无人机字符串的唯一 ID
代码语言:javascript复制此属性是只读的。
特定 Ryze 无人机的 ID 作为字符串返回。
例子:"TELLO-D2B07B"
数据类型:string
无人机ID,至于到底是什么样的,我们一会儿连飞机看
代码语言:javascript复制State—无人机驾驶状态
"Landed"| "Hovering"|"Flying"
对于无人机的状态,只有这三种情况
代码语言:javascript复制BatteryLevel—无人机当前电池电量
非负整数
此属性是只读的。
无人机的当前电池电量,指定为百分比。
例子:50%
数据类型:double
可以获得飞机的电量情况
代码语言:javascript复制AvailableCameras—可用的无人机摄像头
"FPV"
此属性是只读的。
无人机的可用相机,指定为字符串数组。
例子:["FPV"]
数据类型:string
以及前置摄像头的信息
我们的主角
开机连接
代码语言:javascript复制droneObj = ryze()
直接执行
代码语言:javascript复制droneObj =
ryze - 属性:
Name: "TelloEDU"
ID: "TELLO-6019EA"
State: "landed"
BatteryLevel: 84 %
AvailableCameras: ["FPV"]
代码语言:javascript复制TELLO-6019EA
飞机的名字
先看三个基本的命令,起飞,降落
代码语言:javascript复制droneObj = ryze()
abort(droneObj)
停止命令,如果是点号调用我可能会更加喜欢
所有电机立刻停转
只有Edu就是红色的才可以使用这个命令
代码语言:javascript复制land(droneObj)
这个是从当前位置慢慢下降
这些是比较高级的指令
先看最后一个旋转角度
注意到时用弧度指定的角度
代码语言:javascript复制flip(droneObj,direction)
翻转机器
代码语言:javascript复制direction—翻转无人机的方向
"forward"| "back"| "right"|"left"
无人机翻转的方向,指定为字符串。
可以输入的参数有上面这些
代码语言:javascript复制flip(droneObj,'forward');
这里写一个demo
我们再看一个命令,向上移动
Tello坐标系
四轴飞行器的机身轴以重心为中心。
- x 轴从重心开始,指向四轴飞行器机头的方向。
- y 轴从重心开始并指向四轴飞行器的右侧。
- z 轴从重心开始,从四轴飞行器向下指向,遵循右手定则。
move(droneObj,relativeCoordinate)
move(droneObj,relativeCoordinate,Name,Value)
调用的句法
代码语言:javascript复制takeoff(droneObj)
起飞
代码语言:javascript复制move(droneObj,[1.2 0 0]);
向前飞1.2m
代码语言:javascript复制move(droneObj,[1.2 1.2 0],'Speed', 0.5);
以0.5m的速度向对角线飞,就是简单的矢量合成了
代码语言:javascript复制relativeCoordinate— xyz 轴上的相对距离
1×3 向量| 实向量
无人机在 xyz 轴上移动的相对距离,指定为 1×3 数组。
相对坐标值必须介于 -5m 和 5m 之间,并且至少有一个大于 0.2m 或小于 -0.2m 的值。
数据类型: double
参数约束
代码语言:javascript复制'Speed'—以米/秒为单位的无人机速度
0.4(默认)| 双倍的
无人机必须移动的速度,指定为双倍。
数据类型:double
代码语言:javascript复制move(droneObj,[1.2 1.2 0],'Speed',0.5);
注意这个参数的输入方法,有点像Python的字典
代码语言:javascript复制'WaitUntilDone'—操作模式
true(默认) |false
以及命令的执行方式,是否要开启阻塞模式,这个好想,就是命令在执行后又来一个命令,要不要执行的问题
代码语言:javascript复制moveup(droneObj)
moveup(droneObj,Name,Value)
moveup(droneObj,duration)
moveup(droneObj,duration,Name,Value)
在看一个命令,向上。
代码语言:javascript复制moveup(droneObj)向上移动 Ryze ®无人机。
例子
moveup(droneObj,Name,Value) 通过指定的选项将 Ryze 无人机向上移动。
例子
moveup(droneObj,duration) 将瑞兹无人机向上移动指定的时间。
例子
moveup(droneObj,duration,Name,Value) 将 Ryze 无人机向上移动指定的时间和指定的附加选项。
因为这个命令里面有时间了,所有你得学习点物理知识
当Ryze Tello无人机悬停时,将无人机向上移动默认持续时间为 0.5 秒,默认速度为 0.2 m/s
记住这个默认得参数
代码语言:javascript复制moveup(droneObj, 'Distance' ,2, 'WaitUntilDone' ,false);
代码语言:javascript复制'Distance'—以米为单位的相对距离
加倍
无人机必须移动的相对距离,指定为双精度值。
数据类型:double
'Speed'—以米/秒为单位的无人机速度
0.4(默认)| 双倍的
无人机必须移动的速度,指定为双倍。
数据类型:double
'WaitUntilDone'—操作模式
true(默认) |false
moveup命令的操作模式,指定为true或 的逻辑值false。
WaitUntilDone默认情况下为 true 并阻止 MATLAB 命令行执行,直到当前移动命令运行完成。如果 WaitUntilDone设置为 false,则 MATLAB 命令行将被解除阻塞,而上一个移动命令仍在进行中。
笔记
Ryze 无人机会忽略在上一个移动命令完成之前执行的任何后续移动命令。
数据类型:logical
这个就是命令所有得参数意思了。使用的时候,注意范围和类型。
剩下几个方向的使用方法一样。
到目前为止,我们就把控制TT飞行的函数都看完了。接下来看飞行时的信息获得。
代码语言:javascript复制[height,time] = readHeight(droneObj)
获得飞行的高度,以及系统时间,其实是要算相对时间
代码语言:javascript复制height =
0.8600
time =
datetime
15-Aug-2019 14:07:19
就像这样。
代码语言:javascript复制[angles,time] = readOrientation(droneObj)
再看获得姿态信息
代码语言:javascript复制 angles =
0.785 0.301 -0.207
time =
datetime
15-Aug-2019 14:07:19
角度上面是获得一个三元组
以弧度为单位的欧拉旋转角度,以欧拉旋转角度的 1×3 数组形式返回。该轴沿 ZYX 轴。这表示无人机从 NED 框架到估计的身体框架的旋转。
大概是这样
三次旋转
NED坐标系
代码语言:javascript复制[speed,time] = readSpeed(droneObj)
再看最后一个是,获得速度
代码语言:javascript复制speed =
0.8600 -0.0240 0.0015
time =
datetime
15-Aug-2019 14:07:19
就像这样
代码语言:javascript复制speed— 无人机1×3 向量的当前速度
无人机沿x、 y和z方向相对于惯性 NED 框架的当前速度(以 m/s为单位)。NED 帧在无人机启动时计算。
time — 来自无人机的时间戳
datetime
MATLAB ®接收速度数据的时间,指定为日期时间。
这篇就先到这里~