搜索
bottom↓
回复: 50

MWC算法的理解

  [复制链接]

出0入0汤圆

发表于 2013-11-1 22:54:24 | 显示全部楼层 |阅读模式
MWC的理解,也不知对否,有兴趣的朋友参考,或提意见。

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-11-1 23:09:32 来自手机 | 显示全部楼层
自己写的还是?

出0入0汤圆

 楼主| 发表于 2013-11-1 23:49:01 | 显示全部楼层
其它还有 研究中。

出0入0汤圆

发表于 2013-11-2 08:42:15 | 显示全部楼层
期待楼主奉献更精彩的文章

出0入0汤圆

发表于 2013-11-2 10:29:13 | 显示全部楼层
顶一个,感谢分享

出0入0汤圆

发表于 2013-11-2 12:25:14 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2013-11-2 21:31:36 | 显示全部楼层
很精彩的文章。

出0入0汤圆

发表于 2013-11-21 21:53:00 | 显示全部楼层
不错,帮助我们理解代码,辛苦了。。。。。。

出0入0汤圆

发表于 2013-11-22 09:33:33 | 显示全部楼层
很不错的理解。

出0入0汤圆

发表于 2013-11-22 09:51:33 | 显示全部楼层
一直纠结于mwc满篇的#ifdef和#endif,楼主这个很好啊

出0入0汤圆

发表于 2013-11-24 19:58:47 | 显示全部楼层
真是雪中送炭啊  感谢楼主 最近正在纠结MWC的姿态解算部分。。。。

出0入0汤圆

发表于 2013-11-26 18:18:17 | 显示全部楼层
楼主想请教一个关于getEstimatedAttitude()函数的问题:EstG32.V.Z 和EstG.V.Z的关系?

在getEstimatedAttitude()函数中调用了rotateV(&EstG.V,deltaGyroAngle); 对EstG.V向量更新,只用到了角速度参量(deltaGyroAngle[axis] = gyroADC[axis]  * scale;)。。。。(在后面的代码中 EstG.V不见了 ,很想知道它传递向哪里了?,一下我我的寻找过程)

代码然后就是互补滤波:EstG.A[axis] = (EstG.A[axis] * GYR_CMPF_FACTOR + accSmooth[axis]) * INV_GYR_CMPF_FACTOR; 只用到了加速度参量accSmooth[axis]

在之后就是浮点转换成整数 EstG32.A[axis] = EstG.A[axis]; //  还是没见EstG.V

最后几行代码了:
// Attitude of the estimated vector
  int32_t sqGZ = sq(EstG32.V.Z);。。。。。。EstG32.V.Z 从哪里冒出来的 和EstG.V.Z有什么关系呢?
  int32_t sqGX = sq(EstG32.V.X);
  int32_t sqGY = sq(EstG32.V.Y);
  int32_t sqGX_sqGZ = sqGX + sqGZ;
  float invmagXZ  = InvSqrt(sqGX_sqGZ);
  invG = InvSqrt(sqGX_sqGZ + sqGY);
  angle[ROLL]  = _atan2(EstG32.V.X , EstG32.V.Z);。。。。。。计算角度也是用的EstG32.V.Z 不见EstG.V.Z
  angle[PITCH] = _atan2(EstG32.V.Y , invmagXZ*sqGX_sqGZ);
#if MAG
    heading = _atan2(
      EstM32.V.Z * EstG32.V.X - EstM32.V.X * EstG32.V.Z,
      EstM32.V.Y * invG * sqGX_sqGZ  - (EstM32.V.X * EstG32.V.X + EstM32.V.Z * EstG32.V.Z) * invG * EstG32.V.Y );
    heading += MAG_DECLINIATION * 10; //add declination
    heading = heading /10;
  #endif

出0入0汤圆

发表于 2013-11-30 08:46:16 | 显示全部楼层
EstG32.V.Z 和EstG.V.Z是一个联合变量

出0入0汤圆

 楼主| 发表于 2013-12-1 21:13:22 | 显示全部楼层

typedef struct fp_vector {
  float X;
  float Y;
  float Z;
} t_fp_vector_def;

typedef union {
  float   A[3];
  t_fp_vector_def V;
} t_fp_vector;
这应该就是回答了。但我的版本里面没有EstG32结构变量。

出0入0汤圆

发表于 2013-12-2 11:41:12 | 显示全部楼层
感谢楼主的辛勤劳作.Mark学习!

出0入0汤圆

 楼主| 发表于 2013-12-2 21:57:14 | 显示全部楼层
上次发送文件后发现有错误,修改的地方件附件图片。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-12-12 20:11:09 | 显示全部楼层
Madgwick的算法貌似也很不错

出0入0汤圆

发表于 2013-12-18 20:10:59 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

出0入0汤圆

发表于 2013-12-26 18:53:16 | 显示全部楼层
求教一下楼主,对MWC的PID理解,P是角度的差,I是角度差的积分,这都好理解,但为什么D是角加速度呢?

出105入79汤圆

发表于 2013-12-26 19:59:15 | 显示全部楼层
mbwhy 发表于 2013-12-26 18:53
求教一下楼主,对MWC的PID理解,P是角度的差,I是角度差的积分,这都好理解,但为什么D是角加速度呢? ...

D是角度的微分,也就是角度变化率,也就是角速度。陀螺仪输出角速度

出0入0汤圆

发表于 2013-12-26 20:20:29 | 显示全部楼层
qwe2231695 发表于 2013-12-26 19:59
D是角度的微分,也就是角度变化率,也就是角速度。陀螺仪输出角速度

贴段代码:
            delta = gyroData[axis] - lastGyro[axis];        //16 bits is ok here, the dif between 2 consecutive gyro reads is limited to 800
            lastGyro[axis] = gyroData[axis];
            deltaSum = delta1[axis] + delta2[axis] + delta;
            DTerm = ((int32_t) deltaSum * dynD8[axis]) >> 5;

这里 gyroData[axis]不是角速度吗,然后跟前次角速度做差,后面又跟前两次计算的做和,
这不是角速度嘛。。

出105入79汤圆

发表于 2013-12-26 21:02:46 | 显示全部楼层
mbwhy 发表于 2013-12-26 20:20
贴段代码:
            delta = gyroData[axis] - lastGyro[axis];        //16 bits is ok here, the d ...

哦~ 你怎么把MWC的PID的代码搬过来了~ 这个帖子是说角度融合部分。  

至于你说的D为什么是陀螺仪再微分。

其实,是这样的:那段PID有兼容某些飞机只有3轴陀螺仪的场合,主控量是角速度。那么PID,的D就要再微分了。

出0入0汤圆

发表于 2013-12-26 21:30:01 | 显示全部楼层
qwe2231695 发表于 2013-12-26 21:02
哦~ 你怎么把MWC的PID的代码搬过来了~ 这个帖子是说角度融合部分。  

至于你说的D为什么是陀螺 ...

噢 ,那难道MWC主要是PI 控制? 主要是现在一直觉得姿态结算固然重要,但一个好的PID更会关键啊

出105入79汤圆

发表于 2013-12-26 22:06:01 | 显示全部楼层
mbwhy 发表于 2013-12-26 21:30
噢 ,那难道MWC主要是PI 控制? 主要是现在一直觉得姿态结算固然重要,但一个好的PID更会关键啊 ...

是PID的,只是老的飞机只有陀螺仪,得不到角度。 所以要用你说的那个代码。。 好的pid咳哟你不角度滞后过冲等毛病。但是整体稳定性是姿态决定的。pid决定手感。

出0入0汤圆

发表于 2013-12-27 08:19:32 | 显示全部楼层
qwe2231695 发表于 2013-12-26 22:06
是PID的,只是老的飞机只有陀螺仪,得不到角度。 所以要用你说的那个代码。。 好的pid咳哟你不角度滞后过 ...

楼层用的是哪种PID呢,能介绍一下吗?

出0入0汤圆

发表于 2014-1-23 01:09:34 | 显示全部楼层
很不错的理解

出0入0汤圆

发表于 2014-1-23 09:45:17 | 显示全部楼层
顶一个,多谢分享了。

出0入0汤圆

发表于 2014-1-23 11:18:32 | 显示全部楼层
顶一个,下来看看。

出0入0汤圆

发表于 2014-1-23 23:37:04 | 显示全部楼层
楼主急公好义,雪中送炭,感谢

出0入0汤圆

发表于 2014-1-24 00:19:22 来自手机 | 显示全部楼层
多谢分享啦

出0入0汤圆

发表于 2014-1-24 07:49:56 | 显示全部楼层
这个得支持一下楼主

出0入0汤圆

发表于 2014-2-26 10:20:12 | 显示全部楼层
下来看看,谢谢

出0入0汤圆

发表于 2014-2-26 13:16:11 | 显示全部楼层
收藏了..

出0入0汤圆

发表于 2014-2-26 17:13:10 | 显示全部楼层
先看看,多谢分享。

出0入0汤圆

发表于 2014-2-26 21:34:50 | 显示全部楼层
顶一顶!

出0入4汤圆

发表于 2014-3-5 17:37:07 | 显示全部楼层
好东西 下来看看

出0入0汤圆

发表于 2014-6-5 19:16:03 | 显示全部楼层
背负拉天的云 发表于 2013-11-26 18:18
楼主想请教一个关于getEstimatedAttitude()函数的问题:EstG32.V.Z 和EstG.V.Z的关系?

在getEstimatedAtt ...

你好,请问你弄明白了吗 ,我最近在看这部分的代码,也有相同的疑惑

出0入0汤圆

发表于 2014-6-5 19:17:49 | 显示全部楼层
背负拉天的云 发表于 2013-11-26 18:18
楼主想请教一个关于getEstimatedAttitude()函数的问题:EstG32.V.Z 和EstG.V.Z的关系?

在getEstimatedAtt ...

EstG.V没有看到它的赋值语句啊?它的值是多少呢?

出0入0汤圆

发表于 2014-6-9 04:30:10 | 显示全部楼层
nbmsse 发表于 2013-12-2 21:57
上次发送文件后发现有错误,修改的地方件附件图片。

楼主,公式中的v_temp.x是pitch轴上一次的角度吗?用上一次的角度计算最新的角度。
如果是这样的话,那么这个公式依然把磁场起决定作用的YAW数据耦合到了其它两个轴上。

出0入0汤圆

发表于 2014-6-9 16:14:47 | 显示全部楼层
雀一眼                 

出0入0汤圆

 楼主| 发表于 2014-6-15 21:52:47 | 显示全部楼层
航向角 使用了向量ESTG和ESTM的叉乘,为啥得到的新向量的X和Y轴的分量的反正切就是航向角呢?  有明白的说说.

出0入0汤圆

发表于 2014-7-23 18:08:47 | 显示全部楼层
12楼的问题我也有疑问,不知道谁可以解答一下

出0入0汤圆

发表于 2014-8-22 14:28:27 | 显示全部楼层
果断收藏了。。

出0入0汤圆

发表于 2014-9-4 12:42:28 | 显示全部楼层
谢谢楼主,很详细

出0入0汤圆

发表于 2014-9-11 09:07:39 | 显示全部楼层
谢谢!好资料,正学习呢

出0入0汤圆

发表于 2014-9-11 09:08:01 | 显示全部楼层
谢谢!好资料,正学习呢

出0入0汤圆

发表于 2014-11-25 18:11:38 | 显示全部楼层
好东西,谢谢楼主分享!

出0入0汤圆

发表于 2015-4-6 13:39:39 | 显示全部楼层
感谢搂住,注释的很到位

出0入0汤圆

发表于 2015-8-18 10:43:07 | 显示全部楼层
图里面的坐标系是不是画错了,z轴应该向上吧。而且转动的顺序为什么是先roll再pitch再yaw

出0入0汤圆

发表于 2015-10-13 15:43:59 | 显示全部楼层
谢谢了,楼主辛苦了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-26 01:40

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

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