AHRS和imu的比较和加速度陀螺仪的融合
- 格式:doc
- 大小:459.50 KB
- 文档页数:19
//============================================================================= ========================// MahonyAHRS.c//============================================================================= ========================//// Madgwick's implementation of Mayhony's AHRS algorithm.// See: /node/8#open_source_ahrs_and_imu_algorithms//// Date Author Notes// 29/09/2011 SOH Madgwick Initial release// 02/10/2011 SOH Madgwick Optimised for reduced CPU load////============================================================================= ========================//---------------------------------------------------------------------------------------------------// Header files#include "MahonyAHRS.h"#include <math.h>//---------------------------------------------------------------------------------------------------// Definitions#define sampleFreq 512.0f // sample frequency in Hz#define twoKpDef (2.0f * 0.5f) // 2 * proportional gain#define twoKiDef (2.0f * 0.0f) // 2 * integral gain//---------------------------------------------------------------------------------------------------// Variable definitionsvolatile float twoKp = twoKpDef; // 2 * proportional gain (Kp)volatile float twoKi = twoKiDef; // 2 * integral gain (Ki)volatile float q0 = 1.0f, q1 = 0.0f, q2 = 0.0f, q3 = 0.0f; // quaternion of sensor frame relative to auxiliary framevolatile float integralFBx = 0.0f, integralFBy = 0.0f, integralFBz = 0.0f; // integral error terms scaled by Ki//---------------------------------------------------------------------------------------------------// Function declarationsfloatinvSqrt(float x);//============================================================================= =======================// Functions//---------------------------------------------------------------------------------------------------// AHRS algorithm updatevoidMahonyAHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz) {floatrecipNorm;float q0q0, q0q1, q0q2, q0q3, q1q1, q1q2, q1q3, q2q2, q2q3, q3q3;floathx, hy, bx, bz;floathalfvx, halfvy, halfvz, halfwx, halfwy, halfwz;floathalfex, halfey, halfez;floatqa, qb, qc;// Use IMU algorithm if magnetometer measurement invalid (avoids NaN in magnetometer normalisation)if((mx == 0.0f) && (my == 0.0f) && (mz == 0.0f)) {MahonyAHRSupdateIMU(gx, gy, gz, ax, ay, az);return;}// Compute feedback only if accelerometer measurement valid (avoids NaN in accelerometer normalisation)if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {// Normalise accelerometer measurementrecipNorm = invSqrt(ax * ax + ay * ay + az * az);ax *= recipNorm;ay *= recipNorm;az *= recipNorm;// Normalise magnetometer measurementrecipNorm = invSqrt(mx * mx + my * my + mz * mz);mx *= recipNorm;my *= recipNorm;mz *= recipNorm;// Auxiliary variables to avoid repeated arithmeticq0q0 = q0 * q0;q0q1 = q0 * q1;q0q2 = q0 * q2;q0q3 = q0 * q3;q1q1 = q1 * q1;q1q2 = q1 * q2;q1q3 = q1 * q3;q2q2 = q2 * q2;q2q3 = q2 * q3;q3q3 = q3 * q3;// Reference direction of Earth's magnetic fieldhx = 2.0f * (mx * (0.5f - q2q2 - q3q3) + my * (q1q2 - q0q3) + mz * (q1q3 + q0q2));hy = 2.0f * (mx * (q1q2 + q0q3) + my * (0.5f - q1q1 - q3q3) + mz * (q2q3 - q0q1));bx = sqrt(hx * hx + hy * hy);bz = 2.0f * (mx * (q1q3 - q0q2) + my * (q2q3 + q0q1) + mz * (0.5f - q1q1 - q2q2));// Estimated direction of gravity and magnetic fieldhalfvx = q1q3 - q0q2;halfvy = q0q1 + q2q3;halfvz = q0q0 - 0.5f + q3q3;halfwx = bx * (0.5f - q2q2 - q3q3) + bz * (q1q3 - q0q2);halfwy = bx * (q1q2 - q0q3) + bz * (q0q1 + q2q3);halfwz = bx * (q0q2 + q1q3) + bz * (0.5f - q1q1 - q2q2);// Error is sum of cross product between estimated direction and measured direction of field vectorshalfex = (ay * halfvz - az * halfvy) + (my * halfwz - mz * halfwy);halfey = (az * halfvx - ax * halfvz) + (mz * halfwx - mx * halfwz);halfez = (ax * halfvy - ay * halfvx) + (mx * halfwy - my * halfwx);// Compute and apply integral feedback if enabledif(twoKi> 0.0f) {integralFBx += twoKi * halfex * (1.0f / sampleFreq); // integral error scaled by KiintegralFBy += twoKi * halfey * (1.0f / sampleFreq);integralFBz += twoKi * halfez * (1.0f / sampleFreq);gx += integralFBx; // apply integral feedbackgy += integralFBy;gz += integralFBz;}else {integralFBx = 0.0f; // prevent integral windupintegralFBy = 0.0f;integralFBz = 0.0f;}// Apply proportional feedbackgx += twoKp * halfex;gy += twoKp * halfey;gz += twoKp * halfez;}// Integrate rate of change of quaterniongx *= (0.5f * (1.0f / sampleFreq)); // pre-multiply common factorsgy *= (0.5f * (1.0f / sampleFreq));gz *= (0.5f * (1.0f / sampleFreq));qa = q0;qb = q1;qc = q2;q0 += (-qb * gx - qc * gy - q3 * gz);q1 += (qa * gx + qc * gz - q3 * gy);q2 += (qa * gy - qb * gz + q3 * gx);q3 += (qa * gz + qb * gy - qc * gx);// Normalise quaternionrecipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);q0 *= recipNorm;q1 *= recipNorm;q2 *= recipNorm;q3 *= recipNorm;}//---------------------------------------------------------------------------------------------------// IMU algorithm updatevoidMahonyAHRSupdateIMU(float gx, float gy, float gz, float ax, float ay, float az) { floatrecipNorm;floathalfvx, halfvy, halfvz;floathalfex, halfey, halfez;floatqa, qb, qc;// Compute feedback only if accelerometer measurement valid (avoids NaN in accelerometer normalisation)if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {// Normalise accelerometer measurementrecipNorm = invSqrt(ax * ax + ay * ay + az * az);ax *= recipNorm;ay *= recipNorm;az *= recipNorm;// Estimated direction of gravity and vector perpendicular to magnetic fluxhalfvx = q1 * q3 - q0 * q2;halfvy = q0 * q1 + q2 * q3;halfvz = q0 * q0 - 0.5f + q3 * q3;// Error is sum of cross product between estimated and measured direction of gravity halfex = (ay * halfvz - az * halfvy);halfey = (az * halfvx - ax * halfvz);halfez = (ax * halfvy - ay * halfvx);// Compute and apply integral feedback if enabledif(twoKi> 0.0f) {integralFBx += twoKi * halfex * (1.0f / sampleFreq); // integral error scaled by KiintegralFBy += twoKi * halfey * (1.0f / sampleFreq);integralFBz += twoKi * halfez * (1.0f / sampleFreq);gx += integralFBx; // apply integral feedbackgy += integralFBy;gz += integralFBz;}else {integralFBx = 0.0f; // prevent integral windupintegralFBy = 0.0f;integralFBz = 0.0f;}// Apply proportional feedbackgx += twoKp * halfex;gy += twoKp * halfey;gz += twoKp * halfez;}// Integrate rate of change of quaterniongx *= (0.5f * (1.0f / sampleFreq)); // pre-multiply common factorsgy *= (0.5f * (1.0f / sampleFreq));gz *= (0.5f * (1.0f / sampleFreq));qa = q0;qb = q1;qc = q2;q0 += (-qb * gx - qc * gy - q3 * gz);q1 += (qa * gx + qc * gz - q3 * gy);q2 += (qa * gy - qb * gz + q3 * gx);q3 += (qa * gz + qb * gy - qc * gx);// Normalise quaternionrecipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);q0 *= recipNorm;q1 *= recipNorm;q2 *= recipNorm;q3 *= recipNorm;}//---------------------------------------------------------------------------------------------------// Fast inverse square-root// See: /wiki/Fast_inverse_square_rootfloatinvSqrt(float x) {floathalfx = 0.5f * x;float y = x;longi = *(long*)&y;i = 0x5f3759df - (i>>1);y = *(float*)&i;y = y * (1.5f - (halfx * y * y));return y;}//============================================================================= =======================// END OF CODE//============================================================================= =======================。
imu和里程计融合原理-回复以下是使用IMU(惯性测量单元)和里程计融合的原理。
第一步:了解IMU和里程计的基本原理IMU是一种测量物体线性加速度和角速度的传感器。
它通常由加速度计和陀螺仪组成,通过测量物体的加速度和角速度来获取其运动状态。
而里程计是一种通过测量物体轮胎滚动的里程数来估计其位移的方法。
它一般通过车轮编码器或者轮胎上的传感器来获取车辆的里程数据。
第二步:IMU和里程计的单独融合首先,单独使用IMU和单独使用里程计都存在一定的问题。
IMU往往会受到累积误差的影响,导致长时间的使用后,其测量结果会逐渐偏离真实值。
而里程计则容易受到地面条件的影响,如路面摩擦系数的变化、滑动和打滑等,导致测量结果的不准确。
因此,将IMU和里程计的数据进行融合可以弥补各自的缺点,提高定位的精度和可靠性。
第三步:利用Kalman滤波进行融合Kalman滤波是一种常用的状态估计方法,可以结合多个传感器的测量数据,通过对其进行加权融合来估计最优的状态值。
在IMU和里程计融合中,Kalman滤波可以用来将两者的数据进行融合。
对于IMU,我们可以通过其测量的加速度和角速度来估计运动状态的速度和姿态。
然后,通过积分得到位置和姿态的变化。
但由于IMU的测量误差,这些估计值会存在一定的误差。
对于里程计,我们可以通过编码器或传感器测量车辆轮胎的滚动里程数,然后通过与预先设置的车辆模型进行比较,估计出车辆的位移和方向变化。
Kalman滤波通过结合IMU和里程计的测量数据以及车辆模型中的先验知识,校正每个传感器的误差,从而提供更准确的估计结果。
它通过在线更新估计值的协方差矩阵来最优地融合IMU和里程计的数据。
第四步:具体实现具体实现IMU和里程计融合可以通过以下步骤进行。
1. 初始化Kalman滤波器:设置状态向量、初始协方差矩阵和系统噪声协方差矩阵等参数。
2. 获取IMU和里程计的测量数据:从IMU中获取加速度和角速度的测量值,从里程计中获取车辆的里程数据。
IMU(惯性测量单元)数据处理通常包括数据预处理、姿态解算和融合算法等步骤。
以下是一些常用的数据处理公式和方法:
1. 数据预处理:
零偏校正:将加速度计和陀螺仪的偏移量进行修正,常用的方法包括零偏校正和尺度因子校正。
2. 姿态解算:
四元数法:将IMU的测量值进行积分,得到姿态四元数,通过四元数来计算姿态角。
欧拉角法:将IMU的测量值进行积分,得到欧拉角,通过欧拉角来计算姿态角。
卡尔曼滤波法:将IMU的测量值和加速度计数据融合,通过卡尔曼滤波算法来估计姿态角。
3. 融合算法:
互补滤波器:将加速度计和陀螺仪数据按照一定的权重进行融合,得到姿态角。
常用的权重方法包括一阶互补滤波和二阶互补滤波等。
卡尔曼滤波器:将加速度计和陀螺仪数据融合,通过卡尔曼滤波算法来估计姿态角。
卡尔曼滤波器可以处理噪声和误差,提高数据精度。
4. 速度和位置计算:
基于IMU的数据,可以通过积分和滤波算法计算速度和位置信息。
常用的方法包括基于加速度计的积分、基于陀螺仪的积分、融合算法等。
以上是一些常见的IMU数据处理公式和方法,具体的实现方式可能因应用场景、传感器型号和数据处理需求而有所不同。
imu原理及姿态融合算法详解IMU原理及姿态融合算法详解一、引言想必大家对IMU这个词并不陌生,它是指惯性测量单元(Inertial Measurement Unit)的简称。
IMU是一种集成了加速度计和陀螺仪等传感器的装置,用于测量物体在空间中的加速度和角速度。
在许多领域,如航空航天、导航和机器人等,IMU都扮演着重要的角色。
本文将详细介绍IMU的工作原理以及姿态融合算法。
二、IMU原理1. 加速度计加速度计是IMU中最基础的传感器之一,用于测量物体在三个轴向上的加速度。
其工作原理基于牛顿第二定律,利用质量和力的关系来测量加速度。
加速度计通常采用微机电系统(MEMS)技术,通过微小的弹簧和质量块来测量力的大小。
当物体加速时,质量块会受到力的作用而发生位移,通过测量位移可以计算出加速度的大小。
2. 陀螺仪陀螺仪是IMU中另一个重要的传感器,用于测量物体的角速度。
其工作原理基于角动量守恒定律,利用陀螺效应来测量角速度。
陀螺仪通常采用MEMS技术,通过旋转的质量块来测量角速度。
当物体发生旋转时,质量块会受到角速度的作用而发生位移,通过测量位移可以计算出角速度的大小。
3. 磁力计磁力计是IMU中的另一个传感器,用于测量物体所处位置的磁场强度。
其工作原理基于洛伦兹力和磁感应定律,利用磁场对电荷的作用力来测量磁场强度。
磁力计通常采用MEMS技术,通过电流和磁场的相互作用来测量磁场强度。
磁力计可以提供物体相对于地球磁北极的方向信息,从而实现姿态的测量。
三、姿态融合算法IMU可以提供物体在三个轴向上的加速度和角速度信息,但无法直接提供物体的姿态信息。
为了获取物体的姿态,通常需要将加速度计和陀螺仪的数据进行融合处理。
常用的姿态融合算法有卡尔曼滤波算法和互补滤波算法。
1. 卡尔曼滤波算法卡尔曼滤波算法是一种递归的最优估计算法,适用于线性系统。
在姿态融合中,卡尔曼滤波算法可以通过对加速度计和陀螺仪数据进行动态建模,估计物体的姿态。
MEMS_IMU_GPS组合导航系统的实现MEMS_IMU_GPS组合导航系统是一种基于微电子机械系统惯性测量单元(IMU)和全球定位系统(GPS)的导航系统。
它通过将IMU和GPS的测量数据进行集成和融合,提供更准确和可靠的位置、速度和姿态信息。
在本文中,将详细介绍MEMS_IMU_GPS组合导航系统的实现原理和关键技术。
首先,需要了解IMU和GPS的基本原理。
IMU主要由三个加速度计和三个陀螺仪组成,用于测量物体的加速度和角速度。
GPS则通过接收卫星发射的信号来测量接收器与卫星之间的距离,从而确定接收器的位置。
IMU和GPS各自都有一定的测量误差,但是通过集成和融合它们的测量数据,可以大幅度提高导航系统的性能。
在实现MEMS_IMU_GPS组合导航系统时,首先需要对IMU和GPS的数据进行预处理。
对于IMU数据,需要进行误差补偿和积分处理。
误差补偿包括陀螺仪的零偏校准和加速度计的尺度因素校准等,以减小测量误差。
积分处理则可以将加速度计的测量值积分得到速度和位置信息,将陀螺仪的测量值积分得到姿态信息。
对于GPS数据,则需要通过解算接收机与卫星之间的距离,从而确定接收机的位置。
接下来,需要进行导航滤波的处理。
导航滤波是将IMU和GPS的数据进行集成和融合的关键步骤,常用的滤波算法包括卡尔曼滤波和粒子滤波等。
卡尔曼滤波是一种利用概率统计的方法对系统状态进行估计和预测的算法,可以融合IMU和GPS的数据,提供更准确和可靠的导航结果。
粒子滤波则是一种基于蒙特卡洛方法的滤波算法,通过对系统状态进行随机取样,逐步逼近真实状态。
此外,还需要考虑导航系统的误差补偿和校准。
导航系统在使用过程中,由于环境变化和传感器老化等因素,可能会产生误差和漂移。
为了提高系统的精度和可靠性,需要进行误差补偿和校准。
误差补偿包括对IMU 和GPS数据的实时校准和修正,以减小测量误差。
校准则包括对传感器的定标和校准,以保证传感器的准确性和一致性。
惯性传感器介绍构成惯性传感器包括加速度计(或加速度传感计)和角速度传感器(陀螺)以及它们的单、双、三轴组合IMU(惯性测量单元),AHRS(包括磁传感器的姿态参考系统)。
MEMS加速度计是利用传感质量的惯性力测量的传感器,通常由标准质量块(传感元件)和检测电路组成。
IMU主要由三个MEMS加速度传感器及三个陀螺和解算电路组成。
分类惯性传感器分为两大类:一类是角速率陀螺;另一类是线加速度计。
角速率陀螺又分为:机械式干式﹑液浮﹑半液浮﹑气浮角速率陀螺;挠性角速率陀螺;MEMS硅﹑石英角速率陀螺(含半球谐振角速率陀螺等);光纤角速率陀螺;激光角速率陀螺等。
线加速度计又分为:机械式线加速度计;挠性线加速度计;MEMS硅﹑石英线加速度计(含压阻﹑压电线加速度计);石英挠性线加速度计等。
惯性传感器作用原理(1).科里奥利(Coriolis)原理:也称科氏效应(科氏力正比于输入角速率)。
该原理适用于机械式干式﹑液浮﹑半液浮﹑气浮角速率陀螺;挠性角速率陀螺;MEMS硅﹑石英角速率陀螺(含半球谐振角速率陀螺)等。
Coriolis法国物理学家(1792年~1843年)。
(2).萨格纳(Sagnac)原理:也称萨氏效应(相位差正比于输入角速率)。
该原理适用于光纤角速率陀螺;激光角速率陀螺等。
Sagnac法国物理学家(1869年~1926年),居里夫妇的朋友。
1913年发明萨氏效应。
术语1. 角速率陀螺术语(1).测量范围(°/ S)Measurement Range也称量程。
指陀螺仪能测量正、反方向角速率的额定值范围。
在此额定值范围内,陀螺仪刻度因数非线性满足规定要求。
(2).刻度因数(mV /°/ S)Scale Factor (Sensitivity)也称刻度因子、标度因数、梯度、灵敏度。
指陀螺仪输出量与输入角速率的比值。
该比值是根据整个输入角速率范围内测得的输入、输出数据,通过最小二乘法拟合求出的直线的斜率。
无人机的AHRS与RTK GPS数据融合算法研究及软硬件设计摘要:本文主要研究了无人机的AHRS(姿态航向参考系统)与RTK(实时运动定位)GPS数据融合算法,并设计了相应的软硬件系统。
采用组合导航的方法,在充分利用AHRS和RTK GPS数据的基础上,通过卡尔曼滤波算法进行数据融合,可大幅提高无人机的定位精度和姿态稳定性。
软件方面采用C++语言实现,硬件包括主控板、传感器模块、GPS模块和无线通讯模块等。
关键词:无人机,AHRS,RTK GPS,数据融合,卡尔曼滤波,组合导航一、引言无人机作为一种新兴的无人飞行器,具有应用前景广阔的优点,尤其在航拍、物流、农业等领域得到了越来越广泛的应用。
然而,无人机在飞行过程中,往往会受到各种外界因素的影响,导致其位置和姿态信息出现偏差,从而影响其定位和导航能力。
为了提高无人机的稳定性和精度,需要对其AHRS(姿态航向参考系统)和GPS(全球卫星定位系统)等数据进行融合,以实现高精度定位和严密控制。
本文将研究无人机的AHRS与RTK GPS数据融合算法,通过将姿态和位置信息进行组合导航,并应用卡尔曼滤波算法对数据进行优化和精确处理,最终得到可靠的导航和定位结果。
此外,本文还通过软硬件设计,实现了相应的无人机控制系统,用以支持数据采集、处理和传输等功能。
二、相关技术1. AHRS姿态参考系统AHRS系统是指通过多种惯性传感器(如加速度计、陀螺仪、磁力计等)测量航空器的运动状态和位置信息,以提供准确的姿态和方向数据的系统。
通过AHRS系统,可以实现航空器的自动控制和导航。
2. RTK GPS定位系统RTK GPS定位系统是指通过差分技术和实时数据传输,提供更精确、更可靠的GPS定位数据的系统。
RTK定位技术同时使用基准站和移动接收器的差分数据,以消除其它误差,实现更准确的位置解算。
3. 数据融合算法数据融合算法是指将同一对象多个不同传感器获得的数据融合在一起,以实现更准确、更可靠的定位和控制的算法。
姿态角解算(MPU6050 加速度计加陀螺仪)本文持续更新…I2C通信AHRS是自动航向基准系统(Automatic Heading Reference System)的简称。
目前,使用四元数来进行AHRS姿态解算的算法被广泛采用于四轴飞行器上。
IMU部分:IMU是惯性测量装置(Inertial Measurement Unit)的简称,通常包含陀螺仪和加速度计。
1.陀螺仪:测量的是角速度,即物体转动的速度,把速度和时间相乘,即可以得到某一时间段内物体转过的角度。
(但是积分运算得来的角度本身就存在误差,随着时间的累加,误差会加剧,此时就需要加速度计辅助计算出姿态角度)2.加速度计:测量的是物体的加速度,我们知道,重力加速度是一个物体受重力作用的情况下所具有的加速度。
当物体处于静止状态时,加速度计测量出来的值就等于重力加速度1g, 约等于9.8米每平方秒。
重力加速度g的方向总是竖直向下的,通过获得重力加速度在其X轴,Y轴上的分量,我们可以计算出物体相对于水平面的倾斜角度。
典型的IMU惯性测量芯片为MPU6050,它被广泛采用在四轴飞行器上。
mpu6050便是这两种传感器结合测出姿态角,通常运用卡尔曼滤波得出最终角度根据加速度计和地磁计的数据,转换到地理坐标系后,与对应参考的重力向量和地磁向量进行求误差,这个误差用来校正陀螺仪的输出,然后用陀螺仪数据进行四元数更新,再转换到欧拉角陀螺仪的角速度测量:如果他的速度是1度不加秒,我们用速度乘以时间就可以知道他从起点走了多少度。
加速度计来测量倾角:一个简单的例子如下: 一个单轴的加速计位于重力水平面上的时候,它在垂直方向上受到的加速度为1g,在水平方向上受到的加速度为0。
当我们把它旋转一个角度的时候,就会在水平轴上产生一个加速度分量。
通过它们的关系,就可以计算出该单轴加速计的倾角。
1.通过陀螺仪的积分来获得四轴的旋转角度2.然后通过加速度计的比例和积分运算来修正陀螺仪的积分结果。
基于Matlab通过惯性传感器融合估计方向目录共5页一、取向 (1)二、传感器的类型 (1)2.1 传感器数据 (1)2.2 加速度计-磁力计融合 (1)2.3 加速度计-陀螺仪融合 (2)2.4 加速度计-陀螺仪-磁力计融合 (3)2.5 调整过滤器参数 (4)三、总结 (5)此示例演示如何使用6轴和9轴融合算法来计算方向。
有几种算法可以从惯性测量单元(IMU)和磁角速率重力(MARG)单元计算方向。
此示例介绍了定向基础知识以及如何使用这些算法。
一、取向对象的方向描述其相对于某个坐标系(有时称为父坐标系)的三维旋转。
对于以下算法,使用的固定父坐标系为东北向下(NED)。
NED有时被称为全局坐标系或参考系。
在NED参考系中,X轴指向北方,Y轴指向东,Z轴指向下方。
NED的X-Y平面被认为是地球的局部切平面。
根据算法,北可以是磁北或真北。
此示例中的算法使用磁北。
如果指定,以下算法可以估计相对于东-北-上(ENU)父坐标系而不是NED 的方向。
可以将对象视为具有自己的坐标系,通常称为局部坐标系或子坐标系。
此子坐标系随对象相对于父坐标系旋转。
如果没有平移,则两个坐标系的原点重叠。
计算的方向量是将数量从父参考系带到子参考系的旋转。
旋转由四元数或旋转矩阵表示。
二、传感器的类型对于方向估计,通常使用三种类型的传感器:加速度计,陀螺仪和磁力计。
加速度计测量适当的加速度。
陀螺仪测量角速度。
磁力计测量当地的磁场。
不同的算法用于融合不同的传感器组合以估计方向。
2.1 传感器数据在本例的大部分内容中,使用同一组传感器数据。
当设备围绕三个不同的轴旋转时,记录加速度计、陀螺仪和磁力计传感器数据:首先围绕其本地Y 轴旋转,然后围绕其Z 轴旋转,最后围绕其X 轴旋转。
在实验期间,设备的X轴通常指向南方。
2.2 加速度计-磁力计融合该功能融合了加速度计和磁力计数据。
这是一种无需参数调整的无记忆算法,但该算法极易受到传感器噪声的影响。
AHRS(航姿参考系统)和IMU(惯性测量单元)的区别分类:算法学习2014-05-28 15:12 565人阅读评论(0) 收藏举报AHRS(航姿参考系统)和IMU(惯性测量单元)的区别【转】刚开始的时候我总是搞不清楚AHRS和 IMU的区别。
不知道这有什么区别。
后来慢慢的慢慢的,我理解了~AHRS 俗称航姿参考系统,AHRS由加速度计,磁场计,陀螺仪构成,AHRS的真正参考来自于地球的重力场和地球的磁场~~他的静态终精度取决于对磁场的测量精度和对重力的测量精度 ,而则陀螺决定了他的动态性能。
这就是AHRS~在这种前提下。
说明AHRS离开了地球这种有重力和磁场环境的时候是没法正常工作的~~而且特别注意。
磁场和重力场越正交,则航姿测量效果越好~~也就是说如果磁场和重力场平行了,比如在地磁南北极。
这里的磁场是向下的,即和重量场方向相同了。
这个时候航线交是没法测出的~~这是航姿系统的缺陷所在。
在高纬度的地方航线角误差会越来越大~~(IMU)Inertial measurement unit,(非内蒙古大学——Inner Mongolia University)学名惯性测量单元,大学的理论力学告诉我们,所有的运动都可以分解为一个直线运动和一个旋转运动,故这个惯性测量单元就是测量这两种运动,直线运动通过加速度计可以测量,旋转运动则通过陀螺。
我假设IMU的陀螺和加速度计的测量是没有任何误差的~~那么通过陀螺则可以精确的测量物体的姿态。
通过加速度计可以二次积分得出位移,实现完整的6DOF,也就是说你带着一台这种理论型的IMU在宇宙任何位置运动。
我们都可以知道他当前的姿态和相对位移~~这将不局限于任何场。
从上面的描述何以看出。
实际上AHRS比IMU还多一个磁场传感器,而为什么AHRS 的级别却低于IMU而需要依赖于重力场和磁场呢~~这是由传感器器件架构所决定的。
AHRS的传感器通常是成本低廉的mems传感器。
这种传感器的陀螺仪和加速度计的噪声相对来说很大,以平面陀螺为例用ADI的陀螺仪进行积分一分钟会漂移2度左右,这种前提下如果没有磁场和重力场来修正三轴陀螺的话。
那么基本上3分钟以后物体的实际姿态和测量输出姿态就完全变样了~~所以在这种低价陀螺仪和加速度计的架构下必须运用场向量来进行修正~~而IMU实际上也是这样的。
因为我们知道没有绝对精确的传感器,只有相对精确的传感器,IMU的陀螺仪用的是光纤陀螺或者机械陀螺~~这种陀螺的成本很高。
精度相对mems陀螺也很高~~精度高不代表准确,IMU的姿态精度参数通常是一小时飘多少度,比如xbow的低端的有一小时3度的。
而用加速度计积分做位置的话。
AHRS是不现实的(1分钟就能飘出几十米。
而且是成二次方的速度递增)。
AHRS通常要结合GPS和气压计做位置~~我听说的IMU积分做位置的是一天多少海里。
这样的一个参数数量级。
也许在海上还能用的到~~这就是AHRS和IMU在我的理解里的一个差异。
自己给自己梳理我再补充一点个人理解和博主讨论,我认为AHR和IMU的最大区别是IMU是相对于理想姿态或相对姿态的测量,AHRS是相对于大地水平的姿态测量,博主举的在宇宙中定姿态的例子就很说明问题,在宇宙中是没有固定的相对物来做姿态参考的,使用IMU来测量姿态也只能相对于飞行器的初始姿态,或理想姿态来测量和描述,AHRS是相对于大地水准面以及垂直于水准面的重力垂线来测量和描述被测物体姿态,所以在高纬度地区误差大总之,个人认为AHRS应该是IMU的一个特例应用,是IMU应用的一个子集【感谢】/zhouusong/1616967/message.aspx#加速度计和陀螺仪指南分类:算法学习2014-05-29 11:19 647人阅读评论(0) 收藏举报写得太好了,又忍不住转载了!原文的地址:/thread-1695-1-1.html本帖翻译自IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南。
这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法、思想的讨论介绍本指南旨在向兴趣者介绍惯性MEMS(微机电系统)传感器,特别是加速度计和陀螺仪以及其他整合IMU(惯性测量单元)设备。
IMU单元例子:上图中MCU顶端的ACC Gyro 6DOF,名为USBThumb,支持USB/串口通信在这篇文章中我将概括这么几个基本并且重要的话题:- 加速度计(accelerometer)检测什么- 陀螺仪(gyroscope,也称作gyro)检测什么- 如何将传感器ADC读取的数据转换为物理单位(加速度传感器的单位是g,陀螺仪的单位是度/秒)- 如何结合加速度传感器和陀螺仪的数据以得到设备和地平面之间的倾角的准确信息在整篇文章中我尽量将数学运算降低到最少。
如果你知道什么是正弦、余弦、正切函数,那无论你的项目使用哪种平台你应该都会明白和运用这篇文章中的思想,这些平台如Arduino、Propeller、Basic Stamp、Ateml芯片、PIC芯片等等。
总有些人认为使用IMU单元需要复杂的数学运算(复杂的FIR或IIR滤波,如卡尔曼滤波,Parks-McClellan滤波等)。
你如果研究这些会得到很棒且很复杂的结果。
我解释事情的方式,只需要基本的数学。
我非常坚信简单的原则。
我认为一个简单的系统更容易操作和监控,另外许多嵌入式设备并不具备能力和资源去实现需要进行矩阵运算的复杂算法。
我会用我设计的一个新IMU模块——Acc_Gyro Accelerometer + Gyro IMU作为例子。
在下面的例子中我们会使用这个设备的参数。
用这个模块作为介绍非常合适,因为它由3个设备组成:- LIS331AL (datasheet) – 3轴2G 模拟加速度计- LPR550AL (datasheet) –双轴(俯仰、翻滚)500°/s 加速度传感器- LY550ALH (datasheet) –单轴(偏航)陀螺仪最后这个设备在这篇介绍中不使用,不过他在 DCM Matrix implementation中有重要作用它们一起组成了一个6自由度的惯性测量单元。
这是个花哨的名字!然而,在花哨的名字后面是个非常有用的设备组合,接下来我们会详细介绍之。
第一部分加速度计要了解这个模块我们先从加速度计开始。
当我们在想象一个加速度计的时候我们可以把它想作一个圆球在一个方盒子中。
你可能会把它想作一个饼干或者甜圈,但我就把它当做一个球好了:我们假定这个盒子不在重力场中或者其他任何会影响球的位置的场中,球处于盒子的正中央。
你可以想象盒子在外太空中,远离任何天体,如果很难想象,那就当做盒子在航天飞机中,一切东西都处于无重力状态。
在上面的图中你可以看到我们给每个轴分配了一对墙(我们移除了Y+以此来观察里面的情况)。
设想每面墙都能感测压力。
如果我们突然把盒子向左移动(加速度为1g=9.8m/s^2),那么球会撞上X-墙。
然后我们检测球撞击墙面产生的压力,X轴输出值为-1g。
请注意加速度计检测到得力的方向与它本身加速度的方向是相反的。
这种力量通常被称为惯性力或假想力。
在这个模型中你你应该学到加速度计是通过间接测量力对一个墙面的作用来测量加速度的,在实际应用中,可能通过弹簧等装置来测量力。
这个力可以是加速度引起的,但在下面的例子中,我们会发现它不一定是加速度引起的。
如果我们把模型放在地球上,球会落在Z-墙面上并对其施加一个1g的力,见下图:在这种情况下盒子没有移动但我们任然读取到Z轴有-1g的值。
球在墙壁上施加的压力是由引力造成的。
在理论上,它可以是不同类型的力量- 例如,你可以想象我们的球是铁质的,将一个磁铁放在盒子旁边那球就会撞上另一面墙。
引用这个例子只是为了说明加速度计的本质是检测力而非加速度。
只是加速度所引起的惯性力正好能被加速度计的检测装置所捕获。
虽然这个模型并非一个MEMS传感器的真实构造,但它用来解决与加速度计相关的问题相当有效。
实际上有些类似传感器中有金属小球,它们称作倾角开关,但是它们的功能更弱,只能检测设备是否在一定程度内倾斜,却不能得到倾斜的程度。
到目前为止,我们已经分析了单轴的加速度计输出,这是使用单轴加速度计所能得到的。
三轴加速度计的真正价值在于它们能够检测全部三个轴的惯性力。
让我们回到盒子模型,并将盒子向右旋转45度。
现在球会与两个面接触:Z-和X-,见下图:0.71g这个值是不是任意的,它们实际上是1/2的平方根的近似值。
我们介绍加速度计的下一个模型时这一点会更清楚。
在上一个模型中我们引入了重力并旋转了盒子。
在最后的两个例子中我们分析了盒子在两种情况下的输出值,力矢量保持不变。
虽然这有助于理解加速度计是怎么和外部力相互作用的,但如果我们将坐标系换为加速度的三个轴并想象矢量力在周围旋转,这会更方便计算。
请看看在上面的模型,我保留了轴的颜色,以便你的思维能更好的从上一个模型转到新的模型中。
想象新模型中每个轴都分别垂直于原模型中各自的墙面。
矢量R是加速度计所检测的矢量(它可能是重力或上面例子中惯性力的合成)。
RX,RY,RZ是矢量R在X,Y,Z上的投影。
请注意下列关系:,R ^ 2 = RX ^ 2 + RY ^ 2 + RZ ^ 2(公式1)此公式等价于三维空间勾股定理。
还记得我刚才说的1/2的平方根0.71不是个随机值吧。
如果你把它们代回上式,回顾一下重力加速度是1g,那我们就能验证:1 ^2 =(SQRT(1/2))^ 2 + 0 ^ 2 +(SQRT(1/2))^ 2在公式1中简单的取代:R=1, Rx = -SQRT(1/2), Ry = 0 , Rz = -SQRT(1/2)经过一大段的理论序言后,我们和实际的加速度计很靠近了。
RX,RY,RZ值是实际中加速度计输出的线性相关值,你可以用它们进行各种计算。
在我们运用它之前我们先讨论一点获取加速度计数据的方法。
大多数加速度计可归为两类:数字和模拟。
数字加速度计可通过I2C,SPI或USART 方式获取信息,而模拟加速度计的输出是一个在预定范围内的电压值,你需要用ADC(模拟量转数字量)模块将其转换为数字值。
我将不会详细介绍ADC是怎么工作的,部分原因是这是个很广的话题,另一个原因是不同平台的ADC都会有差别。
有些MCU具有内置ADC模块,而有些则需要外部电路进行ADC转换。
不管使用什么类型的ADC模块,你都会得到一个在一定范围内的数值。
例如一个10位ADC模块的输出值范围在0 .. 1023间,请注意,1023 = 2 ^ 10 -1。
一个12位ADC模块的输出值范围在0 .. 4095内,注意,4095 = 2 ^ 12-1。
我们继续,先考虑下一个简单的例子,假设我们从10位ADC模块得到了以下的三个轴的数据:AdcRx = 586AdcRy = 630AdcRz = 561每个ADC模块都有一个参考电压,假设在我们的例子中,它是3.3V。