搜索
bottom↓
回复: 7

ENC03和adxl330

[复制链接]

出0入0汤圆

发表于 2010-1-29 08:13:06 | 显示全部楼层 |阅读模式
焊接完三片ENC03+ADXL330之后该怎么利用数据的输出?软件该怎么写才能得到倾斜度数据?

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-2-1 19:55:04 | 显示全部楼层
靜止的時候,加速規可以直接量傾斜角。自己的Code,你可以參考一下。可以量到機體180度反轉的狀況。
ax,ay,az是加速規輸出,軸向請依您的實際狀況調整。return值可以當作沒看到,我拿來有其他用途。
float get_attitude_from_accel(struct ATTITUDE *_att,int ax,int ay,int az)
{
        _att->roll._  = 180.0*atan(ay/sqrt((float)(ax*ax+az*az)))/PI;       
        _att->pitch._ = -180.0*atan(ax/sqrt((float)(az*az+ay*ay)))/PI;
        if(az<0){
                if   (ay>0){_att->roll._  = 180.0 -_att->roll._;}
                else {_att->roll._  = -(_att->roll._+180.0);}
        }
        return (3969.0-(ax*ax+ay*ay+az*az)/10.0);       
}
gyro的部分可以用一般慣導書上的公式,我的Code如下:
float get_attitude_from_gyro(struct ATTITUDE *_att, int heading,int gx,int gy,int gz)
{
        //For IDG500         2.0  mV/°/s sensitivity @ X,Y axis, ZERO-RATE OUTPUT 1.35V
        //For MLX90609        6.67 mV/°/s sensitivity @ Z axis  , ZERO-RATE OUTPUT 2.5V
        //1 LSB is 5/1024 = 4.8828125 mv
        //gyro rate = gx..y * 5000mv /1024 /2.0 = 2.44140625
        //          = gz * 5000mv /1024 /6.67   = 0.73205584707646176911544227886057
       
        #define GXY_SCALE 2.44140625
        #define GZ_SCALE  0.73205584707646176911544227886057
        float _p,_q,_r;
        float _Sr,_Cr,_Sp,_Cp;
       
        _Sr = cal_sin(_att->roll._);         _Cr = cal_cos(_att->roll._);
        _Sp = cal_sin(_att->pitch._);        _Cp = cal_cos(_att->pitch._);
        _p = gx*GXY_SCALE; _q = gy*GXY_SCALE; _r = gz*GZ_SCALE ;
       
        _att->roll._  = _att->roll._+(_p + (_q*_Sr + _r*_Cr)*(_Sp/_Cp))/100;
        _att->pitch._ = _att->pitch._+(_q*_Cr - _r*_Sp)/100;
       
        heading += (_q*_Sr + _r*_Cr)/_Cp/100;
        return heading;
       

}
這裡我沒有用四元素,是因為pitch超過45度時,姿態估測有其他的排程在做,所以這裡不考慮pitch=90度的狀況。然後後面姿態是用Kalman去做,這個一般書上都有我就不多說了。
程式碼是C30(For dsPIC)去寫的,(反)三角函數試用查表去近似出來的,因為效果還OK,所以沒有用定點去做。

出0入0汤圆

 楼主| 发表于 2010-2-2 17:02:50 | 显示全部楼层
我想要测量是动态时候的倾斜度,嗯,还是谢谢"g921002"提供的静态方法,高手来帮帮我吧

出0入0汤圆

 楼主| 发表于 2010-2-2 17:06:53 | 显示全部楼层
g921002,关于你的算式,可以给我说一下原理吗?我不是很明白.

出0入0汤圆

发表于 2010-2-2 21:22:18 | 显示全部楼层
留个脚印

出0入0汤圆

发表于 2010-2-3 20:25:25 | 显示全部楼层
回复【2楼】sniper_bing  
我想要测量是动态时候的倾斜度,嗯,还是谢谢"g921002"提供的静态方法,高手来帮帮我吧  
-----------------------------------------------------------------------

上面兩個function是我用在UAV上面的,這兩個function輸入都有一個將載體現在的姿態角(pitch和roll)納入。在
飛機有外力介入時get_attitude_from_accel是與真實姿態有誤差的,return值是用來偵測外力存在與否。

float get_attitude_from_gyro(struct ATTITUDE *_att, int heading,int gx,int gy,int gz) 是根據前一步估
測的姿態計算尤拉角變量,然後更新Gyro姿態估測值。

好了,我們有加速規和陀螺儀兩個來源估測的姿態,事前我也知道兩者的Sensor的雜訊協方差Q和R,唯一要做的是
考慮將外力影響補償到Kalman filter裡面,最後得到兩著更新的姿態估測。因為飛機狀態比較複雜,不能用固定的Q、R
值去估測。

為何要說靜止狀態的狀況,因為在Kalman filter運作前,我們不知道飛機姿態,必須在「靜止」狀態下用加速規先
抓一段時間的姿態資料算出初值,因為用陀螺解算姿態是需要姿態初值的。

另外算式哪裡不明白?麻煩您發個聲...都是課本的東西,如果一一解說滿累的^_^。

出0入0汤圆

 楼主| 发表于 2010-4-18 17:23:28 | 显示全部楼层
不好意思最近刚出差回来, 接着话题
书的名字是什么? 麻烦 g921002  告诉我一下 ,我自己去研究一下 最近还是没什么头绪用enc03+adxl330测这个倾斜角

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 06:27

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

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