
1) 【一句话结论】在船舶多传感器(GPS、AIS、雷达)位置估计中,卡尔曼滤波是核心选择,因其在线性系统下最优,通过递推预测与更新实现状态估计,但需注意非线性场景需扩展(如EKF)。
2) 【原理/概念讲解】卡尔曼滤波基于状态空间模型,将系统状态(如位置、速度)用状态向量(x_k)表示,状态方程描述状态随时间演变(含过程噪声(w_k)),量测方程描述量测(如GPS位置)与状态的关系(含量测噪声(v_k))。滤波过程分两步:
3) 【对比与适用场景】
| 滤波算法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 卡尔曼滤波 | 线性系统最优递推滤波 | 线性系统下最小均方误差,计算高效 | 线性系统(如匀速运动船舶) | 非线性场景误差大,需扩展 |
| 扩展卡尔曼滤波(EKF) | 卡尔曼滤波的非线性扩展 | 线性化量测/状态方程,保留递推 | 非线性系统(如船舶加速、转向) | 非线性化误差,高阶非线性效果差 |
| 粒子滤波 | 基于蒙特卡洛的贝叶斯滤波 | 非参数化,处理强非线性、非高斯噪声 | 强非线性、非高斯噪声(如传感器突变) | 计算复杂,粒子退化问题 |
4) 【示例】(Python伪代码,状态:位置x、y,速度vx、vy)
# 初始化
x = [0, 0, 0, 0] # 状态向量:[位置x, 位置y, 速度vx, 速度vy]
P = np.eye(4) * 1000 # 协方差矩阵
F = np.array([[1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) # 状态转移矩阵
Q = np.eye(4) * 0.1 # 过程噪声协方差
H = np.array([[1, 0, 0, 0], [0, 1, 0, 0]]) # 量测矩阵(位置量测)
R = np.eye(2) * 1 # 量测噪声协方差
while True:
# 1. 预测
x_pred = F @ x
P_pred = F @ P @ F.T + Q
# 2. 更新
z = np.array([GPS位置, AIS位置]) # 量测
K = P_pred @ H.T @ np.linalg.inv(H @ P_pred @ H.T + R) # 卡尔曼增益
x = x_pred + K @ (z - H @ x_pred)
P = (np.eye(4) - K @ H) @ P_pred
5) 【面试口播版答案】(约80秒)
“面试官您好,在船舶多传感器(GPS、AIS、雷达)位置估计中,我选择卡尔曼滤波作为核心算法。首先,卡尔曼滤波基于状态空间模型,通过递推预测和更新实现最优估计。步骤上,先根据状态方程预测下一时刻状态(比如位置和速度),再结合量测数据(如GPS实际位置)更新预测结果。具体来说,预测阶段计算状态预测值和协方差,更新阶段用卡尔曼增益结合量测修正状态。优点是计算高效,在线性系统下最小均方误差;缺点是假设系统线性,若船舶加速或转向(非线性运动),需用扩展卡尔曼滤波。对于船舶航行,通常先验证线性假设(如匀速阶段),再用卡尔曼滤波,必要时扩展为EKF处理非线性。总结来说,卡尔曼滤波是基础选择,通过递推优化位置估计,适合多传感器融合的场景。”
6) 【追问清单】
7) 【常见坑/雷区】