惯导系列(二):滤波相关的算法

2023-05-16

前言

我又消失了一段时间,这段时间研究了惯性导航有关的算法,整理了不少博客,字数比较多,图片比较多。学到了很多知识。


目录

前言

本节介绍

一、Mahony算法

1.1 PID控制算法

1.2 模糊PID

1.3 Mahony算法

1.4 互补滤波的思考

二、卡尔曼滤波

2.1 以前的卡尔曼滤波

2.2 公式推导

2.2.1 文字叙述

2.2.2 代码


本节介绍

这一节主要介绍关于IMU相关算法的阅读与思索,准确的说是介绍Mahony算法和卡尔曼滤波算法


一、Mahony算法

在叙述mahony算法之前,先说一下最经典的PID控制算法。

1.1 PID控制算法

 这个算法接触的很长了,但是一直没有考虑在STM32上是如何运转的。这位博客大佬PID具体原理说的很好,就不搬运了

(65条消息) PID超详细教程——PID原理+串级PID+C代码+在线仿真调参_skythinker616的博客-CSDN博客

不过还是要简单说一下PID的控制步骤:

比例P:提供反方向力产生加速度,迫使反向方向运动,但是往往这种力不会平衡,甚至有可能永远震动下去。

积分I: 主要是平衡干扰力的影响,达到预期的平衡点。

微分D:利用一阶积分实现达到预计平衡的作用,但是一般难以实现设计。

上面博主介绍的非常仔细,如果看完了可以直接考虑物理量的设计这一环节,也就是:
目标值、反馈值、输出值的考虑

我们的想法是让MPU输出有效的陀螺仪还有加速度计的数据,但是这个距离我们设计的步骤还有一些遥远。
比方说:虽然我们在上节的介绍通过IIC能够printf打印6050直接得到了6个数据,我们知道这些数据是不准的,但是在PID来滤波,怎么得到真实值?也就是说我们让这6组数据达到什么效果?PID的反馈值如何设定?
其实:PID控制的时候并不是直接控制这六个参数,而是根据这六个数据输出位姿,控制位姿。此外,目前市面上大多都是采用PID来控制小车,所以在回馈量上都是关于小车的量,纯惯导与这个没有多大的的关系,对于主流的小车PID差速控制之类的就不做过多的研究。
经过一段时间的调研和查询,发现实际做惯导的时候并不是仅仅使用PID控制的(或者说用PID控制的比较少),而是使用mahony算法,还有卡尔曼滤波算法。

1.2 模糊PID

2023/4/14补充模糊PID

感谢博客(80条消息) 【智能车】模糊PID控制原理详解与代码实现_Ethan-Code的博客-CSDN博客

普通PID的参数Kp以及Ki都是要自己不断调节的。可以说换了一个环境就需要调一次。不过有一种PID的参数是可以自己变化,那就是模糊PID了(虽然他自己调过程的比一般PID要更多了)。一般这种方法用在四驱小车中,我同门和我说这种方法用在惯导设备中的效果其实并不是很好。谁知道呢?就像基于深度学习的PID(自己学Kp,Ki)。

回归正题:模糊PID一般要求回馈e需要经过求导阶段

 我一开始看以为是自己设定多个范围,e只要在那个范围Kp还有Ki,就会自己设定这个数值;虽然和我理解的差不多吧,但是实际更加的复杂。

过程比较复杂,这里最简单的叙述一下:

首先将e设定一个固定范围(只有在这个范围才有效),然后划分六个区间:(左图所示)。图中设定了(-3——3),属于这个区间的e按照固定范围就会转为(-3,3)之间的数值。

然后就牵扯到一个隶属度函数(注意:0-1之间),我理解:每个范围PID参数不是没有作用,只是在其他小区间中影响的就小了。这种影响有三角形、矩形、抛物线形式(中间所示的就是三角形模式)

由e确定在(-3,3)之间的数值就会对应这个隶属度函数中的数值(右图所示),在途中对应的数值是0.6的PM,0.4的PB.

e求导也是按照这样一个过程。也能得到一组隶属度(类似0.6的PM,0.4的PB的表达)

接下来就是重点了:

e和e的导数隶属度两两组合,根据两个隶属度来查表

 该博客就给了一个例子:

 结果Kp求出就是

1.3 Mahony算法

(65条消息) 电赛四轴小结——姿态解算篇【mahony互补滤波算法】_linzs.online的博客-CSDN博客
上面博客介绍的Mahony算法大意是这样的:

加速度计会给出三组数据,这三组数据在IMU模块(DMP可能会固件滤波一下)是直接使用的。但是考虑到误差,一般通过平衡时候的重力加速度[0 0 g]T通过计算求出位姿变化矩阵中的参数(但求不出航向角)。

陀螺仪的加入则是弥补了加速度计的这种不确定性。陀螺仪解决的是:角度变化与时间的比,单位:度/秒,如果说世界是理想的、只需要对3个轴的陀螺仪角速度进行积分,得到3个方向上的旋转角度,也就是姿态数据。

磁力计的加入主要是实现航向角的输出。不过做惯导一般不考虑航向角。

在理想世界,陀螺仪和加速度计都能实现输出位姿。实际上陀螺仪解算得到的姿态具有良好的高频特性,但是会随着时间漂移,而加速度计解算得到的姿态具有良好的低频特性,不会随着时间漂移,但是载体剧烈运动时,往往不能解算出真实的姿态。所以我们可以将陀螺仪的高频特性和加速度计的低频特性相融合,得到高频、低频特性都很好的算法。

这就是mahony算法的核心点——数据融合(互补滤波)

直白一点的说:融合加速度计还有陀螺仪数据进行位姿估计,也就是博客说的:

-加速度计告诉我们:“你现在的位置是Racc”

-我们回答:“谢谢,但让我确认一下”

-然后根据陀螺仪的数据和上一次的自己计算出来的准确值修正这个值并输出新的估算值。

接下来就是进一步的公式推导步骤了,建议参考贴吧:

Mahony姿态解算算法笔记(一) - 知乎 (zhihu.com)

Mahony姿态解算算法笔记(二) - 知乎 (zhihu.com)

该博客推导过程挺好理解的:

  1. 陀螺仪测出的角度转化为四元素,表示姿态矩阵
  2. 利用理论重力加速度只有一个分量,通过上面获取的位姿矩阵将中加速度转到目前的加速度(积分后就是速度)
  3. 根据(err=V1 * V2      ->     err=|a1t||a2t|sinθ    ->    err =|1||1|sinθ   ->    err=θ   )得到误差

最后该算法还是用到了PID控制。

 当然,如果你想加入磁力计,获取航向角,建议看看这篇博客
[知识点]基于加速度计与磁力计的姿态解算方法(加计补偿偏航) - 知乎 (zhihu.com)

2023/4/14补充:该贴吧还介绍了一个比较重要的内容(同时也是下面需要介绍的):该贴吧谈到:

首先,对于六轴数据,计算角度有两种方法,一种是通过对角速度积分得到角度,另一种则是通过对加速度进行正交分解得到角度。但这两种方式均存在不足,通过角速度积分得到角度时,角速度的误差会在积分过程中被不断放大从而影响数据准确性。而加速度计是一种特别敏感的传感器,电机旋转产生的震动会给加速度计的数据中带来高频噪声。

不难看出,第一种方法测得的数据中存在结果偏差,而第二种方法测得的数据中存在高频噪声。因此可通过融合两种数据以获得准确姿态,这里通过加速度计补偿角速度。

2023/4/14补充

感谢博客(补充了后面的位姿递推):(80条消息) Mahony姿态解算算法详解_mahony算法_白鸟无言的博客-CSDN博客

1.4 互补滤波的思考

上述Mahony算法还存在一个很大的误区点:
说透互补滤波(1) - 线性互补滤波器从原理到实现 - 知乎 (zhihu.com)

Mahony算法的核心在于:加速度计带有低频噪声,陀螺仪带有高频噪声(也可以理解为加速度信号对高频敏感,陀螺仪信号对低频敏感,不敏感效果就差了呗),所以我们把他们的噪声分别滤除,然后合并,就得到了没有噪声的原始信号。

但是实际你会发现两组数据其实在结算的时候只能使用一组:平衡情况下使用[0 0 g]T实现位姿求取,但是陀螺仪只有在发生转动的时候才能有数据,所以陀螺仪无法提供初始状态angle0。更可怕的是不平衡情况下(也就是运动情况下)只有陀螺仪一组数据能用,加速度计完全用不了。

就像贴吧说的那样:连两路输入都没有,还怎么互补滤波?所以在使用的互补滤波概念的时候是做了一个假设(参考上述博客):

之后关于低通滤波还有高通滤波这里就不细说了,贴吧还详细介绍了一、二阶低通滤波的原理,这部分估计要下次研究看到具体代码才能研究透彻了。(待续......) 

二、卡尔曼滤波

2.1 以前的卡尔曼滤波

在上课的时候经常看到卡尔曼滤波的公式,尤其是考试的时候背的都烂了,但是在应用的时候还是不太会,趁这个时间,准备好好理解一下。下图是在课上经常看到的卡尔曼滤波五个公式:

在IMU实际应用解算的时候,会发现和上面公式多了几步或者有些出入。但大体是差不多了。
接下来就是阐述卡尔曼滤波的过程
(图片有些多,内容来源TKJ电子 » 卡尔曼滤波的实用方法及其实现方法 (tkjelectronics.dk))

2.2 公式推导

2.2.1 文字叙述

让你直接看推导你是肯定接受不了的,所以要先文字叙述一下,你才能接受。由于公式编辑的麻烦,这部分我先在word中编译之后在贴图展示:

2.2.2 代码

后面推导就需要参考深度解析卡尔曼滤波在IMU中的使用 - 知乎 (zhihu.com)了,直接给出相关的代码:

/*************卡尔曼滤波*********************************/
void Kalman_Filter(float Accel,float Gyro)		
{
		
	static const float Q_angle=0.001;  
	static const float Q_gyro=0.003;
	static const float R_angle=0.5;
	static const float dt=0.01;	                  //dt为kalman滤波器采样时间;
	static const 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; //1角的先验估计 x_k=Fx_(k-1)+Bu_k+w_k,
	
	//2计算误差协方差矩 P_{k|k-1}=FP_{k-1|k-1}F^T+Q_k
	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;	//3更新  y_k=z_k-Hx_{k|k-1}
	
	PCt_0 = C_0 * PP[0][0];
	PCt_1 = C_0 * PP[1][0];
	
	E = R_angle + C_0 * PCt_0;  //4 更新协方差   S_{k}=HP_{k|k-1}H^T+R
	
	K_0 = PCt_0 / E;						//5  计算卡尔曼增益  K_k=P_{k|k-1}H^TS_k^{-1}
	K_1 = PCt_1 / E;

	 // 6 获取后验估计x_{k|k}=x_{k|k-1}+K_k*y_k
	//注意这个其实是向量x_{k|k}拆开成两部分了,一是角度,另一个是角速率(这个角速率很有用从陀螺仪测量中减去偏差来获得真实速率)
	Angle	+= K_0 * Angle_err;	 //后验估计  
	Q_bias	+= K_1 * Angle_err;	 //后验估计
	
	// 7 更新后验误差协方差矩阵
	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;
		
	Gyro_y   = Gyro - Q_bias;	 //输出值(后验估计)的微分=角速度
}
void Angle_Calculate(void)
{
	static	uint8_t DataBuffer[2];	//数据缓存
/****************************加速度****************************************/
	I2C_ReadBuffer(DataBuffer, ACCEL_XOUT_H, 2);
	Accel_x  = (short)((DataBuffer[0]<<8)+DataBuffer[1]);	  //读取X轴加速度
	Angle_ax = (Accel_x +220) /16384;   //去除零点偏移,计算得到角度(弧度)
	Angle_ax = Angle_ax*1.2*180/3.14;     //弧度转换为度,

/****************************角速度****************************************/
	I2C_ReadBuffer(DataBuffer, GYRO_YOUT_H, 2);
	Gyro_y = (short)((DataBuffer[0]<<8)+DataBuffer[1]);	      //静止时角速度Y轴输出为-18左右
	Gyro_y = (Gyro_y + 18)/16.4;         //去除零点偏移,计算角速度值 
//		Angle_gy = Angle_gy + Gyro_y*0.01;  //角速度积分得到倾斜角度.	

/***************************卡尔曼滤波+角度融合*************************************/
	Kalman_Filter(Angle_ax,Gyro_y);       //卡尔曼滤波计算倾角

/*******************************互补滤波******************************************/

/*补偿原理是取当前倾角和加速度获
	得倾角差值进行放大,然后与陀螺
	仪角速度叠加后再积分,从而使倾
	角最跟踪为加速度获得的角度0.5
	为放大倍数,可调节补偿度;
	0.01为系统周期10ms	
*/	
//	Angle = Angle + (((Angle_ax-Angle)*0.5 + Gyro_y)*0.01);*/
															  		
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

惯导系列(二):滤波相关的算法 的相关文章

  • C51单片机判断点亮的是奇数位还是偶数位

    学单片机的时候想到一个问题 xff1a 如何判断单片机点亮的LED灯是奇数位还是偶数位 xff1f 在网上搜了一圈没找到 xff0c 于是打算自己写一个 单片机型号 xff1a AT89C52 xff0c LED为低电平有效接法 xff0c
  • Linux学习笔记——如何在交叉编译时使用共享库

    0 前言 在较为复杂的项目中会利用到交叉编译得到的共享库 xff08 so文件 xff09 在这种情况下便会产生以下疑问 xff0c 例如 xff1a 1 交叉编译时的共享库是否需要放置于目标板中 xff0c 如果需要放置在哪个目录中 2
  • 实例变量(instance var)与属性(@property)的关系

    实例变量 instance var 与属性 64 property 的关系 Objective C 2 0之后 xff0c 声明一个 64 property name自动产生一个实例变量 xff0c 名为 name xff0c 因此省去实例
  • VS+CUDA+Matlab环境配置经验 (达到用matlab使用nvcc进行gpu并行加速)

    前前后后配了一个多星期的环境 xff0c 终于完成了 xff0c 梳理一下我的经验给大家分享也留作以后参考 一 版本兼容性问题 一开始安装的时候我并不懂 xff0c 没有什么顺序和版本的概念 xff0c 所以各种组件不能相互支持 首先明确
  • 华为无线WiFi配置802.1x认证

    一 拓扑 xff1a 二 简介 xff1a 本篇主要介绍华为交换机设备配合Windows server 2019配置的802 1x 43 NPS协同做的有线网络认证 xff08 可跟做 xff09 现有的华为6605无线AC配置 xff1a
  • 寝室一伙计

    我们寝室一伙计 xff0c 昨天晚上睡觉的时候 xff0c 说梦话 xff0c 笑 xff0c 磨牙 xff0c 还有吃奶 xff0c 等等等等 xff0c 我服了
  • Qt学习笔记(五)重定向

    实时获取程序中qt所输出的信息 xff0c 并显示到QTextBrowser上 1 在main文件中添加以下内容 xx为你的界面类名 xx clk 61 NULL void myMessageOutput QtMsgType type co
  • 串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)

    利用串口进行通信 xff0c 当发送方 xff08 A xff09 将数据写入串口后 xff0c 通过无线或有线方式将数据传送给接收方 xff08 B xff09 xff0c B通过调用串口读方法comm read 参数 即可将数据读出 原
  • robomaster电控究极学习教程(以哨兵为例)------一、串口dma和遥控器

    robomaster电控究极学习教程 xff08 以哨兵为例 xff09 一 串口dma和遥控器 文章目录 robomaster电控究极学习教程 xff08 以哨兵为例 xff09 一 串口dma和遥控器 一 串口DMA的作用二 步骤1 c
  • 无人机架构

    无人机架构 基本设计需求 xff0c 如 xff1a xff08 1 xff09 慎思规划和反应式行为 xff1b xff08 2 xff09 容许不确定性 xff1b xff08 3 xff09 考虑危险 xff1b xff08 4 xf
  • 第八课 C++中的__LINE__宏

    在C 43 43 编程中 xff0c 我们有时候需要知道当前源代码的行号 xff0c 这时候就可以使用 LINE 宏 本文将介绍如何使用 LINE 宏 xff0c 以及它的使用示例 LINE 宏简介 LINE 是C 43 43 中的一个预定
  • 介绍@dynamic的用法

    介绍 64 dynamic的用法 Objective C 2 0提供了属性 64 property xff0c 可以让编译器自动生成setter和getter方法 如果不想编译器自作主张生成这些setter和getter方法 xff0c 则
  • OkHttpUtils的使用

    OkHttpUtils是一个非常好的网络协议框架 xff0c 它是在OkHttp的基础上进行了二次封装 要使用这个类首先下载jar包 xff0c 如下 xff1a http download csdn net download xxdw19
  • 十进制整数转为十六进制整数(C++实现)

    一 代码功能 xff1a 输入一个十进制整数 xff0c 将其转化为十六进制整数并输出 二 源码 include lt iostream gt include lt cstring gt include lt cmath gt using
  • 我的四轴专用PID参数整定方法及原理---超长文慎入(转)

    给四轴调了好久的PID xff0c 总算是调好了 xff0c 现分享PID参数整定的心得给大家 xff0c 还请大家喷的时候手下留情 首先说明一下 xff0c 这篇文章的主旨并不是直接教你怎么调 xff0c 而是告诉你这么调有什么道理 xf
  • 简单的TCP客户端发包工具

    一 TCP介绍 先放这里有时间在写 xff0c 最近在写DuiLib相关的使用内容 xff0c 这部分大家凑活着看 二 程序截图 下载链接 链接 xff1a https pan baidu com s 1MzNUzwd7WwBat6vNMc
  • C++常用头文件汇总

    之前说过的头文件这就来了 1 首先是本人最喜欢也是最最方便的万能头文件 xff0c 顾名思义 xff0c 不管是天上飘的还是地下埋的 xff0c 只要不是不对的头文件它都包含 xff0c 除了本篇第14个头文件 xff1a include
  • 基于I2C/SPI的温湿度采集与OLED显示

    基于I2C SPI的温湿度采集与OLED显示 一 AHT20温湿度采集1 I2C2 温湿度采集代码效果 二 OLED显示1 显示学号姓名2 诗句显示 三 总结四 参考 一 AHT20温湿度采集 1 I2C 解释什么是 软件I2C 和 硬件I
  • 游戏客户端编程

    游戏客户端编程 1 代码实现服务器连接发送按钮 2 显示消息3 发送信息4 播放背景音乐5 变换游戏背景图片6 参考 1 代码实现 服务器连接 span class token keyword private span span class

随机推荐

  • 卷积神经网络实现表情识别

    卷积神经网络实现表情识别 CNN人脸表情识别图片预处理原本效果处理后效果 图片数据集效果 CNN人脸识别创建模型归一化与数据增强创建网络 摄像头人脸识别图片识别 参考 CNN人脸表情识别 图片预处理 span class token key
  • IIC协议及其工程【FPGA】

    IIC协议及其工程 FPGA 一 IIC协议1 IIC简介2 IIC中相关的术语1 应答信号 xff08 ACK xff09 2 无应答信号 xff08 NOACK xff09 3 虚写3 IIC的时序 二 EEPROM1 时钟频率2 起始
  • char *与char []的区别

    其实 xff0c 只要记住一点就能很好区分char 和char xff1a char 定义的是一个指向字符串的指针 xff08 注意 xff1a C语言中没有对应字符串的内置类型或者类类型 xff09 xff0c 而char 就是C语言中的
  • SPI协议读取FLASH【FPGA】

    SPI协议读取FLASH FPGA 一 SPI协议1 SPI简介2 SPI物理层3 SPI协议层CPOL CPHA 及通讯模式 4 SPI 基本通讯过程5 通讯的起始和停止信号6 数据有效性 二 Flash1 状态寄存器1 WIP xff0
  • 基于FPGA的图像边缘检测

    基于FPGA的图像边缘检测 一 图像处理算法1 灰度转换2 高斯滤波3 二值化4 Sobel 二 项目框架1 摄像头配置模块2 图像处理模块3 数据缓存模块4 其它模块 三 部分代码1 数据采集模块2 读写控制模块 四 参考五 源码 简介
  • 基本认证_摘要认证_HTTPS

    1 HTTP基本认证 HTTP提供了一个原生的质询 响应 xff08 challenge response xff09 框架 Web应用程序收到一条HTTP请求报文时 xff0c 服务器没有按照请求执行动作 xff0c 而是以一个 认证质询
  • 什么是奇校验(Odd Parity),什么是偶校验(Even Parity)?

  • 2021-03-08

    今天在网上安装PR xff0c 网上下载的安装器把电脑默认装了一大堆垃圾工具 xff0c 依次删除后突然发现谷歌浏览器主页被篡改了 xff0c 随后用360等工具修复 xff0c 均提示无异常 通过浏览器设置和重置主页后仍然无效 xff0c
  • 2021-03-08

    大疆无人机自己动手更换电芯的注意事项 xff0c 当电池多电芯出现均大压差且调整数据无效后 xff0c 或发现某块或多块电芯鼓包 xff0c 说明电芯已经老化 xff0c 寿命用尽 xff0c 就需要更换电芯了 xff0c 厂家为保护消费者
  • can't run '/etc/init.d/rcS': No such file or directory 最终解决方法

    drivers rtc hctosys c unable to open rtc device rtc0 end request I O error dev mtdblock2 sector 256 isofs fill super bre
  • Ubuntu下的CuteCom串口详细调试教程

    I MX6ULL嵌入式开发学习 串口调试 一 Ubuntu下的串口调试助手安装 嵌入式开发学习过程中学习到串口调试这一章 xff0c 以前在Win10操作时都有相对应的串口调试界面 xff0c 安装个串口驱动在电脑设备端口里面看到COM3时
  • STM32 串口

    文章目录 USART 通信协议RS 232与TTL电平 串口通信数据包组成USART功能框图讲解引脚寄存器状态寄存器 USART SR 数据寄存器 USART DR 控制寄存器 USART CR 波特比率寄存器 USART BRR 发送过程
  • printf二进制数据

    基于之前这篇文章的代码改进了下 xff1a http blog csdn net xzongyuan article details 28889063 之前打印的数字没有补0 我打印了内存信息 xff0c 结果是这样的 xff0c 不能对齐
  • 分析MySQL数据类型的长度

    分析MySQL数据类型的长度 MySQL有几种数据类型可以限制类型的 34 长度 34 xff0c 有CHAR Length VARCHAR Length TINYINT Length SMALLINT Length MEDIUMINT L
  • 为vscode配置clangd

    目录 安装clangd 后端安装clangd 前端修改基础配置生成compile commands json文件基本效果补全warning提醒自动修改存在问题 注意事项 clangd能提供更好的补全和提示 xff0c 自带检查一些warni
  • 论文笔记(十九)RGB-D Object Tracking: A Particle Filter Approach on GPU

    RGB D Object Tracking A Particle Filter Approach on GPU 文章概括摘要1 介绍2 贡献3 粒子滤波器4 可能性评估5 实施细节6 实验A 物体模型B 合成序列C 真实序列 7 结论8 鸣
  • Ubuntu 命令行 访问网页

    安装w3m 1 进入 root apt get install w3m 2 测试是否成功 xff1a w3m https blog csdn net x xx xxx xxxx article details 92574331
  • 代码管理中Trunk、Branches、Tags的区别和联系

    我们可以将这三者想象成一棵树的组成部分 trunk为树干branches为树枝tags为整棵树 trunk用于主线开发 branches用于定制版本 修复bugs 并行开发等使用 tags用于存放release版本 xff0c 阶段性代码
  • linux使用curl请求(带参数)

    1 2 3 curl G d 34 c 61 amp a 61 34 http www net index php
  • 惯导系列(二):滤波相关的算法

    前言 我又消失了一段时间 xff0c 这段时间研究了惯性导航有关的算法 xff0c 整理了不少博客 xff0c 字数比较多 xff0c 图片比较多 学到了很多知识 目录 前言 本节介绍 一 Mahony算法 1 1 PID控制算法 1 2