Robofun 機器人論壇
標題:
關於卡爾曼濾波和PID
[打印本頁]
作者:
snake0907
時間:
2013-3-22 21:29
標題:
關於卡爾曼濾波和PID
我最近也在看卡爾曼濾波,不知是否否有較淺顯易懂的一些相關資料??
我現在用的是i2c介面的陀螺儀和加速器,想請問陀螺儀傳送出的是否是角速度??
卡爾曼完就要PID了,但網路上的卡爾曼都說得好複雜,也沒有個實例說明。
不知有沒有哪位前輩可以以較簡單的方式說明一下卡爾曼濾波或PID。
感激不盡
作者:
snake0907
時間:
2013-3-23 13:27
奇怪,這論壇有人嗎??
作者:
nichal
時間:
2013-3-23 14:25
先在論壇上搜索一下吧
http://www.robofun.net/forum/viewthread.php?tid=6327
這是說Kalman Filter
http://www.robofun.net/forum/viewthread.php?tid=2237
這是說PID
如果不會用論壇上的搜索功能
可以看一下首頁右半邊的小格子
裡面有一個搜索分頁
點進去之後輸入你想要知道的關鍵字
(ex: Kalman)
再來選擇全文搜索
預設是"標題"
要改成"全文"才容易找到
因為很多信息是在回應中被提出來的
不是原標題
這樣應該可以幫上你一些忙
另外
這裡不只是挖資料的地方
也歡迎您將自己理解的訊息跟大家分享
論壇是用來討論的
所以對錯也要由您自行判斷
作工程的通常沒有假期
所以比較晚來回應也請耐心等候
有時自己上來回覆自己的問題會更好
祝你順利
作者:
g921002
時間:
2013-3-23 15:53
回復
1#
snake0907
Kalman filter(KF)是一個"數學"上的,並且以機率為基礎的估測系統,跟一般概念上的"低通""高通"濾波器不一樣。
如果你是要將KF用於陀螺儀和加速規上,我覺得是浪費時間,主要是加速規用於建立系統模型的或量測模型的描述有缺陷。
我否而比較建議用Balance filter
http://web.mit.edu/scolton/www/filter.pdf
相同的使用條件,BF使用更直覺,code也比較有效能‧
作者:
snake0907
時間:
2013-3-23 20:22
本帖最後由 snake0907 於 2013-3-23 20:29 編輯
回復
3#
nichal
感謝兩位大大的回覆,我也有找了不少資料了,但是許多資料
都較困難,看得有點吃力,想請問兩位大大,我用的陀螺儀跟加速器是I2C介面的LSM303DLH+L3G4200D,它們讀到的"值"是什麼??是角速度或加速度嗎??
我現在使用的是簡單移動平均濾波,但好像會有點延遲。
不好意思都用一些簡單問題來煩大家,但是很多在網路上或書裡的資料都寫得很複雜,瞭解後才發現沒那麼難。
感謝各位
作者:
snake0907
時間:
2013-3-23 21:29
我在網上有看到關於卡爾曼濾波的資料。
想請問
以下這幾個值要怎麼得到啊??
譬如說:
#include <math.h>
class KalmanFilter
{
public:
KalmanFilter(double q,double r);
double Update(double);
double GetK(){return k;}
private:
double k;
//kalman gain
double p;
//estimation error cvariance
double q;
//process noise cvariance
double r;
//measurement noise covariance
double x;
//value
};
KalmanFilter::KalmanFilter(double q,double r):q(q),r(r),x(0.0)
{
p = sqrt(q * q + r * r);
}
double KalmanFilter::Update(double value)
{
p += q;
k = p / (p + r);
x += k * (value - x);
p *= (1 - k);
return x;
}
q是預測誤差 →請問怎麼"預測"??我在網路上都看到說要預測誤差值,但是我不太清楚它的意思,譬如陀螺儀如果放著不動時應該輸出0,但是確一直輸出5,那5不是就是誤差值嗎?也不需預測啊?
r是感測器誤差 →為什麼有預測誤差和感測器誤差兩種誤差??
k是卡爾曼增益 →這是一個固定的數嗎??
x用來紀錄狀態值
p直接取q與r的平方和開根號 →q與r是要加一起平方和開根號嗎??
作者:
snake0907
時間:
2013-3-30 21:46
又沒人理我了,我已經看了論壇上一些相關文章,但總覺得每每說到關鍵點各位前輩就不說了,帖子就下潛了‧‧‧‧‧‧‧><
作者:
g921002
時間:
2013-4-3 00:17
回復
5#
snake0907
>我用的陀螺儀跟加速器是I2C介面的LSM303DLH+L3G4200D,它們讀到的"值"是什麼??是角速度或加速度嗎??
類比轉數位的值,你要看datasheet兩者之間的關係。
比如L3G4200D的設定量程是±500dps(度/秒),那係數就是17.50mdps/digit,所以把量到的值乘以17.5就是實際的角速度,加速規同理。
>我現在使用的是簡單移動平均濾波,但好像會有點延遲。
那就表示你的濾波模型的截止頻率低於系統響應。
>不好意思都用一些簡單問題來煩大家,但是很多在網路上或書裡的資料都寫得很複雜,瞭解後才發現沒那麼難。
>感謝各位
作者:
g921002
時間:
2013-4-3 00:29
本帖最後由 g921002 於 2013-4-3 00:32 編輯
回復
6#
snake0907
>q是預測誤差 →請問怎麼"預測"??我在網路上都看到說要預測誤差值,但是我不太清楚它的意思,譬如陀螺儀如果放著不動時應該輸出0
>但是確一直輸出5,那5不是就是誤差值嗎?也不需預測啊?
>r是感測器誤差 →為什麼有預測誤差和感測器誤差兩種誤差??
不是,q是量測方程的誤差協方差,不管你用哪種sensor,那要去量出來(靜、動態測試)。跟r(系統方程的誤差協方差)是一樣的東西。
因為你的模型都是根據sensor,所以要實際去量。
而且不管用加速規來描述量測方程或是系統方程,你覺的誤差協方差會是定值嗎?
>k是卡爾曼增益 →這是一個固定的數嗎??
不是
>p直接取q與r的平方和開根號 →q與r是要加一起平方和開根號嗎??
這個似乎有問題,見以下文章
http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf
你沒注意到你引用的code會退化到最小二乘模型嗎?
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2