Matlab控制Tello无人机(命令认识)

在看本文章前,可以先看我以前写的安装:

Matlab控制Tello无人机(telent和Edu版本)安装+文档

在matlab里面,对tello的控制不是很丰富,仅满足了,简单的飞行控制和姿态信息输出以及前置摄像头的捕获等。

https://www.mathworks.com/hardware-support/tello-drone-matlab.html?s_tid=srchtitle

再发一下这个文档的位置

droneObj = ryze()droneObj = ryze(droneName)droneObj = ryze(droneID)

matlab是面向对象的,控制tello也是需要新建一个实例的对象,就是这样的创建形式。

droneObj = ryze() 通过无线网络连接到第一架可用的 Ryze 无人机。
例子droneObj = ryze(droneName) 通过无线网络连接到具有指定名称的 Ryze 无人机。
例子droneObj = ryze(droneID) 通过无线网络连接到具有特定 ID 的 Ryze 无人机。

第一种形式是适合只有一台飞机时候使用,剩下两个是多机体控制了。

droneName— Ryze 无人机的名称"Tello"|"TelloEDU"
此属性是只读的。
已连接 Ryze 无人机的名称,指定为字符串。
例子: "Tello"
数据类型: string

无人机的名字

droneID— Ryze 无人机字符串的唯一 ID
此属性是只读的。
特定 Ryze 无人机的 ID 作为字符串返回。
例子:"TELLO-D2B07B"
数据类型:string

无人机ID,至于到底是什么样的,我们一会儿连飞机看

State—无人机驾驶状态"Landed"| "Hovering"|"Flying"

对于无人机的状态,只有这三种情况

BatteryLevel—无人机当前电池电量非负整数此属性是只读的。
无人机的当前电池电量,指定为百分比。
例子:50%
数据类型:double

可以获得飞机的电量情况

AvailableCameras—可用的无人机摄像头"FPV"此属性是只读的。
无人机的可用相机,指定为字符串数组。
例子:["FPV"]
数据类型:string

以及前置摄像头的信息

我们的主角

开机连接

droneObj = ryze()

直接执行

droneObj = ryze - 属性:
Name: "TelloEDU" ID: "TELLO-6019EA" State: "landed" BatteryLevel: 84 %       AvailableCameras: ["FPV"]
TELLO-6019EA

飞机的名字

先看三个基本的命令,起飞,降落

droneObj = ryze()
abort(droneObj)

停止命令,如果是点号调用我可能会更加喜欢

所有电机立刻停转

只有Edu就是红色的才可以使用这个命令

land(droneObj)

这个是从当前位置慢慢下降

这些是比较高级的指令

先看最后一个旋转角度

注意到时用弧度指定的角度

flip(droneObj,direction)

翻转机器

direction—翻转无人机的方向"forward"| "back"| "right"|"left"无人机翻转的方向,指定为字符串。

可以输入的参数有上面这些

flip(droneObj,'forward');

这里写一个demo

我们再看一个命令,向上移动

Tello坐标系

四轴飞行器的机身轴以重心为中心。

  • x 轴从重心开始,指向四轴飞行器机头的方向。

  • y 轴从重心开始并指向四轴飞行器的右侧。

  • z 轴从重心开始,从四轴飞行器向下指向,遵循右手定则。

move(droneObj,relativeCoordinate)move(droneObj,relativeCoordinate,Name,Value)

调用的句法

takeoff(droneObj)

起飞

move(droneObj,[1.2 0 0]);

向前飞1.2m

move(droneObj,[1.2 1.2 0],'Speed', 0.5);

以0.5m的速度向对角线飞,就是简单的矢量合成了

relativeCoordinate— xyz 轴上的相对距离1×3 向量| 实向量无人机在 xyz 轴上移动的相对距离,指定为 1×3 数组。相对坐标值必须介于 -5m 和 5m 之间,并且至少有一个大于 0.2m 或小于 -0.2m 的值。
数据类型: double

参数约束

'Speed'—以米/秒为单位的无人机速度0.4(默认)| 双倍的无人机必须移动的速度,指定为双倍。
数据类型:double
move(droneObj,[1.2 1.2 0],'Speed',0.5);

注意这个参数的输入方法,有点像Python的字典

'WaitUntilDone'—操作模式true(默认) |false

以及命令的执行方式,是否要开启阻塞模式,这个好想,就是命令在执行后又来一个命令,要不要执行的问题

moveup(droneObj)moveup(droneObj,Name,Value)moveup(droneObj,duration)moveup(droneObj,duration,Name,Value)

在看一个命令,向上。

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

记住这个默认得参数

moveup(droneObj, 'Distance' ,2, 'WaitUntilDone' ,false);
'Distance'—以米为单位的相对距离加倍无人机必须移动的相对距离,指定为双精度值。
数据类型:double
'Speed'—以米/秒为单位的无人机速度0.4(默认)| 双倍的无人机必须移动的速度,指定为双倍。
数据类型:double
'WaitUntilDone'—操作模式true(默认) |falsemoveup命令的操作模式,指定为true或 的逻辑值false。
WaitUntilDone默认情况下为 true 并阻止 MATLAB 命令行执行,直到当前移动命令运行完成。如果 WaitUntilDone设置为 false,则 MATLAB 命令行将被解除阻塞,而上一个移动命令仍在进行中。
笔记
Ryze 无人机会忽略在上一个移动命令完成之前执行的任何后续移动命令。
数据类型:logical

这个就是命令所有得参数意思了。使用的时候,注意范围和类型。

剩下几个方向的使用方法一样。

到目前为止,我们就把控制TT飞行的函数都看完了。接下来看飞行时的信息获得。

[height,time] = readHeight(droneObj)

获得飞行的高度,以及系统时间,其实是要算相对时间

height = 0.8600time = datetime 15-Aug-2019 14:07:19

就像这样。

[angles,time] = readOrientation(droneObj)

再看获得姿态信息

angles = 0.785 0.301 -0.207 time = datetime 15-Aug-2019 14:07:19

角度上面是获得一个三元组

以弧度为单位的欧拉旋转角度,以欧拉旋转角度的 1×3 数组形式返回。该轴沿 ZYX 轴。这表示无人机从 NED 框架到估计的身体框架的旋转。

大概是这样

三次旋转

NED坐标系

[speed,time] = readSpeed(droneObj)

再看最后一个是,获得速度

speed = 0.8600 -0.0240 0.0015 time = datetime 15-Aug-2019 14:07:19

就像这样

speed— 无人机1×3 向量的当前速度无人机沿x、 y和z方向相对于惯性 NED 框架的当前速度(以 m/s为单位)。NED 帧在无人机启动时计算。
time — 来自无人机的时间戳datetimeMATLAB ®接收速度数据的时间,指定为日期时间。

这篇就先到这里~

(0)

相关推荐