首页 > 其他分享 >基于IMU和GPS数据融合的自车定位 (卡尔曼)

基于IMU和GPS数据融合的自车定位 (卡尔曼)

时间:2022-11-08 12:03:16浏览次数:59  
标签:est imu delta IMU 自车 check dot GPS

如果想深入了解IMU和GPS融合原理,可以看看这篇文章: 重读经典《Quaternion kinematics for the error-state Kalman filter》,这也是Coursera课程关于这一项目的参考文献。

 

(124条消息) 动手学无人驾驶(6):基于IMU和GPS数据融合的自车定位_自动驾驶小学生的博客-CSDN博客_基于imu和gps数据融合的自车定位

 

 

大家可以先看看下面这个视频,对本项目要介绍的内容有个初步了解,视频链接为:https://www.bilibili.com/video/BV1cE411D7Y9?p=18


Coursera 自动驾驶教程:Part2 - State Estimation and Localization for Self-Driving Cars

文章目录

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.4 Sensor Fusion

介绍完理论部分,下面我们开始一步步实现代码部分。
(1)使用IMU数据进行更新,需要注意旋转矩阵的计算。

 

 

    # 1. Update state with IMU inputs
    C_ns = Quaternion(*q_est[k-1]).to_mat() #rotational matrix
    C_ns_dot_f_km = np.dot(C_ns, imu_f.data[k-1])
    
    # 1.1 Linearize the motion model and compute Jacobians
    p_est[k] = p_est[k-1] + delta_t * v_est[k-1] + (delta_t**2)/2.0 * (C_ns.dot(imu_f.data[k-1]) + g)
    v_est[k] = v_est[k-1] + delta_t*(C_ns.dot(imu_f.data[k-1]) + g)
    
    # Instead of using Omega, we use quaternion multiplication 
    q_est[k] = Quaternion(axis_angle = imu_w.data[k-1] * delta_t).quat_mult_right(q_est[k-1])

  (2)状态协方差矩阵的更新

 

 

 

	# 2. Propagate uncertainty
    # Global orientation error, over local orientation error
    # See Sola technical report
    F = np.identity(9)
    F[:3, 3:6] = delta_t * np.identity(3)
    #F[3:6, 6:] = -(C_ns.dot(skew_symmetric(imu_f.data[k-1].reshape((3,1)))))
    F[3:6,6:9] = -skew_symmetric(C_ns_dot_f_km) *delta_t
  
    Q = np.identity(6)
    Q[:, :3] *= delta_t**2 * var_imu_f
    Q[:, -3:] *= delta_t**2 * var_imu_w
    
    p_cov[k] = F.dot(p_cov[k-1]).dot(F.T) + l_jac.dot(Q).dot(l_jac.T)  #uncertainty 

  (3)计算kalman增益

 

 

 

    # 3.1 Compute Kalman Gain
    K_k = p_cov_check.dot(h_jac.T).dot(np.linalg.inv(h_jac.dot(p_cov_check).dot(h_jac.T)+np.identity(3)*sensor_var))

  (4)计算误差状态
在这里插入图片描述

    # 3.2 Compute error state
    errorState = K_k.dot(y_k - p_check)

  5)误差状态修正
在这里插入图片描述

    # 3.3 Correct predicted state
    p_hat = p_check + errorState[:3]
    v_hat = v_check + errorState[3:6]
    
    q_hat = Quaternion(euler=errorState[6:]).quat_mult_left(\
                      q_check) # left or right

  (6)修正状态协方差矩阵
在这里插入图片描述

    # 3.4 Compute corrected covariance
    p_cov_hat = (np.identity(9) - K_k.dot(h_jac)).dot(p_cov_check)

  

到这一步,就完成了整个处理过程,可以看看最终的结果,途中橙色为轨迹真值位置,蓝色为估计的轨迹位置。

在这里插入图片描述

 

 

也可以绘制误差分布图,如下图所示,这里使用的3 σ 3\sigma3σ标准。


至此,本文要介绍的内容就结束了。基于IMU和GPS的位置定位,关键点在于IMU的运动模型,特别是四元数更新部分,里面牵涉到的变化比较多,需要留心。

标签:est,imu,delta,IMU,自车,check,dot,GPS
From: https://www.cnblogs.com/gooutlook/p/16869204.html

相关文章

  • [LeetCode] 1323. Maximum 69 Number
    Youaregivenapositiveinteger num consistingonlyofdigits 6 and 9.Return themaximumnumberyoucangetbychanging atmost onedigit(6 becomes......
  • 基于arx模型的MPC预测控制器simulink建模与仿真实现
    目录一、理论基础二、核心程序三、测试结果一、理论基础MPC的优点模型预测控制善于处理多输入多输出系统对于MIMO系统,PID需要为每个子系统单独设计PID控制器,......
  • GPS位置模拟-安卓
    测试定位功能时都需要位置模拟,一般有如下3种方式:a)手机上安装第三方模拟软件:需要Root;b)PC模拟其中运行app并模拟位置:不能在真机上运行,手机兼容性不能测试到;b)在app......
  • 【飞轮储能】基于simulink的飞轮储能发电系统的仿真
    1.软件版本MATLAB2017b2.本算法理论知识飞轮储能是指利用电动机带动飞轮高速旋转,在需要的时候再用飞轮带动发电机发电的储能方式。技术特点是高功率密度、长寿命。飞轮......
  • GPS时间获取 - 流水江湖 - 博客园
    https://github.com/leech001/gps任务很简单就是将从串口获取的GPS数据包提取你需要的gps数据信息,过滤掉不用的数据即可. GPS数据类型及格式GPS数据信息类型有下面几......
  • [LeetCode] 1668. Maximum Repeating Substring
    Forastring sequence,astring word is k-repeating if word concatenated k timesisasubstringof sequence.The word's maximum k-repeatingvalue......
  • 452.minimum-number-of-arrows-to-burst-balloons 用最少数量的箭引爆气球
    问题描述452.用最少数量的箭引爆气球解题思路首先,按照\(x_start\)从小到大的顺序排序,然后开始分析需要的弓箭数。if(points[i][0]>points[i-1]),说明两个气球不存......
  • Leetcode第1668题:最大重复子字符串(Maximum repeating subarray)
    解题思路题目条件字符串长度不超过100,直接从大到小枚举word的重复次数k,判断word重复次数后是否还是sequence的字串,是就直接返回重复次数k。核心代码如下:classSolution......
  • dv之simulation
    在ICdesign的DV(DesignVerification)阶段,可以用simulation的方式来验证多个component在一起工作的时候是否可以正常运行。这里的component有点像是软件开发中的基......
  • Sort operation used more than the maximum 33554432 bytes of RAM
    在数据量超大的情形下,任何数据库系统在创建索引时都是一个耗时的大工程,下面这篇文章主要给大家介绍了关于MongoDB排序时内存大小限制与创建索引的注意事项的相关资料,需......