仅测角系统跟踪MATLAB实现,在修正椭圆坐标系MSC下的稳定跟踪算法
仅测角系统无法获取传感器与目标之间的距离信息,仅能得到目标在传感器坐标系中的观测角度信息,存在距离不确定性。传统的笛卡尔坐标下,无法实现对目标的稳定跟踪。而在修正的椭圆坐标系下,通过构造新的状态变量,构建匀速运动模型在极坐标系下的非线性转移过程,并利用极坐标系下的测角信息线性观测,能够实现在仅测角系统下的目标稳定跟踪。
运动参数的模糊性如下图所示:
图1 状态不确定性示意图
从图中可以看到,传感器的量测值(即方位&俯仰)可对应无数个目标位置,即不满足目标与量测一一对应关系,无法确定目标真实的运动状态。
参考IEEE Transactions on Aerospace and Electronic Systems期刊论文:
《Heterogeneous Track-to-Track Fusion in 3-D Using IRST Sensor and Air MTI Radar》
一、传感器观测几何
图2 观测几何
二、目标的CV运动方程
假设目标服从匀速直线CV运动,笛卡尔坐标系下运动方程是线性的,其状态向量与运动方程如下:
其中,是目标的运动转移矩阵,
是一个零均值的高斯白噪声,其协方差是
。具体形式是:
为了实现仅测角系统的稳定跟踪,构建修正椭圆坐标系下的状态向量如下:
与
之间存在一一对应的关系,具体如下:
其中,。
此时,联合上述状态变换以及笛卡尔坐标系下的线性运动方程,可以得到修正的椭圆坐标系下的非线性运动方程:
注意:此时运动模型是非线性的,需要采用无迹变换进行预测。
三、线性观测模型
仅测角系统的量测方程(方位角&俯仰角)以及对应的观测协方差矩阵可以表示为:
注意:此时量测模型是线性的,可以采用KF的更新过程。
四、仿真实验结果
构建如下图3中的观测场景:
图3 观测场景
算法的滤波结果如下:
图4 三个方向的实际轨迹与跟踪轨迹
图5 位置收敛曲线
图6 速度收敛曲线
从上述结果可以看出,尽管仅测角系统没有测距信息,但是仍然能够实现目标的稳定跟踪,其跟踪误差逐步收敛。
部分主函数与子函数如下,如有代码问题,加UltraNextYJ交流。
for i_mc = 1:MCx_cart0 = [5500, -50, 700, 30, 2300, -20]';P_cart0 = diag([100^2,2^2,100^2,2^2,100^2,2^2]);%% 不同坐标系状态向量的转换[x_msc0] = fun_state_cart2msc(x_cart0);%% 不同坐标系协方差矩阵的转换[P_msc0] = fun_CT_cov_cart2msc(x_cart0, P_cart0);% 滤波状态初始化xk_msc_CKF = x_msc0;Pk_msc_CKF = P_msc0; x0 = mvnrnd(x_msc0, P_msc0); % 初始状态x_msc = x0';for k = 1:N%%%%%%%%%%%%%%%%%%%%% 目标模型和测角量测模型 %%%%%%%%%%%%%%%%%%%% 目标模型CVw = sqrtm(Qk) * randn(6,1); % 过程噪声(开方得到标准差)% 极坐标系下的运动方程,预测仅仅用于存储真实值x_msc = fun_state_cart2msc(Fk * fun_state_msc2cart(x_msc) + Gk * w); x_cart = fun_state_msc2cart(x_msc); sV(:,k,i_mc) = x_cart;% 红外仅测角的量测模型v = normrnd(v_mu, [sigmaAz; sigmaEl]);[az,el] = MeaOnlyAngle(x_cart, xp); AzMea = az + v(1);ElMea = el + v(2);rV(:,k,i_mc) = [AzMea, ElMea]';%%%%%%%%%%% MSC-CKF %%%%%%%%%[xk_msc_CKF, Pk_msc_CKF] = fun_MSC_CKF(xk_msc_CKF,Pk_msc_CKF,Fk,Gk,Qk,rV(:,k,i_mc),Rk,H);%%%%%%%%%%%%%% end filter endendfunction [x_cart] = fun_state_msc2cart(x_mpc)% 提取 MPC 下的分量xi1 = x_mpc(1);xi2 = x_mpc(2);xi3 = x_mpc(3);xi4 = x_mpc(4); % 对应实际的方位角(此处方位角的定义是不一样的)xi5 = x_mpc(5); % 对应实际的俯仰角 xi6 = x_mpc(6); % 对应距离的倒数% 计算速度分量转换所需的角度余弦和正弦值cosXi4 = cos(xi4);sinXi4 = sin(xi4);cosXi5 = cos(xi5);sinXi5 = sin(xi5);% 计算笛卡尔坐标系下的位置分量xPos = sinXi4 * cosXi5 / xi6;yPos = cosXi4 * cosXi5 / xi6;zPos = sinXi5 / xi6;% 计算笛卡尔坐标系下的速度分量xDot = (sinXi4*(xi3*cosXi5 - xi2*sinXi5) + xi1*cosXi4) / xi6;yDot = (cosXi4*(xi3*cosXi5 - xi2*sinXi5) - xi1*sinXi4) / xi6;zDot = (xi2*cosXi5 + xi3*sinXi5) / xi6;% 构造笛卡尔坐标系状态向量x_cart = [xPos; xDot; yPos; yDot; zPos; zDot];
endfunction [x_msc] = fun_state_cart2msc(x_cart)% 提取位置分量xPos = x_cart(1);yPos = x_cart(3);zPos = x_cart(5);% 提取速度分量xDot = x_cart(2);yDot = x_cart(4);zDot = x_cart(6);% 计算 rho 和 rrho = sqrt(xPos^2 + yPos^2);r = sqrt(xPos^2 + yPos^2 + zPos^2);% 计算 MSCS 下的位置部分az = atan2(xPos,yPos); % 等价于 arctan(x/y) % 此处的定义并不相同,两个角度是互余的el = atan2(zPos, rho); % 等价于 arctan(z/rho)r_inv = 1 / r;% 计算 MSCS 下的速度部分% 计算第一速度分量 (对应 xi_1)azRate = (yPos * xDot - xPos * yDot) ./ (rho * r);% 计算第二速度分量 (对应 xi_2)elRate = (zDot * rho^2 - zPos * (xPos * xDot + yPos * yDot)) ./ (rho * r^2);% 计算第三速度分量 (对应 xi_3)rDot = (xPos * xDot + yPos * yDot + zPos * zDot) ./ (r^2);% 构造 MSCS 状态向量x_msc = [azRate; elRate; rDot; az; el; r_inv];
end