新聞中心

        EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > 基于DSP的室內(nèi)慣性導(dǎo)航系統(tǒng)設(shè)計

        基于DSP的室內(nèi)慣性導(dǎo)航系統(tǒng)設(shè)計

        作者: 時間:2015-05-18 來源:網(wǎng)絡(luò) 收藏

          三軸磁感應(yīng)傳感器的作用相當(dāng)于羅盤,在水平情況下,無需借助其他傳感器便可以計算出航向。其初始化如下:

        本文引用地址:http://www.104case.com/article/274338.htm

          unsigned char Init_HMC5883(void)

          {

          unsigned char Return1;

          unsigned char Data;

          // Bit4 Bit3等于11時,選擇2000度/秒的量程

          Data = 0x00;

          Return1 = IIC_WriteData(0x3C, 0x02, 1);

          if(Return1)

          return 1;

          else

          return 0;

          }

          由于裝置是要在不同環(huán)境下進(jìn)行工作的,所以其并不能保持時刻水平,就需要加速度傳感器來糾正由于傾斜引起的誤差。

          3.2卡爾曼濾波算法應(yīng)用

          于是裝置在室內(nèi)區(qū)域進(jìn)行勘測搜索,小車的運行特點與一般的飛機(jī)、船、車不同,它的運動變化快,軌跡不定,而且要適用于不同的環(huán)境下工作,因此常用的卡爾曼濾波算法需要進(jìn)一步改進(jìn)才能應(yīng)用。卡爾曼過濾是用前一個估計值和最近一個觀察數(shù)據(jù),來估計信號的當(dāng)前值,它是用狀態(tài)方程和遞推的方法進(jìn)行估計的,它的解是以估計值形式給出的。其運用在加速度器和陀螺儀上的卡爾曼濾波程序如下:

          // float gyro_m:陀螺儀測得的量(角速度)

          //float incAngle:加速度器測得的角度值

          #define dt 0.0015//卡爾曼濾波采樣頻率

          #define R_angle 0.71 //測量噪聲的協(xié)方差(即是測量偏差)

          #define Q_angle 0.0001//過程噪聲的協(xié)方差

          #define Q_gyro 0.0003 //過程噪聲的協(xié)方差過程噪聲協(xié)方差為一個一行兩列矩陣

          float kalmanUpdate(const float gyro_m,const float incAngle

          {

          float K0;//含有卡爾曼增益的另外一個函數(shù),用于計算最優(yōu)估計值

          float K1;//含有卡爾曼增益的函數(shù),用于計算最優(yōu)估計值的偏差

          float Y0;

          float Y1;

          float Rate;//去除偏差后的角速度

          float Pdot[4];//過程協(xié)方差矩陣的微分矩陣

          float angle_err;//角度偏量

          float E;//計算的過程量

          static float angle = 0; //下時刻最優(yōu)估計值角度

          static float q_bias = 0; //陀螺儀的偏差

          static float n[2][2] = {{ 1, 0 }, { 0, 1 }};//過程協(xié)方差矩陣

          Rate = gyro_m - q_bias;

          //計算過程協(xié)方差矩陣的微分矩陣

          Pdot[0] = Q_angle - P[0][1] - P[1][0];

          Pdot[1] = - n[1][1];

          Pdot[2] = - n[1][1];

          Pdot[3] = Q_gyro;

          angle += Rate * dt; //角速度積分得出角度

          n[0][0] += Pdot[0] * dt; //計算協(xié)方差矩陣

          n[0][1] += Pdot[1] * dt;

          n[1][0] += Pdot[2] * dt;

          n[1][1] += Pdot[3] * dt;

          angle_err = incAngle - angle; //計算角度偏差

          E = R_angle + P[0][0];

          K0 = n[0][0] / E; //計算卡爾曼增益

          K1 = n[1][0] / E;

          Y0 = n[0][0];

          Y1 = n[0][1];

          n[0][0] -= K0 * Y0; //跟新協(xié)方差矩陣

          n[0][1] -= K0 * Y1;

          n[1][0] -= K1 * Y0;

          n[1][1] -= K1 * Y1;

          angle += K0 * angle_err; //給出最優(yōu)估計值

          q_bias += K1 * angle_err;//跟新最優(yōu)估計值偏差

          return angle;

          }

          通過濾波時數(shù)據(jù)平滑將加速度輸出電壓附近產(chǎn)生的波動噪聲濾掉。



        關(guān)鍵詞: DSP HMC5883L

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 六枝特区| 江都市| 安国市| 吴江市| 游戏| 客服| 射洪县| 密山市| 饶河县| 扎兰屯市| 乌拉特中旗| 遵化市| 房产| 壤塘县| 樟树市| 会昌县| 襄汾县| 莎车县| 从化市| 新昌县| 资源县| 老河口市| 泸溪县| 汪清县| 萨嘎县| 明水县| 潜江市| 西昌市| 连山| 和平区| 固始县| 特克斯县| 呼和浩特市| 普安县| 攀枝花市| 深圳市| 班玛县| 崇礼县| 右玉县| 嘉兴市| 天镇县|