六轴传感器+卡尔曼滤波+一阶低通滤波

2023-05-16

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 角度与角速度测量
      • 1.角度与角速度获取
      • 2 互补滤波
      • 3卡尔曼滤波
      • 4 实现卡尔一阶低通滤波
      • 5 实现卡尔曼滤波算法


角度与角速度测量

1.角度与角速度获取

  直立控制是通过角度与角速度反馈来进行的,所以角度与角速度的测量至关重要。本系统使用 MPU6050 作为姿态传感器,集成一个加速度传感器和一个陀螺仪,可以输出三轴的加速度与角速度。角速度的获取可以通过陀螺仪来直接读取,角度的获取可以有两种方法来测量:一是通过加速度计的加速度分量来计算,二是通过陀螺仪输出的角速度进行积分获得。
  MPU6050 的坐标系定义如图1-1 。
           在这里插入图片描述

图 1-1 MPU6050 坐标系 

  当传感器的正方向Z 轴垂直指向天空时,由于此时受到地球重力的作用,此时加速度计Z 轴的读数应为正,而且理想情况下应为g。注意此时读取加速度计并不是重力加速度,而是物体自身的运动加速度,正因为自身的运动加速度与重力加速度大小相等方向相反,芯片才能保持静止。
  当传感器静止不动时,我们仅绕X 轴旋转一定的角度θ,此时加速度方向一直与X 轴垂直,X 轴并无加速度分量,忽略X 轴,把加速度分解,如图2-2 所示,可以很容易就算出传感器绕X 轴的角度。
            在这里插入图片描述

图 1-2 绕 X 轴加速度计 

在这里插入图片描述
  当仅绕Y 轴旋转时也是同样的原理。当绕Z 轴旋转时,因为重力加速度固定为Z 轴方向,故在X 与Y 轴无加速度分量,仅仅通过加速度计无法得出绕Z轴角度,若想得到绕Z 轴角度,只能通过角速度积分获得,但因为有偏差,一段时间后将不再具有参考意义。
  物体的旋转运动就是绕三轴旋转角度的叠加,我们读取加速度计的数据,根据公式进行处理就可以获取相应的姿态角。故小车绕X 轴与Y 轴的角度可用以下公式算出:
        在这里插入图片描述

  在完全静止的情况下确实通过加速度计就可以获取到所需的角度,但是在实际应用中,小车因为车身摆动等情况会产生加速度,它叠加在测量信号上会无法准确地反映出车模的倾角,图1-3 所示。
        在这里插入图片描述

图 1-3 测量倾角与实际倾角对比 
  传感器安装的高度越低越能抑制因运动产生的加速度,但是还是无法切底消除这种影响。

  那么通过陀螺仪的角速度进行积分得到角度呢?如果测量的角速度存在微小的误差或漂移,经过积分运算之后,形成积累误差,随着时间增加,角度信息将不再准确,这一个方法也是不太可行的。
        在这里插入图片描述
  我们可以综合加速度计和陀螺仪的角度,进行滤波和平滑处理得到准确的角度。程序提供了三种得到准确的角度的算法:1.DMP 算法2.互补滤波算法3.卡尔曼滤波算法。
  DMP 算法是MPU6050 自带的一种滤波方法,只要进行一些初始化,使用官方的库函数就可以读取出四元数,根据公式就可以计算出姿态角。

2 互补滤波

  通过加速度计和陀螺仪获取的角度都有一定的缺点,加速度计获取的角度长期来看比较准确,但是波动大,可以认为其掺杂了高频噪声;陀螺仪获取的角度短时间比较准确,但有积分误差,可以认为其掺杂了低频噪声。我们可以分别让他们通过一个低通滤波器和一个高通滤波器然后叠加在一起,这就是互补滤波算法。
在这里插入图片描述

图1-5 互补滤波过程 

在这里插入图片描述

在这里插入图片描述

图1-6 互补滤波系统框图 


在这里插入图片描述

图 1-7 系统框图简化

在这里插入图片描述
对应我们的代码为:
angle = K1 * angle_m+ (1-K1) * (angle + gyro_m * dt);
可以看出,互补滤波就是通过加速度计获取的角度对陀螺仪积分的角度进行校准,从而积分的角度逐步跟踪到加速度传感器所得到的角度。K1 与1-K1 是对这两个角度取不同的权重,可以表示我们对不同数据的信任程度。

3卡尔曼滤波

  传感器测量的数据总是有很多的不确定性,比如有很多的噪声,而这些噪声大部分都符合高斯分布。对于我们的小车,输入是角速度,输出是角度,这是一个线性的系统。如果一个系统是线性的系统,而且这些不确定性是符合高斯分布的,那么我们就可以使用卡尔曼滤波算法进行最优估计。卡尔曼滤波的思想就是使用系统的状态方程预测当前的值,使用传感器测出来的观测值来修正这个预测值。与互补滤波一样,可以选择不同的权重来实现,但是这个权重是动态变化的。我们知道一个系统的状态方程和传感器的测量方程如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 实现卡尔一阶低通滤波

/****************************** BEFIN ********************************
**
**@Name       : Complementary_Filter_x
**@Brief      : 一阶互补滤波   
**@Param angle_m: 加速度算出的角度 
**		gyro_m: 陀螺仪的角速度
**@Return     : None
**@Author     : @mayuxin
**@Data	      : 2022-06-04
******************************** END *********************************/
float Complementary_Filter_x(float angle_m, float gyro_m)
{
	 static float angle;
	 float K1 =0.02; 
   angle = K1 * angle_m+ (1-K1) * (angle + gyro_m * dt);
	 return angle;
}

5 实现卡尔曼滤波算法

/****************************** BEFIN ********************************
**
**@Name       : Kalman_Filter_x
**@Brief      : 获取x轴角度简易卡尔曼滤波  
**@Param Accel: 加速度算出的角度
**		  Gyro: 陀螺仪的角速度
**@Return     : None
**@Author     : @mayuxin
**@Data	      : 2022-06-04
******************************** END *********************************/
float dt=0.005;		  //每5ms进行一次滤波    
float Kalman_Filter_x(float Accel,float Gyro)		
{
	static float angle_dot;
	static float angle;
	float Q_angle=0.001; // 过程噪声的协方差
	float Q_gyro=0.003;	//0.003 过程噪声的协方差 过程噪声的协方差为一个一行两列矩阵
	float R_angle=0.5;		// 测量噪声的协方差 既测量偏差
	char  C_0 = 1;
	static float Q_bias, Angle_err;
	static float PCt_0, PCt_1, E;
	static float K_0, K_1, t_0, t_1;
	static float Pdot[4] ={0,0,0,0};
	static float PP[2][2] = { { 1, 0 },{ 0, 1 } };
	angle+=(Gyro - Q_bias) * dt; //先验估计
	Pdot[0]=Q_angle - PP[0][1] - PP[1][0]; // Pk-先验估计误差协方差的微分

	Pdot[1]=-PP[1][1];
	Pdot[2]=-PP[1][1];
	Pdot[3]=Q_gyro;
	PP[0][0] += Pdot[0] * dt;   // Pk-先验估计误差协方差微分的积分
	PP[0][1] += Pdot[1] * dt;   // =先验估计误差协方差
	PP[1][0] += Pdot[2] * dt;
	PP[1][1] += Pdot[3] * dt;
		
	Angle_err = Accel - angle;	//zk-先验估计
	
	PCt_0 = C_0 * PP[0][0];
	PCt_1 = C_0 * PP[1][0];
	
	E = R_angle + C_0 * PCt_0;
	
	K_0 = PCt_0 / E;
	K_1 = PCt_1 / E;
	
	t_0 = PCt_0;
	t_1 = C_0 * PP[0][1];

	PP[0][0] -= K_0 * t_0;		 //后验估计误差协方差
	PP[0][1] -= K_0 * t_1;
	PP[1][0] -= K_1 * t_0;
	PP[1][1] -= K_1 * t_1;
		
	angle	+= K_0 * Angle_err;	 //后验估计
	Q_bias	+= K_1 * Angle_err;	 //后验估计
	angle_dot   = Gyro - Q_bias;	 //输出值(后验估计)的微分=角速度
	return angle;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六轴传感器+卡尔曼滤波+一阶低通滤波 的相关文章

  • NVIDIA JETSON TX2上运行yolo3

    以下为我参考JK Jung s blog YOLOv3 on Jetson TX2在自己的TX2上测试yolo v3的过程 0 刷机安装JetPack 3 2 1 安装opencv3 4 0 因为目前安装的3 4 1不能跑yolo Step
  • 记DeeCamp 2019夏面试

    本周完成创新工场DeeCamp2019面试 本来还准备蛮多 把笔试题目重新过了一遍 把自己简历里的知识点和项目重新回顾了一下 xff0c 根据面试情况来说 后者是非常有用的 由于第一次参加视频面试 xff0c 记录一下过程 1 先进行2分钟
  • TX2刷机Jetpack3.2教程——亲测记录

    一 开机 xff0c 按照提示安装系统 cd NVIDIA INSTALLER sudo installer sh 默认密码nvidia 按确认 等待安装完成后 xff0c 输入reboot 即可重启进入图形界面 二 刷机 安装Jetpac
  • TX2(Ubuntu16.04)更换清华镜像源

    一 备份 sudo cp etc apt sources list etc apt sources list bak 先备份原文件sources list sudo vim etc apt sources list sudo打开source
  • TX2使用技巧记录---scp传输、切换默认python版本、自动补全依赖、安装中文输入法

    一 从服务器上下载文件夹 安装ssh scp r user 64 10 20 3 1 地址 dir Download dir 二 切换默认python版本 echo alias python 61 python3 gt gt bashrc
  • TX2安装pip和cmake

    一 安装setuptools 下载网址 setuptools下载网址 下载setuptools 41 0 1 zip 解压 cd进目录 sudo python3 setup py install 二 安装pip 下载网址 pip下载网址 下
  • Ubuntu22.04分区设置

    今天刚安装了Ubuntu的系统 xff0c 安装过程中遇到了磁盘分配的问题 xff0c 个人总结后分区如下 xff0c 具体使用有待验证 磁盘总容量 xff1a 250G固态 43 1T机械 实际分配完毕之后固态和机械硬盘各留了一部分空间以
  • 【信号去噪】基于卡尔曼滤波和维纳滤波实现信号去噪附matlab代码

    1 简介 卡尔曼滤波算法是一种线性 递归的估值方法 在多领域 尤其在导航领域得到了非常广泛的应用 本文利用MATLAB仿真软件实现卡尔曼滤波器 通过实例来验证基于MATLAB设计的卡尔曼滤波器的滤波效果良好 观察噪声越小 系统噪声越大 递推
  • 【信号去噪】基于卡尔曼滤波实现信号去噪附matlab代码

    1 内容介绍 1 1 卡尔曼滤波理论的背景及意义 信号是信息的载体 一般可以分为两类 xff0c 分别为确定性信号与随机信号 服从 某种固定函数的关系的信号 xff0c 就是确定性信号 xff0c 它的变化是遵循一定规律的 xff0c 具有
  • 【无人机】基于虚拟leader实现无人机编队仿真附matlab代码

    作者简介 xff1a 热爱科研的Matlab仿真开发者 xff0c 修心和技术同步精进 xff0c matlab项目合作可私信 x1f34e 个人主页 xff1a Matlab科研工作室 x1f34a 个人信条 xff1a 格物致知 更多M
  • SSL单向认证详细流程

    SSL 单向认证流程如下 xff1a 1 拿到申请到的证书后 xff0c 需要安装到服务器中 3 客户端向服务器发送接入请求 4 服务器将证书发送给客户端 5 客户端开始对证书进行认证 xff0c 认证过程如下 在证书中获取证书的颁发机构字
  • 《自己动手写Docker》书摘之三---Union File System介绍

    Union File System UnionFS unionfs是一种为Linux xff0c FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务 它使用branch把不同文件系统的文件和目录 透明
  • 【无人机】基于Matlab实现复杂三维地形的无人机路径规划问题

    作者简介 xff1a 热爱科研的Matlab仿真开发者 xff0c 修心和技术同步精进 xff0c matlab项目合作可私信 x1f34e 个人主页 xff1a Matlab科研工作室 x1f34a 个人信条 xff1a 格物致知 更多M
  • 【LSTM分类】基于卷积神经网络结合长短时记忆LSTM实现数据分类含Matlab源码

    作者简介 xff1a 热爱科研的Matlab仿真开发者 xff0c 修心和技术同步精进 xff0c matlab项目合作可私信 x1f34e 个人主页 xff1a Matlab科研工作室 x1f34a 个人信条 xff1a 格物致知 更多M
  • ardupilot飞控源码框架认识

    ardupilot飞控源码框架认识 转载 xff1a https blog csdn net csshuke article details 78850898 希望对更多的人有帮助 此篇blog的目的是对px4工程有一个整体认识 xff0c
  • 使用VSCode打造APM飞控的编译+烧录+调试一体的终极开发环境

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net loveuav article det
  • APM-mavlink添加消息和命令

    Mavlink资源 https mavlink io en url 61 git github com ArduPilot mavlink 事先准备好消息和命令内容 1 DO OPEN SPRAY 33002 命令实例 字段 数据类型 值
  • APM多旋翼参数

    持续更新中 ABPS AB点模式 ABPS ENABLE 1 ABPS LINE NUM 1 ABPS SPRAYER EN 1 ABPS WP DELAY 1 ACRO Acro特技模式 ACRO RP P 4 5 ACRO Y EXPO
  • APM-MP日志分析参数索引

    MP日志分析参数索引 通过 ctrl 43 F 查找获取需要对应参数信息 AP Logger 64 LoggerMessage ADSB ADSB 64 Description Automatic Dependent Serveillanc
  • 百度2014校园招聘研发工程师笔试题+答案

    一 xff0c 简答题 30分 1 xff0c 当前计算机系统一般会采用层次结构存储数据 xff0c 请介绍下典型计算机存储系统一般分为哪几个层次 xff0c 为什么采用分层存储数据能有效提高程序的执行效率 xff1f 10分 xff08

随机推荐

  • 教大家看官方技术文档(一)- Spring MVC

    每当学习一门新技术时候 xff0c 大部分人直接就是百度Bing搜索 xff0c 借鉴别人的博客例子等 我也是一样 xff0c 但是我经常想 xff0c 这些牛人的例子如何写出来的 xff0c 如何深入扩展其它功能等等 所以 xff0c 我
  • OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解

    xff08 一 xff09 Mat矩阵 图像容器 创建时CV 8UC1 CV 8UC2等参数详解 1 Mat不但是一个非常有用的图像容器类 同时也是一个通用的矩阵类 2 创建一个Mat对象的方法很多 我们现在先看一下Mat矩阵 图像容器类在
  • IP地址和MAC地址的作用和相互关系

    IP地址和MAC地址的作用和相互关系 关于IP地址和MAC地址相互关系以及数据包在网络中的寻址过程 xff0c 这两天盘了一下 xff0c 十多年前的计算机网络课程 xff0c 还是没有完全忘记的 概念说明 xff1a MAC地址 xff1
  • git commit –amend命令修改comment

    当git commit m your comment 后 xff0c 想修改提交后的comment xff0c 可以使用git commit amend命令 1 git commit amend xff0c 会出现上一次提交时的commen
  • php 设置允许跨域请求

    php 设置允许跨域请求 跨域 xff0c 指的是浏览器不能执行其他网站的脚本 它是由浏览器的同源策略造成的 xff0c 是浏览器施加的安全限制 同源策略 xff1a 是指域名 xff0c 协议 xff0c 端口均相同 xff0c 有任一不
  • TortoiseGit-git工具

    git小乌龟 git工具 xff0c 贼好用 下载地址 Download TortoiseGit Windows Shell Interface to Git
  • FAST-LIO, ikd-Tree, FAST-LIO2, FASTER-LIO论文总结

    目录 一 FAST LIO 本文的三个创新点 xff1a FAST LIO框架 二 ikd Tree 三 FAST LIO2 四 FASTER LIO 一 FAST LIO FAST LIO三个创新点 xff1a 将IMU和雷达点特征点紧耦
  • Realsense D435i运行ORB-SLAM3

    ORB SLAM3 根目录下的CMakeList txt opencv版本改为3 xff0c 目的是与ROS下的CMakeList txt指定的opencv版本相同 xff0c 都为3 否则会段错误 build sh build ros s
  • VINS-Fusion运行相关

    如何安装VINS Fusion 根据网址安装 xff1a https github com HKUST Aerial Robotics VINS Fusion 先装ceres xff08 网址中的改成 xff1a sudo make ins
  • jetson xavier nx 上 bash: nvcc: command not found

    jetson Xavier nx上已经默认安装好了cuda cuda 10 2和cudnn等 出现这个问题是因为 我们需要把cuda目录下的bin文件添加到环境变量中 解决方案 vim bashrc 按 i 进入输入模式 xff0c 在最后
  • ROS下使用intel Realsense摄像头进行人脸检测

    使用准备条件 xff1a ROS indigo intel Realsense摄像头 xff08 我使用的依旧是R200 xff09 确保已经正常安装驱动 xff0c 安装方法见博文 http blog csdn net may0324 a
  • 【VINS-MONO】RealsenseD435i运行VINS-Mono

    1 查看需要的 camera imu的topic内容格式 xff1a roscore rosbag play lt bag gt rostopic list rostopic echo lt topic gt 2 对齐XJ2 bag中的IM
  • vsCode如何自动保存代码

    文件 勾选自动保存 xff0c 即可
  • 智能设备WIFI配网方式汇总

    当前很多物联网设备大都无没有人机交互界面 xff0c 也就没有像手机或者PC那样有wifi的配置界面 xff0c 汇总了一下设备入网的方式大概有如下几种 xff1a 1 xff1a AP 模式流程如下 1 将Dev手动设置为AP模式 xff
  • 平凡的人生or开挂的人生——对知乎相关问题的回答

    知乎原题 xff1a 为什么有些人的人生和开了挂一样 xff1f https www zhihu com question 37106162 楼上说的都特别好 xff0c 我很想补充一点 我先抛出一个背景概念 我认为开挂人生 xff0c 本
  • Linux内核机制总结中断异常和系统调用之系统调用(三十三)

    文章目录 1 系统调用1 1 定义系统调用1 2 执行系统调用 重要 xff1a 本系列文章内容摘自 lt Linux内核深度解析 gt 基于ARM64架构的Linux4 x内核一书 xff0c 作者余华兵 系列文章主要用于记录Linux内
  • Web前端工程化之VSCode+Git 解决冲突和error

    多人协作开发使用版本控制难免会有冲突 xff0c 在前端使用VSCode和Git过程中 xff0c 就会遇到大大小小的冲突 xff0c 有的merge一下 xff0c 然后提交推送就可解决 xff0c 有的是因为HEAD指针混乱造成 xff
  • 平时积累(四)

    1 重启Android运行环境 xff1a xff08 1 xff09 sudo adb shell stop xff08 2 xff09 sudo adb shell start 2 设置Android系统属性 xff1a xff08 1
  • 速度环+直立环+转向环

    文章目录 直立环直立环调节速度环速度环调节转向环 直立环 车模平衡控制也是通过负反馈来实现的 xff0c 与上面保持木棒直立比较则相对简单 因为车模有两个轮子着地 xff0c 车体只会在轮子滚动的方向上发生倾斜 控制轮子转动 xff0c 抵
  • 六轴传感器+卡尔曼滤波+一阶低通滤波

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 角度与角速度测量1 角度与角速度获取2 互补滤波3卡尔曼滤波4 实现卡尔一阶低通滤波5 实现卡尔曼滤波算法 角度与角速度测量 1