找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1515|回复: 0

自主悬停&高度融合

[复制链接]
发表于 2016-7-2 11:53:53 | 显示全部楼层 |阅读模式
自主悬停是Crazepony玩家问得最多的问题,也是技术难度最高的问题。

首先我们明确什么是自主悬停?下面是一位资深航模玩家对于自主悬停的解释。

飞行器能够悬停在某个位置,在发生了偏离之后能够自动校正并且回到原来悬停的位置,并且能够在该位置保持足够长的时间,至少2分钟以上,那么我们认为该飞行器是能够自主悬停的。
飞行器在空中是一个三维坐标(x,y,z)位置,涉及到两个维度的悬停。第一是在水平面上(x,y),飞行器不能够左右或者前后漂移。第二是在垂直方向上(又叫Z轴维度),飞行器不能够发生掉高等现象。针对这两个不同的维度,有不同的技术进行解决。

在水平面上,为了确定飞行器的位置,一般使用GPS进行定位,室内一般使用光流进行定位(室内没有GPS信号)。

在垂直方向上,一般使用气压计进行定高,室内等条件下可以使用超声波模块。

能否只用6维数据实现悬停
能否只使用3维加速度和3维陀螺仪这6个维度的数据实现自主悬停?而不再使用气压计和GPS等。现在就我了解,是很难实现。因为只使用这个6维数据,无法知道飞行器在空中的绝对坐标,只能够由6维数据获得相对偏移。没有绝对坐标,就无法对位置实现闭环控制。

当然,我们看到很多只是用了MPU6050的玩具四轴,也能够实现一定程度的悬停,但是那并不是真正意义上的自主悬停。

水平面的定位
室外使用GPS进行水平定位,室内一般使用光流技术(optical flow)。光流传感器其实就是一个摄像头,安装在飞行器上垂直拍摄地面。光流技术就是要对拍摄到的画面进行视觉处理,以此知道相对于地面坐标位置。APM飞控中关于光流传感器的介绍。
optical-flow-sensor.jpg optical-flow-sensor-2.jpg


垂直方向定位
在垂直方向上,使用高精度气压计(如MS5611)进行定位。在飞行器处于较低高度时,可以使用超声波进行高度定位。

Crazepony的自动悬停
飞行器要想实现真正意义的自主悬停需要有自稳和空中绝对坐标。Crazepony有一个高精度气压计MS5611,所以可以实现Z轴的自主悬停。在水平方向上,crazepony没有绝对坐标,无法实现悬停。

在Z轴自主悬停上,Crazepony有一个高精度气压计MS5611,通过气压传感器采集的大气压值计算出来,将气压传感器采集值进行校正后,再通过温度二阶补偿,得到准确的大气压值,最后经过气压转换高度公式就可以得到一个相对于起飞地点的绝对高度(参考气压计MS5611)。

MS5611气压计的精度为10CM,因此需要融合加速度计互补滤波得到比较合适的高度值,Z轴速度值和加速度值。用高度作外环,速度作内环形成高度双环PID控制器,调节输出油门实现Z轴的自主悬停。高度融合在文件Altitude.c中实现,高度双环PID控制在Control.c文件中的CtrlAlti()函数中实现。

高度双环PID控制总体流程。 gdpid.png



代码实现在Control.c文件中的CtrlAlti()函数中。
……
// pid and feedforward control . in ned frame
posZErr= -(altSp - alt);
posZVelSp = posZErr * alt_PID.P + spZMoveRate * ALT_FEED_FORWARD;
//consider landing mode
if(altCtrlMode==LANDING)
    posZVelSp = LAND_SPEED;

velZ=nav.vz;
optical-flow-sensor.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|     repair

GMT+8, 2018-9-25 01:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表