当前位置: 首页 > news >正文

速度误差与姿态误差的关系

EKF INS/GPS松组合导航,15状态,地理系采用NED(北东地)

北东地坐标系下的惯性导航总是带着某种神秘感。当我们把IMU数据塞进算法时,那些跳动的数值就像在三维空间跳华尔兹。今天咱们聊聊怎么用15个状态的扩展卡尔曼滤波(EKF)把INS和GPS揉在一起——注意不是做面包,但确实需要精准的"发酵"比例。

先看状态向量这个容器要装什么货。位置误差三个(纬度、经度、高度)、速度误差三个(北东地)、姿态误差三个(滚转俯仰偏航)、陀螺零偏三个、加速度计零偏三个,刚好凑成15维。代码里大概长这样:

class States: def __init__(self): self.lat_err = 0.0 # 纬度误差 self.lon_err = 0.0 self.alt_err = 0.0 self.vn_err = 0.0 # 北向速度误差 self.ve_err = 0.0 self.vd_err = 0.0 self.roll_err = 0.0 # 滚转角误差 self.pitch_err = 0.0 self.yaw_err = 0.0 self.gyro_bias = np.zeros(3) # 陀螺零偏 self.accel_bias = np.zeros(3) # 加速度计零偏

系统模型是EKF的重头戏。状态转移矩阵F像张蜘蛛网,把各状态变量联系起来。特别要注意地理系下的速度微分方程,科氏力和重力项的处理容易让人头大。这里给个简化版的状态转移片段:

def compute_F_matrix(phi, v_n, R_N, R_E): F = np.zeros((15,15)) F[3:6,6:9] = skew_matrix([0, 0, gravity]) # 重力投影项 # 位置误差与速度误差的关系 F[0,3] = 1/(R_N + h) F[1,4] = 1/((R_E + h)*cos(lat)) F[2,5] = -1 # 惯性器件误差模型 F[9:12,9:12] = -1/tau_gyro * np.eye(3) # 陀螺零偏一阶马尔可夫 F[12:15,12:15] = -1/tau_accel * np.eye(3) return F

处理GPS量测更新时有个小技巧:当GPS信号丢失时,直接把对应量测噪声调到极大值,相当于让系统纯惯性推算。代码实现可以用numpy的掩码操作:

if gps_available: H = np.zeros((6,15)) H[0:3,0:3] = np.eye(3) # 位置观测 H[3:6,3:6] = np.eye(3) # 速度观测 R = diag([sigma_pos**2, sigma_vel**2]) else: H = np.zeros((0,15)) # 空观测矩阵 R = np.eye(0) # 空噪声矩阵

实际调试时会遇到两个魔鬼细节:1) 姿态误差的线性化范围别超过5度,否则方向余弦矩阵展开会崩;2) 地理系更新周期别超过1秒,否则地球自转补偿项会累积误差。有个工程师曾经把更新周期设成10秒,结果无人机在测试场画出了抽象派轨迹。

最后说说协方差矩阵的初始化。别傻乎乎地用单位矩阵,试试这样的经验值:

P = np.diag([ 1e-4, 1e-4, 1e-2, # 位置误差 (rad)^2, m^2 0.1, 0.1, 0.1, # 速度误差 (m/s)^2 np.deg2rad(1)**2 * 3, # 姿态误差 1e-6, 1e-6, 1e-6, # 陀螺零偏 1e-5, 1e-5, 1e-5 # 加速度计零偏 ])

当看到滤波器在GPS中断期间靠纯惯性推算还能保持30秒精度时,那种感觉就像看着走钢丝的人稳稳到达对岸——虽然背后是一堆微分方程在拼命平衡。

http://www.jsqmd.com/news/116629/

相关文章:

  • 52、使用System Center和OMS管理服务器
  • 【避坑指南】Maven依赖冲突怎么解决?用mvn dependency:tree一眼看清
  • 251221
  • Linly-Talker如何增强背景音乐下的语音清晰度?
  • Linly-Talker表情驱动揭秘:情感化数字人的关键技术突破
  • 索尼腾讯握手言和:侵权官司收场,合作再升级!
  • 基于主从博弈的社区综合能源系统分布式协同优化运行策略基本复现 编程平台:Matlab-yalm...
  • Linly-Talker能否输出ProRes编码母版?专业后期流程支持
  • 从代码到价值:验收测试如何架起技术交付与用户需求的桥梁
  • 从Halcon官方例子出发:双目相机标定与三维点云生成
  • 32、深入探索 Windows Server 2008 中的文件服务管理与 FSRM 应用
  • SpringBoot+Vue +线上教育培训办公系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • 功能测试用例深度解析:从设计到优化的全流程实践
  • “想买Labubu?门店排队成‘博物馆’,消费者只能靠线上抢”!
  • Linly-Talker在婚庆定制视频中的新人形象合成服务
  • 最近在折腾四旋翼导航时踩了不少坑,发现真正让无人机听话飞行的核心都在代码细节里。今天就拿手头正在调试的飞控项目举例,聊聊怎么用代码让四旋翼实现基础导航
  • 33、Windows Server 2008 文件服务与打印服务配置全解析
  • SpringBoot+Vue 宠物爱心组织管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Linly-Talker生成视频的逐帧调试工具使用指南
  • 基于SpringBoot+Vue的宠物健康顾问系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 双馈风力发电机 - 900V 直流混合储能并网系统 MATLAB 仿真探索
  • 34、Windows Server 2008 打印机部署与配置全攻略
  • 永磁同步电机全速域无传感器控制探索
  • 【毕业设计】SpringBoot+Vue+MySQL 扶贫助农系统平台源码+数据库+论文+部署文档
  • 真心建议大家冲一冲新兴领域,工资高前景好
  • Linly-Talker开源项目上手:如何输入文字生成会说话的AI形象
  • Linly-Talker生成视频的镜头拉近推远动态效果实现
  • 25、深入解析DNS:从基础布局到高级管理
  • 35、Windows Server 2008 网络打印机配置与管理指南(上)
  • Linly-Talker技术解析:大模型如何驱动数字人口型与表情同步