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