基于VxWorks的无人直升机控制系统设计
扫描二维码
随时随地手机看文章
摘 要: 组建了一种基于嵌入式实时操作系统VxWorks平台的无人直升机控制系统,实现远距离无人直升机飞行状态信息传输,接收地面基站命令后完成自主定点飞行任务。主要利用基于优先级的消息队列方法和嵌入式操作系统VxWorks的信号量与看门狗定时功能实现多任务间调度,获得飞行状态数据向地面基站传输与自主定点飞行的同步。通过实验飞行,该系统的正确性与可靠性得到了验证。
关键词: 无人直升机,VxWorks,任务,消息队列
1 前言
自主飞行无人直升机的研究是现今多学科交叉研究的热点与难点。无人直升机在炮兵射击训练、战场监视、输电线路巡视,森林火灾状况观测等军用与民用方面都有着广泛的作用。自从1917年英国研制出世界上第一架无人机,无人机已经经历了无人靶机、预编程序控制无人侦察机、指令遥控无人侦察机、复合控制和自主飞行多用途无人机的发展过程,现今无人直升机研究在于自主飞行控制。现今无人直升机任务多样化和远距离作业需求,对无人直升机远距离通信和控制提出了更高要求【1】。
在无人直升机控制系统设计中采用实时操作系统是现今研究的重点与热点。VxWorks是专门为实时嵌入式系统设计开发的32位操作系统,它高性能内核和友好用户开发界面使得VxWorks成为目前嵌入式系统领域使用最广泛、市场占有率最高的系统。把VxWorks操作系统应用到机载控制计算机中,可以满足无人直升机信息处理的实时性要求。机载控制计算机需要控制无人直升机上多个设备,同时还需要与地面基站系统通信,VxWorks操作系统良好的多任务调度功能可以满足多任务需求。同时VxWorks操作系统具备体积小、可裁减和支持多种CPU的高性能【2】,使得无人直升机控制系统在硬件选取上具备很高的灵活性。
VxWorks操作系统提供了多网口的源代码驱动,支持TCP与UDP协议、远程调用、远程文件访问、文件输出、远程命令执行等强大网络通信功能,同时它的开发工具Tornado界面友好,调试方便【3】。这些特点缩短了控制系统的开发周期,达到了预期的效果。
系统设计
1.1 控制系统整体结构
无人直升机控制系统包括以下七个部分:无人直升机、机载控制计算机、机载平衡模块、机载导航模块、手动遥控模块、地面基站与其他机载模块,其他机载模块根据系统扩展的需要进行添加【4】。系统的结构图见图一
图一 无人直升机控制系统结构图
通过手动遥控使无人直升机起飞,起飞后遥控器触动多路选择器,把无人直升机的控制权交与机载控制计算机。机载控制计算机开始传输飞行状态数据给地面基站。地面基站发送自主飞行命令给机载控制计算机使得它启动自主定点飞行任务,控制无人直升机定点飞行,
飞行任务结束后返回状态信息给地面基站。
1.2 控制系统硬件结构
此无人直升机控制系统的控制对象是模型直升机JRVoyager GS R260, 机载导航模块包括Crescent的GPS与Honeywell HMR3300型号的电子罗盘。机载控制计算机是由三星公司生产的16/32位RISC处理器S3C44B0X搭建的硬件平台,控制系统硬件结构图见图二。
图二 无人直升机控制系统硬件结构图
图二中由于S3C44B0X的UART单元提供了两个独立的异步串行I/O端口,每个端口都可以在DMA模式下工作,使得CPU和串行I/O口之间直接进行数据传输,另外GPS与电子罗盘提供的是标准RS-232接口,这与S3C44B0X系统所定义的高低电平不同,所以需要通过电平转换芯片MAX232C来进行转换。由于S3C44B0X片内不带以太网接口,所以选用RTL8039作为以太网接口芯片与地面基站控制系统进行通信。S3C44B0X根据内部程序输出5路PWM波控制无人直升机的5个舵机,完成自主定点飞行任务。74LS128芯片作为多路选择器,切换手动遥控模式与自主定点飞行模式。另外还扩展大容量的外部寄存器,其中8MB的HY57V641620作为SDRAM存储器存储程序运行中的中间数据,2MB的SST39VF1601存储器作为FLASH存储源程序。
1.3 控制系统软件设计
无人直升机控制系统的软件包含四大部分:一是根据S3C44B0X重新配置VxWorks系统的BSP。二是基于优先级的消息队列实现,消息队列中包含飞行状态信息与自主定点飞行信息。三是基于看门狗与信号量的多任务调度,实现自主定点飞行与实时飞行状态信息传输的功能。四是基站控制软件的设计。系统上电后初始化socket套接字,网络联通后采用UDP协议通信。下面将着重介绍基于优先级的消息队列与基于信号量与看门狗的多任务调度。
2.3.1 基于优先级的消息队列
在控制系统中,不能因为执行机载设备的数据传输命令而拒绝执行地面基站的自主飞行命令。为解决这一问题,本控制系统建立了基于优先级的消息队列机制。系统在RAM中开辟一个区域用于建立消息队列,队列中指针指向的是各个信息的内存块地址。各个任务将根据这些指针指向的数据来进行实际操作。
(1)基于优先级的消息队列方法。首先信息接收任务接收信息后根据信息头地址内容判断信息优先级,地面基站的自主飞行命令优先级为最高,把它插入到消息队列的队列头,而机载电子罗盘与GPS发送的数据信息优先级低,按照时间顺序排列在消息队列的队列尾。信息解释任务从消息队列头逐一取出信息然后进行处理。
(2)消息队列的实现。通过单向链表来实现消息队列的添加与删除。每个链表元素是一个结构体struct messageChain,结构体包含头指针pBuff与指向下一个元素的指针pNext。同时使用两个全局变量直接表示链表头与链表尾,一个全局变量表示链表长度,这
样可以直接处理链表头或者链表尾的内容以简化查找过程。
2.3.2 基于看门狗的多任务调度
VxWorks系统可以为每个任务设定特定的任务名与任务优先级,系统支持256个优先级。为了调试的方便,在本控制系统中设定的任务优先级在60到100之间,这是因为由程序发起的任务优先级要高于Tornado开发环境中shell发起sp的任务优先级即小于100,同时也要低于系统任务的优先级即大于60【5】。控制系统包含了信息接收任务,信息解释任务,信息发送任务,网络监测任务,定时轮询任务,自主飞行任务等多任务。流程图见图三。
图三 任务调度流程图
任务的操作使用的是VxWorks系统中的taskLib()与taskInfo()库函数。看门狗时钟精确定时用到函数wdCreate(),wdStart()等,任务间的同步调度使用的是信号量,包括有二进制信号量与计数信号量。信息接收任务把网络中传输的信息按照高低优先级在消息队列中添加元素,并存放信息到特定的内存块中,然后启动计数型的信号量,信号量的值对应于当前消息队列中还没有被执行命令的个数,每增加一个消息命令后,计数型信号量就释放,消息解释任务获得释放的信号量后从消息队列头获得最应被优先执行的命令,根据内存中的首地址信息,调用相应的执行函数。如果判断是无人直升机飞行状态信息,调用信息发送任务把实时信息传送给地面基站。如判断是无人直升机自主飞行命令,则调用自主飞行任务,在此任务中要定时查询无人直升机飞行状态信息并与命令中信息做比较,控制舵机动作以完成自主定点飞行任务。在定时查询机载设备信息以确定飞行状态时,用taskDelay()函数不能满足精确定时的要求。VxWorks系统提供得看门狗它可以保证严格的定时,在调用自主飞行任务时创建看门狗。经过1s的时间延时后运行查询无人直升机飞行状态信息的函数,比较信息后控制舵机动作,直到完成无人直升机的自主定点飞行任务后取消看门狗。切换到信息发送任务,发送飞行状态信息到地面基站监控系统。
2.3.3 地面基站控制效果图
软件界面可以直观的显示控制系统效果,同时便于调试与观察直升机的实际飞行状况。基站控制软件应用VC++编译器的套节字socket与基于信号量的多线程技术通过C++语言进行编译。控制效果图中显示无人直升机自主定点飞行时的实时状态信息:当前高度、设定高度、东西距离、南北距离、方位角、俯仰角、测滚角等。实现了良好的人机交互功能,是控制系统开发的必备平台。地面基站控制效果图见图四
图四 地面基站控制效果图
2 结束语
本文对无人直升机控制系统从硬件与软件两个方面进行了阐述,并应用了先进与高性能的实时操作系统VxWorks,通过VxWorks多任务调度时的快速切换响应实现无人直升机的自主飞行。并且通过实际的多次实验飞行与调试,实现了无人模型直升机自主飞行的任务,取得了预期的效果。