APP下载

基于Android的多功能四旋翼飞行器设计

2018-01-15巫子晨杨文韬孙蓬勃

现代计算机 2017年34期
关键词:前面板上位字节

巫子晨,杨文韬,孙蓬勃

(大连理工大学软件学院,大连116621)

1 需求分析

四旋翼飞行器是一种四螺旋桨驱动的、可垂直起降的飞行器[1],其已广泛应用于军事、民用等诸多领域[2]。对于传统的四旋翼飞行器,只能通过专用遥控器进行控制,功能单一、自动化低,飞行过程中需要用于保持操作状态,需要较多技巧,对于非专业人群来说十分不便,容易出现意外,而且无法实时了解飞行器飞行时的状况,导致无法及时发现问题并做出调整。

基于以上分析,在控制端应用方面,需要一个简洁友好的控制界面方便用户控制,例如运用手机App直接对飞行器进行控制,以替代传统的遥控器。或是直接通过PC端应用程序控制,在控制端实时获取飞行器的状态参数,发布飞行器任务,例如路线规划,自动投递等。在飞行器设计方面,要具有一定的抗干扰能力和较高的自动化程度,以方便用户使用,例如自动起飞和降落、自动定高和定点,当受到外界干扰时,能通过自我调节保持稳定等。

2 系统设计

本系统的主要工作逻辑如下:四旋翼飞行器启动,按照设计程序执行飞行任务;Android App通过Wi-Fi连接四旋翼飞行器,监测并控制飞行器当前状态;上位机通过蓝牙连接至飞行器,辅助控制飞行器。系统结构层次见图1:本系统的主要功能模块划分为:目标机模块、Android端模块和上位机模块。其中以四旋翼飞行器为核心,Android端与上位机则负责监测飞行器状态并施以辅助控制。

2.1 目标机模块设计

该模块为四旋翼飞行器硬件平台上的软件部分,层次关系如图2:

四旋翼飞行器的硬件部分以STM32F4系列开发板为主控板,将其与机架、电机等飞行器硬件组装后得到硬件平台。软件部分包括飞行器底层驱动,例如气压计、磁力计、加速度计等传感器的驱动,以及飞行器姿态解算和飞控算法软件。

图2 四轴软件与硬件两方面内容

四旋翼飞行器实现定高、定点、循迹、避障等基础功能,并与终端实时通信,不断反馈机体自身以及周围环境信息。其中关键性问题分为两个:传感器的数据融合算法、飞行控制算法。

(1)传感器的数据融合算法

陀螺仪动态响应特性良好,但计算姿态时会产生累积误差。磁力计和加速度计测量姿态没有累积误差,但动态响应较差。因此他们在频域上特性互补,可以采用互补滤波器融合这三种传感器的数据,提高测量精度和系统的动态性能。

设计的互补滤波器的传递函数为:

其中C(S)表示飞行器运动过程中真实的姿态矩阵;Ĉ(S)表示互补滤波器估计得姿态矩阵;Co表示加速度计和磁力计观测到的姿态矩阵(Co=C+μH,μH为观测到的高频噪声);Gω为陀螺仪测量得到的姿态矩阵(Cω=C+μL,μL为低频误差累积);具有一阶低通滤波特性,G2具有一阶高通滤波特性,因此通过互补滤波器能够消除高频噪声和低频误差的累积,能够很好地融合各传感器数据。

互补滤波姿态解算的步骤如图3所示。

图3 互补滤波姿态解算步骤图

在姿态计算初始时,通过陀螺仪采集数据获得的飞行器初始姿态角计算得到初始时刻的四元数,即q0、q1、q2、q3;读取加速度计的值以及磁强计的值并将其测量值转化为单位向量通过初始时刻的四元数计算获得磁场向量ŵb与重力向量̂b,并分别与̂b和̂b进行叉乘得到计算姿态与实际姿态的误差eφ与eθ,利用处理后的误差值δ修正陀螺仪的采样值ωk得到修正的陀螺仪数值ω,将ω作为系数Ω更新四元数初始值q并作规范化得到最终值q̇,将四元数转换成欧拉角输出姿态矩阵Ĉ。

(2)飞行控制算法

四旋翼飞行器的控制目标是使其在无动作指令时保持稳定悬停状态,有动作指令时有效完成指定动作。串级PID控制器结构简单、稳定性好、工作可靠、调整方便,在工业控制中被广泛使用。使用串级PID控制器进行飞行器的姿态控制,原理如图4所示:

图4 串级PID原理图

在四旋翼飞行器中,将飞行器的姿态角度作为外环的PID输入值,用角速度作为内环PID的输入值,串级PID的输出值经过处理后直接累加至PWM值输出至电机,其示意图如图5所示:

图5 飞行姿态PID控制器原理图

以姿态欧拉角的期望值与计算值之差作为PID控制器的输入,每个电机对应的PWM控制量都是三个PID控制器输出的叠加,叠加量的正负与电机位置相关。姿态控制与升力控制相结合,使飞行器能够完成三维空间的各种运动。飞行器悬停可拆分为定高与定点功能,定高使用超声波模块输出值作为PID高度环输入值,将气压计采集数据的微分作为速度环的输入值,通过串级PID调控达到稳定在某一高度飞行的效果。定点功能的实现与定高功能类似。在室外采用GPS实现定点,通过GPS采集的经纬度坐标与目的坐标经纬度进行比较并作处理后得到位置的偏差量。将该偏差量放大后作为单级PID的输入,并将PID输出作为飞行器的目标姿态,从而实现GPS定点。由于室内无法收到GPS信号,故飞行器在室内采用光流定点,使用的控制算法为串级PID。通过光流模块采集地面图像移动速度,滤波并积分,然后再以加速度计采集的数据校正,从而得到飞行器在平面内的相对位置,达到定点效果,定高与定点结合从而实现悬停效果。

2.2 Android端模块

Android端功能主要分为两个子模块,即界面设计与通信协议设计:

(1)界面设计

本系统的Android App界面布局如图6:

图6 Android App界面布局设计

安卓界面设计采用透明化风格,没有视频时默认为背景色,图标控件均为偏深透明色,满足操作的同时可以看到视频流的要求。同时,偏移数据实时显示在界面上,使用户有数据化操作体验。

(2)通信协议设计

由于在安卓端与飞行器通信的过程中需要发送多种格式的消息,为了避免由于丢包或其他原因而造成通信紊乱,设计了飞行器与终端接发消息的通信协议,如图7所示:

图7 部分通信协议

其中在Android端读取飞行器发送的消息时,安卓端先发出读请求,请求的前两个字节0xA55A为命令头,第三个字节代表当前消息的总长度,第四个字节表示希望读取数据的ID。在安卓端向飞行器发送写命令时,消息前两个字节为命令头,第三个字节0xFF代表当前命令为写请求,从第四个字节开始为安卓端向飞行器写入的具体数据,当所有数据发送完毕时,安卓端接着发送0xA5AA两个字节表示发送完毕。

2.3 上位机模块

上位机模块即PC端地面监测站,用于辅助安卓端进行控制,使用美国国家仪器公司开发的LabVIEW软件进行开发。在上位机与飞行器进行蓝牙通信时,可使用LabVIEW提供的VISA组件,对于串口通信相关的开发相对方便,且虚拟仪器的显示界面十分适合用作开发上位机监测模块。

上位机模块主要实现如下功能:

(1)监测四旋翼飞行器当前的PWM、加速度、陀螺仪、磁力计、高度、温度、压力等多项参数,绘制相关的图像并保存数据,并通过3D图像实时模拟飞行器姿态;

(2)对四旋翼飞行的陀螺仪、磁力计等多个传感器的值进行校订与配置;

(3)读取、修改四旋翼飞行器的PID参数;

(4)模拟四旋翼飞行器控制器手柄的实时状态;

(5)实时获取摄像头采集图像并保存;

(6)通过PC键盘上的按键对四旋翼飞行器进行简易控制;

(7)获取飞行器当前在空间中的三维坐标、速度以及飞行轨迹;

(8)输入目的坐标,飞行器可自动飞行到该点上。

3 系统实现

在飞行器姿态解算时,采用数据融合算法来减小误差,部分代码如下:

norm=invSqrt(ax*ax+ay*ay+az*az);

ax=ax*norm;

ay=ay*norm;

az=az*norm;

norm=invSqrt(mx*mx+my*my+mz*mz);

mx=mx*norm;

my=my*norm;

mz=mz*norm;

hx=2*mx*(0.5f-q2q2-q3q3)+2*my*(q1q2-q0q3)+2*mz*(q1q3+q0q2);

hy=2*mx*(q1q2+q0q3)+2*my*(0.5f-q1q1-q3q3)+2*mz*(q2q3-q0q1);

hz=2*mx*(q1q3-q0q2)+2*my*(q2q3+q0q1)+2*mz*(0.5f-q1q1-q2q2);

bx=sqrt((hx*hx)+(hy*hy));

bz=hz;

vx=2*(q1q3-q0q2);vy=2*(q0q1+q2q3);vz=q0q0-q1q1-q2q2+q3q3;

wx=2*bx*(0.5f-q2q2-q3q3)+2*bz*(q1q3-q0q2);

wy=2*bx*(q1q2-q0q3)+2*bz*(q0q1+q2q3);

wz=2*bx*(q0q2+q1q3)+2*bz*(0.5f-q1q1-q2q2);

ex=(ay*vz-az*vy)+(my*wz-mz*wy);

ey=(az*vx-ax*vz)+(mz*wx-mx*wz);

ez=(ax*vy-ay*vx)+(mx*wy-my*wx);

其中 ax、ay、az为加速度计测量值,mx、my、mz为磁力计测量值,vx、vy、vz是陀螺仪测量值积分后,再通过解算得出的重力向量,它们之间的差异就是陀螺仪积分后计算出的姿态与加速度计和磁力计测出姿态之间的差异。因为向量间的差异可用向量叉积表示,ex、ey、ez就是两个重力向量的叉积,该叉积最终用于更新四元数 q0、q1、q2、q3。

Android端主界面如图8所示:

图8 Android端主界面

其中标记处:①②为操纵杆;③为采集视频与图像显示界面;④为控制信息显示面板;⑤为传感器信息显示面板;⑥为微操模式;⑦为一键返航模式;⑧⑨为飞行模式切换按钮。

Android界面的开发利用Canvas工具,根据屏幕的相对位置定位并绘制需要显示的内容。系统将首先计算屏幕的大小,根据预先规定的每个控件所占的百分比相应计算出每个控件的实际大小以及在屏幕上的位置。

OFFSETX、OFFSETY、OFFSETX0、OFFSETY0等四个数据分别表示左聚焦点在水平、竖直的偏移量和右聚焦点在水平、竖直的偏移量,并根据这四个数据计算符合需要的PWM四个通道的数据控制飞行器的姿态完成起降与飞行。微调界面主要是为了避免圆形操作区域过于灵敏造成操作上的不适应,方法为降低控件移动时的灵敏度。

当处理视频流时,安卓端从缓存区中按字节读出数据,按照预定协议来读取视频信息,并采用字节流方式将视频更新至背景面板。

上位机程序共包括四个前面板:端口设置、AHRS数据监测、虚拟手柄控制端、飞行地图。

上位机的运作流程与安卓端类似,在监测飞行器当前的状态时,步骤如下:上位机先向飞行器发出数据请求;飞行器验证请求的命令头;飞行器按照设计协议读取上位机希望获得数据的ID;飞行器将数据发送给上位机,上位机将获得的数据写入,以图标形式显示在控件上。

在调参以及对飞行器进行辅助控制时,为保证即时性,上位机采用LabVIEW中的事件结构。上位机在下达飞行任务或调整参数时触发事件,通过蓝牙向飞行器发送数据,飞行器验证命令后作出相应的反馈。

4 效果图

Android端运行效果如图9所示。

图9Android端运行界面

系统采用成熟的SurfaceView控件设计,当系统内某个数据修改时将会对系统界面产生回调,立即更新界面数据。

上位机端口设置前面板如图10所示。

图10 端口设置前面板

该面板用于与PC连接前的配置,在连接后可实时显示各通道PWM值,模拟出当前手柄状态并根据当前姿态数据模拟机体的3D图像。

上位机AHRS数据监测前面板如图11所示。

图11 AHRS数据监测前面板

该面板用于监测飞行器当前状态以及周围环境信息,包括姿态角、加速度、高度、温度等,并将图表保存至本地,还可根据数据精准度校正传感器或修改配置信息。

上位机虚拟手柄控制端前面板如图12所示。

该面板用于PC端对于飞行器的辅助控制,可通过键盘对飞行器发布一些简单飞行指令,避免Android端出现意外导致飞机失控。同时该界面可实时捕获机体载有摄像头采集的图片,并可保存至本地.

上位机飞行地图前面板如图13所示。

图12 虚拟手柄控制端前面板

图13 飞行地图前面板

该面板用于发布定点飞行任务,在前面板输出目标坐标后,飞行器即可前往该目标点,并悬停于该点上。前面板可实时读取飞行器在平面上以及在空间内的飞行轨迹。

5 结语

在本项目研究中,搭建了可以实现一系列任务功能、有一定抗扰性的四旋翼飞行器,设计了用于控制飞行器的Android端和上位机软件。这一系列的设计简化了四旋翼飞行器的操作,并可使用户更加方便地进行监测控制。

[1]刘丽丽,四旋翼飞行仿真器的建模及控制方法的研究[D].湖南长沙:中南大学,2009

[2]PAUL G F,THOMAS J G.Introduction to UAV Systems[M].Columbia,MD:UAV Systems,1998.

猜你喜欢

前面板上位字节
No.8 字节跳动将推出独立出口电商APP
颜值高和散热强可以并存3款高品质机箱推荐
电竞潮牌范航嘉GX520S机箱评测
电竞潮牌范 航嘉GX520S机箱评测
No.10 “字节跳动手机”要来了?
轻量级分组密码Midori64的积分攻击
特斯拉 风云之老阿姨上位
基于ZigBee和VC上位机的教室智能监测管理系统
人类进入“泽它时代”
个性化的机箱选择