搜索
bottom↓
回复: 39

刚完成的传感器,使用加速度检测姿态【恢复】

[复制链接]

出0入0汤圆

发表于 2008-9-25 19:55:17 | 显示全部楼层 |阅读模式
刚完成的传感器,使用加速度检测姿态。后边会增加角速度的算法



视频

http://www.youtube.com/v/sXL7X3eTAe0

http://v.youku.com/v_show/id_XNDQzNjU3ODg=.html









 (原文件名:DSCN5640t.JPG) 





本贴被 nter 编辑过,最后修改时间:2008-09-26,16:47:56.

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2008-9-25 22:43:20 | 显示全部楼层
看视频了不错 加速度传感器用的是a7260吗?那块加速度的小板在哪里能买到?

出0入0汤圆

发表于 2008-9-25 23:11:46 | 显示全部楼层
搂主你好,问一下,你是根据重力加速度简单测量倾角,还是有更复杂的算法?

出0入0汤圆

发表于 2008-9-26 08:43:06 | 显示全部楼层
顶!为什么只看到一片陀螺仪?

出0入0汤圆

 楼主| 发表于 2008-9-26 09:02:48 | 显示全部楼层
加速度的小板子 是我自己做的。 视频是用DC拍的,凑活着看吧。下次换DV

目前只用加速度传感器计算姿态。上边的角速度传感器还没有用到,只是用来测试这个传感器性能。

这个板子设计有一个缺陷,他使用CPLD来采集数据的,但是选择的CPLD规模有点小,只在里边实现了部分功能,无法控制所有的ADC转换。

正在设计一个新的传感器板子。呵呵。期待中

透露一下 算法用了kalman滤波。





 (原文件名:DSCN5644t.JPG) 





 (原文件名:DSCN5646t.JPG) 





本贴被 nter 编辑过,最后修改时间:2008-09-26,09:08:52.

出0入0汤圆

发表于 2008-9-26 09:27:15 | 显示全部楼层
这个是什么原理呀?

静止的时候没有加速度怎么判断位置??

出0入0汤圆

 楼主| 发表于 2008-9-26 09:31:43 | 显示全部楼层
重力加速度

出0入0汤圆

发表于 2008-9-26 09:38:45 | 显示全部楼层
视频还是传youku吧。

出0入0汤圆

发表于 2008-9-26 09:53:03 | 显示全部楼层
下一步把陀螺仪采样数据与加速度结合,再用KALMAN滤波可以作出更好的效果

只用加速度计算倾角,无法区别重力加速度与外力加速度,输出倾角很容易受到外力干扰

出0入0汤圆

发表于 2008-9-26 09:56:54 | 显示全部楼层
静止时没有加速呀,所谓的重力加速度是不是受到的重力?那他是静止的还会受到一个和重力抵消得力呢

出0入0汤圆

发表于 2008-9-26 09:58:42 | 显示全部楼层
奥,大概知道了,应该就是检测抵消力的大小和方向来确定加速的

出0入0汤圆

发表于 2008-10-2 10:35:33 | 显示全部楼层
KALMAN滤波是用cpld完成的吗? 板上好像没mcu?  adc是什么型号的? 

出0入0汤圆

 楼主| 发表于 2008-10-2 13:05:29 | 显示全部楼层
ADC 是MAX1247, 滤波是在计算机上做的,

出0入0汤圆

 楼主| 发表于 2008-10-2 13:19:04 | 显示全部楼层
feng_matrix 在马,你做过角速度和加速度联合求解吗,我感觉3个角速度和3个加速度,在数学上好像没什么可能啊。因为角速度有累计误差,如果长时间用角速度计算姿态,他的误差怎样补偿,获得真正的姿态



我也试过kalman,我是把角速度传感器算出来的角度作为kalman滤波器的预测值,把加速度传感器算出来的角度最为滤波器的测量值,尝试不同的噪声系数,但是滤波效果不好。可以说很差。例如我把飞机水平相一个方向加速度前进。传出的姿态就有问题啦。滤波器认为这个加速度是重力加速度,算出来的姿态就有问题。

有没有好的办法。或者用9个加速度传感器联合求解。

本贴被 nter 编辑过,最后修改时间:2008-10-02,13:24:55.

出0入0汤圆

发表于 2008-10-2 15:23:43 | 显示全部楼层
MAX1247那不是要用2片?



能把静止时, 采集的加速度或角速度的数据样本上传上来给大家看看吗? 时间越长越好

我想知道噪声分布情况怎样, 在考虑如何在电路设计上减少噪声, 最大限度减少误差



另外, 请帮忙粗略估算你的kalman滤波, 在avr上实现要大约几个机器周期?



先谢谢了



本贴被 buickbuick 编辑过,最后修改时间:2008-10-02,15:33:30.

出0入0汤圆

 楼主| 发表于 2008-10-2 16:39:53 | 显示全部楼层
先回答第一个问题,我使用经典kalman对ADC采样的数据进行滤波, 滤波后的数据计算出来的电压跳动在+/-0.0004v的级别上跳动。

在AVR上的计算周期我买有计算过,因为我没有打算用AVR,我用的是STM32F103。32位处理器90MIPS的速度。

姿态算法用的kalman我做了扩展。下边是对采样数据滤波算法。

Q = 0.02f

R = 1.0f

float Kalman_update(sKalmanFilter * filter, float Zk)

{

        //噪声协方差R

        //激励噪声协方差的Q值



        float Kgk, Xkk1, Xkk, Pkk1, Pkk;

        // X(k|k-1)=X(k-1|k-1) ……….. (6)

        Xkk1 = filter->Xk1k1;

        // 式子(2)可以改成:

        // P(k|k-1)=P(k-1|k-1) +Q ……… (7)

        Pkk1 = filter->Pk1k1 + filter->Q;



        // Kg(k)= P(k|k-1) / (P(k|k-1) + R) ……… (9)

        Kgk = Pkk1 / (Pkk1 + filter->R);

        // X(k|k)= X(k|k-1)+Kg(k) (Z(k)-X(k|k-1)) ……… (8)

        Xkk = Xkk1 + Kgk * ((float)Zk - Xkk1);

        // P(k|k)=(1-Kg(k))P(k|k-1) ……… (10)

        Pkk = (1-Kgk) * Pkk1;



        filter->Xk1k1 = Xkk;

        filter->Pk1k1 = Pkk;



        return  Xkk;

}



姿态算法,我把kalman的‘预测值’改成了角速度传感器算出来的姿态,把‘测量值’改成了加速度算出来的姿态。

出0入0汤圆

发表于 2008-10-2 17:06:26 | 显示全部楼层
真不明白楼主为什么要求解,



三个加速度,三个角速度。都是相互垂直,坐标可以平移重合而得。



这六个自由度就确定了这个物体的唯一性。缺一不可。还要解什么。

出0入0汤圆

发表于 2008-10-2 17:08:37 | 显示全部楼层
难道想转成世界坐标系下的数据。



没这个必要吧。



本贴被 112233 编辑过,最后修改时间:2008-10-02,17:09:08.

出0入0汤圆

发表于 2008-10-2 17:11:28 | 显示全部楼层
你如果想仅仅用三个线加速度值来确定这个四轴的姿式是不可能的事情。

出0入0汤圆

发表于 2008-10-2 17:16:29 | 显示全部楼层
当然你如果增加到6个线加速度,也是可以确定一个姿式的唯一性的。

本贴被 112233 编辑过,最后修改时间:2008-10-02,17:17:54.

出0入0汤圆

 楼主| 发表于 2008-10-2 17:22:53 | 显示全部楼层
有一个问题,如果自己悬停的话(没有遥控的辅助),怎样消除角速度传感器的累计误差呢。我对算法也是初次研究,哈哈,说错了也不要笑话,我的想法是利用地球引力来校正飞机的姿态。谁能解答一下?

出0入0汤圆

发表于 2008-10-2 18:38:19 | 显示全部楼层
【21楼】 112233 : 当然你如果增加到6个线加速度,也是可以确定一个姿式的唯一性的。



6个加速度可以确定姿式的唯一性的?  同一块板上的两个3轴加速度, 他们受到方向和大小相同的加速度, 

具体怎样能将重力方向解出来? 解不了吧?

出0入0汤圆

 楼主| 发表于 2008-10-2 18:56:58 | 显示全部楼层
应该是空间分布的6个加速度计,分布方式很有讲究数学才能解算

出0入0汤圆

发表于 2008-10-2 20:13:05 | 显示全部楼层
静止的时候, 3轴就已经可以把重力的向量解出来, 没必要6轴

动的时候, 我认为是无论多少轴, 分布再好都没办法解出重力向量来, 除非两片加速度计不在同一个刚体上



如果真的可以解出来, 就不用陀螺仪了, 用两片加速度计就可以解出姿态来, 不用3片陀螺了, 成本超低.



另外, STM32F103好像有12 bit ADC, 怎么不考虑用片上的ADC?

本贴被 buickbuick 编辑过,最后修改时间:2008-10-02,20:17:33.

出0入0汤圆

 楼主| 发表于 2008-10-2 20:23:38 | 显示全部楼层
片上的ADC误差比较大,我打算做一个扳子用上,试验阶段先用更高级的ADC。

还是那个问题,飞行阶段怎样更好的获得飞机的姿态。大家谁有高见?

出0入0汤圆

发表于 2008-10-2 20:33:22 | 显示全部楼层
【25楼】 buickbuick   如果真的可以解出来, 就不用陀螺仪了, 用两片加速度计就可以解出姿态来, 不用3片陀螺了, 成本超低. 







你如果仔细看一下就会明白:有了初始状态与6个线加速度是可以解出当前位置与姿态的,只不过要跟 nter说的一样距离与角度要标定好了的。







其实我觉得这个四轴用一片51内核的单片机就可以搞定。



比如LPC900之类的,当然不包括无刷控制。



硬件与编程都不是太难的事,我认为主要是运动分析,只有这个搞好了这个才能进入编程,否则会不知所措的。



本贴被 112233 编辑过,最后修改时间:2008-10-02,20:35:23.

出0入0汤圆

发表于 2008-10-2 20:38:01 | 显示全部楼层
【26楼】 nter 姚军  还是那个问题,飞行阶段怎样更好的获得飞机的姿态。大家谁有高见?



呵呵,不知你具体要知道什么?各个参数不是都可以测量出来吗?

出0入0汤圆

发表于 2008-10-2 20:40:55 | 显示全部楼层
我认为不在于获得飞机的姿态,因为这个是硬件就可以得到的参数,



而在于得到这些参数后再用怎样的变换后反馈给马达。

出0入0汤圆

发表于 2008-10-2 20:52:19 | 显示全部楼层
就算6轴距离与角度要标定好了的, 在同一刚体上, 应该是解不出的



飞行姿态控制, 德国的控制板油气压计, 有3轴加速度和气压计, 就可以解出重力方向了, 不过这种解法, 响应较慢

但飞上去后, 陀螺的误差就会不断积累, 一定要用方法把积累的误差清除, 用结合gps是一种, 

不过我想还有一个办法就是, 

1. 考虑在飞行的过程中, 可以根据控制桨机的输出量来计算在无任何外力的理想情况下, 桨机所产生的加速度向量, 然后与IMU输出的加速度向量比较, 可以估算出外力的影响, 

2. 用陀螺角速度来计算重力方向, 用加速度计算姿态

3. 飞行过程中, 在一定的时间间隔后, 在空中停止移动一小段时间, 用来重新复位陀螺的误差,

出0入0汤圆

发表于 2008-10-2 21:38:19 | 显示全部楼层
【30楼】 buickbuick 

根本没有你想象的那样复杂。



根本就不要去解什么重力方向。重力方向只是一种参考罢了。

出0入0汤圆

发表于 2008-10-2 21:43:04 | 显示全部楼层
其实简化后就只两种情况了,



怎样由静止到运动,



怎样由运动到静止。



先徦定是静止的。也就是Z轴上有加速度分量而其它两个没有,大小9.8。这时的角速度传感器输出居中,角度积分值为0。

本贴被 112233 编辑过,最后修改时间:2008-10-02,21:50:25.

出0入0汤圆

发表于 2008-10-2 21:55:29 | 显示全部楼层
考虑全面的, 不能少了重力, 论坛上有个帖子, 举了很好的"妖风"例子, 如果有阵风吹过来, 

令到飞行器有不垂直向下1g的加速度, 那么就会误判, 翻了

出0入0汤圆

发表于 2008-10-2 22:10:03 | 显示全部楼层
运动分析本来就是由复杂到简单再到复杂的过程。



如果是这样说的话是不是应当考虑科氏力,还有..... 



免得从赤道拿到南极或北极去用时不太好使。

本贴被 112233 编辑过,最后修改时间:2008-10-02,22:11:01.

出0入0汤圆

发表于 2008-10-2 22:15:43 | 显示全部楼层
你要完全消掉“妖风”的影响是不可能的,



只能是在出现这种扰动时进行自身的动态调整,



而非进行运动分析的一个要素。



否则就会没完没了。

出0入0汤圆

 楼主| 发表于 2008-10-2 23:07:27 | 显示全部楼层
如果人不干预飞机的姿态控制,飞机在连续飞行中好像没有办法消除陀螺的累计误差。这个是使用低成本传感器所造成的。

我的最终要实现的目的很简单,举个例子,我让飞机在空中飞行,飞机的计算机一直能知道自己的正确的姿态。现在碰到了最大的问题就是陀螺的累计误差怎样消除。

出0入0汤圆

发表于 2009-12-9 01:43:47 | 显示全部楼层
【34楼】 112233 说得对
我们民用 的 惯性测量器件 是无法精确测出航向与姿态的

只能借助 其 辅助完成姿态稳定

对于真飞机 包括 空客A380 都不会完全依靠 惯导系统来 计算航向与姿态
都要配合 物理陀螺 和地面无线电导航GPS导航来随时修正姿态与航向

就如同人闭上眼睛 走几步还是可以大概走到预定的目的地 要是走上十几步 不睁眼看看 问问 可能就不知道偏航到哪里去了
人的耳朵里 也有三周角速率和加速度传感器 无法依靠它来告诉你 航向和姿态 要是失重了 更是不知道上下前后了

非要用这几个机体传感器来测算 航向与姿态 很难 短时间何以

我们要做的 还是 要知道 怎样由静止到运动 怎样由运动到静止

出0入0汤圆

发表于 2010-5-22 08:06:51 | 显示全部楼层
沒啥好開源的?Kalman filter不就長這樣子,上面nter 姚军已經給出代碼了。
另外Kalman filter效果不好,很大的原因就是外力項沒有偵測到,我在其他的帖子有講,只要用固定的協方差值,效果不會好。不是受到晃動時角度誤差變大,就是角度輸出遲滯。即便動態解算,經實驗後仍發現會有正負3度的誤差(有妖風的狀況),目前自己還在更新算法來降低這問題,不過IEEE上的文獻指出,即便用磁感測器,角度誤差仍有1-2度左右,在受到電磁環境下角度誤差上看10度也不無可能。

不過算法結果不好的因素,ADC精度佔有不小影響。如果提高ADC解析,對算法的簡化及降階是有幫助的。
以國外的文獻來說,不是靠磁感應器做融合,就是用GPS跟IMU做Kalman,以75MHz的TI的DSP來說,文獻指出IMU+GPS透過Kalman解算完畢約7.5ms,對於單晶片來說,需要更好的方式,DCM解法已經被證明在16MHz(4MIPS)的dsPIC30F4011上面可以完成姿態控制,並透過加速規和GPS的資料做簡單的校正。

以上資訊提供參考。

出0入0汤圆

发表于 2011-7-7 19:00:45 | 显示全部楼层
回复【楼主位】nter 姚军
-----------------------------------------------------------------------

加速度受震动影响很大啊,干扰很明显,kalman滤波效果总是做不好,需要学习下。。。

出0入0汤圆

发表于 2015-11-4 10:53:19 | 显示全部楼层
我现在也在用加速度计做姿态算法,但是太明白思路,此外我看了很多资料,算法不一,有几种您看一下是否正确
一.  
pitch2=atan2(a_x,sqrt(a_y*a_y+a_z*a_z))*180/3.1415   ;
roll2=atan2(a_y,sqrt(a_x*a_x+a_z*a_z))*180/3.1415   ;
二.
system.Pitch = (int)(-asin((KXR94.AXIS_X *33.0) / 9.78));
还有,能简明说一下算法的步骤吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 15:58

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

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