搜索
bottom↓
回复: 693

捷联惯导算法心得

  [复制链接]

出0入0汤圆

发表于 2012-8-16 10:23:30 | 显示全部楼层 |阅读模式
本帖最后由 seanwood 于 2012-8-16 15:33 编辑

1、四个概念:“地理”坐标系、“机体”坐标系、他们之间换算公式、换算公式用的系数。

地理坐标系:东、北、天,以下简称地理。在这个坐标系里有重力永远是(0,0,1g),地磁永远是(0,1,x)(地磁的垂直不关心)两个三维向量。
机体坐标系:以下简称机体,上面有陀螺、加计、电子罗盘传感器,三个三维向量。
换算公式:以下简称公式,公式就是描述机体姿态的表达方法,一般都是用以地理为基准,从地理换算到机体的公式,有四元数、欧拉角、方向余弦矩阵。
换算公式的系数:以下简称系数,四元数的q0123、欧拉角的ROLL/PITCH/YAW、余弦矩阵的9个数。系数就是描述机体姿态的表达方法的具体数值。

姿态,其实就是公式+系数的组合,一般经常用人容易理解的公式“欧拉角”表示,系数就是横滚xx度俯仰xx度航向xx度。

2、五个数据源:重力、地磁、陀螺、加计、电子罗盘,前两个来自地理,后三个来自机体

3、陀螺向量:基于机体,也在机体上积分,因为地理上无参考数据源,所以很独立,直接在公式的老系数上积分,得到新系数。
狭义上的捷联惯导算法,就是指这个陀螺积分公式,也分为欧拉角、方向余弦矩阵、四元数,他们的积分算法有增量法、数值积分法(X阶龙格-库塔)等等

4、加计向量、重力向量:加计基于机体,重力基于地理,重力向量(0,0,1g)用公式换算到机体,与机体的加计向量算出误差。理论上应该没有误差,这误差逆向思维一下,其实就是换算公式的系数误差。所以这误差可用于纠正公式的系数(横滚、俯仰),也就是姿态。

5、电子罗盘向量、地磁向量:同上,只不过要砍掉地理上的垂直向量,因为无用。只留下地理水平面上的向量。误差可以用来纠正公式的系数(航向)。

6、就这样,系数不停地被陀螺积分更新,也不停地被误差修正,它和公式所代表的姿态也在不断更新。
如果积分和修正用四元数算法(因为运算量较少、无奇点误差),最后用欧拉角输出控制PID(因为角度比较直观),那就需要有个四元数系数到欧拉角系数的转换。常用的三种公式,它们之间都有转换算法。

再搞个直白一点的例子:
机体好似一条船,地理就是那地图,姿态就是航向(船头在地图上的方位),重力和地磁是地图上的灯塔,陀螺/积分公式是舵手,加计和电子罗盘是瞭望手。
舵手负责估计和把稳航向,他相信自己,本来船向北开的,就一定会一直往北开,觉得转了90度弯,那就会往东开。
当然如果舵手很牛逼,也许能估计很准确,维持很长时间。不过只信任舵手,肯定会迷路,所以一般都有地图和瞭望手来观察误差。
瞭望手根据地图灯塔方位和船的当前航向,算出灯塔理论上应该在船的X方位。然而看到实际灯塔在船的Y方位,那肯定船的当前航向有偏差了,偏差就是ERR=X-Y。
舵手收到瞭望手给的ERR报告,觉得可靠,那就听个90%*ERR,觉得天气不好、地图误差大,那就听个10%*ERR,根据这个来纠正估算航向。。



------------------------------------------------------
来点干货,注意以下的欧拉角都是这样的顺序:先航向-再俯仰-然后横滚
公式截图来自:袁信、郑锷的《捷联式惯性导航原理》,邓正隆的《惯性技术》。
--------------------------------------------------
根据加计计算初始欧拉角
这个无论欧拉角算法还是四元数算法还是方向余弦矩阵都需要,因为加计和电子罗盘给出欧拉角的描述方式比较方便。
imu.euler.x = atan2(imu.accel.y, imu.accel.z);
imu.euler.y = -asin(imu.accel.x / ACCEL_1G);
ACCEL_1G 为9.81米/秒^2,accel.xyz的都为这个单位,算出来的euler.xyz单位是弧度
航向imu.euler.z可以用电子罗盘计算
--------------------------------------------------
欧拉角微分方程
如果用欧拉角算法,那么这个公式就够了,不需要来回转换。

矩阵上到下三个角度(希腊字母)是roll pitch和yaw,公式最左边的上面带点的三个是本次更新后的角度,不带点的是上个更新周期算出来的角度。
Wx,y,z是roll pitch和yaw方向的三个陀螺在这个周期转动过的角度,单位为弧度,计算为间隔时间T*陀螺角速度,比如0.02秒*0.01弧度/秒=0.0002弧度.


--------------------------------------------------
以下是四元数
--------------------------------------------------
四元数初始化
q0-3为四元数四个值,用最上面公式根据加计计算出来的欧拉角来初始化

--------------------------------------------------
四元数微分方程
四元数更新算法,一阶龙库法,同样4个量(入、P1-3)也为四元数的四个值,即上面的q0-3。
Wx,y,z是三个陀螺的这个周期的角速度,比如欧拉角微分方程中的0.01弧度/秒,T为更新周期,比如上面的0.02秒。

再来一张,另外一本书上的,仔细看和上面是一样的delta角度,就是上面的角速度*周期,单位为弧度

--------------------------------------------------
四元数微分方程更新后的规范化
每个周期更新完四元数,需要对四元数做规范化处理。因为四元数本来就定义为四维单位向量。
求q0-3的平方和,再开根号算出的向量长度length。然后每个q0-3除这个length。

--------------------------------------------------
四元数转欧拉角公式
把四元数转成了方向余弦矩阵中的几个元素,再用这几个元素转成了欧拉角
先从四元数q0-3转成方向余弦矩阵:

再从方向余弦矩阵转成欧拉角


代码:
        //更新方向余弦矩阵
        t11=q.q0*q.q0+q.q1*q.q1-q.q2*q.q2-q.q3*q.q3;
        t12=2.0*(q.q1*q.q2+q.q0*q.q3);
        t13=2.0*(q.q1*q.q3-q.q0*q.q2);
        t21=2.0*(q.q1*q.q2-q.q0*q.q3);
        t22=q.q0*q.q0-q.q1*q.q1+q.q2*q.q2-q.q3*q.q3;
        t23=2.0*(q.q2*q.q3+q.q0*q.q1);
        t31=2.0*(q.q1*q.q3+q.q0*q.q2);
        t32=2.0*(q.q2*q.q3-q.q0*q.q1);
        t33=q.q0*q.q0-q.q1*q.q1-q.q2*q.q2+q.q3*q.q3;
        //求出欧拉角
        imu.euler.roll = atan2(t23,t33);
        imu.euler.pitch = -asin(t13);
        imu.euler.yaw = atan2(t12,t11);
        if (imu.euler.yaw < 0){
                imu.euler.yaw += ToRad(360);
        }
----------------------------------------------------
以下代码摘自网上,很巧妙,附上注释,有四元数微分,有加计耦合。
没电子罗盘,其实耦合原理也一样。
  1. //=====================================================================================================
  2. // IMU.c
  3. // S.O.H. Madgwick
  4. // 25th September 2010
  5. //=====================================================================================================
  6. // Description:
  7. //
  8. // Quaternion implementation of the 'DCM filter' [Mayhony et al].
  9. //
  10. // User must define 'halfT' as the (sample period / 2), and the filter gains 'Kp' and 'Ki'.
  11. //
  12. // Global variables 'q0', 'q1', 'q2', 'q3' are the quaternion elements representing the estimated
  13. // orientation.  See my report for an overview of the use of quaternions in this application.
  14. //
  15. // User must call 'IMUupdate()' every sample period and parse calibrated gyroscope ('gx', 'gy', 'gz')
  16. // and accelerometer ('ax', 'ay', 'ay') data.  Gyroscope units are radians/second, accelerometer
  17. // units are irrelevant as the vector is normalised.
  18. //
  19. //=====================================================================================================

  20. //----------------------------------------------------------------------------------------------------
  21. // Header files

  22. #include "IMU.h"
  23. #include <math.h>

  24. //----------------------------------------------------------------------------------------------------
  25. // Definitions

  26. #define Kp 2.0f                        // proportional gain governs rate of convergence to accelerometer/magnetometer
  27. #define Ki 0.005f                // integral gain governs rate of convergence of gyroscope biases
  28. #define halfT 0.5f                // half the sample period

  29. //---------------------------------------------------------------------------------------------------
  30. // Variable definitions

  31. float q0 = 1, q1 = 0, q2 = 0, q3 = 0;        // quaternion elements representing the estimated orientation
  32. float exInt = 0, eyInt = 0, ezInt = 0;        // scaled integral error

  33. //====================================================================================================
  34. // Function
  35. //====================================================================================================

  36. void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az) {
  37.         float norm;
  38.         float vx, vy, vz;
  39.         float ex, ey, ez;         
  40.       
  41.         // normalise the measurements
  42.         norm = sqrt(ax*ax + ay*ay + az*az);      
  43.         ax = ax / norm;
  44.         ay = ay / norm;
  45.         az = az / norm;      
  46. 把加计的三维向量转成单位向量。
  47.       

  48.         // estimated direction of gravity
  49.         vx = 2*(q1*q3 - q0*q2);
  50.         vy = 2*(q0*q1 + q2*q3);
  51.         vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;

  52. 这是把四元数换算成《方向余弦矩阵》中的第三列的三个元素。
  53. 根据余弦矩阵和欧拉角的定义,地理坐标系的重力向量,转到机体坐标系,正好是这三个元素。
  54. 所以这里的vx\y\z,其实就是当前的欧拉角(即四元数)的机体坐标参照系上,换算出来的重力单位向量。


  55.         // error is sum of cross product between reference direction of field and direction measured by sensor
  56.         ex = (ay*vz - az*vy);
  57.         ey = (az*vx - ax*vz);
  58.         ez = (ax*vy - ay*vx);

  59. axyz是机体坐标参照系上,加速度计测出来的重力向量,也就是实际测出来的重力向量。
  60. axyz是测量得到的重力向量,vxyz是陀螺积分后的姿态来推算出的重力向量,它们都是机体坐标参照系上的重力向量。
  61. 那它们之间的误差向量,就是陀螺积分后的姿态和加计测出来的姿态之间的误差。
  62. 向量间的误差,可以用向量叉积(也叫向量外积、叉乘)来表示,exyz就是两个重力向量的叉积。
  63. 这个叉积向量仍旧是位于机体坐标系上的,而陀螺积分误差也是在机体坐标系,而且叉积的大小与陀螺积分误差成正比,正好拿来纠正陀螺。(你可以自己拿东西想象一下)由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。



  64.         // integral error scaled integral gain
  65.         exInt = exInt + ex*Ki;
  66.         eyInt = eyInt + ey*Ki;
  67.         ezInt = ezInt + ez*Ki;

  68.         // adjusted gyroscope measurements
  69.         gx = gx + Kp*ex + exInt;
  70.         gy = gy + Kp*ey + eyInt;
  71.         gz = gz + Kp*ez + ezInt;

  72. 用叉积误差来做PI修正陀螺零偏




  73.         // integrate quaternion rate and normalise
  74.         q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  75.         q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  76.         q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  77.         q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;  
  78. 四元数微分方程

  79.       

  80.         // normalise quaternion
  81.         norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
  82.         q0 = q0 / norm;
  83.         q1 = q1 / norm;
  84.         q2 = q2 / norm;
  85.         q3 = q3 / norm;
  86. 四元数规范化
  87. }

  88. //====================================================================================================
  89. // END OF CODE
  90. //====================================================================================================
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-9-13 09:34:39 | 显示全部楼层
werren 发表于 2012-9-9 20:14
樓主,我按照你的代碼使用陀螺儀和加速度計輸出俯仰和橫滾角都是很穩定的,但是航向角每隔一段時間就增加 ...

是的,陀螺一般有零点漂移、非线性、加速度影响等等多种误差。
其中零点漂移影响最大,但在初始化(保持静止读取一段时间平均值作为零点)后,漂移还可以忍受。不过温度变化大,漂移也比较厉害。
没有磁力计,是无法对航向角做纠正融合的。

以下代码是上面那段代码的磁力计+加计+陀螺版,没仔细研究过,粗看看像是把磁阻mxyz的向量转到地理坐标系,然后用地理坐标系的正北向标准磁场向量取代变成bxyz?又转回机体坐标系变成wxyz,最后和原始磁阻测量值mxyz做向量叉积来修正陀螺。
想学习的就研究研究吧

我自己做的磁阻耦合很简单很粗暴。把磁阻方向角解出来,和四元数解除的欧拉角航向角做个差,再用k滤波器把差值融合到欧拉角航向角上去,然后直接把欧拉角转成四元数。

还有23楼卖传感器的,这不是算法的实时问题,八成是你没用心研究,拷来代码就想直接用。
halfT 0.5f需要根据具体更新周期来调整,T是更新周期,T*角速度=微分角度,能在帖子里容易找到的东西我真不想多说。
  1. //=====================================================================================================
  2. // AHRS.c
  3. // S.O.H. Madgwick
  4. // 25th August 2010
  5. //=====================================================================================================
  6. // Description:
  7. //
  8. // Quaternion implementation of the 'DCM filter' [Mayhony et al].  Incorporates the magnetic distortion
  9. // compensation algorithms from my filter [Madgwick] which eliminates the need for a reference
  10. // direction of flux (bx bz) to be predefined and limits the effect of magnetic distortions to yaw
  11. // axis only.
  12. //
  13. // User must define 'halfT' as the (sample period / 2), and the filter gains 'Kp' and 'Ki'.
  14. //
  15. // Global variables 'q0', 'q1', 'q2', 'q3' are the quaternion elements representing the estimated
  16. // orientation.  See my report for an overview of the use of quaternions in this application.
  17. //
  18. // User must call 'AHRSupdate()' every sample period and parse calibrated gyroscope ('gx', 'gy', 'gz'),
  19. // accelerometer ('ax', 'ay', 'ay') and magnetometer ('mx', 'my', 'mz') data.  Gyroscope units are
  20. // radians/second, accelerometer and magnetometer units are irrelevant as the vector is normalised.
  21. //
  22. //=====================================================================================================

  23. //----------------------------------------------------------------------------------------------------
  24. // Header files

  25. #include "AHRS.h"
  26. #include <math.h>

  27. //----------------------------------------------------------------------------------------------------
  28. // Definitions

  29. #define Kp 2.0f                        // proportional gain governs rate of convergence to accelerometer/magnetometer
  30. #define Ki 0.005f                // integral gain governs rate of convergence of gyroscope biases
  31. #define halfT 0.5f                // half the sample period

  32. //---------------------------------------------------------------------------------------------------
  33. // Variable definitions

  34. float q0 = 1, q1 = 0, q2 = 0, q3 = 0;        // quaternion elements representing the estimated orientation
  35. float exInt = 0, eyInt = 0, ezInt = 0;        // scaled integral error

  36. //====================================================================================================
  37. // Function
  38. //====================================================================================================

  39. void AHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz) {
  40.         float norm;
  41.         float hx, hy, hz, bx, bz;
  42.         float vx, vy, vz, wx, wy, wz;
  43.         float ex, ey, ez;

  44.         // auxiliary variables to reduce number of repeated operations
  45.         float q0q0 = q0*q0;
  46.         float q0q1 = q0*q1;
  47.         float q0q2 = q0*q2;
  48.         float q0q3 = q0*q3;
  49.         float q1q1 = q1*q1;
  50.         float q1q2 = q1*q2;
  51.         float q1q3 = q1*q3;
  52.         float q2q2 = q2*q2;   
  53.         float q2q3 = q2*q3;
  54.         float q3q3 = q3*q3;         
  55.        
  56.         // normalise the measurements
  57.         norm = sqrt(ax*ax + ay*ay + az*az);      
  58.         ax = ax / norm;
  59.         ay = ay / norm;
  60.         az = az / norm;
  61.         norm = sqrt(mx*mx + my*my + mz*mz);         
  62.         mx = mx / norm;
  63.         my = my / norm;
  64.         mz = mz / norm;         
  65.        
  66.         // compute reference direction of flux
  67.         hx = 2*mx*(0.5 - q2q2 - q3q3) + 2*my*(q1q2 - q0q3) + 2*mz*(q1q3 + q0q2);
  68.         hy = 2*mx*(q1q2 + q0q3) + 2*my*(0.5 - q1q1 - q3q3) + 2*mz*(q2q3 - q0q1);
  69.         hz = 2*mx*(q1q3 - q0q2) + 2*my*(q2q3 + q0q1) + 2*mz*(0.5 - q1q1 - q2q2);         
  70.         bx = sqrt((hx*hx) + (hy*hy));
  71.         bz = hz;        
  72.        
  73.         // estimated direction of gravity and flux (v and w)
  74.         vx = 2*(q1q3 - q0q2);
  75.         vy = 2*(q0q1 + q2q3);
  76.         vz = q0q0 - q1q1 - q2q2 + q3q3;
  77.         wx = 2*bx*(0.5 - q2q2 - q3q3) + 2*bz*(q1q3 - q0q2);
  78.         wy = 2*bx*(q1q2 - q0q3) + 2*bz*(q0q1 + q2q3);
  79.         wz = 2*bx*(q0q2 + q1q3) + 2*bz*(0.5 - q1q1 - q2q2);  
  80.        
  81.         // error is sum of cross product between reference direction of fields and direction measured by sensors
  82.         ex = (ay*vz - az*vy) + (my*wz - mz*wy);
  83.         ey = (az*vx - ax*vz) + (mz*wx - mx*wz);
  84.         ez = (ax*vy - ay*vx) + (mx*wy - my*wx);
  85.        
  86.         // integral error scaled integral gain
  87.         exInt = exInt + ex*Ki;
  88.         eyInt = eyInt + ey*Ki;
  89.         ezInt = ezInt + ez*Ki;
  90.        
  91.         // adjusted gyroscope measurements
  92.         gx = gx + Kp*ex + exInt;
  93.         gy = gy + Kp*ey + eyInt;
  94.         gz = gz + Kp*ez + ezInt;
  95.        
  96.         // integrate quaternion rate and normalise
  97.         q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  98.         q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  99.         q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  100.         q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;  
  101.        
  102.         // normalise quaternion
  103.         norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
  104.         q0 = q0 / norm;
  105.         q1 = q1 / norm;
  106.         q2 = q2 / norm;
  107.         q3 = q3 / norm;
  108. }

  109. //====================================================================================================
  110. // END OF CODE
  111. //====================================================================================================
复制代码

出0入0汤圆

发表于 2019-3-28 14:34:03 | 显示全部楼层
好贴要顶!+1

出50入10汤圆

发表于 2019-3-27 19:41:47 | 显示全部楼层
好贴要顶!

出0入0汤圆

发表于 2019-2-20 18:01:06 | 显示全部楼层
还是一知半解,继续研究

出0入0汤圆

发表于 2019-2-17 17:39:36 | 显示全部楼层
膜拜大佬,mark

出0入0汤圆

发表于 2019-2-16 19:07:44 | 显示全部楼层
能给科普一下惯导吗?精度怎么样,有民用案例吗?

出0入0汤圆

发表于 2019-2-16 19:03:42 | 显示全部楼层
正在研究和理解,感谢分享

出105入79汤圆

发表于 2018-12-28 21:17:24 | 显示全部楼层
就是这篇文章,搞得我做了4年飞控工程师。

出0入0汤圆

发表于 2018-12-28 20:31:07 | 显示全部楼层
看                       

出0入0汤圆

发表于 2018-12-28 16:57:48 | 显示全部楼层
入坑flag,感谢楼主分享

出0入0汤圆

发表于 2018-12-18 18:34:03 | 显示全部楼层
谢谢楼主的分享!!

出0入0汤圆

发表于 2018-6-12 12:20:57 | 显示全部楼层
嗯好,帮忙顶一下

出0入0汤圆

发表于 2018-6-9 14:36:18 | 显示全部楼层
seanwood 发表于 2012-9-13 09:34
是的,陀螺一般有零点漂移、非线性、加速度影响等等多种误差。
其中零点漂移影响最大,但在初始化(保持 ...

谢谢分享,学习了

出0入0汤圆

发表于 2018-6-4 14:23:15 | 显示全部楼层
赞,楼主大才!

出0入0汤圆

发表于 2017-11-11 17:57:37 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2017-11-4 14:01:04 | 显示全部楼层
好东西,受教了!!

出0入0汤圆

发表于 2017-11-1 10:36:52 | 显示全部楼层
收藏 看一下!! 挺不错的

出0入0汤圆

发表于 2017-8-23 23:37:40 | 显示全部楼层
学习了mark

出0入0汤圆

发表于 2017-8-23 20:17:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2017-4-13 08:54:54 | 显示全部楼层
收藏备用!

出0入0汤圆

发表于 2017-4-12 22:33:11 | 显示全部楼层
信息量很大,记号

出0入0汤圆

发表于 2017-4-12 18:10:34 | 显示全部楼层
很有用的帖子做个标记,继续学习

出0入0汤圆

发表于 2017-4-11 18:50:37 | 显示全部楼层
mark,后面会用到,现在还是先啃书吧

出0入4汤圆

发表于 2017-4-1 21:51:41 | 显示全部楼层
捷联惯导算法:mark。
1、关于陀螺仪温漂,现在上电后静止做标定,然后还是有温漂,只是小了。
2、关于电子罗盘,使用过程中发现靠近金属物体会对测量结果有影响。有啥优化方案吗?

出0入0汤圆

发表于 2017-3-5 20:19:10 | 显示全部楼层
楼主你还更新这个帖子吗?磁力计修正的那段代码有问题,我实测过的,希望楼注能再出来修正一下磁力计的代码

出0入0汤圆

发表于 2017-2-17 12:50:16 | 显示全部楼层
真是好文章,受益匪浅!

出0入0汤圆

发表于 2016-12-22 16:13:45 | 显示全部楼层
可能用来测量位移?请教了!

出0入0汤圆

发表于 2016-11-11 17:39:50 | 显示全部楼层
seanwood 发表于 2012-9-5 08:01
这里误差没说清楚,不是指向量差。这个叉积误差是指将带有误差的加计向量转动到与重力向量重合,需要绕什 ...

关于叉积  还是想请教楼主。
叉积结果:A=B*C=(ex, ey, ez)。这是一个向量,大小为|a||b|sin角度。
我始终搞不明白的是:
1.这是一个抽象的向量,怎么能用来运算,更不能理解的是 单独把ex  ey  ez拿出来是什么意思?
2.程序中的sin角度  如何体现?


// error is sum of cross product between reference direction of field and direction measured by sensor
        ex = (ay*vz - az*vy);
        ey = (az*vx - ax*vz);
        ez = (ax*vy - ay*vx);

出0入0汤圆

发表于 2016-11-2 14:00:42 | 显示全部楼层
谢谢分享 先收藏!

出0入0汤圆

发表于 2016-9-27 09:32:41 | 显示全部楼层
地理坐标系:东、北、天,以下简称地理。在这个坐标系里有重力永远是(0,0,1g)
这句话不对,当导航坐标系(也就是这里说的“地理坐标系”)为东北天时,gn=[0;0;-g],当导航坐标系为北东地时,gn=[0;0;g],这里g=9.8m/s^2,

出0入0汤圆

发表于 2016-7-29 10:03:32 | 显示全部楼层
膜拜~~~~~~~

出0入0汤圆

发表于 2016-7-18 11:01:04 | 显示全部楼层
感谢分析

出0入0汤圆

发表于 2016-7-3 14:02:23 | 显示全部楼层
收藏,十五字十五字十五字十五字十五字

出0入0汤圆

发表于 2016-6-4 11:15:38 | 显示全部楼层
seanwood 发表于 2012-9-13 09:34
是的,陀螺一般有零点漂移、非线性、加速度影响等等多种误差。
其中零点漂移影响最大,但在初始化(保持 ...

借鉴了,前辈。

出0入0汤圆

发表于 2016-6-1 02:41:52 来自手机 | 显示全部楼层
mark,学习了

出0入0汤圆

发表于 2016-5-29 18:34:15 | 显示全部楼层
chushibinsaobao 发表于 2013-12-3 16:32
亲,我也是新手,也在学习飞控。不过对于这个问题我的理解是这样的。
那个计算公式的意义就是将基于机体 ...

你这是哪里来的截图啊?什么书本上的?

出0入0汤圆

发表于 2016-5-28 12:20:38 | 显示全部楼层
很不错,看了透彻不少!顶起

出0入0汤圆

发表于 2016-5-26 23:32:19 来自手机 | 显示全部楼层
我开个挖坟了。一楼的正解高手之作,你也是搞飞机的?我也搞了这个iru很久了。没有gps坐标修正的都是耍流氓→_→,要不航空上的惯导组件早就取消了gps坐标输入校准惯导了。呵呵。我特么就在所谓的滤波上好了整整一年时间。

出0入0汤圆

发表于 2016-5-21 10:42:48 | 显示全部楼层
楼主好样的,点赞。

出0入0汤圆

发表于 2016-5-9 21:46:12 | 显示全部楼层
楼主你好,有个问题想请问你一下,就是向量的叉积修正陀螺仪这部分,叉积结果是绕轴旋转某一角度,为什么可以直接将它投影到三个轴上呢?跟欧拉角是否有关系呢?

出0入0汤圆

发表于 2016-3-14 21:00:00 | 显示全部楼层
学习学习,不知楼主如何联系,可否交流?

出0入0汤圆

发表于 2016-3-14 20:18:50 | 显示全部楼层
这个好,收藏了

出0入0汤圆

发表于 2016-3-14 15:08:42 | 显示全部楼层
百年好贴,马克

出0入0汤圆

发表于 2016-3-14 15:07:24 | 显示全部楼层
百年好贴,马克

出0入0汤圆

发表于 2016-3-14 15:06:26 | 显示全部楼层
百年好贴,马克

出0入0汤圆

发表于 2016-3-14 13:51:40 | 显示全部楼层
好贴!留号,备用.

出0入0汤圆

发表于 2016-3-13 22:46:21 | 显示全部楼层
要搞这个的这确实是一篇好文啊,不搞这个的根本是天书啊

出0入0汤圆

发表于 2016-3-13 20:09:13 | 显示全部楼层
很好的文章,希望自己能搞懂。

出0入0汤圆

发表于 2016-3-8 19:45:28 | 显示全部楼层
看上去好高大上啊

出0入0汤圆

发表于 2016-3-8 19:14:21 | 显示全部楼层
受用了,MAK一下

出0入0汤圆

发表于 2016-3-8 17:31:08 | 显示全部楼层
werren 发表于 2012-9-9 20:14
樓主,我按照你的代碼使用陀螺儀和加速度計輸出俯仰和橫滾角都是很穩定的,但是航向角每隔一段時間就增加 ...

这个算法是用加速度计去修正陀螺仪的零飘,因为加速度计无法计算偏航角,因此没办法修正陀螺仪估计出来的偏航角,所以偏航角就发散了

出0入0汤圆

发表于 2016-3-8 17:21:43 | 显示全部楼层
好贴,必须立马收藏

出0入0汤圆

发表于 2016-3-8 17:13:51 | 显示全部楼层
niu嘻嘻嘻

出0入0汤圆

发表于 2016-3-1 10:49:13 | 显示全部楼层
楼主牛人,顶一个

出0入4汤圆

发表于 2016-2-18 12:14:45 | 显示全部楼层
用过现成产品,没深入分析过,感谢分享

出0入0汤圆

发表于 2016-2-18 05:23:35 | 显示全部楼层
对‘误差’一词的误用。这是他自行‘定义’了一个‘向量差’,这个差和两个向量的长度都成比例,和夹角正弦成比例。这是他表达不好,应该说,“我们定义一个特殊向量差,姑名‘My向量差’,用于表达两个向量的差异度

出0入0汤圆

发表于 2015-12-18 15:47:16 | 显示全部楼层
东西很多             值得学习                     

出0入0汤圆

发表于 2015-12-18 14:41:04 | 显示全部楼层
神贴,顶一个!

出0入0汤圆

发表于 2015-11-30 10:46:48 | 显示全部楼层
刚好看到这一部分了,开始学习捷联惯导算法,谢谢楼主

出0入0汤圆

发表于 2015-11-24 18:29:02 | 显示全部楼层
学习      

出0入0汤圆

发表于 2015-11-24 15:16:56 | 显示全部楼层
不多说了,看过书再看这个,感觉好理解了一些,顶一个

出0入0汤圆

发表于 2015-11-23 21:12:14 | 显示全部楼层
本帖最后由 wwwzfgcom 于 2015-11-23 21:42 编辑

。加速度有1点多的。不知如何

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-11-23 20:44:13 | 显示全部楼层
今天又看了一次,又有一遍收货,楼主分析的很透彻

出0入0汤圆

发表于 2015-10-12 09:01:13 | 显示全部楼层
捷联惯导算法,涨姿势了!

出0入0汤圆

发表于 2015-10-11 09:07:37 | 显示全部楼层
导弹的其中一种制导方式

出0入0汤圆

发表于 2015-10-10 17:59:39 | 显示全部楼层
感觉好高大上的东西

出0入0汤圆

发表于 2015-10-10 14:59:44 | 显示全部楼层
好贴。mark AHRS !

出0入0汤圆

发表于 2015-10-10 14:31:31 | 显示全部楼层
LZ,如果用Z轴做为前进方向,那四元素的初始化和更新还有欧拉角的转换公式应该怎么样修改呢,现在好像全都是Y轴或是X轴做为前进方向

出0入0汤圆

发表于 2015-10-7 19:08:00 | 显示全部楼层
学习了,感谢楼主分享

出0入0汤圆

发表于 2015-10-4 20:35:52 | 显示全部楼层
互补滤波怎么会用到PI ?我看到的互补滤波是angle = (0.98)*(angle + gyro * dt) + (0.02)*(x_acc),谁能讲解一下?

出0入0汤圆

发表于 2015-9-15 10:27:28 | 显示全部楼层
mark 学习了!!!

出0入0汤圆

发表于 2015-8-22 19:13:47 | 显示全部楼层
可能是入行不深吧,“捷联惯导算法”还是第一次听说,先看看再说

出0入0汤圆

发表于 2015-8-22 18:20:43 | 显示全部楼层
新手入门有没有什么指导的?

出0入0汤圆

发表于 2015-8-14 15:50:53 | 显示全部楼层
楼主的讲解非常精彩,辛苦了。 初学者受益匪浅啊。   可否请教楼主一个问题, ey = (az*vx - ax*vz);这个叉积按理论算出来应该是 ey = (ax*vz - az*vx);这里为什么是这样的呢?

出0入0汤圆

发表于 2015-8-8 23:59:35 | 显示全部楼层
好帖,顶一个。。。。。

出0入0汤圆

发表于 2015-8-7 14:34:50 | 显示全部楼层
我觉得楼主好厉害啊,不过有一个疑问好像,没看到跟捷联惯导有关的,内容捷联惯导不是INS吗?看了帖子好像是AHRS(航姿参考系统)

出0入0汤圆

发表于 2015-8-7 14:11:20 | 显示全部楼层
多谢分享  再看一下        

出0入0汤圆

发表于 2015-8-4 07:06:00 | 显示全部楼层
mark,谢谢楼主分享

出0入0汤圆

发表于 2015-8-3 18:10:18 | 显示全部楼层
很不错的资料,正在学习,LZ的解析很具体,很形象。。
慢慢学习。。

出0入0汤圆

发表于 2015-7-26 22:19:31 | 显示全部楼层
mark,很有用!!

出0入0汤圆

发表于 2015-7-26 21:26:09 | 显示全部楼层
这个很好,谢谢分享,学习了

出0入0汤圆

发表于 2015-7-26 09:03:46 | 显示全部楼层
学习了,谢谢楼主

出0入0汤圆

发表于 2015-7-24 19:51:01 | 显示全部楼层
多谢楼主,可惜向量叉乘那里还是不是太明白

出0入0汤圆

发表于 2015-7-12 11:11:27 | 显示全部楼层
此贴必须顶。

出0入0汤圆

发表于 2015-7-11 17:13:18 | 显示全部楼层
你好,我解出来的姿态角,动Pitch的时候Yaw角也会移动,请问是什么原因呢?

出0入0汤圆

发表于 2015-6-19 15:57:55 | 显示全部楼层
我靠,看不懂了。还是慢慢学吧。


标准论坛尾巴。当你看到这个尾巴的时候就知道你的回复是正常的。

出0入0汤圆

发表于 2015-6-19 00:10:50 | 显示全部楼层
好帖啊~

出0入0汤圆

发表于 2015-6-18 22:37:15 | 显示全部楼层
赞一个,然后收藏

出0入0汤圆

发表于 2015-6-18 09:43:01 | 显示全部楼层
多谢楼主分享

出0入0汤圆

发表于 2015-6-17 21:54:06 | 显示全部楼层
seanwood 发表于 2012-9-13 09:34
是的,陀螺一般有零点漂移、非线性、加速度影响等等多种误差。
其中零点漂移影响最大,但在初始化(保持 ...

太棒了,正在调四轴

出0入0汤圆

发表于 2015-6-9 12:33:37 | 显示全部楼层
看了秦永元的惯性导航,袁信的惯性导航原理,一直没弄清楚四元数的初始化是怎么弄得,直到看到楼主的帖子,所以非常感谢。可能也是由于四轴平台本身的低动态性所以目前看到的帖子多是四元数法,没有看见旋转矢量法的相关代码,而且使用的还是一阶龙库法,既然书上说得那么好为什么没人用呢?还有关于磁力计和加速度计作为观测者本身就有误差,当受到磁场干扰和振动的时候如何排除这些干扰?关于9轴传感器的融合问题,不知道卡尔曼滤波器的融合效果怎么样,不知道楼主怎么看!

出0入0汤圆

发表于 2015-6-8 22:07:39 | 显示全部楼层
谢谢楼主本来有两点疑惑一是四元数的初始化,二是四元数与欧拉角的关系,这两个疑问在看了楼主的帖子后都解决了,再次感谢

出0入0汤圆

发表于 2015-5-28 10:54:57 | 显示全部楼层
学习,谢谢!!!

出0入0汤圆

发表于 2015-5-27 22:07:41 | 显示全部楼层
太棒了,深刻学习了

出0入0汤圆

发表于 2015-5-25 16:22:33 | 显示全部楼层
..................

出0入0汤圆

发表于 2015-5-24 20:02:35 | 显示全部楼层
这么高深的东西,记号一下

出0入0汤圆

发表于 2015-5-24 17:55:11 | 显示全部楼层
mark!!!                  

出0入0汤圆

发表于 2015-5-24 10:27:51 | 显示全部楼层
捷联惯性制导,好东西,新人,慢慢看。

出0入0汤圆

发表于 2015-5-23 11:46:48 | 显示全部楼层
一直想找个这,谢谢楼主分享,看看去。

出0入0汤圆

发表于 2015-5-22 16:28:37 | 显示全部楼层
好帖子,继续顶!

出0入0汤圆

发表于 2015-5-21 22:56:49 | 显示全部楼层
好贴,学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 22:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表