一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

平衡小車(chē)卡爾曼濾波算法使用心得

j4AI_wujianying ? 來(lái)源:未知 ? 作者:李倩 ? 2018-03-31 10:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這次的平衡車(chē),使用到了卡爾曼濾波,下面談?wù)勈褂眯牡?/p>

我們是利用角速度傳感器和加速度傳感器測(cè)量得到角度和角速度,但是由于車(chē)子是運(yùn)動(dòng)的,我們利用加速度得到的角度并不完全正確,由于噪聲干擾,我們對(duì)角速度傳感器的測(cè)量值也存在懷疑。于是我們就要進(jìn)行濾波,通過(guò)兩個(gè)傳感器數(shù)值上的相互關(guān)系來(lái)得到我們想要的結(jié)果。我們使用卡爾曼濾波器連接這兩個(gè)測(cè)量值。

首先開(kāi)感性的理解一下卡爾曼,引用網(wǎng)上(百度百科)的經(jīng)典解釋?zhuān)?/p>

在介紹他的5條公式之前,先讓我們來(lái)根據(jù)下面的例子一步一步的探索。

假 設(shè)我們要研究的對(duì)象是一個(gè)房間的溫度。根據(jù)你的經(jīng)驗(yàn)判斷,這個(gè)房間的溫度是恒定的,也就是下一分鐘的溫度等于現(xiàn)在這一分鐘的溫度(假設(shè)我們用一分鐘來(lái)做時(shí) 間單位)。假設(shè)你對(duì)你的經(jīng)驗(yàn)不是100%的相信,可能會(huì)有上下偏差幾度。我們把這些偏差看成是高斯白噪聲(White Gaussian Noise),也就是這些偏差跟前后時(shí)間是沒(méi)有關(guān)系的而且符合高斯分配(Gaussian Distribution)。另外,我們?cè)诜块g里放一個(gè)溫度計(jì),但是這個(gè)溫度計(jì)也不準(zhǔn)確的,測(cè)量值會(huì)比實(shí)際值偏差。我們也把這些偏差看成是高斯白噪聲。

好了,現(xiàn)在對(duì)于某一分鐘我們有兩個(gè)有關(guān)于該房間的溫度值:你根據(jù)經(jīng)驗(yàn)的預(yù)測(cè)值(系統(tǒng)的預(yù)測(cè)值)和溫度計(jì)的值(測(cè)量值)。下面我們要用這兩個(gè)值結(jié)合他們各自的噪聲來(lái)估算出房間的實(shí)際溫度值。

假 如我們要估算k時(shí)刻的是實(shí)際溫度值。首先你要根據(jù)k-1時(shí)刻的溫度值,來(lái)預(yù)測(cè)k時(shí)刻的溫度。因?yàn)槟阆嘈艤囟仁呛愣ǖ?,所以你?huì)得到k時(shí)刻的溫度預(yù)測(cè)值是跟 k-1時(shí)刻一樣的,假設(shè)是23度,同時(shí)該值的高斯噪聲的偏差是5度(5是這樣得到的:如果k-1時(shí)刻估算出的最優(yōu)溫度值的偏差是3,你對(duì)自己預(yù)測(cè)的不確定 度是4度,他們平方相加再開(kāi)方,就是5)。然后,你從溫度計(jì)那里得到了k時(shí)刻的溫度值,假設(shè)是25度,同時(shí)該值的偏差是4度。

由于我們用 于估算k時(shí)刻的實(shí)際溫度有兩個(gè)溫度值,分別是23度和25度。究竟實(shí)際溫度是多少呢?相信自己還是相信溫度計(jì)呢?究竟相信誰(shuí)多一點(diǎn),我們可以用他們的 covariance來(lái)判斷。因?yàn)镵g^2=5^2/(5^2+4^2),所以Kg=0.78,我們可以估算出k時(shí)刻的實(shí)際溫度值是:23+0.78* (25-23)=24.56度??梢钥闯觯?yàn)闇囟扔?jì)的covariance比較小(比較相信溫度計(jì)),所以估算出的最優(yōu)溫度值偏向溫度計(jì)的值。

現(xiàn) 在我們已經(jīng)得到k時(shí)刻的最優(yōu)溫度值了,下一步就是要進(jìn)入k+1時(shí)刻,進(jìn)行新的最優(yōu)估算。到現(xiàn)在為止,好像還沒(méi)看到什么自回歸的東西出現(xiàn)。對(duì)了,在進(jìn)入 k+1時(shí)刻之前,我們還要算出k時(shí)刻那個(gè)最優(yōu)值(24.56度)的偏差。算法如下:((1-Kg)*5^2)^0.5=2.35。這里的5就是上面的k時(shí) 刻你預(yù)測(cè)的那個(gè)23度溫度值的偏差,得出的2.35就是進(jìn)入k+1時(shí)刻以后k時(shí)刻估算出的最優(yōu)溫度值的偏差(對(duì)應(yīng)于上面的3)。

就是這樣,卡爾曼濾波器就不斷的把covariance遞歸,從而估算出最優(yōu)的溫度值。他運(yùn)行的很快,而且它只保留了上一時(shí)刻的covariance。上面的Kg,就是卡爾曼增益(Kalman Gain)。他可以隨不同的時(shí)刻而改變他自己的值,是不是很神奇!

然后看看我們的代碼,代碼來(lái)自網(wǎng)絡(luò),使用的是ouravr某大牛的代碼

#include "Kalman.h"

float Q_angle=0.001, Q_gyro=0.003, R_angle=0.5, dt=0.005;

//注意:dt的取值為kalman濾波器采樣時(shí)間;

float P[2][2] = {

{ 1, 0 },

{ 0, 1 }

};

float Pdot[4] ={0,0,0,0};

const char C_0 = 1;

float q_bias, angle_err, PCt_0, PCt_1, E, K_0, K_1, t_0, t_1;

//-------------------------------------------------------

void Kalman_Filter(float angle_m,float gyro_m) //gyro_m:gyro_measure

{

angle+=(gyro_m-q_bias) * dt;//先驗(yàn)估計(jì)

Pdot[0]=Q_angle - P[0][1] - P[1][0];// Pk-' 先驗(yàn)估計(jì)誤差協(xié)方差的微分

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

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

Pdot[3]=Q_gyro;

P[0][0] += Pdot[0] * dt;// Pk- 先驗(yàn)估計(jì)誤差協(xié)方差微分的積分 = 先驗(yàn)估計(jì)誤差協(xié)方差

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

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

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

angle_err = angle_m - angle;//zk-先驗(yàn)估計(jì)

PCt_0 = C_0 * P[0][0];

PCt_1 = C_0 * P[1][0];

E = R_angle + C_0 * PCt_0;

K_0 = PCt_0 / E;//Kk

K_1 = PCt_1 / E;

t_0 = PCt_0;

t_1 = C_0 * P[0][1];

P[0][0] -= K_0 * t_0;//后驗(yàn)估計(jì)誤差協(xié)方差

P[0][1] -= K_0 * t_1;

P[1][0] -= K_1 * t_0;

P[1][1] -= K_1 * t_1;

angle += K_0 * angle_err;//后驗(yàn)估計(jì)

q_bias += K_1 * angle_err;//后驗(yàn)估計(jì)

angle_dot = gyro_m-q_bias;//輸出值(后驗(yàn)估計(jì))的微分 = 角速度

}

我們一個(gè)個(gè)語(yǔ)句進(jìn)行解釋

angle+=(gyro_m-q_bias) * dt

首先我們要利用系統(tǒng)的過(guò)程模型,來(lái)預(yù)測(cè)下一狀態(tài)的系統(tǒng)。假設(shè)現(xiàn)在的系統(tǒng)狀態(tài)是k,根據(jù)系統(tǒng)的模型,可以基于系統(tǒng)的上一狀態(tài)而預(yù)測(cè)出現(xiàn)在狀態(tài):

X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)

我們的矩陣X為:

(angle

gyro)

我們的矩陣A為:

( 1 1

0 1)

要注意的是我們得到的是X(k|k-1)!!這可不是我們要的結(jié)果

然后是

Pdot[0]=Q_angle - P[0][1] - P[1][0];// Pk-' 先驗(yàn)估計(jì)誤差協(xié)方差的微分

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

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

Pdot[3]=Q_gyro;

P[0][0] += Pdot[0] * dt;// Pk- 先驗(yàn)估計(jì)誤差協(xié)方差微分的積分 = 先驗(yàn)估計(jì)誤差協(xié)方差

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

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

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

這8句一起進(jìn)行解釋

到現(xiàn)在為止,我們的系統(tǒng)結(jié)果已經(jīng)更新了,可是,對(duì)應(yīng)于X(k|k-1)的covariance還沒(méi)更新。我們用P表示covariance:

P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)

Pdot是P的微分。

我們的Q是

(Q_angle 0

0 Q_gyro)

積分后協(xié)方差就算出來(lái)了,同樣注意也是P(k|k-1)。具體怎么算~~~好吧我承認(rèn)我線代沒(méi)有學(xué)好~~~算了好久。。。。

angle_err = angle_m - angle;//這句好像沒(méi)有必要說(shuō)~~

接下來(lái)算卡爾曼增益:

PCt_0 = C_0 * P[0][0];

PCt_1 = C_0 * P[1][0];

E = R_angle + C_0 * PCt_0;

K_0 = PCt_0 / E;

K_1 = PCt_1 / E;

Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R)

H是測(cè)量系統(tǒng)的矩陣,為(1

1)

t_0 = PCt_0;

t_1 = C_0 * P[0][1];

P[0][0] -= K_0 * t_0;//后驗(yàn)估計(jì)誤差協(xié)方差

P[0][1] -= K_0 * t_1;

P[1][0] -= K_1 * t_0;

P[1][1] -= K_1 * t_1;

到現(xiàn)在為止,我們已經(jīng)得到了k狀態(tài)下最優(yōu)的估算值X(k|k)。但是為了要另卡爾曼濾波器不斷的運(yùn)行下去直到系統(tǒng)過(guò)程結(jié)束,我們還要更新k狀態(tài)下X(k|k)的covariance:

P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)

這個(gè)很好理解了~~I是單位矩陣不多說(shuō)鳥(niǎo)~~

angle += K_0 * angle_err;//后驗(yàn)估計(jì)

q_bias += K_1 * angle_err;//后驗(yàn)估計(jì)

angle_dot = gyro_m-q_bias;//輸出值(后驗(yàn)估計(jì))的微分 = 角速度

現(xiàn)在我們有了現(xiàn)在狀態(tài)的預(yù)測(cè)結(jié)果,然后我們?cè)偈占F(xiàn)在狀態(tài)的測(cè)量值。結(jié)合預(yù)測(cè)值和測(cè)量值,我們可以得到現(xiàn)在狀態(tài)(k)的最優(yōu)化估算值X(k|k):

X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)

觀察一下K_1計(jì)算過(guò)程,再聯(lián)系到協(xié)方差矩陣的性質(zhì)就可以知道為什么角速度偏差量用P[1][0]算了~~

至于STM32上跑的速度,72M下這段代碼執(zhí)行時(shí)間在0.5毫秒內(nèi),速度不是問(wèn)題~~

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2567

    文章

    53026

    瀏覽量

    767803
  • 卡爾曼濾波
    +關(guān)注

    關(guān)注

    3

    文章

    166

    瀏覽量

    25089
  • 平衡小車(chē)
    +關(guān)注

    關(guān)注

    1

    文章

    39

    瀏覽量

    12772

原文標(biāo)題:平衡小車(chē)卡爾曼濾波算法

文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    卡爾濾波

    卡爾濾波的估計(jì)值能很好的逼近真實(shí)值,我的疑惑是,這和濾波有什么關(guān)系,請(qǐng)高手介紹下卡爾
    發(fā)表于 07-04 22:57

    圖書(shū)分享:卡爾濾波算法的幾何解釋

    網(wǎng)上搜到一篇關(guān)于卡爾濾波算法的論文,對(duì)低維卡爾濾波
    發(fā)表于 06-11 15:28

    卡爾濾波算法

    已知測(cè)量值和原始值,但測(cè)量噪聲和觀測(cè)噪聲未知,如何進(jìn)行卡爾濾波。之前看了好像可以用自適應(yīng)卡爾,但不是很懂,求例子,最好有注釋的
    發(fā)表于 03-23 19:12

    LabVIEW一維卡爾濾波算法

    最近正在學(xué)習(xí)卡爾濾波算法,用LabVIEW仿照C語(yǔ)言寫(xiě)了個(gè)一維的卡爾
    發(fā)表于 10-21 21:15

    如何去實(shí)現(xiàn)一種基于MPU6050及卡爾濾波平衡小車(chē)

    如何去實(shí)現(xiàn)一種基于MPU6050及卡爾濾波平衡小車(chē)呢?有哪些資料呢?
    發(fā)表于 11-19 06:48

    基于STM32的雙輪平衡小車(chē)設(shè)計(jì)

    預(yù)告:代碼及文檔下載方案分析1、基于STM32F103C8T6 單片機(jī)的雙輪自平衡小車(chē)系統(tǒng);2、以 MPU6050 三軸陀螺儀加速計(jì)為傳感器的姿態(tài)感知系統(tǒng);3、通過(guò)卡爾
    發(fā)表于 11-30 08:03

    卡爾濾波簡(jiǎn)介

    希望這篇筆記可以幫助到你。卡爾濾波(Kalman filtering)是一種利用線性系統(tǒng)狀態(tài)方程,通過(guò)系統(tǒng)輸入輸出觀測(cè)數(shù)據(jù),對(duì)系統(tǒng)狀態(tài)進(jìn)行最優(yōu)估計(jì)的算法。
    發(fā)表于 02-28 14:24

    卡爾濾波算法對(duì)比其他的濾波算法有什么優(yōu)點(diǎn)?

    卡爾濾波算法對(duì)比其他的濾波算法有什么優(yōu)點(diǎn)
    發(fā)表于 10-11 06:42

    卡爾濾波算法的改進(jìn)方案

    卡爾濾波 算法具有收斂平穩(wěn)、速度快、精度高的優(yōu)點(diǎn),在信號(hào)處理中受到廣泛應(yīng)用。但由于卡爾
    發(fā)表于 06-14 16:36 ?0次下載
    <b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的改進(jìn)方案

    新手平衡小車(chē)卡爾濾波算法總結(jié)

    電子、電子信息專(zhuān)業(yè)電路單片機(jī)學(xué)習(xí)教程資料——新手平衡小車(chē)卡爾濾波算法總結(jié)
    發(fā)表于 05-11 17:20 ?0次下載

    卡爾濾波算法

    卡爾濾波算法
    發(fā)表于 12-17 17:22 ?52次下載

    STM32運(yùn)用之自平衡小車(chē)卡爾算法封裝

    最近研究STM32的自平衡小車(chē),發(fā)現(xiàn)有兩座必過(guò)的大山,一為卡爾濾波,二為PID算法。 網(wǎng)上看了
    發(fā)表于 12-05 15:00 ?8次下載

    基于卡爾濾波的兩輪平衡檢測(cè)系統(tǒng)

    基于卡爾濾波的兩輪平衡檢測(cè)系統(tǒng)
    發(fā)表于 07-01 15:58 ?16次下載

    畢業(yè)論文 | 基于MPU6050及卡爾濾波平衡小車(chē)設(shè)計(jì)(源代碼與設(shè)計(jì)文檔)

    畢業(yè)論文 | 基于MPU6050及卡爾濾波平衡小車(chē)設(shè)計(jì)(源代碼與設(shè)計(jì)文檔)
    發(fā)表于 11-21 20:06 ?23次下載
    畢業(yè)論文 | 基于MPU6050及<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>的<b class='flag-5'>平衡</b><b class='flag-5'>小車(chē)</b>設(shè)計(jì)(源代碼與設(shè)計(jì)文檔)

    擴(kuò)展卡爾濾波的原理

    理論應(yīng)用到非線性系統(tǒng)的擴(kuò)展卡爾算法 Extended Kalman Filter(EKF)[2]。相比于線性卡爾
    的頭像 發(fā)表于 08-12 10:06 ?6488次閱讀
    擴(kuò)展<b class='flag-5'>卡爾</b><b class='flag-5'>曼</b><b class='flag-5'>濾波</b>的原理