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

2021-09-14 15:46:17 浏览数 (1)

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

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 轴从重心开始,从四轴飞行器向下指向,遵循右手定则。
代码语言:javascript复制
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 ®接收速度数据的时间,指定为日期时间。

这篇就先到这里~

0 人点赞