APP下载

基于PX4飞控无人机的避障飞行系统设计

2018-07-27万宇楼张琳琳路淑贞徐佳陈娉婷

电子制作 2018年13期
关键词:飞控测距串口

万宇楼,张琳琳,路淑贞,徐佳,陈娉婷

(吉林大学计算机科学与技术学院,吉林长春,130000)

四旋翼无人机作为科技产品在近年来取得了快速的发展,凭借迅捷灵活和稳定可靠等特点被广泛应用于各个领域。具有自主避障功能的无人机无论其安全性还是应用性都得到了极大的提升,下面我们将介绍基于开源飞控的四旋翼无人机的避障飞行系统设计。

1 四旋翼无人机避障系统总体设计

通过四旋翼飞行器上安装的传感器来实时检测周围环境,进而使飞行器根据周围环境判断是否改变当前飞行状态。这一避障方案的基本结构可分为三个部分,第一部分是检测模块,即使用传感器,感知周围的障碍物;第二部分是通信模块,即副控制板与飞控主板实现通信;第三部分决策模块,即飞控主板根据得到的传感器数据,进行判断后,对飞行器发出相应的控制指令来控制飞行状态,本文基于此原理实现四旋翼飞行器的避障飞行系统设计。

2 基于PX4飞控无人机的硬件结构介绍

■2.1 Arduino副控制模块

该模块基于Arduino Uno R3(主控芯片ATMega328P,14个I/O口,内存32KB,时钟频率16MHz)芯片,该芯片通过UART串口与主控芯片相连接,通过I2C总线与四个方位的测距传感器相连,通过轮询方式向四个方向的传感器请求数据。

图1 无人机总体硬件结构

■2.2 超声波传感器测距模块

该模块使用US-100超声波传感器(电压5v,探测距离2cm~450cm,精度3mm),飞行器前、后、左、右四个方向分别安装了超声波测距传感器,检测飞行环境内可能存在的障碍物。在I2C总线上,四个不同方位的传感器具有不同的地址(0xf0,0xf2,0xf4,0xf6),根据不同的地址副芯片便可识别来自不同方向的传感器数据。测距传感器采取IO触发原理,当拉低传感器TRIP引脚后给一个50μs高电平信号,传感器开始一次测距,副芯片得到传感器返回的数据后计算出距离。

■2.3 PX4主控制模块

图2 避障飞行系统总流程

图3 总线与串口图示

四旋翼飞行器主控基于Pixhawk2.4.8开源飞控。Pixhawk开源硬件具有五个uart串口,分别是uartA -the console (usually USB, runs MAVLink telemetry);uartB - the first GPS;uartC - primary telemetry (telem1 on Pixhawk, 2nd radio on APM2);uartD - secondary telemetry (telem2 on Pixhawk);uartE - 2nd GPS。Arduino模块与主控制模块上的uartD相连,实现模块间的物理连接。

Pixhawk2.4.8开源飞控采用STM32F427 Cortex M4为主处理器,具备陀螺仪、加速度、磁强仪、气压计等感应器,有25个UART接口和2个CAN IO接口,有14个PWM输出口。

3 避障飞行系统设计

四旋翼飞行器一般通过控制各轴电机的转速来控制飞行器的姿态,以实现转弯、爬升、俯冲、横滚等飞行状态,其线运动与角运动间存在高度约束性。

■3.1 Pixhawk飞控框架

Pixhawk飞控可分为三大部分:实时操作系统、中间件和飞行控制栈。NuttX实时操作系统的作用是进行底层的任务调度;PX4中间件提供设备驱动和uORB,负责各个模块间的数据传输,运行于NuttX之上,实际上uORB是一套跨进程的IPC通讯模块,在Pixhawk中所有的功能被独立以进程模块为单位工作,而进程间的数据交互要能够符合实时、有序的特点;飞行控制栈可以使用PX4的控制软件栈,也可以使用APM:Plane、APM:Copter等,其运行于PX4中间件之上。

图4

■3.2 控制模块间的信息传递

副控制模块得到四个传感器的数据后,需要通过串口将数据发送给主控制模块,而在这两个控制模块间进行数据通信,需采用特定的通信协议。主控制模块收到信息帧后将会解析帧格式,根据解析后得到的控制量来调整飞行姿态,信息帧由副控制器根据获得的传感器数据生成。

表1 信息帧格式

主控制模块通过UART串口获取数据,首先定义一个input_sonar_datas()函数,NuttX实时操作系统完成初始化等工作,接下来调用飞控核心库中的px4_task_spawn_cmd()函数在NuttX中创建一个新的任务,uORB中进程间的数据通信要通过主题来进行,串口读取完数据后调用orb_publish()完成主题发布,最后接收数据的进程订阅主题并将input_sonar_datas()返回的值赋值给全局变量sonarDatas,sonarDatas即为主控收到的传感器测量数据,主控模块根据sonarDatas来生成控制信息。

■3.3 程控避障的实现

当主控芯片接收到副控制板的信息帧后,首先要对帧格式进行解析,得到传感器的测距信息,分析信息帧生成控制帧,最终根据控制帧来改变飞行姿态,从而实现规避障碍物。

对信息帧解析后可获取传感器测距信息sonarDatas,当发现某一方位距离小于安全值时,便需要及时调整飞行姿态避免与障碍物相撞,四轴飞行器通过pitch/row的角度大小控制产生的水平加速度,过大的水平加速度会造成侧翻,但飞行器在高速遇到障碍物的紧急情况下,需要较大的加速度才能保证飞行安全,所以需要设置适当的加速度约束值。在满足加速度约束值的条件下,生成控制帧controlDatas并将其转化为电机驱动电路输出的PWM信号,依靠螺旋桨间的转速差实现飞行姿态的控制。

表2 控制帧格式

姿态控制部分分为内外环控制,内环控制角速度、外环控制角度。控制过程是先根据目标姿态和当前姿态求出偏差角,然后通过角速度来修正这个偏差角,最终到达目标姿态。具体方法为,AP_Motors和AC_AttitudeController核心库中的AP_MotorsMatrix.cpp和AP_Motors_Class.h是根据roll/pitch/yaw等参数改变电机进而影响飞行姿态的文件,根据sonarDatas来判断是否进行飞行姿态调整,若需要则结合当前姿态中各个参数的数据生成相应的controlDatas,通过controlDatas来设定目标角度指令(_roll_target)与目标高度指令(_pitch_target),实现转向从而避开障碍物。

图5 飞行姿态控制

■3.4 飞行姿态的控制

无人机的飞行姿态主要受pitch俯仰、yaw航向、roll横滚、油门等参数影响,要想改变飞行姿态,需要拟合这些参数生成新的电机的控制信号。

飞行器进行PID调节并输出需要调用AC_Attitude Control库中的函数,例如rate_bf_to_motor_yaw()、rate_bf_to_motor_roll()、rate_bf_to_motor_pitch() 等方法,而AP_Motor库中的set_pitch()、set_roll()、set_yaw()等方法将其转化为电机混控信号,最后电机混控信号需要被解算为PWM信号,以便实现飞行姿态的改变。

4 结束语

飞控系统是四旋翼无人机的重要组成部分,作为开源飞控中最著名的项目之一,PX4被广大无人机爱好者和学者研究,基于PX4实现自主避障功能的无人机具有重要的实际意义。环境感知系统是无人机的“眼睛”,通讯模块是无人机的“神经”,主控避障系统是无人机的“大脑”,本文合理科学地设计了主控与副控之间的通讯,提供了传感器-副控制芯片-主控制芯片-无人机的思路,就软件架构设计进行了介绍,最终实现了无人机避障飞行系统的设计,给未来无人机智能化提供了借鉴意义。

猜你喜欢

飞控测距串口
基于RSSI测距的最大似然估计的节点定位算法
基于API函数库实现串口数据通信的分析与设计
基于EM9000工控板高性能双串口通信模型设计与实现
基于STM32的多通道超声波测距系统设计
民用飞机飞控通电自检测安全性研究
基于单片机的超声波测距导盲杖设计
MCS—51单片机中的多串口通讯技术的应用
中小型太阳能无人机航电系统设计
相对差分单项测距△DOR
基于VC串口通信的实现