ggyyll8683 发表于 2013-2-10 18:49:33

好帖子,精辟

traff2007 发表于 2013-2-10 19:44:53

谢谢分享~

prosmarter 发表于 2013-2-12 19:41:28

mark{:smile:}

alaryt 发表于 2013-2-16 02:19:15

捷联式惯性导航原理

Dossoftware 发表于 2013-2-16 08:50:42

加上星光就可以搞弹道导弹了

jzjjzj 发表于 2013-2-16 17:31:43

本帖最后由 jzjjzj 于 2013-2-16 17:33 编辑

终于看懂了它们之间的关系了

zhaoweiqi40 发表于 2013-2-17 19:24:27

mark{:victory:}

monkey_hzh 发表于 2013-2-19 11:14:39

先顶一下 慢慢研究~~

fm0826 发表于 2013-2-19 12:49:45

收藏 捷联惯性导航系统

seanwood 发表于 2013-2-20 10:15:59

四元数是有三角函数运算,但是只在解出欧拉角的时候才用。每个积分周期是用不到的。

举个例子,比如为了积分精确,积分周期用1ms一次,但对外部电机的控制周期比如是10ms。那结算姿态只需要10ms一次。
欧拉角微分方程需要每1ms周期计算6个三角函数来积分。
四元数则只需要每10ms计算3个反三角函数,这运算量差距就很明显了。

leicai05 发表于 2013-2-20 10:17:06

学习中ing

hanshiruo 发表于 2013-2-20 12:58:18

学习学习

maogefff 发表于 2013-2-21 14:53:50

看了几遍了,没看一边似乎又多懂一点,还在继续啃

mazhenyu 发表于 2013-2-21 21:05:57

百年好贴

climberyoung 发表于 2013-2-22 13:37:02

楼主总结的非常好。

yat 发表于 2013-2-22 13:48:10

牛人 谢谢 mark

自由行 发表于 2013-2-22 14:58:20

学习!{:handshake:}

i8700 发表于 2013-2-25 09:54:09

不错,好贴,学习了

maogefff 发表于 2013-3-1 23:08:42

大哥,四轴飞行的时候应该是不停运动的啊,比如上升或者下降,那么加速度计测出来的值不就不准了么?

s19910223 发表于 2013-3-4 12:29:42

学习了 感谢楼主

炎阳 发表于 2013-3-7 11:12:44

感谢楼主

皮爱了西 发表于 2013-3-8 17:28:56

先收藏了,太深奥了

黑眼豆豆 发表于 2013-3-15 09:33:08

LZ说用加速度计算出欧拉角来初始化四元数,然而加速度计只能计算俯仰角和滚动角,不能计算偏航角。因此怎样计算初始四元数;另外,LZ在程序里初始化四元数是q0 = 1, q1 = 0, q2 = 0, q3 = 0,是否默认初始机体坐标与地理坐标重合,如果不重合是否会对以后的计算造成误差。程序里也没有看见用加速度计初始化四元数啊

tigerccc 发表于 2013-3-15 17:02:35

技术牛人,为人也如此无私,赞一个

残忆视觉 发表于 2013-3-16 17:05:29

有点迷糊,

黑眼豆豆 发表于 2013-3-18 16:52:34

seanwood 发表于 2013-2-20 10:15 static/image/common/back.gif
四元数是有三角函数运算,但是只在解出欧拉角的时候才用。每个积分周期是用不到的。

举个例子,比如为了积 ...

楼主的意思是每个积分周期都要初始化四元数,那eIntxyz还有用吗?那上一时刻算出的时刻在下一时刻也用不上啊

seanwood 发表于 2013-3-20 13:27:04

我什么时候说过每个周期都要初始化啊?
初始化,就是把 加速度计、电子罗盘的三轴结合算出的欧拉角,转换成四元数。
每个更新周期,是用陀螺仪的角速度去对四元数进行积分。
要用到欧拉角的时候,再使用 四元数->欧拉角,来结算出欧拉角。
示例代码中只有更新周期,没有初始化和欧拉角结算,不要想直接拿来用,帖子整个看一遍。

zhao137726 发表于 2013-3-20 15:11:36

太棒了,楼主写的太好了,简洁,明确。终于懂得了。谢谢楼主。

seanwood 发表于 2013-3-21 09:56:31

本帖最后由 seanwood 于 2013-3-21 10:00 编辑

有人问加电子罗盘的融合是怎么回事,我再献丑一回,开课讲解喽,来鼓掌来顶{:biggrin:}
我嚓,顶楼不能编辑的,只好放在楼中间了。这也好,给肯挨页翻帖子的朋友一个惊喜。//=====================================================================================================
// AHRS.c
// S.O.H. Madgwick
// 25th August 2010
//=====================================================================================================
// Description:
//
// Quaternion implementation of the 'DCM filter' .Incorporates the magnetic distortion
// compensation algorithms from my filter which eliminates the need for a reference
// direction of flux (bx bz) to be predefined and limits the effect of magnetic distortions to yaw
// axis only.
//
// User must define 'halfT' as the (sample period / 2), and the filter gains 'Kp' and 'Ki'.
//
// Global variables 'q0', 'q1', 'q2', 'q3' are the quaternion elements representing the estimated
// orientation.See my report for an overview of the use of quaternions in this application.
//
// User must call 'AHRSupdate()' every sample period and parse calibrated gyroscope ('gx', 'gy', 'gz'),
// accelerometer ('ax', 'ay', 'ay') and magnetometer ('mx', 'my', 'mz') data.Gyroscope units are
// radians/second, accelerometer and magnetometer units are irrelevant as the vector is normalised.
//
//=====================================================================================================

//----------------------------------------------------------------------------------------------------
// Header files

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

//----------------------------------------------------------------------------------------------------
// Definitions

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

//---------------------------------------------------------------------------------------------------
// Variable definitions

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

//====================================================================================================
// Function
//====================================================================================================

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

      // auxiliary variables to reduce number of repeated operations
      float q0q0 = q0*q0;
      float q0q1 = q0*q1;
      float q0q2 = q0*q2;
      float q0q3 = q0*q3;
      float q1q1 = q1*q1;
      float q1q2 = q1*q2;
      float q1q3 = q1*q3;
      float q2q2 = q2*q2;   
      float q2q3 = q2*q3;
      float q3q3 = q3*q3;         
      
      // normalise the measurements
      norm = sqrt(ax*ax + ay*ay + az*az);      
      ax = ax / norm;
      ay = ay / norm;
      az = az / norm;
      norm = sqrt(mx*mx + my*my + mz*mz);         
      mx = mx / norm;
      my = my / norm;
      mz = mz / norm;         
      
从机体坐标系的电子罗盘测到的矢量转成地理坐标系下的磁场矢量hxyz(测量值)
      // compute reference direction of flux
      hx = 2*mx*(0.5 - q2q2 - q3q3) + 2*my*(q1q2 - q0q3) + 2*mz*(q1q3 + q0q2);
      hy = 2*mx*(q1q2 + q0q3) + 2*my*(0.5 - q1q1 - q3q3) + 2*mz*(q2q3 - q0q1);
      hz = 2*mx*(q1q3 - q0q2) + 2*my*(q2q3 + q0q1) + 2*mz*(0.5 - q1q1 - q2q2);         

计算地理坐标系下的磁场矢量bxyz(参考值)。
因为地理地磁水平夹角,我们已知是0度(抛去磁偏角的因素,固定向北),所以by=0,bx=某值
但地理参考地磁矢量在垂直面上也有分量bz,地球上每个地方都是不一样的。
我们无法得知,也就无法用来融合(有更适合做垂直方向修正融合的加速度计),所以直接从测量值hz上复制过来,bz=hz。
磁场水平分量,参考值和测量值的大小应该是一致的(bx*bx) + (by*by)) = ((hx*hx) + (hy*hy))。
因为by=0,所以就简化成(bx*bx)= ((hx*hx) + (hy*hy))。可算出bx。
      bx = sqrt((hx*hx) + (hy*hy));
      bz = hz;      
   
      // estimated direction of gravity and flux (v and w)
      vx = 2*(q1q3 - q0q2);
      vy = 2*(q0q1 + q2q3);
      vz = q0q0 - q1q1 - q2q2 + q3q3;

我们把地理坐标系上的磁场矢量bxyz,转到机体上来wxyz。
因为by=0,所以所有涉及到by的部分都被省略了。
类似上面重力vxyz的推算,因为重力g的gz=1,gx=gy=0,所以上面涉及到gxgy的部分也被省略了
你可以看看两个公式:wxyz的公式,把bx换成gx(0),把bz换成gz(1),就变成了vxyz的公式了(其中q0q0+q1q1+q2q2+q3q3=1)。
      wx = 2*bx*(0.5 - q2q2 - q3q3) + 2*bz*(q1q3 - q0q2);
      wy = 2*bx*(q1q2 - q0q3) + 2*bz*(q0q1 + q2q3);
      wz = 2*bx*(q0q2 + q1q3) + 2*bz*(0.5 - q1q1 - q2q2);
      
现在把加速度的测量矢量和参考矢量做叉积,把磁场的测量矢量和参考矢量也做叉积。都拿来来修正陀螺。
      // error is sum of cross product between reference direction of fields and direction measured by sensors
      ex = (ay*vz - az*vy) + (my*wz - mz*wy);
      ey = (az*vx - ax*vz) + (mz*wx - mx*wz);
      ez = (ax*vy - ay*vx) + (mx*wy - my*wx);
      
      // integral error scaled integral gain
      exInt = exInt + ex*Ki;
      eyInt = eyInt + ey*Ki;
      ezInt = ezInt + ez*Ki;
      
      // adjusted gyroscope measurements
      gx = gx + Kp*ex + exInt;
      gy = gy + Kp*ey + eyInt;
      gz = gz + Kp*ez + ezInt;
      
      // integrate quaternion rate and normalise
      q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
      q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
      q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
      q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
      
      // normalise quaternion
      norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
      q0 = q0 / norm;
      q1 = q1 / norm;
      q2 = q2 / norm;
      q3 = q3 / norm;
}

//====================================================================================================
// END OF CODE
//====================================================================================================

黑眼豆豆 发表于 2013-3-22 08:38:23

seanwood 发表于 2013-3-21 09:56 static/image/common/back.gif
有人问加电子罗盘的融合是怎么回事,我再献丑一回,开课讲解喽,来鼓掌来顶
我嚓,顶楼不能编 ...

请问楼主,磁阻传感器测量值mxyz乘以旋转矩阵转换到地理坐标系变成hxyz,该矢量的方向应该也是东北天,如果说地磁水平分量正北,那么为什么不用bx=hx,而是用bx*bx=hx*hy,是考虑到转换矩阵中四元数的误差?

STM32_Study 发表于 2013-3-22 09:51:30

楼主的帖子解析得很明白,让我弄懂了很多东西

但还有一个疑问,单用加速度计和地磁传感器,在静态的情况下,能否准确计算出完整的欧拉角?

yaw需要通过地磁传感器来计算,但地磁本身对应磁平面的映射,也需要pitch和roll

我看了一些文献,提到单用加速度计和地磁传感器,当pitch和roll过大的时候(大于40度)的时候,地磁的计算就不准确了?

seanwood 发表于 2013-3-22 10:04:02

黑眼豆豆 发表于 2013-3-22 08:38 static/image/common/back.gif
请问楼主,磁阻传感器测量值mxyz乘以旋转矩阵转换到地理坐标系变成hxyz,该矢量的方向应该也是东北天,如 ...

你为啥要用电子罗盘呢?不就是为了修正四元数被陀螺积分过程中产生的误差嘛。hxyz和bxyz本来应该是完全相等,但是hxyz被四元数转到地理坐标系的时候因为四元数有误差,所以他们的误差,就是四元数的误差。

seanwood 发表于 2013-3-22 10:08:00

STM32_Study 发表于 2013-3-22 09:51 static/image/common/back.gif
楼主的帖子解析得很明白,让我弄懂了很多东西

但还有一个疑问,单用加速度计和地磁传感器,在静态的情况下 ...

如roll/pitch不是水平,地磁当然不能只靠地磁的xy来算。
但是谁让你先算地磁啊?先用加速度计算出roll和pitch,然后再用这个roll/pitch去和地磁三轴组合算出yaw,不就没误差了吗?

wangyeqing333 发表于 2013-3-22 10:13:30

搞下来研究研究

菜包 发表于 2013-3-22 11:59:41

太牛了,后悔没学好数学啊

michael.yang 发表于 2013-3-22 12:47:05

强贴留名!

黑眼豆豆 发表于 2013-3-22 14:33:45

seanwood 发表于 2013-3-22 10:04 static/image/common/back.gif
你为啥要用电子罗盘呢?不就是为了修正四元数被陀螺积分过程中产生的误差嘛。hxyz和bxyz本来应该是完全相 ...

不好意思,楼主不要怪我不求甚解啊!既然旋转矩阵有误差那么hxy就不一定是水平的,那么求参考地磁水平分量就不见得是(bx*bx)= ((hx*hx) + (hy*hy))?

IBC 发表于 2013-3-22 19:02:19

LZ讲得不错
虽然有些还没弄懂但还是支持一下

清风阙月 发表于 2013-3-23 22:01:03

seanwood 发表于 2013-3-21 09:56 static/image/common/back.gif
有人问加电子罗盘的融合是怎么回事,我再献丑一回,开课讲解喽,来鼓掌来顶
我嚓,顶楼不能编 ...

LZ这P值和I值必须通过实际测试得到吗??
不太会找P值,I值
我把P值放到2或3的时候,静置陀螺仪,显示出来的姿态定位有明显的偏差,而且会不停的晃动
如果再调大P值就晃动的更厉害了
除非把两个值都往小了调姿态能像点样子   但这样就是只有陀螺仪的效果了妥妥的错了
求问lz我这是什么问题   是磁阻传感器没调整好吗?

裸奔的流浪者 发表于 2013-3-26 20:54:33

开始看不懂,现在刚有点入门了,确实是刚体运动通俗易懂的讲解,楼主牛叉

xinmulan 发表于 2013-3-27 01:52:55

楼主的这个精神非常的值得大家学习。。这篇文章绝对是精品中的精品。

huangbing110110 发表于 2013-3-27 22:11:45

的确呀!白莲好贴

talangxue 发表于 2013-3-28 00:38:06

真心膜拜楼主的理解能力和讲解能力。启蒙贴啊

icifan 发表于 2013-3-29 11:34:52

一直在学习 还未能超越 谢谢

xukkkkkk 发表于 2013-3-29 13:12:09

问下下面这个函数这两段怎么理解
// 估计方向的重力
        vx = 2*(q1*q3 - q0*q2);
        vy = 2*(q0*q1 + q2*q3);
        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
       
        // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和
        ex = (ay*vz - az*vy);
        ey = (az*vx - ax*vz);
        ez = (ax*vy - ay*vx);

其他的都懂了,就这个还没想通


我搞了个FPV专用飞控 全传感器+osd+GPS
最近再搞个433遥控,可以回发数据
以前在模型论坛混,玩技术的不多,不深,现在改这里吧
说实话这里四轴发展太慢了,现在都GPS自主飞行了,坛子里好像没人搞,去搞微型四轴

有兴趣联系我吧,我的资料程序PCB全开源


试飞的视频在下面
hXttp://v.youku.com/v_show/id_XNTMyOTk5NjM2.hXtm




void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az) {
        float norm;
        float vx, vy, vz;
        float ex, ey, ez;         
       
        // 测量正常化
        norm = sqrt(ax*ax + ay*ay + az*az);      
        ax = ax / norm;
        ay = ay / norm;
        az = az / norm;      
       
        // 估计方向的重力
        vx = 2*(q1*q3 - q0*q2);
        vy = 2*(q0*q1 + q2*q3);
        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
       
        // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和
        ex = (ay*vz - az*vy);
        ey = (az*vx - ax*vz);
        ez = (ax*vy - ay*vx);
       
        // 积分误差比例积分增益
        exInt = exInt + ex*Ki;
        eyInt = eyInt + ey*Ki;
        ezInt = ezInt + ez*Ki;
       
        // 调整后的陀螺仪测量
        gx = gx + Kp*ex + exInt;
        gy = gy + Kp*ey + eyInt;
        gz = gz + Kp*ez + ezInt;
       
        // 整合四元数率和正常化
        q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
        q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
        q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
        q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
       
        // 正常化四元
        norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
        q0 = q0 / norm;
        q1 = q1 / norm;
        q2 = q2 / norm;
        q3 = q3 / norm;
}

luozhongchao123 发表于 2013-3-29 23:57:54

这段代码没有懂??

从机体坐标系的电子罗盘测到的矢量转成地理坐标系下的磁场矢量hxyz(测量值)
      // compute reference direction of flux
      hx = 2*mx*(0.5 - q2q2 - q3q3) + 2*my*(q1q2 - q0q3) + 2*mz*(q1q3 + q0q2);
      hy = 2*mx*(q1q2 + q0q3) + 2*my*(0.5 - q1q1 - q3q3) + 2*mz*(q2q3 - q0q1);
      hz = 2*mx*(q1q3 - q0q2) + 2*my*(q2q3 + q0q1) + 2*mz*(0.5 - q1q1 - q2q2);

john800422 发表于 2013-3-30 00:59:29

xukkkkkk 发表于 2013-3-29 13:12 static/image/common/back.gif
问下下面这个函数这两段怎么理解
// 估计方向的重力
        vx = 2*(q1*q3 - q0*q2);


我的理解

myhonour 发表于 2013-3-30 07:15:12

真是好文章,超级喜欢这个帖子,感谢楼主~!!!!

IBC 发表于 2013-4-1 21:48:10

这几天由仔细看了看相关的资料,有点入门了
再次来谢谢LZ

mangetuzi 发表于 2013-4-3 11:26:20

mark 一下正在学习中

tonamatata 发表于 2013-4-3 14:37:36

先标记了 回去慢慢看

sgzzour 发表于 2013-4-3 20:34:55

很不错的东西,学习了、、、、

sgzzour 发表于 2013-4-3 20:39:53

xukkkkkk 发表于 2013-3-29 13:12 static/image/common/back.gif
问下下面这个函数这两段怎么理解
// 估计方向的重力
        vx = 2*(q1*q3 - q0*q2);


这位仁兄的视频的确不错,怎么联系你呢?

wxj 发表于 2013-4-5 22:52:57

很好的帖子啊

nuaa 发表于 2013-4-6 00:52:38

很详细,收藏了。

wcm_e 发表于 2013-4-6 11:31:07

学习,mark

铁驴不倒 发表于 2013-4-8 12:57:08

好帖!慢慢研究

yssdsz 发表于 2013-4-8 15:49:19

mark~学习中》》》

xukkkkkk 发表于 2013-4-8 20:48:16

楼主,搞了多就到现在这个水平,我数学不好,搞了1年

xukkkkkk 发表于 2013-4-9 08:58:49

john800422 发表于 2013-3-30 00:59 static/image/common/back.gif
我的理解

你的截图是那本书上或者资料上的

john800422 发表于 2013-4-9 11:35:20

xukkkkkk 发表于 2013-4-9 08:58 static/image/common/back.gif
你的截图是那本书上或者资料上的

自己想的
自己寫的

Taylor1 发表于 2013-4-9 20:21:26

mark 卡尔曼算法

崆峒 发表于 2013-4-9 22:10:34

多谢楼主分享

nil00 发表于 2013-4-10 10:45:52

学习了。。。{:handshake:}

luozhongchao123 发表于 2013-4-14 22:08:52

john800422 发表于 2013-3-30 00:59 static/image/common/back.gif
我的理解

老兄,你的文章在那里找的,可以传上来看看不?

john800422 发表于 2013-4-14 22:53:32

luozhongchao123 发表于 2013-4-14 22:08 static/image/common/back.gif
老兄,你的文章在那里找的,可以传上来看看不?

自己想的
自己寫的

gcj567891 发表于 2013-4-19 09:33:57

楼主辛苦了,感谢楼主,正需要这个,虽然有点看不懂,慢慢看!

wzpwzphi 发表于 2013-4-21 11:50:36

我也想了解一下国外的四轴!楼主可否告诉我以上代码的出处?

jlian168 发表于 2013-4-25 17:05:06

mark,thanks.

wscjun 发表于 2013-4-25 22:41:20

真心谢谢楼主 很清晰的知识脉络 谢谢分享

孤独飞行 发表于 2013-4-25 22:56:18

学习学习{:smile:}

my_avr 发表于 2013-4-27 08:54:40

标记,学习,LZ辛苦了

CCALM 发表于 2013-4-27 21:38:56

mark{:smile:}{:smile:}{:smile:}{:smile:}

wudision 发表于 2013-4-27 21:52:50

好贴子,留着看,谢谢楼主

任我游8596 发表于 2013-4-28 03:27:59

{:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:} {:hug:}

zouyf12 发表于 2013-4-28 12:00:15

请教前辈一个问题,   前辈帖子里写更新四元数的方法是用一阶龙库法,但是我看其他有些讲四元数的文章里又提到四元数乘法来更新,这两者有什么区别呢?

kyan3886 发表于 2013-4-28 16:56:21

陀螺倒是没用过,过去一直用磁通门+石英加速度计做电子罗盘的计算,目的是将倾斜了的三个磁通门器件算回大地坐标系,由于这些传感器都是单轴的,安装时有正交度误差以及磁坐标轴与重力坐标轴平行度问题,带来的误差也不小,这个又怎么去解决呢?

wickedseason 发表于 2013-4-28 20:09:40

MARK上先

zhuwenwujy 发表于 2013-4-29 17:37:18

顶一下楼主,慢慢来看~

whf199191 发表于 2013-4-29 18:08:01

牛人,mark~

oldbreadman 发表于 2013-4-30 19:28:19

这个帖子据说是精华,留个名先。

WUST_LJS 发表于 2013-4-30 22:48:50

好铁    !!! 楼主辛苦了!! 好人一生平安!!!

zhuchaohua 发表于 2013-4-30 23:07:21

总结得非常好马克先

WUST_LJS 发表于 2013-4-30 23:23:27

xukkkkkk 发表于 2013-3-29 13:12 static/image/common/back.gif
问下下面这个函数这两段怎么理解
// 估计方向的重力
        vx = 2*(q1*q3 - q0*q2);


您好,请问下 您的算法也是用四元素么? 还是用MK的 那种方式?
看了您的视频, 佩服。
我是学生,最近入门四轴, 参考前人的资料在微型四轴能飞,P但ID响应不行,老是荡。现在不知道是数据融合的问题还是
PID的控制太过于简略。想把算法调稳定了再做大四轴。
能否参考下您的 算法。 万分感谢!!

520zhoupian 发表于 2013-5-1 13:11:22

好久没有看到到这样的帖子了,非常高兴,先拿下来看看,要是以后有什么值得分享的东西我也会像这样也大家讨论。

lyxooo1 发表于 2013-5-1 14:57:36

好帖子,顶!

elong2013 发表于 2013-5-1 17:13:18

楼主是高手,向楼主学习

520zhoupian 发表于 2013-5-1 17:40:07

公式最左边的上面带点的三个是本次更新后的角度,不带点的是上个更新周期算出来的角度。
这句话里好像有点表达错误,但是我也不确定,带点应该是本次更新后 角度的增量

sunhaoqin 发表于 2013-5-2 09:09:19

mark................

cai_mouse 发表于 2013-5-3 19:14:34

这个算法心得写得很好,谢谢楼主的分享。

颠覆理论 发表于 2013-5-3 21:07:08

标记一下

lologame 发表于 2013-5-4 08:40:01

void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)

这个函数的参数
gx gy gz, 是陀螺仪直接读出来的数据,还是转换成了实际角速度数据?
ax ay az,是加速度计直接读出来3个轴的数据吗?

初次接触四轴,希望大神点拨~~

树上的小鸟 发表于 2013-5-5 19:06:56

这个帖子,真心不错,谢谢楼主!{:smile:}

小笨蛋 发表于 2013-5-6 15:23:33

本帖最后由 小笨蛋 于 2013-5-6 16:23 编辑

恩,写的真好!我认认真真的打印出来看了几篇,并试图推导。
      ex = (ay*vz - az*vy);
      ey = (az*vx - ax*vz);
      ez = (ax*vy - ay*vx);
我简单的算了一下,发现ex ey ez好像就是sin(角度偏差),在角度偏差比较小的情况下就应该等于(角度偏差)。、、、、请问这一句对不对?
然后乘以Kp来修正陀螺仪偏差。

还有我见过另一种算法是把欧拉角转换成四元数,在利用四元数相乘来更新四元数。不知道和你这种方式本质上是不是一样?我试图证明、、、未果。

我用matlab做四元数旋转的实验,结果单旋转Pitch轴的话会出现奇怪的现象,我单片机里面也出现相同的现象,不知道为什么。
% clc;
% clear all;
% close all;

q=;
euler3=;
a=[];
euan=[];

for i=1:1:360
    p=euler2quat(euler3);
    q=quatmultiply(p,q);
    quatnormalize(q);
    a=;
    e=quat2euler(q);
    euan=;
end

hold;
plot(a(:,1),'r','LineWidth',2);
plot(a(:,2),'g','LineWidth',2);
plot(a(:,3),'b','LineWidth',2);
plot(a(:,4),'c','LineWidth',2);
plot(euan(:,1),'m','LineWidth',2);
plot(euan(:,2),'y','LineWidth',2);
plot(euan(:,3),'k','LineWidth',2);

windancerhxw 发表于 2013-5-6 21:11:21

{:lol:}
很牛叉的样子,学习了

cyberjok 发表于 2013-5-6 21:31:27

不错的说。。。

g921002 发表于 2013-5-6 22:48:19

lologame 发表于 2013-5-4 08:40 static/image/common/back.gif
void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)

这个函数的参数


陀螺的部分是實際的角速度(rad/sec)

lologame 发表于 2013-5-7 08:11:55

g921002 发表于 2013-5-6 22:48 static/image/common/back.gif
陀螺的部分是實際的角速度(rad/sec)

嗯,我已成功验证,谢谢你的热心回复

mique 发表于 2013-5-8 09:20:11

mark 四轴 算法

丹峰 发表于 2013-5-8 15:00:08

收藏,以后慢慢研究
页: 1 [2] 3 4 5 6 7
查看完整版本: 捷联惯导算法心得