此文主要描述并使用MMA7260QT三軸加速計(jì)和低功耗的9S08QG8八位單片機(jī)實(shí)現(xiàn)求解位置的算法?。
在今天先進(jìn)的電子市場,有不少增加了許多特性和智能的多功能的產(chǎn)品。定位和游戲只是得益于獲取到的位置信息的一部分市場。一個獲取這種信息的可選方案是通過使用慣性傳感器。從這些傳感器中取得的信號需要進(jìn)行一些處理,因?yàn)樵诩铀俣群臀恢弥g沒有一種直接轉(zhuǎn)換。
為了獲得位置,需要對加速度進(jìn)行二次積分。本文介紹一種簡單的算法實(shí)現(xiàn)加速度的二重積分。為了獲取加速度的二重積分,一個簡單的積分要進(jìn)行兩次,因?yàn)檫@樣也可以順便獲取速度。
接下來要展示的算法,能夠應(yīng)該于任何傳感軸,所以一維、二維、三維的位置都可以被計(jì)算出。當(dāng)在獲取三維位置信息時,要特別地除去重力加速度的影響。下面的算法實(shí)現(xiàn)還包括了一個二維系統(tǒng)的例子(比如鼠標(biāo))。
?
應(yīng)用潛力
這種算法的應(yīng)用潛力在于個人導(dǎo)航、汽車導(dǎo)航和(back-up)GPS、防盜設(shè)備、地圖追蹤、3D游戲、計(jì)算機(jī)鼠標(biāo)等等。這類產(chǎn)品都需要用到求解位置信息的算法。
本文所介紹的算法在位移精度要求不是很嚴(yán)格的情況下很有用。其他的情況和影響特別是應(yīng)用,當(dāng)采用本文算法時,需要考慮一下。對最終程序進(jìn)行微小的修改和調(diào)整,這種算法能夠達(dá)到更高的精度。
?
理論知識和算法
理解本文算法的最好方法是回顧一下數(shù)學(xué)上的積分知識。
加速度是一個對象速度的變化速率。同時,速度是同樣一個對象位置的變化速率。換句話說,速度是位置的導(dǎo)數(shù),加速度是速度的導(dǎo)數(shù),因此如下公式:
積分和導(dǎo)數(shù)相反。如果一個物體的加速度已知,那么我們能夠利用二重積分獲得物體的位置。假設(shè)初始條件為0,那么有如下公式:
一個理解這個公式的方法是將積分定義成曲線下面包圍的區(qū)域,積分運(yùn)算結(jié)果是極小區(qū)域的總和,區(qū)域的寬度趨近于0。換句話說,積分的和表示了一個物理變量的大小(速度)。
利用前面的一個概念——曲線下面的區(qū)域,我們能得出一個結(jié)論:對一個信號采樣,得到該信號大小的瞬時值,所以能夠在兩次采樣之間得到一個小的區(qū)域。為了獲得連貫的值采樣時間必須相同。采樣時間代表這塊區(qū)域的寬,同時采樣得到的值代表區(qū)域的高。為了消除帶有分?jǐn)?shù)的乘法(微秒或毫秒),我們假定時間為一個單位。
現(xiàn)在,我們知道了每個代表區(qū)域?qū)挾鹊牟蓸訒r間等于1。下一個結(jié)論是:
積分的值可以約等于區(qū)域面積之和。
如果采樣時間趨近于0,那么結(jié)論將是正確的。但在實(shí)際中,將會產(chǎn)生如下錯誤,在處理的過程中,這個誤差將會一直累積。
這些錯誤稱為采樣損失。為了減少這些錯誤,我們再做進(jìn)一步的假設(shè)。結(jié)果區(qū)域能夠看成由兩塊小的區(qū)域的組合:
區(qū)域1是前一次采樣的值(方形),區(qū)域2是一個三角形,是前一次采樣和當(dāng)前采樣之差的一半。
通過這種方法,我們現(xiàn)在有一個一階近似(插值)的信號。
現(xiàn)在的錯誤比以前的近似的低得多。
盡管加速度有正有負(fù),但采樣的值總是正的(基于MMA7260QT的輸出特性),因此需要做一個偏移判斷,換句話說,需要一個參考。這個程序即為校準(zhǔn)程序。
校準(zhǔn)程序用于在沒有移動情況下的加速度值上。這時,獲得的加速度值可以看成是零參考點(diǎn)。低于零參考點(diǎn)的值代表負(fù)值(減速),高于零參考點(diǎn)的值代表正值(加速)。
加速度計(jì)的輸出范圍為0v到Vdd,并且它通常由AD轉(zhuǎn)換器得到。0值接近Vdd/2。前面獲得的校準(zhǔn)值會被芯片的方向和分解在各軸的靜態(tài)加速度(重力加速度)所影響。如果裝置剛好平行于地球表面,那么校準(zhǔn)值將會很接近Vdd/2。
接下來的這張圖用于展示校準(zhǔn)程序的結(jié)果。
從采樣的信號減去零參考值,我們獲得真正的采樣加速度。
A1代表正加速度,A2代表負(fù)加速度。
如果我們將這數(shù)據(jù)看作是采樣數(shù)據(jù),那么信號值將和下圖非常接近。
通過使用上面的積分公式,F(xiàn)ormula 1,我們將獲得速度的比例近似值。同樣,為了獲取位置,需要再進(jìn)行一次積分。在獲得的速度數(shù)值上應(yīng)用相同的公式和步驟,我們現(xiàn)在獲得了一個瞬時位置的比例近似值。(見圖6)
軟件設(shè)計(jì)相關(guān)注意事項(xiàng)
當(dāng)在現(xiàn)實(shí)世界的實(shí)現(xiàn)中應(yīng)用這種算法,應(yīng)該考慮一下下面的步驟和建議:
1.信號存在一定的噪聲,所以信號必須經(jīng)過數(shù)字濾波。本算法中的濾波是一種移動平均算法,要處理的值是一定數(shù)量采樣值的平均結(jié)果。
2.即使以前過濾的一些數(shù)據(jù)可能由于機(jī)械噪聲導(dǎo)致錯誤,所以必須實(shí)現(xiàn)另一個濾波器。根據(jù)過濾的樣品數(shù),一個真實(shí)加速度的窗口能夠被選擇(一般為16±2采樣次數(shù))。
3.無運(yùn)動狀態(tài)對獲得正確的數(shù)據(jù)是至關(guān)重要的。校準(zhǔn)例程需要在應(yīng)用程序的開頭。該校準(zhǔn)值必須盡可能準(zhǔn)確。
4.加速度的真實(shí)值等于采樣值減去校準(zhǔn)值;它可以是正數(shù)或負(fù)數(shù)。當(dāng)你在定義變量的時候,這絕對不能被忽略,需要定義為有符號數(shù)。
5.更快的采樣頻率意味著更精確的結(jié)果,因?yàn)椴蓸宇l率越快誤差越少。但是需要更多的內(nèi)存、時間和硬件方面的考慮。
6.兩次采樣之間的時間必須要相同。如果這個時間不相同,將會產(chǎn)生錯誤。
7.兩次采樣結(jié)果之間的線性近似值(插值)被推薦用于更精確的結(jié)果。