一种基于WiFi控制的四旋翼飞行器设计与实现
扫描二维码
随时随地手机看文章
引 言
2014 年 11 月,李克强总理出席首届世界互联网大会时指出,互联网是大众创业、万众创新的新工具。2015 年 3 月,李克强总理在十二届全国人大三次会议上首次提出“互联网 +” 行动计划,推动移动互联网、云计算、大数据、物联网等与现代制造业结合,引导互联网企业拓展国际市场[1]。
基于以上背景,本文设计一个基于WiFi 控制的四旋翼飞行器控制系统,将网络通信 TCP 协议运用到系统中。该系统用传统的遥控手柄模拟标准的遥控器,遥控手柄与PC 机相连, 四旋翼上添加带有WiFi 模块的RT5350,该设备运行嵌入式Linux 操作系统,可与PC 机建立无线连接,从而遥控手柄通过网络通信将遥控信号传递给四旋翼飞控系统,达到控制四旋翼飞行的目的。本研究对计算机网络的学习有一定的指导意义。
1 系统方案
本系统的总体结构图如图 1所示,系统可分为用户PC 客户端、服务器、PWM控制器和飞控板四个部分。用户将控制信号通过客户端发给服务器,服务器接收到信号后通过串口通信将信号转给PWM控制器,PWM控制器生成输入信号, 飞控板收到信号后控制电机旋转。
2 整体设计
系统划分为两部分,一部分为硬件设计,另一部分为软件设计。其中硬件部分主要是各模块的开发板的选择及开发和 组装,软件部分主要实现控制端和服务器端的通信以及各模 块之间的通信。
2.1 硬件总体结构
本系统的硬件总体结构设计如图 2 所示,硬件总体结构 是按照模块化思想设计的。服务器端主要由 RT5350 模块和 PWM 控制器组成,飞行器主要由飞控板、电机驱动和直流电 机组成 ,客户端主要由 PC 和遥控手柄组成。
飞行器驱动层的主要设备是飞控板和 PWM 控制器,其 中飞控板采用简单的 KK 飞行控制板。其功能简单,易于调节, 价格便宜,便于二次开发。PWM 控制器主要作用是向飞控板 发送指定的 PWM 波形,飞控板根据 PWM 脉冲波对利用 I/O 口直接控制电机。由于飞控板的 I/O 口输出电流为 mA 级,无 法驱动直流电机转动,因此需要使用电机驱动模块驱动电机。 直流电机选用的是减速直流电机,因为减速直流电机的输出 力矩较大,可以适应复杂地形。调节四个电机不同转速用来改变飞行器的飞行动作。
服务器端的主要任务是接收客户端的控制信号,并将信 号传给 PWM 控制器,PWM 控制器将信号传给飞控板。其中 开发板选用 RT5350,如图 3 左所示。其运行的是一个嵌入式 Linux 操作系统,带有 WiFi 模块和 RS 232 串口模块,便于 和客户端以及 PWM 控制器进行通信。PWM 控制器使用的是 艾尔赛舵机控制器(LCSC),如图 3 右边所示。LCSC 拥有 16 路舵机 PWM 脉冲信号输出,可以同时对 16 个舵机进行任意 角度和精确时间的控制。该舵机控制器可以接收串口命令,适 合任何含标准串口(RS 232 电平)的系统,如个人电脑、PLC、 51系列单片机、DSP、FPGA,ARM 等等。
客户端主要由遥控手柄和 PC 组成,PC 需带有无线网卡, 便于和服务器进行通信。标准遥控器采用 2.4 GHz 无线通信, 可以提供 8 通道甚至 16 通道的控制选择。其功能强大、性能 稳定、操作方便,缺点是价格昂贵。本文采用市面上常见的遥 控手柄,价格便宜,可以模拟出 4 个通道信号并产生控制信号。 2.2 软件设计
软件的总体结构主要包括 3 个部分 :摇杆客户端、服务 器端和 PWM 控制器。遥感控制客户端主要是将摇杆的模拟 信号转化成数字信号并通过 TCP 协议发送给服务器,服务器 端接收客户端发送的命令并转发给 PWM 控制器,PWM 控制 器将其转化为 PWM 信号传给飞控端,飞行控制端收到 PWM 信号后控制电机转动。
2.2.1 客户端控制算法设计
客户端主要产生飞行器的飞行信号。游戏手柄客户端的 实现原理是在 Linux 系统下读取手柄的键码值 [2],再通过一定 的数学计算,将键码值映射 PWM 模块可识别的指令。首先 在 Linux 系统下安装驱动后会在 /dev/input 生成 js0。然后通 过 js0 接口来获取遥控手柄的控制信息。当用户操作手柄时, 驱动发送 js_event 的结构给应用程序以通知用户做了哪些操 作。js_event 有如下定义 :
struct js_event {unsigned int time ;/* event timestamp in milliseconds */short value ;/* value */unsigned char type ;/* event type */unsigned char number ;/* axis/button number */ } ;
其次,我们还应了解手柄按键的分布 [3] :
1-4 号键的键值分布表 1 所列。
对于左侧四个键,有两种情况 :
当 ANALOG 键关闭时:上键和下键的 number 值均为 1, 左键和右键的 number 值为 0。其他值不变。
当 ANALOG 键按下时,键值会随着手指按下和松开的 不同状态来做出相应的分布。不同状态下的键值分布如表 2 所列。
当旋转时,相当于向系统传送一系列的 value 值渐变的 js_event。
根据以上原理,系统可以获取手柄的按键值以及摇杆的 位置,得到手柄的遥控信息,并将此信息封装为固定的格式 传给服务器。
2.2.2 服务器设计
服务器运行在嵌入式 Linux 操作系统中,采用 Linux C 语言编程实现,与客户端之间建立 TCP 通信协议 [4]。客户端 通过扫描手柄设备文件读出手柄按键码,将其映射为 PWM 指令发送至服务器。服务器收到指令后通过串口通信将指令 发送给 PWM 控制器,PWM 产生指定波形驱动飞控板,从而 改变飞控 4 个电机转速,控制飞行器飞行动作。
其客户端与服务器之间的通信流程图如图 4 所示。
2.2.3 PWM 控制器
PWM 控制器接收到服务器的控制指令后,通过解析控 制指令产生 PWM 信号,并将此信号发送给飞控输入端。其控 制指令格式如下:
命令格式 :#<ch>P<time>!
<ch> 表示所控制的是第几路舵机,共 16 路(00~15)。
P :指令格式中固定符号,不可缺少。
<time> 表示 PWM 信号的宽度,为单位,
!:指令的结束符号,表示一条指令的结束,不可缺少。
本系统产生 4 路控制信号,分别控制四旋翼的四个电机, 其中 <ch> 表示控制哪一路电机,<time> 表示 PWM 信号宽度, 映射为电机旋转的速度。飞控接收到 PWM 信号后,分别控 制四个电机转动。
3 系统测试结果与分析
3.1 测试环境
本系统的测试环境如下:
系统环境 :嵌入式 Linux、Linux mint 17、Windows7;
硬件环境:嵌入式 Linux 开发板、PC、游戏手柄、四旋翼、 PWM 控制器 ;
网络环境 :WiFi 网络,IP 地址块 192.168.1.0/24。
3.2 测试结果
经过测试系统达到设计需求。在 WiFi 网络环境下,游 戏手柄能控制飞行器的飞行,并能在空中完成悬停、旋转、起伏、 跌落、翻转等动作。飞行器具有抛出之后保持平衡悬停,连 续飞行时间达到 10min 左右,载重轻量物体等性能。图 5 为 飞行器实物图。图 6 为客户端调试运行示意图。
3.3 结果分析
本系统最终能够通过遥控手柄控制四旋翼飞行,达到预 期的目的。但是本系统还存在以下几个问题 :手柄控制飞行器 稳定性较差,由于手柄自身按键原因和数据处理的误差因素, 致使不能精确地映射出遥控器的所有行程 ;手柄灵活性也次 于遥控器,从而使得手柄的控制精准度低于遥控器 ;KK 飞控 板相对简单,易操作,但其对飞行器姿态控制要求较低,自 稳能力差;无线网络覆盖范围小,造成控制范围小,易于失控。
由于本系统存在上述几个问题,所以后期将对本系统做 进一步的更改。首先,将摇杆手柄换成标准的遥控器或进一 步优化手柄控制算法,使其控制更加准确灵活。其次,可以 使用性能更好的飞控板,提高飞行器的自我调节能力。另外, 建立无线局域网,扩大飞行器的飞行范围。
4 结 语
本次设计采用模块化的硬件和软件设计方法,成功实现 了使用摇杆手柄,通过网络传递控制信息来控制飞行器的飞 行,实现了预期的功能。
本设计的创新点具有以下几点 :
(1)通过摇杆手柄替代标准的遥控器,操作简单,并且 大大降低了开发成本。
(2)采用无线网络通信协议来完成遥控信息的传递,成 功将物联网技术运用到本课题中。
(3)将嵌入式 Linux 操作系统运用到飞行器上,可以在 其中添加其它应用,比如加载摄像头用于航拍等。