基于Kalman滤波与粒子滤波的机器人定位仿真平台
项目介绍
本仿真平台旨在提供一个直观、互动的环境,用于研究和对比机器人状态估计中的核心算法。平台模拟了一个具备速度与角速度控制的移动机器人,在已知地标点环境下,利用含噪声的传感器观测数据进行自我定位。系统深度集成了递归贝叶斯估计的三种主流实现方式,是理解从基础线性滤波到高级非线性状态估计理论与实践转换的理想工具。
功能特性
- 多算法并行仿真:在同一仿真环境下同时运行扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)和粒子滤波(PF)。
- 动态可视化界面:实时展示机器人的真实运动轨迹、各算法的估计路径、传感器观测目标以及粒子群的动态演变。
- 非线性模型模拟:实现了经典的差速驱动运动模型和基于距离/方位角的传感器观测模型。
- 自动误差分析:仿真结束后自动生成误差随时间变化的曲线及均方根误差(RMSE)对比柱状图。
- 健壮的处理机制:内置角度归一化逻辑,确保在跨越 $pi$ 与 $-pi$ 边界时系统运行稳定。
使用方法
- 启动环境:打开 MATLAB 软件。
- 运行仿真:将代码所在目录设为当前工作路径,并在命令行窗口输入主程序函数名并执行。
- 观察实时输出:系统将弹出仿真窗口,黑色线条代表真实轨迹,红、蓝、绿虚线分别对应不同滤波器的估计效果,绿点表示粒子滤波的状态分布。
- 查看报告:仿真结束后,系统会自动弹出第二张分析图表,展示详细的误差统计数据。
系统要求
- MATLAB R2016b 及以上版本。
- 无需特殊工具箱,算法逻辑基于标准数值计算实现。
实现逻辑与功能说明
仿真程序的主逻辑严格遵循移动机器人定位的标准流程,具体包括以下模块:
- 参数与环境初始化
程序设定了 0.1 秒的采样周期和 20 秒的总仿真时长。环境布设了 5 个固定的地标点。系统定义了过程噪声协方差 $Q$(反映电机控制精度)和测量噪声协方差 $R$(反映传感器精度)。
- 运动与观测循环
在每一步迭代中:
- 运动:机器人根据随时间变化的速度指令(正弦波动)进行运动。
- 观测:机器人按照时间间隔轮流观测地标点,获取包含噪声的距离(Range)和方位角(Bearing)信息。
- 估计:将相同的控制指令和观测数据输入到三个并行的滤波器中。
- 滤波算法实现细节
- 扩展卡尔曼滤波 (EKF):通过计算运动模型和观测模型的雅可比矩阵(线性化),将非线性问题转化为线性卡尔曼滤波形式。
- 无迹卡尔曼滤波 (UKF):使用无迹变换(UT)生成西格玛点,通过这些采样点直接穿过非线性方程进行均值和协方差的传递,避免了求导计算并提高了非线性处理精度。
- 粒子滤波 (PF):使用 100 个随机采样的粒子代表机器人的状态。每个粒子独立进行预测,并根据观测值的似然度调整权重,最后通过系统重采样算法防止粒子退化。
- 统计分析
程序实时记录所有历史数据,并在最后阶段依据真实状态与估计状态的差值,计算位置偏移量。利用均方根误差公式量化评价三种算法的定位精度。
关键驱动函数详解
实现了机器人的非线性运动学方程。根据速度 $v$、角速度 $w$ 及航向角 $theta$ 计算机器人在 $X$ 和 $Y$ 轴的分量,并更新姿态。
描述了已知机器人位置与地标位置之间的空间关系,输出机器人的传感器理论观测值。
专门用于处理航向角和方位角的周期性。确保所有的角度计算结果均落在 $[-pi, pi]$ 区间内,防止滤波器因角度跳变而发散。
执行预测步骤(状态外推与协方差更新)和修正步骤(计算增益、处理观测残差)。
包含西格玛点的生成(利用 Cholesky 分解)、非线性映射、加权均值还原以及相关协方差阵的重建。
结合了马尔可夫链蒙特卡洛思想,包含带噪声的状态传播、基于高斯似然的权重评估以及根据有效粒子数触发的系统重采样逻辑。