謝豐澤
摘 要:電動自平衡車大大地簡化了車體結構,能夠實現原地旋轉和任意半徑轉向,移動軌跡更為靈活易變,減少占地面積,因此成為現代人們喜愛的代步和應用工具之一。由于具有結構簡單、運行穩定、能量利用率高、環境適應性強等優點,無論是在軍事領域還是在民用領域都具有非常廣闊的應用前景。該文結NXT2.0以及LEGO9797等軟硬件資源,組裝了平衡小車,并且對自行設計的PID算法進行了實驗和驗證,取得了滿意的結果。有助于中學生理解智能小車原理,學會NXT語言,掌握和準確運用PID算法;設計性和綜合性強,包括硬件組裝,算法設計和程序編寫,物理知識的應用;有助于激發中學生對機器人、以及科學實驗的興趣,提高動手能力,創新能力,培養創新意識。
關鍵詞:平衡車 算法 實驗
中圖分類號:TP24 文獻標識碼:A 文章編號:1674-098X(2015)10(a)-0251-04
Experiment of Self-Balancing Little Car Based on a Light Sensor
Xie Fengze
(Chengdu shuter middle school,Chengdu Sichuan,610000,China)
Abstract:Electric self-balancing vehicle car body structure is simplified greatly,can realize to spin around and arbitrary radius, mobile trajectory is more flexible and variable,reduce cover an area of an area,thus became one of the modern people love walking and application tools.Because of its simple structure, stable running, high energy utilization and environment adaptable advantage, whether in the military field and civilian field has very broad application prospect.Software and hardware resources,this paper NXT2.0 and LEGO9797 assemble the balance of the car, and designed the PID algorithm for the experiments and verification,and satisfactory results were achieved.Help students understand the principle of intelligent car,learn the NXT languages,grasp and accurate use of PID algorithm;Design and comprehensive strength, including the hardware group.
Key Words:Balanced;Algoritm;Experiment
電動自平衡車大大地簡化了車體結構,能夠實現原地旋轉和任意半徑轉向,移動軌跡更為靈活易變,減少占地面積,因此成為現代人們喜愛的代步和應用工具之一。由于具有結構簡單、運行穩定、能量利用率高、環境適應性強等優點,無論是在軍事領域還是在民用領域都具有非常廣闊的應用前景。兩輪自平衡車是一個多變量、非線性、高階次、強耦合、本質不穩定的運動控制系統,是檢驗各種控制理論和控制方法的典型裝置,因而,對其研究有很大的理論和實踐意義。市場上主要有獨輪和雙輪兩類平衡車。它們一般都根據被稱為“動態穩定”(Dynamic Stabilization)的基本原理工作,同時利用車體內的陀螺儀和加速度傳感器,檢測車體姿態的變化,并利用伺服控制系統,較精確地驅動電機進行相應的調整,以保持車體平衡及準確轉向。然而,在小車實際運行過程中,由于車本身運動所產生的加速度會產生很大的干擾信號疊加在其獲得的測量信號上,使得輸出信號無法準確反映真正的傾角,導致加速度傳感器無法完全獲取直立控制所需要的姿態信息。而陀螺儀本身的噪聲所引發的傾角漂移也是個大問題:陀螺儀可以測量車傾斜的角速度,將角速度信號進行積分處理便可以得到車的傾角。但是由于陀螺儀本身具有一定噪聲,如果一直積分的話,就會引起傾角漂移。因此,對于直立控制所需要的姿態信息,也不能單獨由陀螺儀來積分獲得。因此要采用陀螺儀,就必須采用加速度傳感器,二者缺一不可。這樣,第一,成本較高;第二,導致車體結構復雜化;第三,控制算法復雜度高,需要對兩種傳感器數據進行融合處理,以充分利用加速度傳感器獲得的靜態信息和陀螺儀獲得的動態信息;第四,調試和測試時間長,研發周期較大。因此,有必要探索其它的車身姿態控制方式。采用光傳感器進行車體姿態控制即是其中之一:將光電傳感器獲得的車體姿態信息,控制驅動電機運轉,準確控制車體系統平衡及正常運動。光電傳感器結構緊湊,非接觸控制,抗干擾性能高,速度測量能力強,使用光線傳感器可以簡化小車拼裝和程序算法復雜度,成本相對較低;但受限條件較大,如受光強(亮度、對比度、流明)及溫度影響較大,且響應速度不快,需要采取相應的措施進行處理。該文采用lego9797套件組裝了一個基于光線傳感器姿態感知法和PID控制策略的平衡車實驗模型,對基于光線傳感器姿態感知法的平衡車的平衡原理、姿態感知和控制方法、平衡過程和平衡效果等進行了分析和實驗驗證。
1 實驗內容
1.1 實驗目的
采用lego自行組裝的平衡車,驗證采用光電傳感器和自行設計的PID控制算法對自平衡小車的控制性能。
1.2 軟、硬件資源
樂高機器人Nxt9797套件包括硬件和軟件兩部分。硬件部分共有431個組件,包括一個NXT可編程的微型電腦(CPU),一塊可充電的鋰電池,三個伺服電機,二個觸動傳感器,一個光電傳感器,一個超聲波傳感器,一個聲音傳感器,三個燈以及足夠課堂教學所需的樂高積木。(見圖1)
套件中的軟件工具為Nxt2.0,編程語言為樂高公司為Mindstorms NXT機器人開發的一種圖形化編程語言:NXT-G,簡稱G語言。NXT-G語言由多個模塊組成,其最主要的編程方法是模塊化編程,每一個模塊代表著一個指令:或者接收測量信號,或者輸出處理數據,或者送出控制指令等。模塊與模塊之間用線連接,構成需要的算法。
1.3 方法
1.3.1 平衡車實驗模型搭建
該文搭建的平衡車實驗模型如圖2所示,主要采用了樂高機器人Nxt9797套件中的光線傳感器、NXT可編程的CPU、伺服電機模塊。其硬件原理框圖如圖5所示,其中光線傳感器模塊用于測量傳感器與地面之間的距離。NXT可編程CPU是平衡車的控制核心,接收來自傳感器的數據,并對數據進行分析和運算,產生伺服電機的控制信號。伺服電機模塊用于接收CPU的數據,控制小車進行平衡運動。開始鍵位于CPU模塊上,用于啟動小車的程序運行。
1.3.2 姿態感知和平衡原理
系統控制框圖如圖3所示。當車體略有傾斜時,重力作用在小車上后會有一個重力加速度,如果不做任何處理,加速度不變,速度會越來越大。此時光感器和地面的距離不同,反射回來的光強也不同。此時的光強會和初始光強有一個誤差,經過CPU處理之后把相應的指令送入驅動電機,控制小車進行運動,運動模式如圖4所示。
1.3.3 控制算法和流程
姿態調整過程是通過如圖5所示的PID控制器實現的。PID控制器根據系統的誤差,利用比例、積分、微分計算出控制量進行控制的使用中只需設定3個參數(Kp,Ki和Kd)即可;它們共同決定小車在原地晃動的程度即振幅和小車晃動的頻率,即抖動強度。
在小車運行控制過程中,傳統的控制算法基本是在小車到達平衡后,速度不變就立即向相反位置運動,因此,無法達到快速平衡,而PID算法則是在到達平衡之前,不停地檢測小車與平衡狀態時距離的差,從而調整速度,也就是離平衡點越近,速度越小,使其能在到達平衡狀態后速度接近為零。這種算法使平衡可以快速達到,也就使得這種車能夠投入實用。其控制流程如圖6所示。
1.4 編程
初始時,把小車固定在平衡位置,在電腦中控制使其打開小車上的光感器,光感器發出紅光,并測出反射回來的光強,以此光強作為平衡時的光強數值。取消固定后,小車會失去平衡,此時光感器和地面的距離不同,反射回來的光強也不同。此時的光強會和初始光強有一個誤差,把這個誤差帶入PID算法進行計算,輸出矯正值控制驅動電機運行。(見圖7)
剛開始為開始符號,按下小車上的橙色按鈕開始執行程序。這一部分是對三個參數的輸入部分,開始的時候我們先全部調為零,之后調節P,待系統最穩定的時候調節I,以同樣的流程調節D。(見圖8)
聲音的第一個部分為預備音,會重復3遍,之后為開始音,提示下一步即將進行自平衡,讓使用者把支撐物(該實驗中是直接用手)移開。影響效果儲存在CPU中,執行時直接調出。第一個光線的輸入為初始光強即S0,在開啟程序之前我們需要讓小車先保持平衡狀態,并輸入此時的光強,讓S0和初始光強處于一致。在此之后的光強為下個時刻的光強記為Sr。(見圖9,圖10)
PID在程序中的寫法:設定初始光線傳感器和地面的距離為S0(平衡狀態),之后的距離為Sr,該實驗中把S0記為中間值ZJ,接下來為誤差算法PID的比例,積分和微分的算法。
(1)比例部分:(ZJ-Sr)×KP,一開始實驗的積分為零,所以帶入一個單元積分JF的初始值為零。(2)積分部分:((ZJ-Sr)+JF)×KI,微分的時候則需要把每次的誤差都記下來,然后進行不停地相減,此時本實驗的上一個e必須有一個空出的單元進行存放,記為上一個e為LE。(3)微分部分:((ZJ-Sr)-LE)×KD。其中KP,KI,KD為PID的三個參數。
圖11中的第一個模塊為除法模塊,得到輸出值后使之成比例縮小,避免計算結果過大,導致電機飛速運動;最后的值如果超出-1000或1000(NXT所能輸入的最大值),就表明車已傾倒,調解失敗,此時會令運行中的輪子停止運行,避免傾倒后輪子繼續運行所導致的儀器損壞。下一個模塊為比較模塊,判斷小車是前傾還是后傾,隨后進行調節。之后的模塊為絕對值模塊,計算誤差值的大小,從而調節馬達速度,誤差越大,速度越大,當然超過了一定數值(-1000~1000)就會停止。后面兩個模塊為運行模塊運動模塊,即輸入后操控馬達進行運行。
數值設定:動機轉數:50;范圍:-1000~1000。
2 調試及結果
自平衡車能在恒定的光強與介質上進行原地的前后動態平衡,持續時間可達半小時。然而實驗卻存在以下問題:第一,光感傳感器在不同光強下,三個參數不同;因此,必須要使平衡車自行感到光強的變化,從而自動改變參數。對于這個問題,可以再安一個光感傳感器,使其能和地面的距離保持不變,這時所測量到的光感值和另外一個一一對應,就可以實現在任何光強上的平衡。第二,該自平衡車只能在原地進行平衡,而沒有設計前進、后退的控制方式;因為沒有使用陀螺儀。對于這個問題,可以默認為是體感操作,即身體向前,平衡車會往前傾,這時光傳感器就會和初始數據產生一個偏差,從而向前進。
3 結語
通過實驗證明,利用光傳感器以及自行設計的PID控制算法進行的平衡車的控制實驗,獲得了較為滿意的效果:結合nx9797等lego9797軟件硬件資源,大大縮短組裝和程序設計周期、減少成本、縮小平衡車體積、降低結構復雜度。它具有程序簡單,操作簡便等優點,但存在著性能上的不足,希望在今后的試驗中能改善。通過該實驗,有助于中學生理解智能小車原理,學會NXT語言,掌握和準確運用PID算法;設計性和綜合性強,包括硬件組裝,算法設計和程序編寫,物理知識的應用;有助于激發中學生對機器人、以及科學實驗的興趣,提高動手能力,創新能力,培養創新意識。
參考文獻
[1] 童詩白,華程英.模擬電子技術基礎[M].4版.北京:高等教育出版社,2009.
[2] 閻石.數字電子技術基礎[M].5版.北京:高等教育出版社,2009.
[3] 黃智偉,王彥,陳文光,等.全國大學生電子設計競賽訓練教程[M].北京:電子工業出版社,2013.
[4] 段其昌,袁洪躍,金旭東.兩輪自平衡車無速度傳感器平衡控制仿真研究[J].控制工程,2013,20(4):618-622.