岳井玉
【摘 要】在虛擬機(jī)器人軟件環(huán)境中使用計(jì)算機(jī)程序算法,設(shè)計(jì)出虛擬環(huán)境的獨(dú)輪小車富有趣味性和探究性。本文的獨(dú)輪車算法應(yīng)用到了工程控制理論中的PID原理,讓虛擬機(jī)器人軟件作為中小學(xué)生學(xué)習(xí)復(fù)雜程序算法和仿真工程原理的直觀工具,是一種有效嘗試。
【關(guān)鍵詞】虛擬機(jī)器人;獨(dú)輪車;PID;陀螺儀;仿真
【中圖分類號(hào)】G434 【文獻(xiàn)標(biāo)識(shí)碼】B
【論文編號(hào)】1671-7384(2017)05-0086-02
獨(dú)輪車是只有一個(gè)輪子的小車,在電機(jī)馬達(dá)的驅(qū)動(dòng)下能夠平穩(wěn)地在地面上行走而不摔倒。本文中的獨(dú)輪車采用蘿卜圈3D仿真機(jī)器人軟件的免費(fèi)功能模塊來(lái)實(shí)現(xiàn)。
獨(dú)輪車原理
簡(jiǎn)單獨(dú)輪車的平衡運(yùn)動(dòng)狀態(tài)主要有三種情況:后傾、直立、前傾(如圖1)。如果狀態(tài)是后傾,則車身需要一個(gè)向后的力才能讓其回到直立狀態(tài),即電機(jī)馬達(dá)需要加速向后轉(zhuǎn)動(dòng);如果狀態(tài)是前傾,則車身需要一個(gè)向前的力才能讓其回到直立狀態(tài),即電機(jī)馬達(dá)需要加速向前轉(zhuǎn)動(dòng);對(duì)于直立狀態(tài),電機(jī)馬達(dá)速度為零即可。
仿真軟件里有陀螺儀傳感器,能夠反饋機(jī)器人與地面的傾斜角度值。對(duì)于安裝在車身頂部的陀螺儀傳感器而言(如圖2),根據(jù)陀螺儀傳感器的說(shuō)明書可知,車身向后傾時(shí),傳感器值為負(fù)值;車身向前傾時(shí),傳感器值為正值;車身直立時(shí),值為0。而且傾斜越厲害,值越大,如果獨(dú)輪車向前倒了,值為90;反之,如果向后倒了,值為-90。因此,對(duì)獨(dú)輪車而言,陀螺儀傳感器的取值范圍是-90到+90(數(shù)學(xué)區(qū)間表達(dá)式為[-90,90])。進(jìn)一步,假定獨(dú)輪車向前傾斜5度,則應(yīng)當(dāng)用P×5的電機(jī)速度向前加速才能維持其豎直(P是比例常量);假定向后傾斜-5度,則應(yīng)當(dāng)用P×(-5)的電機(jī)速度向后加速讓其豎直;并且,當(dāng)傾斜的角度很大時(shí),就應(yīng)當(dāng)用更大的電機(jī)馬達(dá)速度進(jìn)行平衡糾正。因此,將陀螺儀傳感器的當(dāng)前值反饋成機(jī)器人的電機(jī)馬達(dá)數(shù)據(jù),就可以設(shè)計(jì)出獨(dú)輪車。
獨(dú)輪車結(jié)構(gòu)
設(shè)計(jì)獨(dú)輪車結(jié)構(gòu)時(shí),要考慮重心位置在豎直中軸線上,圖2是一款獨(dú)輪車:在車的頂端安裝陀螺儀傳感器,并指定端口號(hào)為31。輪子兩側(cè)是兩個(gè)電機(jī)馬達(dá),而且只有一個(gè)電機(jī)馬達(dá)與輪子進(jìn)行連接,并指定端口號(hào)為1;另一個(gè)電機(jī)馬達(dá)不指定端口編號(hào),只用來(lái)保持重心的結(jié)構(gòu)對(duì)稱。
獨(dú)輪車程序
獨(dú)輪車在行走時(shí),機(jī)器人的車身狀態(tài)(傾斜狀態(tài))應(yīng)當(dāng)反饋到電機(jī)馬達(dá)中進(jìn)行平衡糾正,從而保持車身直立而不摔倒。這個(gè)過程可以用循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。
圖3是用Python語(yǔ)言完成的獨(dú)輪車虛擬機(jī)器人控制程序。第14行代碼表示用端口號(hào)為31的陀螺儀傳感器獲取獨(dú)輪車的傾斜角度值。第16行代碼表示將傾斜角度進(jìn)行數(shù)學(xué)比例放大。根據(jù)虛擬機(jī)器人軟件教程,10倍電機(jī)正轉(zhuǎn)的轉(zhuǎn)速范圍是0到1000(數(shù)學(xué)區(qū)間表達(dá)式為[0,1000])或反方向轉(zhuǎn)速范圍是-1000到0([-1000,0]),由于電機(jī)的馬達(dá)值不能無(wú)限大,因此第19行到22行代碼表示對(duì)超出范圍的數(shù)據(jù)進(jìn)行過濾。第25行代碼表示將最終的數(shù)據(jù)賦值給端口號(hào)為1的電機(jī)馬達(dá),從而驅(qū)動(dòng)獨(dú)輪車保持平衡。第28行表示采樣時(shí)間為20ms,即間隔一段時(shí)間后再進(jìn)行下一次的循環(huán)。在調(diào)試中,還需要讓獨(dú)輪車在啟動(dòng)時(shí)打破“靜止”狀態(tài),即需要有一定的初速度,因此第5行和第6行代碼將完成這項(xiàng)功能。
虛擬仿真
找一張?zhí)摂M機(jī)器人場(chǎng)景圖,將上述程序和機(jī)器人加載進(jìn)來(lái),就可以在仿真界面里觀察和調(diào)試獨(dú)輪車的運(yùn)行狀態(tài)。對(duì)于圖3中的控制程序,主要有兩個(gè)地方可以調(diào)試。
第一處是第8行的比例值,假定陀螺儀取值是[0,5],而期望電機(jī)馬達(dá)值為[0,100],對(duì)于線性變化,可以這樣求出變化比例P=(100-0)/(5-0)=20。如果獨(dú)輪車前后擺動(dòng)過于活躍而出現(xiàn)“摔倒”情況,就減小P值。
第二處是第28行的采樣時(shí)間,采樣間隔時(shí)間可短可長(zhǎng):如果太短,與計(jì)算機(jī)執(zhí)行一條指令的時(shí)間長(zhǎng)短等性能有關(guān);如果太長(zhǎng),表現(xiàn)為獨(dú)輪車摔倒后才糾正,顯然為時(shí)過晚。讓學(xué)生在思考中進(jìn)行調(diào)試,并與現(xiàn)實(shí)情況進(jìn)行比較,會(huì)發(fā)現(xiàn)控制程序的魅力。
算法拓展
PID控制(比例、積分、微分)是一種常用的用于機(jī)械裝置(如車輛、機(jī)器人、火箭)中的控制技術(shù)。用好PID控制,并不是一件容易的事,需要有相當(dāng)?shù)母叩葦?shù)學(xué)基礎(chǔ)和控制技術(shù)基礎(chǔ),對(duì)于小學(xué)、初中的學(xué)生來(lái)說(shuō),還是有些過于復(fù)雜,但通過簡(jiǎn)單的代碼和虛擬仿真技術(shù)讓學(xué)生從小了解和學(xué)習(xí)PID,對(duì)提升學(xué)生的科學(xué)素養(yǎng)有益處。PID有三部分,在圖3中,實(shí)現(xiàn)了P控制,即比例控制,文中還給出了調(diào)試方法和取值方法。對(duì)于積分和微分控制,讀者可以參考機(jī)器人PID巡線等算法進(jìn)行獨(dú)輪車平衡算法的深入研究。
參考文獻(xiàn)
中文樂高翻譯團(tuán)隊(duì). 用于樂高機(jī)器人的PID控制器[DB/OL]. [2011-8-28]. http://bbs. cmnxt. com/thread-5688-1-1. html.
孔祥宣. 自主式雙輪動(dòng)態(tài)平衡移動(dòng)機(jī)器人的控制系統(tǒng)研究[D]. 上海交通大學(xué),2007.
霍亮. 兩輪自平衡電動(dòng)車的關(guān)鍵技術(shù)研究[D]. 哈爾濱工程大學(xué),2010.
蘿卜圈仿真入門教程[DB/OL]. http: //www. irobotq. com/website2/dl. aspx.
(作者單位:浙江寧波市北侖區(qū)泰河中學(xué))