通过比较GNSS和INS的位置数据可以检测GNSS欺骗,然而INS的误差会随着时间不断累积,往往得不到准确的结果。本文介绍了一种利用GA和XGBoost实现GNSS欺骗检测的方法。该方法有两个阶段:
-
第一阶段:使用 XGBoost 模型分析GPS和INS的数据以判断无人机是否受到GPS欺骗,使用 遗传算法(Genetic Algorithm ,GA) 来自动调整并得到最模型的最优超参数。由于直接训练 XGBoost 的参数需要大量的数据和计算,为了不影响无人机的实时性能,该阶段使用无人机的历史数据进行脱机训练。
-
第二阶段:将上一阶段训练好的模型上传到无人机中,使用无人机的传感器和飞行数据进行进一步的训练,使得模型可以适应不同类型的传感器,以获取的更精确的预测能力。
一、基本概念
惯性导航(INS)
惯性导航采样加速度计、陀螺仪等传感器计算飞行器的位置。通常用陀螺仪测量飞行器的角速度,对其积分可得到当前时刻飞行器相对于地理位置的绝对角度,并导出一个坐标变换矩阵,将加速度计测得的相对于飞行器的加速度变换成相对于地理位置的加速度,对其积分得到速度,继而估计出位置的变化量。最终根据上一时刻的坐标和位置变化量估计出当前的坐标。
最简单的方法是比较GPS和INS的位置结果,判断飞行器是否被劫持,过程如下:
然而,由于INS的计算含有积分操作,其误差会随着时间不断累积,最终往往得到错误的结果。下图展示了一次飞行过程中,上述检测方法的偏差:
XGBoost
XGBoost(eXtreme Gradient Boosting,极致梯度提升算法),是基于GBDT的一种机器学习算法。与SVM等其他机器学习算法相比,XGBoost具有训练速度快、模型不易过拟合等优点。
对于一个给定的有n个样本、m个特征的数据集D,XGBoost使用K个函数进行预测:
其中, 是回归树空间, 是树的叶子节点个数,每一个 都表示一个结构为 、叶子节点权重为 的树。模型每次学习一个新树 来弥合上一次的预测偏差,该学习过程通过最小化下面的目标函数来完成:
其中, 是一个惩罚项,它表示模型复杂程度,用于减少模型的过拟合。 是一个可微的凸损失函数,它表示预测结果和真实结果的偏差。
将损失函数用泰勒展开式展开到二阶,最终可以将目标函数重写成:
XGBoost 使用泰勒展开取得函数做自变量的二阶导数形式,有如下好处:
-
二阶信息能够让梯度收敛的更快,一阶信息描述梯度变化方向,二阶信息可以描述梯度变化方向是如何变化的。
-
把损失函数的选取和模型解耦合了,损失函数只需要二阶可导,增加了XGBoost的适用性,使得它能够按需选取损失函数,可以用于分类,也可以用于回归。
遗传算法
-
-
-
遗传算法在运行的过程中会进行迭代,每次迭代都会生成若干条染色体。适应度函数会给本次迭代中生成的所有染色体进行评价,让适应度较高的染色体的遗传概率更大,从而使得若干次迭代后的染色体质量越来越优良。
-
遗传算法每一次迭代都会生成N条染色体,“交叉“将上一代的两条染色体从某个位置截断再拼接成新染色体。每条染色体被选中的概率为:染色体的适应度 / 所有染色体的适应度之和。
-
交叉只是将已有的基因进行重新组合,无法保证算法达到全局最优解。当通过交叉生成了一条新的染色体后,需要在新染色体上随机选择若干个基因,然后随机修改基因的值,从而给现有的染色体引入了新的基因。
-
每次进化中,为了保留上一代优良的染色体,将上一代中适应度最高的几条染色体直接复制给下一代,而不通过交叉和变异。
随机生成一组可行解,即第一代染色体
进行P次迭代过程,在每个迭代过程中:
计算现有一代的每条染色体适应度
通过复制生成M条染色体
通过交叉生成N-M条染色体
对交叉生成的N-M个染色体进行变异操作
返回最后一代染色体
二、检测方法
根据上文INS的介绍可以看出,IMU测得的数据(如加速度、角速度)与地理位置数据(GPS测得的数据)之间的关系是复杂且非线性的,而XGBoost擅长学习这种关系。
第一阶段:脱机训练
由于模型的超参数调整算法有很高的复杂度,无人机没有足够的资源进行实时计算,因此在第一阶段先进行脱机的训练。
预先收集大量的无人机飞行数据,可以得到IMU的数据:加速度 、角速度 ,其中 是去除陀螺仪漂移残差的结果。为了使数据更加平滑,对二者进行中值滤波:
此外,数据中还包含每一时刻的GPS位置变化(其中,、 、 为经度、纬度、高度):
本模型为二分类模型,将 作为模型输入,模型输出GPS是否受到欺骗。
由于通过手动调整XGBoost模型的超参数十分困难,本文使用了遗传算法来自动快速地寻找模型的最优超参数。
第 gen 代的所有个体/染色体/可行解:P(gen)
适应度函数:第7行 fitness,该函数中包含XGBoost训练函数。从P(gen)中挑选出预测精度最好的,并输出评估结果 eval、XGBoost模型参数 xgb(gen),以及由 xgb(gen) 训练出的XGBoost模型 model(gen)。
在进行交叉时用 roulette wheel selection 的方法从上一代中选出两个个体p1,p2,分别判断是否在交叉和变异的概率内。
第二阶段:实机训练
为了让模型满足适应不同型号传感器的无人机,提高模型的预测精度,还需要进行第二阶段的实机训练。在第一阶段完成后,将训练好的模型上传到无人机中,其中模型的超参数即为第一阶段获得的最优超参数。在进行第二阶段训练时,模型输入是无人机实时的GPS、IMU数据,并且均被标识为真值。
假设无人机在起飞后最初的m秒钟内不会受到GPS欺骗。第二阶段中,飞行器起飞的前m秒内进行模型训练;m秒之后系统切换到预测模式以检测飞行器是否被劫持。第二阶段的算法如下:
三、实验
-
一台原型四轴无人机,装备GPS接收器(5Hz采样率)、IMU(50Hz采样率)
-
无人机控制器:树莓派 3 Model B,四核 ARM Cortex A53 CPU with 1.2 GHz and 1GB SDRAM,其上运行着PX4 自动驾驶软件。
将无人机在安全的空域内低速飞行 次,其中GPS劫持发生 次。对于非劫持的情况,半数飞行轨迹是直线,半数为随机生成轨迹,后者中的75%在一个较短的时间间隔内包含至少两个连续的转向。
设置样本时间为 (因为GPS和IMU频率分别为5Hz、50Hz)。
本文使用 次飞行数据(其中 次为GPS劫持情形)进行第一阶段的模型训练,包含了超过 个采样数据。在两个阶段的训练完成后,本文进行了 次飞行(其中 次为GPS劫持情形),包含了超过 个采样数据。
本文将虚假GPS信号保存在一个微控制器中,当需要进行GPS欺骗时,GPS程序直接从这里读取GPS信号。
本文的GPS攻击情形只包含水平维度上的偏移。攻击者可能会在竖直方向上进行GPS欺骗,例如让无人机撞向地面,然而通常无人机会配置高度计,此类攻击情形容易被检测到,因此本文不考虑这种攻击。
在脱机训练中,设置遗传算法的人口数 ,迭代次数 ,交叉概率 ,变异概率 。为了XGBoost模型过拟合,设置”early_stopping_rounds”参数为10,该参数10表示在10迭代过程中若损失值没有改进,则训练将会停止。
通过遗传算法得到的最优 XGBoost 模型超参数如下表所示:
在第二阶段,设置训练时间 ,即在起飞后5秒内进行训练,之后切换到预测模式。
四、评估
-
,其中 为正确检测到当前是否被GPS劫持的实验次数, 为实验总数。
-
检测延迟:GPS劫持发生到第一次被检测到的时间间隔。
在遭到GPS劫持的情况下,各种检测方法的结果如下:
从上图可以看出,使用XGBoost的默认参数,检测延迟为2s,而使用本文遗传算法找到的参数,检测延迟仅为1s。此外如上图所示,本文也使用了其他的几种方法来进行GPS劫持检测,例如SVM来代替XGBoost,由于SVM容易过拟合,因此正确率较低。
对于每个采样数据,在未受到劫持和受到劫持的情况下,本文模型判断的正确率分别为100%、96.3%。当检测时间为1s时,最终的成功率在两种情况下均为100%。
五、总结
本文提出的方法可以有效地检测针对无人机的GPS劫持,具有很高的正确率和较低的延迟。
然而,本文提出的模型对训练数据较为敏感,因此仅仅适用于与训练数据相似的欺骗行为。一个改进方向是使用更多型号的无人机和更复杂的飞行路径进行训练,例如在飞行路径中设置不同的速度、高度。
另外,倘若将本文的方法应用到车辆上,则GPS信号的质量问题会更加突出。与在空旷地域飞行的无人机不同,城市中往往存在许多GPS干扰,如GNSS多路径效应。这可能会使得本文方法的误判率提高。
原文始发于微信公众号(轩辕实验室):使用GA和XGBoost实现无人机GNSS欺骗检测