方晨晨,邵 翔
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
姿態(tài)感知無線空中鼠標(biāo)的開發(fā)與實(shí)現(xiàn)
方晨晨,邵 翔
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
針對(duì)傳統(tǒng)鼠標(biāo)的使用受二維平面限制的問題,開發(fā)并實(shí)現(xiàn)了一種姿態(tài)感知無線空中鼠標(biāo)。采用Arduino Nano作為主控制器,對(duì)JY-901慣導(dǎo)模塊采集的鼠標(biāo)姿態(tài)數(shù)據(jù)進(jìn)行處理,得到光標(biāo)的位移量,通過藍(lán)牙發(fā)送到接收端。接收端為Arduino Leonardo微控制處理器,其從藍(lán)牙接收端獲得數(shù)據(jù)并解析,進(jìn)而實(shí)現(xiàn)控制電腦光標(biāo)的運(yùn)動(dòng)。經(jīng)LabVIEW平臺(tái)測試的結(jié)果表明,鼠標(biāo)運(yùn)行穩(wěn)定、移動(dòng)平滑、用戶體驗(yàn)良好,可滿足實(shí)際應(yīng)用的需求。
姿態(tài)感知;無線;空中鼠標(biāo);慣導(dǎo)模塊
鼠標(biāo)是使用最頻繁的計(jì)算機(jī)輸入設(shè)備之一,人機(jī)交互時(shí)代的到來使得人們對(duì)鼠標(biāo)的穩(wěn)定性、精確性以及靈活性等要求更高。傳統(tǒng)的鼠標(biāo)需要基于二維平面操作,使得鼠標(biāo)在某些特定場合的使用受到限制。隨著微電子技術(shù)及無線技術(shù)的進(jìn)一步發(fā)展,無線空中鼠標(biāo)以其新型的定位方式及高靈活性得到了廣泛關(guān)注,具有良好的研究前景和應(yīng)用價(jià)值。本文提出一種采用九軸慣導(dǎo)傳感器和無線通訊的方式來實(shí)現(xiàn)鼠標(biāo)的空中姿態(tài)感知和指針定位,最終完成了空中鼠標(biāo)的開發(fā)。
空中鼠標(biāo)使用傳感器采集鼠標(biāo)位移信號(hào),硬件系統(tǒng)提供的信號(hào)采集器件一般有單陀螺儀,單加速度傳感器等。陀螺儀可感知空間的變化,與位置無關(guān),能夠檢測運(yùn)動(dòng)過程中每個(gè)軸上旋轉(zhuǎn)的角速度[1-2]。文獻(xiàn)[3~5]介紹了三軸陀螺儀的空中鼠標(biāo)定位算法,根據(jù)四元數(shù)計(jì)算出坐標(biāo)值。但陀螺儀各項(xiàng)性能隨溫度的改變變化較大,會(huì)影響其零速率輸出和靈敏度系數(shù),故單陀螺儀作為傳感器件的空中鼠標(biāo)穩(wěn)定性較差。加速度計(jì)能夠精確測量x,y,z軸方向的加速度,文獻(xiàn)[6~10]利用三軸加速度傳感器,通過積分算出位移,從而確定空中鼠標(biāo)的位置。但加速度傳感器動(dòng)態(tài)特性不高,對(duì)于運(yùn)動(dòng)變化較快的載體不能實(shí)現(xiàn)快速的跟蹤從而得到精準(zhǔn)的輸出,所以加速度傳感器輸出測量值在短時(shí)間內(nèi)參考價(jià)值不大[11]。文獻(xiàn)[12~13]利用三軸加速度傳感器測量出的傾斜角的變化表示鼠標(biāo)位置的變化,這種方法并不能使噪聲完全消失。因此,本文提出了一種基于九軸傳感器的空中鼠標(biāo)設(shè)計(jì)方法,采用九軸的高精度慣性導(dǎo)航模塊JY-901,即加速度計(jì)、陀螺儀和磁力計(jì)集成的模塊,模塊內(nèi)部集成了姿態(tài)解算器,配合動(dòng)態(tài)卡爾曼濾波算法,能夠達(dá)到高精度測量,彌補(bǔ)單加速度計(jì)、單陀螺儀的不足,也避免了數(shù)據(jù)融合的過程。
空中飛鼠主要分為手持無線發(fā)射和PC端USB接收兩大部分。硬件如圖1所示。慣導(dǎo)模塊采用JY-901,內(nèi)部集成姿態(tài)解算器,配合動(dòng)態(tài)卡爾曼濾波算法,能夠在動(dòng)態(tài)環(huán)境下準(zhǔn)確輸出模塊的當(dāng)前姿態(tài),姿態(tài)測量精度0.01°;主控制器為Arduino Nano,工作電壓5 V;電源模塊采用5 V獨(dú)立電源供電;按鍵采用3個(gè)普通按鍵,分別對(duì)應(yīng)鼠標(biāo)的左鍵、右鍵及enter鍵;接收端為Arduino Leonardo微控制處理器,工作電壓為5 V;無線通訊采用藍(lán)牙串口模塊,模塊采用CSR主流藍(lán)牙芯片,藍(lán)牙V2.0協(xié)議標(biāo)準(zhǔn),串口模塊工作默認(rèn)電壓 3.6~6 V。
其中,Arduino Nano通過I2C與JY-901慣性傳感器連接,通過串口和藍(lán)牙從機(jī)連接,I2C總線需通過4.7 kΩ的電阻上拉到VCC。Arduino Leonardo 通過串口和藍(lán)牙主機(jī)連接,通過板載Micro USB完成模擬鼠標(biāo)、鍵盤等USB HID。藍(lán)牙串口為兩個(gè)相同的模塊,分別設(shè)置成主機(jī)和從機(jī),主機(jī)用于接收無線鼠標(biāo)發(fā)來的數(shù)據(jù),并轉(zhuǎn)發(fā)給PC。
圖1 空中鼠標(biāo)硬件結(jié)構(gòu)圖
由慣導(dǎo)模塊讀取鼠標(biāo)姿態(tài)信息,并由主控芯片將信息處理為鼠標(biāo)位置的變化量,通過藍(lán)牙傳輸給控制端,經(jīng)過數(shù)據(jù)處理利用USB HID控制電腦光標(biāo)移動(dòng)。
圖2 數(shù)據(jù)處理流程圖
圖3 鼠標(biāo)驅(qū)動(dòng)流程圖
數(shù)據(jù)處理流程,如圖2所示。軟件功能如下:
(1)慣導(dǎo)模塊數(shù)據(jù)采集與處理。選擇歐拉角[14]作為鼠標(biāo)的姿態(tài)變化量,定時(shí)采集每個(gè)軸的角度變化,當(dāng)慣導(dǎo)模塊運(yùn)動(dòng)時(shí),每個(gè)軸的角度會(huì)在基準(zhǔn)角度上增加或減少,傳感器角度數(shù)據(jù)即偏航角Yaw、俯仰角Pitch、橫滾角Roll利用JY901.GetAngle()函數(shù)讀取,并調(diào)用calc_curser()函數(shù)計(jì)算一個(gè)采樣周期內(nèi)鼠標(biāo)角度的變化量。程序設(shè)計(jì)如下
void loop()
{JY901.GetAngle();
calc_curser(
(float)JY901.stcAngle.Angle[0]/32768*180,
(float)JY901.stcAngle.Angle[1]/32768*180, (float)JY901.stcAngle.Angle[2]/32768*180);
delay(100);}
(2)鼠標(biāo)姿態(tài)解算。鼠標(biāo)在空中的姿態(tài)變化轉(zhuǎn)換成鼠標(biāo)指針的移動(dòng)需要合適的姿態(tài)解算算法,本文使用慣導(dǎo)模塊x軸與z軸的輸出,即偏航角與俯仰角進(jìn)行運(yùn)算。JY-901模塊偏航角+180°與-180°相互重疊,故偏航角在該范圍變化時(shí)的角度差有誤,因此要對(duì)傳感器的輸出數(shù)據(jù)進(jìn)行處理。處理方法如下:當(dāng)前時(shí)刻的偏航角與上一時(shí)刻的偏航角差值>180°或<-180°時(shí),將差值減去或加上360°得到實(shí)際差值,俯仰角差值無需類似處理。將偏航角實(shí)際差值與俯仰角差值數(shù)據(jù)分別乘以系數(shù)k1和k2得到鼠標(biāo)偏移量,再與原位置數(shù)據(jù)相加即為鼠標(biāo)當(dāng)前位置信息,通過串口發(fā)送給藍(lán)牙。同時(shí)將當(dāng)前位置角度數(shù)據(jù)寫入記錄上一位置角度數(shù)據(jù)的變量中,循環(huán)計(jì)算。角度誤差處理程序如下
if(yaw_now-yaw_last>180)
{dx = k1* (yaw_now-yaw_last-360);}
else if(yaw_now-yaw_last<-180)
{dx = k2 * (yaw_now-yaw_last+360);}
(3)PC端鼠標(biāo)驅(qū)動(dòng)設(shè)計(jì)。本文鼠標(biāo)驅(qū)動(dòng)在Windows 7平臺(tái)上實(shí)現(xiàn)。PC端接收到USB接口發(fā)送過來的數(shù)據(jù),通過調(diào)用Mouse_keyboard函數(shù)控制鼠標(biāo)光標(biāo)動(dòng)作。Mouse.move(),Mouse.press()用來實(shí)現(xiàn)光標(biāo)的移動(dòng)以及左右鍵的操作,Keyboard.write()用來實(shí)現(xiàn)回車鍵enter的操作。
系統(tǒng)通過接收USB的數(shù)據(jù),判斷鼠標(biāo)是否移動(dòng)或按鍵是否按下,如果鼠標(biāo)移動(dòng),則將鼠標(biāo)的位移量轉(zhuǎn)化為對(duì)應(yīng)的屏幕像素值,移動(dòng)電腦光標(biāo)的位置;如果按鍵按下,判斷為左鍵、右鍵或enter鍵,并執(zhí)行相應(yīng)的操作。
基于LabVIEW搭建出鼠標(biāo)姿態(tài)角映射到電腦光標(biāo)位移的模型,利用光標(biāo)在LabVIEW仿真桌面上的移動(dòng)整定算法中的各項(xiàng)參數(shù)。
4.1 采樣周期的調(diào)整
在鼠標(biāo)移動(dòng)的過程中,JY-901慣導(dǎo)模塊綜合陀螺儀、加速度計(jì)、地磁場傳感器測量的數(shù)據(jù)得到準(zhǔn)確的姿態(tài)變化角度,經(jīng)運(yùn)算得到鼠標(biāo)的姿態(tài)信息,但鼠標(biāo)移動(dòng)過程中會(huì)產(chǎn)生測量噪聲,給實(shí)驗(yàn)結(jié)果帶來一定誤差。因此需要確定出較好的采樣周期,使光標(biāo)在電腦桌面移動(dòng)時(shí)具有良好的穩(wěn)定性和平滑性。
經(jīng)LabVIEW測試,當(dāng)采樣周期為10 ms,信號(hào)中存在過多的毛刺和脈沖干擾,這些干擾在數(shù)據(jù)處理過程中會(huì)被放大,嚴(yán)重時(shí)可導(dǎo)致信號(hào)失真。將采樣周期從10 ms開始增加,x、y軸變化量的波形明顯平滑。當(dāng)調(diào)節(jié)采樣周期達(dá)到100 ms時(shí),x、y軸的毛刺基本得以改善,大幅減少了脈沖干擾。繼續(xù)增大采樣周期,鼠標(biāo)的靈敏度降低,其姿態(tài)角不能很好地對(duì)應(yīng)到光標(biāo)的位移上,因此得到較好的采樣周期為100 ms,既改善了測量噪聲對(duì)光標(biāo)位移量的影響,又保證了鼠標(biāo)靈敏度較高。圖4和圖5分別為鼠標(biāo)移動(dòng)過程中,當(dāng)采樣周期為10 ms、時(shí)x、y軸的位移量,橫坐標(biāo)為時(shí)間,單位ms;縱坐標(biāo)分別為光標(biāo)在x、y軸的位移量,單位10-4m。
圖4 采樣周期為10 ms時(shí)x、y軸位移變化量
圖5 采樣周期為100 ms時(shí)x、y軸位移變化量
4.2k1和k2參數(shù)整定
將解算后的鼠標(biāo)姿態(tài)角進(jìn)行映射處理,偏航角與俯仰角分別映射成光標(biāo)的x軸和y軸,得到二維光標(biāo)的位移量。在姿態(tài)角映射到光標(biāo)位移量的過程中,參數(shù)k1、k2保證了映射水平的高低,即決定了光標(biāo)移動(dòng)時(shí)的連續(xù)性、平滑性。k1、k2過大則光標(biāo)易產(chǎn)生跳幀現(xiàn)象,過小則光標(biāo)移動(dòng)范圍變小,造成移動(dòng)困難。因此,利用LabVIEW平臺(tái)對(duì)k1、k2進(jìn)行校正,通過光標(biāo)在LabVIEW仿真桌面的移動(dòng)情況調(diào)整k1、k2的大小,直至映射效果最佳。經(jīng)調(diào)試得到k1、k2=4時(shí),光標(biāo)移動(dòng)平滑,實(shí)時(shí)性較好,故最后整定參數(shù)k1,k2=4
4.3 零點(diǎn)漂移校正算法
在信號(hào)采集過程中,當(dāng)鼠標(biāo)系統(tǒng)處于靜止?fàn)顟B(tài)時(shí)輸出信號(hào)卻不為零,這種輸出信號(hào)是隨機(jī)噪聲產(chǎn)生的,對(duì)于數(shù)據(jù)的計(jì)算沒有意義,這種在系統(tǒng)輸入為零時(shí)的系統(tǒng)輸出稱為零點(diǎn)漂移[15]。零點(diǎn)漂移的存在使得傳感器輸出信號(hào)不精確,也給數(shù)據(jù)計(jì)算與處理帶來一定的誤差,因此,在算法中設(shè)置“閾值”,對(duì)小幅度的抖動(dòng)誤差進(jìn)行濾波處理,防止鼠標(biāo)在移動(dòng)過程中造成光標(biāo)快速回漂。在一個(gè)采樣周期內(nèi),當(dāng)傳感器輸出的角度變化量大于閾值時(shí),認(rèn)為鼠標(biāo)處于運(yùn)動(dòng)狀態(tài),通過計(jì)算得到光標(biāo)的位移量;當(dāng)角度變化量小于閾值時(shí),認(rèn)為鼠標(biāo)處于靜止?fàn)顟B(tài),即輸出的位移量dx,dy為零。通過反復(fù)試驗(yàn),將閾值設(shè)置為2.2效果較為理想,光標(biāo)移動(dòng)比較平滑。
本文使用Arduino Nano作為核心處理器,JY-901慣導(dǎo)模塊作為信號(hào)采集系統(tǒng),慣導(dǎo)模塊測出的加速度、角速度、磁場經(jīng)過模塊內(nèi)部的姿態(tài)解算和卡爾曼濾波,以融合后得到的歐拉角表示鼠標(biāo)當(dāng)前的姿態(tài)角,僅使用偏航角Yaw和俯仰角Pitch表示鼠標(biāo)在空中的運(yùn)動(dòng)姿態(tài),最后將運(yùn)動(dòng)軌跡轉(zhuǎn)換成鼠標(biāo)指針的移動(dòng),完成了基于九軸傳感器的空中鼠標(biāo)的開發(fā)與實(shí)現(xiàn),實(shí)物如圖6所示。
圖6 無線空中鼠標(biāo)發(fā)射端和電腦接收端實(shí)物
[1] 谷慶紅.微機(jī)械陀螺儀的研制現(xiàn)狀[J].中國慣性技術(shù)學(xué)報(bào),2003,11(5):67-72.
[2] 葛海江,陶姍.姿態(tài)感知鼠標(biāo)指針的控制方法[J].機(jī)電工程,2009,26(3):105-107.
[3] 陳莉莉.三軸陀螺儀的空中鼠標(biāo)定位算法研究[J].信息與電腦,2015(1):57-59.
[4] 曹青,歐陽紅林,胡彪,等.基于角速率陀螺儀的無線鼠標(biāo)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2008,24(12):230-232.
[5] 葛海江,張雪娟,沈海娟.兩軸模擬陀螺儀的空中鼠標(biāo)指針控制方法研究[J].電子技術(shù)應(yīng)用,2010(11):132-134.
[6] 王鵬,黃冰,陳婷.基于MMA7455L加速度鼠標(biāo)的研究[J].傳感技術(shù)學(xué)報(bào),2010(7):1044-1048.
[7] 錢莉,陳文元,黃得志,等.基于MEMS技術(shù)的無線鼠標(biāo)[J].北京電子科技學(xué)院學(xué)報(bào),2005,13(4):76-78.
[8] 黃得志,陳文元,楊華峰,等.基于微加速度傳感器的無線鼠標(biāo)的設(shè)計(jì)[J].傳感器與微系統(tǒng),2006,25(1):50-53.
[9] 岳高銘,楊濤,胡莉.基于微加速度計(jì)的低功耗無線慣性鼠標(biāo)的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2006,22(10):310-312.
[10] 王海江.三維鼠標(biāo)的設(shè)計(jì)及其在虛擬現(xiàn)實(shí)中的應(yīng)用[D].蘇州:蘇州大學(xué),2011.
[11] 周獲.基于MEMS技術(shù)的無線空中鼠標(biāo)的研究[D].廈門:華僑大學(xué),2013.
[12] 湯堅(jiān),陳文元,姜曉波,等.基于微加速度計(jì)的鼠標(biāo)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(23):6136-6138.
[13] 姜曉波.基于微加速度計(jì)的AIR-MOUSE的研究[D].上海:上海交通大學(xué),2008.
[14] 劉星.多維MEMS慣性傳感器的姿態(tài)解算算法研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2013.
[15] 彭意.空中鼠標(biāo)指針定位信號(hào)采集與處理的研究[D].武漢:武漢理工大學(xué),2013.
歡迎訂閱《電子科技》
郵發(fā)代號(hào):52-246
Development and Implementation of Posture Sensing Wireless Air Mouse
FANG Chenchen, SHAO Xiang
(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
A posture sensing wireless air mouse is developed and implemented to remove the restriction of the traditional mouse to the two-dimensional surface. With the Arduino Nano as the master controller, the mouse position data collected by the inertial navigation module JY-901 are processed to obtain the displacement of cursor, which is sent by Bluetooth to the receiving end, that is, the micro control processor Arduino Leonardo, for analysis to control the movement of cursor. Labview test result indicates stable operation and smooth movement of mouse with good user experience.
posture sensing; wireless; air mouse; inertial navigation module
2016- 06- 24
方晨晨(1994-),女,本科。研究方向:控制科學(xué)與工程。邵翔(1991-),男,碩士。研究方向:機(jī)器視覺等。
10.16180/j.cnki.issn1007-7820.2017.05.050
TP212
A
1007-7820(2017)05-184-04