IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 无人驾驶学习(三):卡尔曼滤波器 kalmanfilter -> 正文阅读

[人工智能]无人驾驶学习(三):卡尔曼滤波器 kalmanfilter

0、前言

????????下面先列出一些其他博主的卡尔曼滤波器博客链接,以方便自己学习,过段时间希望自己可以总结。

1、写卡尔曼滤波器

无人驾驶技术入门(十三)| 手把手教你写卡尔曼滤波器https://zhuanlan.zhihu.com/p/45238681

?

??????? 文件名:kalmanfilter.h

#ifndef KALMAN_FILTER_H
#define KALMAN_FILTER_H
#include "Eigen/Dense"

using namespace std;

class KalmanFilter{//定义一个卡尔曼滤波器类
public:
      //constructor:是一种用于创建和初始化“class创建的对象”的特殊方法
      KalmanFilter(){
           is_initalized_= false;
      };

      //destructor析构函数,与构造函数相反;
      //当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数
      //~KalmanFilter();

      void Initalization(Eigen::VectorXd x_in){
           x_= x_in;
           is_initalized_= true;
           //cout<<"intialized"<<endl;
      }

      bool IsInitalized(){
           return is_initalized_;
      }

     Eigen::VectorXd GetX(){
           return x_;
     }

     //状态转移矩阵F_(设置函数):state transistion matrix
     //可以通过先给F_in赋值,然后调用SetF()函数对状态转移矩阵F_进行赋值
     void SetF(Eigen::MatrixXd F_in){
        F_ = F_in;
      }

     //状态协方差矩阵(设置函数):state covariance matrix
     void SetP(Eigen::MatrixXd P_in){
        P_ = P_in;
      }

     //过程噪声矩阵(设置函数):process covariance matrix
     void SetQ(Eigen::MatrixXd Q_in){

        Q_ = Q_in;
      }

     //x'= Fx + u。下面将u设为0,即忽略了外部的影响(将模型简化了)
     //P' = F*P*Ft + Q
     void Prediction(){
        //cout<<"prediction"<<endl;
        x_ = F_ * x_;
        //cout<<"预测值 "<<x_<<endl;
        //cout<<"预测值F "<<F_<<endl;
        Eigen::MatrixXd Ft = F_.transpose();
        P_ = F_ * P_ * Ft + Q_;
     }

     //测量矩阵:Measurement Matrix
     void SetH(Eigen::MatrixXd H_in){
        H_ = H_in;
      }

     //测量噪声矩阵:measurement covariance matrix
     void SetR(Eigen::MatrixXd R_in){
        R_ = R_in;
      }

     //预测--更新
     // y=z-Hx' 实际观测值z与预测值x'之间的差值y
     // S=H*P*Ht+R S是临时变量
     // K=P'*Ht*S.inverse() K:卡尔曼增益,是y值的权重
     void Update(const Eigen::VectorXd &z){
        // 预测
        Eigen::VectorXd y = z - H_ * x_;
        Eigen::MatrixXd S = H_ * P_ * H_.transpose() + R_;
        Eigen::MatrixXd K = P_ * H_.transpose()*S.inverse(); //卡尔曼增益

        //更新
        x_ = x_+(K*y);//更新当前状态向量
        //cout<<"更新或得值 "<<x_<<endl;
        int size = x_.size();//用于构造单位矩阵
        Eigen::MatrixXd I = Eigen::MatrixXd::Identity(size, size);
        P_ = (I - K*H_)*P_;//更新系统的不确定度
     }       

//定义参数
private:

      bool is_initalized_;//是否初始化
      Eigen::VectorXd x_; //state vector状态向量
      Eigen::MatrixXd F_; //状态转移矩阵
      Eigen::MatrixXd P_; //状态协方差
      Eigen::MatrixXd Q_; //噪声
      Eigen::MatrixXd H_; //测量矩阵
      Eigen::MatrixXd R_; //噪声

};


#endif

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:08:29  更:2022-02-14 21:09:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:58:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码