APP下载

嵌入式Linux实时控制的四轴飞行器进程分析※

2015-09-12杨浩杨斌

单片机与嵌入式系统应用 2015年11期
关键词:开发板资源分配旋翼

杨浩,杨斌

(西南交通大学 信息科学与技术学院,成都610031)

杨浩(硕士研究生),主要研究方向为嵌入式开发与应用;杨斌(教授),主要研究方向为嵌入式系统应用开发、实时与分布式系统。

引 言

目前,市场上大部分四轴飞行器都是基于单片机制作的控制系统。单片机体积小、功耗低,但是由于其性能有限[1],且不能很好地支持TCP/IP协议,导致基于单片机制作的四轴飞行器功能有限。如果想要四轴飞行器实现更多的功能,则需要使用操作系统来制作四轴飞行器控制系统。在Linux操作系统中,普通进程不能做到快速的实时响应,因此如果使用Linux操作系统来制作四轴飞行器控制系统,就需要对进程的优先级和时间片进行修改,使其能够保证快速响应[2]。

1 Linux操作系统实时进程和普通进程对比

Linux本身并不是一个强实时操作系统,但是其调度策略中提供了对实时进程的支持[3]。总体而言,Linux实时调度算法能够满足严格的时间要求,实时进程和普通进程的具体对比略——编者注。

2 飞行控制系统的任务分析

2.1 开发板选择

因为开发板要安装到四轴飞行器中,因此有以下考虑因素[4]:

①体积小、功耗低,同时,价格不能太高。

②开发板需要采集传感器数据,并且在调试的过程中和上位机进行通信,需要开发板至少有两个串口。

③四轴飞行器需要4 路PWM 信号供给电子调速器,因此至少能支持4路PWM 输出。

④开发板上面需要外接USB摄像头和无线网卡,进行视频采集和网络通信,因此至少需要1个USB接口。

基于以上因素,选择了搭载AM3358处理器的BeagleBone Black开发板。

2.2 任务划分

四轴飞行器在飞行的过程中,会有很多任务需要执行,其中包括控制任务、读取传感器数据任务、姿态自动调节任务、发送当前飞机情况任务、接收控制信号任务、响应控制信号任务、视频采集任务、视频传输任务。下面逐步介绍各个任务。

①控制任务:是指在接收到电脑客户端发送的指令后对四轴飞行器进行控制的任务,这些指令包括起飞、降落、向左边飞、向右边飞、前进、后退。四轴飞行器控制系统要及时响应这些指令并根据指令改变4 个旋翼的PWM 值。如果客户端没有发送指令,则按照上一次的指令执行飞行任务。

②读取传感器数据任务:四轴飞行器在飞行过程中需要不断地读取姿态传感器数据来获取当前飞行器的飞行姿态,并对获取的传感器数据进行处理。

③姿态自动调节任务:在得到数据后和初始值数据进行比较,如果发现四轴飞行器机身倾斜,则要根据目前检测的数据控制4个旋翼的转速,对四轴飞行器进行自动调节,使得其回到平稳状态。

④发送当前飞机情况任务:为了使电脑客户端能更好地知道当前飞机的情况,四轴飞行器控制系统需要不断地将当前传感器发出的3个角度数值和4个旋翼的PWM值发送到客户端的电脑上,使得控制系统对飞行器的当前状态更加清楚。

⑤接收控制信号任务:四轴飞行器控制系统需要接收电脑客户端发送过来的指令,这些指令包括起飞、降落、向左边飞、向右边飞、前进、后退。

⑥视频采集任务:四轴飞行器控制系统需要不断地采集视频数据,然后将这些数据存入到一个缓存中。

⑦视频传输任务:将缓存中的数据通过网络发送出去,然后等下一次数据采集完成后继续发送。

2.3 任务优先级说明

在四轴飞行器控制系统中,一共有7个任务在运行。控制任务是在接收控制信号任务完成后迅速地根据控制信号来调整飞行姿态,如果这两个任务反应较慢有可能会导致四轴飞行器遇上危险,因此控制任务和接收控制信号任务需要较快的反应。读取传感器数据任务是为了进行姿态自动调节任务,使得四轴飞行器在空中保持平稳,这两个任务也非常重要,同样需要较快的反应。此外,地面的控制者要明确目前四轴飞行器所处的状态,仅仅凭借眼睛去观察是远远不够的,因此发送当前飞机情况任务对于地面的控制者来说很重要。相较于前5个任务,视频采集任务和视频传输任务对于实时性的要求不是太高,只要控制者能看到四轴飞行器目前所返回的视频即可,因此视频采集任务和视频传输任务没有前5个任务的优先级别高。

2.4 进程优先级分配

BeagleBone Black 上 面 包 含 了 一 个Cortex-A8 处 理器,其性能较高,但是只有一个内核,因此相比多核处理器,BeagleBone Black运行多线程任务并没有优势。此外,控制任务、读取传感器数据任务、姿态自动调节任务、发送当前飞机情况任务和接收控制信号任务对实时性要求都很高,而且这5个任务之间相互关联,因此将这5个任务放到一个进程中,通过设置一些变量来对任务发生的顺序进行控制,这个进程称为四轴飞行器控制进程。而视频采集任务和视频传输任务跟前5个任务没有关系,因此将这两个任务合并为一个进程,该进程称为四轴飞行器视频传输进程。

在将两个进程设置为实时进程后,为了进一步提高实时性,需要修改这两个进程的时间片。进程的时间片如果太低,进程之间互相切换会造成切换时间的浪费,而进程的时间片如果太高,实时性能会有所下降,因此选择合适的时间片至关重要。根据经验,每个进程的时间片为5ms时,效果是比较好的。两个进程的优先级和时间片如表1所列。

表1 四轴飞行器进程的优先级和时间片

BeagleBone Black开发板的性能比单片机好很多,在运行实时进程后,其性能和效果都要优于单片机制作的飞行控制系统。

3 飞行控制系统的进程测试

在程序中改变进程的优先级是通过改变结构体sched_param 中间的成员变量sched_priority来实现。而改变时间片是通过在程序中修改进程的nice值来改变,当nice值为+19时,该进程对应的时间片为5ms。修改进程优先级是通过函数sched_setscheduler()来完成的,在参数中可以选择轮流调度。

首先单独运行四轴飞行器控制进程,该进程的名称为“bbbnew”,四轴飞行器控制进程单独运行时系统资源分配图如图1所示。

由图1可知,四轴飞行器控制进程“bbbnew”的优先级为-99,nice值为19,此时对应的时间片为5ms。该进程单独运行时的CPU 占有率为74.2%,该占有率在70%~85%之间徘徊。然后单独运行四轴飞行器视频传输进程,该进程的名称为“camera”,视频传输进程单独运行时系统资源分配图如图2所示。

由图2可知,四轴飞行器视频传输进程“camera”的优先级为-98,nice值为19,此时对应的时间片为5ms。该进程单独运行时的CPU 占有率为10.6%,该占有率在9%~12.5%之间徘徊。四轴飞行器在飞行过程中两个进程都要运行,系统根据优先级和时间片来对进程进行调度。

图1 四轴飞行器控制进程单独运行时系统资源分配图

图2 视频传输进程单独运行时系统资源分配图

3.1 四轴飞行器平稳状态时

当四轴飞行器在平稳状态时,控制进程和视频传输进程同时运行,如图3所示。

图3 四轴飞行器平稳运行时

从图3中可以看出,四轴飞行器4个旋翼的转速基本一致,此时横滚角、俯仰角和偏航角与初始值的差别很小,表明四轴飞行器处在平稳运行状态。此时在摄像头面前晃动手指,在客户端电脑上能很快看到手指的晃动,反应速度很快,能满足系统对实时性的要求。

从图4中可以看出,在四轴飞行器平稳运行时,控制进程“bbbnew”的CPU 占用率是72.8%,视频传输进程“camera”的CPU 占用率是11.0%,两个进程并没有完全占满CPU 资源。此外,两者同时运行一段时间后,两个进程的运行时间总和是不一样的。Linux操作系统top指令中TIME+的含义是进程使用的CPU 时间总计,单位为1/100s。控制进程“bbbnew”的TIME+数值为2∶01.45,四轴飞行器视频进程“camera”的数值为1∶37.66,这是因为两个进程的时间片虽然相同,但是由于控制进程的优先级要大于视频传输进程的优先级,所以控制进程的运行时间总和大于视频传输进程的运行时间总和,这与设计目标一致。

图4 平稳运行时系统资源分配图

3.2 四轴飞行器倾斜状态时

(1)四轴飞行器向左倾斜时

四轴飞行器在向左倾斜时,欧拉角与初始值的差值和四轴飞行器4个旋翼的转速如图5所示。

可以看出,此时横滚角与初始值的差值超过了临界值并且为负值,表明此时四轴飞行器正在向左倾斜,控制系统需要根据PID算法来调节4个旋翼的转速,使四轴飞行器重新回到平衡状态。系统自动进行调节的同时,在摄像头上面快速晃动手指,在客户端电脑上可以实时看到晃动手指的视频。这表明两个进程在同时运行时,实时性都可以得到保证。此时的系统资源分配图如图6所示。

可以看出,在四轴飞行器向左倾斜时,控制进程“bbbnew”的CPU 占用率是83.1%,视频传输进程“camera”的CPU 占用率是12.0%。两个进程并没有完全占满CPU 资源。同样,控制进程的运行时间总和大于视频传输进程的运行时间总和。

(2)四轴飞行器向右倾斜时

四轴飞行器在向右倾斜时,欧拉角与初始值的差值和四轴飞行器4个旋翼的转速略——编者注。

可以看出,此时横滚角与初始值的差值超过了临界值并且为正值,表明此时四轴飞行器正在向右倾斜,控制系统需要根据PID算法来调节4个旋翼的转速,使四轴飞行器重新回到平衡状态。系统自动进行调节的同时,在摄像头上面快速晃动手指,在客户端电脑上可以实时看到晃动手指的视频。这表明两个进程在同时运行时,实时性都可以得到保证。此时的系统资源分配图略——编者注。

图5 四轴飞行器向左倾斜时

图6 四轴飞行器向左倾斜时系统资源分配图

可以看出,在四轴飞行器向右倾斜时,控制进程“bbbnew”的CPU 占用率是70.9%,视频进程“camera”的CPU 占用率是9.0%。两个进程并没有完全占满CPU 资源。同样,控制进程的运行时间总和大于视频传输进程的运行时间总和。

经过测试,四轴飞行器其他倾斜情况也能满足实时响应要求。

3.3 极端条件下的测试

第3.1节和3.2节分别介绍了四轴飞行器在平稳状态下和倾斜状态下,两个进程的实时响应情况。在这里作进一步测试。

在四轴飞行器的控制进程中,设置当四轴飞行器控制系统检测到俯仰角或者横滚角和初始值的差值大于25°时或者小于-25°时,四轴飞行器4个旋翼会立即停止转动。那么用手指在摄像头面前晃动的同时,人为以很快的速度倾斜机身到25°。如图7所示。

可以看到,在摄像头面前晃动手指,可以从电脑客户端上看到实时晃动手指的视频,此时人为快速倾斜机身,这时横滚角与初始值的角度差值已经小于-25°,4个旋翼立即停止了转动。这表明在极端条件下,控制进程和视频传输进程都能够做到实时响应,达到了预期的设计目标。

通过以上的测试,证明了将四轴飞行器控制进程和视频传输进程都设置为实时进程,将控制进程优先级设置为-99,视频传输进程设置为-98,并且将两个进程的时间片都设置为5 ms后,无论四轴飞行器处在何种条件下,这两个进程都可以做到快速的实时响应,从而达到了设计目标。

结 语

本文利用Linux操作系统支持的实时进程策略对四轴飞行器的控制进程和视频传输进程进行了优先级和时间片的修改,使得这两个进程都可以达到实时响应。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

图7 视频实时传输同时四轴飞行器自动检测并停止旋转

[1]胡剑华.基于ARM-Linux实时嵌入式飞行控制系统设计与实现[D].南京:南京航空航天大学,2010.

[2]张桂兰,王飞超.Linux内核完全公平调度器的分析及模拟[J].中国科技信息,2009(4).

[3]邹勇,王青,李明树.Linux 内核的实时支持的研究与实现[J].计算机研究与发展,2002(4).

[4]庞庆霈.四旋翼飞行器设计与稳定控制研究[D].合肥:中国科学技术大学,2011.

[5]TI.德州仪器的BeagleBone Black介绍[EB/OL].[2015-05].http://news.cecb2b.com/info/20130718/888742.shtml.

猜你喜欢

开发板资源分配旋翼
改进型自抗扰四旋翼无人机控制系统设计与实现
大载重长航时油动多旋翼无人机
新研究揭示新冠疫情对资源分配的影响 精读
基于STM32的四旋翼飞行器的设计
一种基于价格竞争的D2D通信资源分配算法
基于动态规划理论的特种设备检验资源分配研究
基于动态规划理论的特种设备检验资源分配研究
云环境下公平性优化的资源分配方法
浅析单片机开发板的设计与制作
四旋翼无人机动态面控制