




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、摘要以六足機器人結(jié)構(gòu)套件為基礎(chǔ),搭建移動測控平臺,包括設(shè)計總體方案和各個模塊實現(xiàn)方案,設(shè)計和制作伺服電機(即舵機)主控制板和傳感器電路板,設(shè)計機器人行走方案并編程實現(xiàn),實現(xiàn)超聲波避障。采用細(xì)化的八步行走算法來實現(xiàn)行走控制,采用軸向舵機序號確定其他舵機運動方式和次序的方法進行行走方向的控制,這樣完成了對 18 個舵機的控制任務(wù),使得機器人能夠比較協(xié)調(diào)、流暢地行走,并且可以控制其任意的行進方向。主控制板能夠基本滿足需要,但還需進一步改善其穩(wěn)定性和可靠性,并增加功能組件如引導(dǎo)程序下載接口以及鍵盤等交互器件。進一步研究指南針和超聲波模塊在移動測控平臺上有效利用,并開發(fā)圖像處理及遠(yuǎn)程信息傳輸?shù)燃夹g(shù),使六
2、足野外機器人測控平臺有更廣闊的應(yīng)用空間??蓱?yīng)用于戶外環(huán)境參數(shù)監(jiān)測、特殊任務(wù)執(zhí)行、家庭助理等領(lǐng)域。關(guān)鍵詞:舵機 msp430 單片機 行走算法 超聲波傳感器AbstractSix feet robot is based on special robotic configuration including 18 servo-electro motors. My task is driving it to move, for I must first design the PCB, weld the PCB when it comes back, connect wires to the PCB a
3、nd programme. The robot at last moves smoothly, glidingly, in each direction I want it to, of its six. Before programming, arithmetic of eight-step is used to push the robot to go forward in one fixed direction. To make it generalization, I conclude the very arithmetic by which movements of every se
4、rvo-electromotor can be computed if the number of the direction servo-electromotor is given. The next task is that the robot can move in the direction which is judged as the best one after checking the environment by ultrasonic. Having a pair of eyes, the robot can see where the block is and where i
5、t can march over. The main controlling board is all right but it can be better if more steady and reliable, and if more functional parts is added as keyboards and the interface with Boot Strap Loader. It deserves to do further research at the moving measure-control plat of six feet robot on the use
6、of sensors as ultrasonic, compass modules. It is useful to develop the technologies of image management and remote info-transmission at the plat, too. The measure-control plat of six feet robot is widely used in measuring weather, doing special tasks, and as an assistant in house. Key word: servo-el
7、ectromotor msp430 stepped arithmetic ultrasonic sensor目錄目錄緒論緒論 .1 1第一章第一章機械結(jié)構(gòu)改裝及設(shè)計機械結(jié)構(gòu)改裝及設(shè)計.3 31.1原機械基礎(chǔ)上的改裝 .31.2設(shè)計加工的機械部分 .5第二章第二章電路板設(shè)計、制作與調(diào)試電路板設(shè)計、制作與調(diào)試.7 72.1總體設(shè)計 .72.2主板設(shè)計 .82.3傳感器板設(shè)計 .102.4電機穩(wěn)壓電路設(shè)計 .142.5安裝調(diào)試過程中的問題及解決 .16第三章第三章行走算法及程序細(xì)節(jié)行走算法及程序細(xì)節(jié).19193.1編號、建表 .193.2行走動作算法及動作細(xì)化 .203.3PPM 產(chǎn)生程序及其他.2
8、9第四章第四章 傳感器的使用傳感器的使用 .37374.1 超聲波傳感器的試驗.374.2系統(tǒng)流程 .39第五章第五章 總結(jié)總結(jié) .41415.1未完成的工作 .415.2六足機器人應(yīng)用前景探討 .41結(jié)束語結(jié)束語 .4242致謝致謝 .4343參考文獻(xiàn)參考文獻(xiàn) .4545緒論搭建六足野外機器人測控平臺-這就是本人畢設(shè)的工作要求。首先要做的控制 18 個舵機,使機器人能夠按照要求運動。在這個問題的解決上,可以說是完全想象的結(jié)果-想象著怎樣安排細(xì)化動作的步驟,怎樣利用摩擦力推動了機器人前進,就這樣形成了六足機器人的八步行走算法。讓機器人改變軸向從而改變前進方向的推導(dǎo)算法,是有價值的嘗試,其結(jié)果也
9、是令人欣慰的。當(dāng)然僅僅運動起來并不能成為一個測控平臺,機器人必須具備對環(huán)境的感知和適應(yīng)性。選用了超聲波傳感器和指南針傳感器分別作為感知周邊障礙和行進方向的檢測器件。麻省理工學(xué)院的人工智能實驗室的移動機器人小組做著和本人同類型的工作,但是他們的研究方法卻和本人的大相徑庭。他們對昆蟲發(fā)生了濃厚的興趣,他們認(rèn)為這些弱小的動物群體在復(fù)雜而又危險的環(huán)境中能夠得以生存是一個偉大的奇跡,而昆蟲的大腦在世界上卻是最小的,然而最小的大腦卻讓這些小蟲子有如此大的能力,以至于讓我們認(rèn)為最先進的機器人都無地自容。他們聯(lián)合其他的科研工作者提出了基于行為的機器人學(xué)。這一學(xué)科不但在學(xué)術(shù)界影響重大,而且被廣泛應(yīng)用于各種領(lǐng)域,
10、包括火星探測。研究方法很大程度上是客觀條件所決定的。這些研究人員有足夠的時間和財力來嘗試驗證,而本人的畢業(yè)設(shè)計時間只有區(qū)區(qū)兩、三月,還要做電路設(shè)計、供電設(shè)計以及加工絕緣層、支架這樣的瑣事,而畢業(yè)經(jīng)費也是幾百元而已。值得欣慰的是想象力終究綻放出了花朵,機器人前進的姿態(tài)竟和海龜游水一樣流暢,如果把其中的兩條腿當(dāng)作海龜?shù)念^部和尾部。還有一些可貴的設(shè)計思想,如用伺服電機帶動傳感器使傳感器電路設(shè)計難度及安裝難度大大降低。第一章 機械結(jié)構(gòu)改裝及設(shè)計1.1原機械基礎(chǔ)上的改裝 機器人機械骨架最初只有結(jié)構(gòu)組件、電機(伺服電機)以及電機引線,硬件電路都是后來加上去的,軟件也是自己編寫的。機器人骨架做的相當(dāng)完美,六
11、個方向軸中心對稱,鋼板質(zhì)堅而韌,整個機體能承載比較大的重量。仔細(xì)檢查,發(fā)現(xiàn)電機的安裝精度不太理想,這勢必給系統(tǒng)精度帶來很大影響。此時,首先要做的是重新安裝腿電機,因為其兩端極限位置及中心位置比較容易標(biāo)定,而臂電機和腳電機就不太容易重新安裝。如圖 1.1 所示腿電機的位置。 圖 1.1 電機命名分類之所以給電機命名分類,主要是方便寫行走步驟,詳細(xì)內(nèi)容請參考第三章。調(diào)整電機的方法是:先卸掉腿電機軸心固定螺釘(見圖 1.2) ,然后用十字安裝架調(diào)整電機軸心角度(見圖 1.3) ,可利用直角尺、鉛筆等工具保證精度。最后取掉十字安裝架、固定好圖 2.2 中所示螺釘。臂電機和腳電機的安裝誤差建議由軟件來修
12、正。腳電機上的引線比較短,這里進行了加長,用排線增加長度,熱縮管連接固定處。圖 1.4 所示的上腿關(guān)節(jié),白色塑料柱即為關(guān)節(jié)處,固定此處的螺釘松緊要合適,如果太松腿就會抖動得厲害,如果太緊,邁腿就會很艱難,邁腿的程度與電機輸出量不符。圖 1.2 調(diào)整電機(1)圖 1.3 調(diào)整電機(2)圖 1.4 上腿關(guān)節(jié)1.2設(shè)計加工的機械部分圖 1.5 機械加工的部分如上圖所示,機械加工的部分有:(1)在鋼板的上面加上絕緣隔板可以防止尖尖的焊點劃破鋼板漆層造成短路;(2)銅柱用來支撐主控板和傳感器支架,構(gòu)成電路主體骨架。(3)傳感器支架安裝傳感器電機,傳感器隨電機轉(zhuǎn)動 180,前后各置一個超聲波模塊,可以檢查
13、到周圍 360范圍情況。如圖 1.6。圖 1.6 傳感器安裝圖第二章 電路板設(shè)計、制作與調(diào)試2.1總體設(shè)計采用雙處理器,雙層結(jié)構(gòu)。下面圖 2.1 為其總體結(jié)構(gòu)圖。圖 2.1 六足機器人整體結(jié)構(gòu)設(shè)計圖下面對設(shè)計的主要特點作些說明,更詳細(xì)的闡述參見以后的章節(jié)。(1)主控制板和傳感器板分別有獨立的控制器(用了 MSP430F149),這樣的好處是傳感器模塊化,更容易移植到其他的系統(tǒng)中。使用 MSP430F149 的初衷是這款單片機有 10 個捕獲/比較寄存器(8 個 PWM 輸出) ,更容易對電機進行控制,并且有兩個串行通訊端口,為以后與電腦連接做準(zhǔn)備。(2)傳感器采用超聲波和指南針模塊,其中,超聲
14、波可以用來蔽障,而指南針采集到的方位數(shù)據(jù)不僅為機器人行走提供方向和目標(biāo)信息,還能形成總體模擬閉環(huán)控制,對行走的性能,比如直線性有直接的益處。(3)主控制板和傳感器板之間使用串行線連接通訊。兩根通訊線(一收一發(fā))加上電源線和地線,共四根線。(4)伺服電機驅(qū)動采用 PPM(脈沖比例調(diào)制)控制??刂贫丝谥苯佑蓡纹瑱C端口引出。(5)電機供電為 6V 穩(wěn)壓供電,而 18 個伺服電機啟動的瞬間所需電流將近3A,因此使用可以提供大電流的 LM2596 設(shè)計穩(wěn)壓電路。設(shè)計既可單電源供電,又可采用雙電源。使用 18 節(jié) 1300mah 鎳氫電池,6 串 3 并,達(dá)到:電壓 7.2V,可提供最大 23.4W 功率
15、輸出,并使用穩(wěn)壓電路至 6v 供給舵機,后使用 LM1117-33穩(wěn)壓至 3.3v 供給控制器;電源處抽頭給傳感器電路(穩(wěn)至 5v)或者單獨給主處理器及傳感器電路供電。 2.2主板設(shè)計 主控制板在設(shè)計之初,就將通用性作為一個重要的目標(biāo)考慮。六足機器人的主控板不僅可以提供六足的電機控制,還可以成為四足機器人、五自由度機械手的控制主板。MSP430F149 定時器的八個 PWM 輸出對于六足機器人來說沒有用處,但是對于使用 PPM 控制口較少的四足機器人(需要八個)和五自由度機械手(需要五個)來說可以直接利用定時器的這種功能,簡化編程工作。下面圖 2.2 為主控制器原理圖。從圖中可以看出設(shè)計的一些
16、特點:(1)PWM 輸出口為:P1 口五個 P1.0-P1.4;P4 口 8 個 P4.0-P4.7;P6 口五個 P6.3-P6.7;P5 口一個 P5.0.(2)P5.5 有個撥動開關(guān),增強了人機交互性,但是這個設(shè)計還可以改善,可以增加更多的撥動開關(guān)。(3)P5.4 口加了一個 LED,可以作為指示信號用。(4)所有 I/O 口(包括 PWM 輸出口和沒有用到的口)都接出來,備預(yù)留口。另外下圖中沒顯示的特點有:VCC、VCC_33、GND 都引出足夠的預(yù)留口,以供擴展電路功能用。(5)該開發(fā)板也可以作為通用單片機開發(fā)板用。圖 2.2 主控制器接口圖 下面看一下主板上供電設(shè)計,參考圖 2.3
17、。(1)電機可以和主板控制器共電源,也可以單獨供電,通過 J29 的通斷可以決定。單獨供電可以避免處理器受到眾多電機形成的躁聲干擾,推薦使用。不管采用哪種方式,對電機供電時,穩(wěn)壓到 6V 比較妥當(dāng)。這個 6V 穩(wěn)壓電路沒有設(shè)計到主控制板上,而是作為一個獨立的模塊設(shè)計出來的,下面將在 3.4 節(jié)詳細(xì)說明。(2)主處理器和電機有沒有上電,可以看發(fā)光二極管 D1、D3 有沒有點亮。(3)對噪聲的處理,加濾波器件。電源噪聲會給電路造成危害,因此在各級電源的兩端加 10uf 電容以濾波(圖中 C1、C2、C7) ;電機干擾要避免,在電機電源線間接 0.1u 的電容可以有效去除(圖中 C6、C8) ,并且
18、避免機器人中出現(xiàn)不接地的金屬件,否則會充當(dāng)天線的角色。 圖 2.3 電源供電設(shè)計2.3傳感器板設(shè)計六足機器人的傳感器設(shè)計有其獨特的地方,主要表現(xiàn)在它的形狀為圓形,在設(shè)計之初,主要考慮的問題是:(1) 用什么傳感器比較好? (2) 用幾個傳感器?如何分布?(3) 傳感器結(jié)構(gòu)是什么樣比較合理?針對這幾個問題,并考慮到市場情況和經(jīng)濟情況,主要有兩種解決方案:方案一:采用以前慣用的光電(紅外)傳感器,這也是最初想到的方案。有發(fā)射管和接收管分開和一體的兩種,但發(fā)射與接受一體的紅外傳感器對短距離測量效果佳(25mm 左右) ,不適合儼然龐然大物的六足機器人。采用發(fā)射和接收分開的紅外傳感器。這種傳感器比較便
19、宜,紅外發(fā)射管:0.5 元/個(優(yōu)質(zhì) 1.5 元/個) ;紅外接收管:3.5-4.0 元/個。但是測量距離仍然比較近,用 38khz 波調(diào)制的方法,距離在 40cm 內(nèi),所以要盡量安裝在鋼板架邊緣的位置,數(shù)量至少為 6個(只需要頂層水平面上的檢測) ,安裝在各小組電機的軸線上,為了提高測量精度,可以增加 6 個,在每兩個相鄰小組的中心線上。這么多傳感器分開在蠻大面積的邊緣,必須至少有 6 對收發(fā)傳感器,6 個傳感器小電路,連線的紛雜可想而知,連線多也會增加電路的不可靠性。方案二:采用超聲波測距模塊。該模塊可以提供從 3cm-1.8m 精確的距離測量。模塊是隨機器人機件一起買來,價格較貴(百元左
20、右) ,而且現(xiàn)存量不多。在不可能“以數(shù)量求質(zhì)量”的情形下,必須另辟蹊徑。如果使用電機使其轉(zhuǎn)動角度采集數(shù)據(jù),情況會怎樣?這個設(shè)想很巧妙,以前在做傳感器電路的時候沒有這樣設(shè)計過,值得一試。用步進電機還是伺服電機?步進電機可以轉(zhuǎn)過 360 度角,使用一個超聲波模塊即可。但是考察一下市場及技術(shù)資料,步進電機至少需要12v 供電電壓,因整體供電設(shè)計在 7.2-9.6v 之間,必須設(shè)計升壓電路(實際上也試驗了這塊電路) 。已經(jīng)確定方案中必定存在 6v 穩(wěn)壓模塊,過多的電壓轉(zhuǎn)換消耗系統(tǒng)功率,必然造成效率低下。而用伺服電機可以避免這個麻煩,而且其控制可以直接用主控制板上的伺服電機接口,驅(qū)動電路不用另外做,所以
21、伺服電機(舵機)是比較理想的選擇。 但是絕對位置量輸出的舵機只能轉(zhuǎn)動 180 度,要想測得一周的情況需要 2 個超聲波模塊。不用再猶豫,第二個方案值得實現(xiàn)。 圖 2.4超聲波模塊有四條引線,分別為:VCC:接 5V 直流電源。GND:接地。SIG2:觸發(fā)脈沖。SIG1:計時脈沖??刂品椒ㄊ牵簭?SIG2 輸入觸發(fā)脈沖(高電平的典型值為 10us)后,模塊自動發(fā)射 5 個 40khz 的超聲波,緊接著模塊自動把 SIG1 置高電平,直到收到回聲后才把 SIG1 置低,如果超時,模塊自動復(fù)位。通過計算這個 SIG1 的脈沖寬度就可以很容易計算出和目標(biāo)的距離。另外傳感器設(shè)計中用到了指南針模塊,目的是
22、通過方位確定達(dá)到系統(tǒng)模擬閉環(huán)的效果,并且可以為機器人日后完成更復(fù)雜的任務(wù)做準(zhǔn)備。相對于超聲波模塊控制簡單方便,指南針模塊似乎更復(fù)雜一些。下圖 3.5 為指南針模塊的引腳和原理。指南針傳感器通過地磁場的方向來確定自身的方向,內(nèi)部設(shè)置兩個軸:X 軸和 Y 軸,通過計算 X 軸和 Y 軸上的值來計算與地磁場之間的偏角。圖 2.5 指南針模塊引腳和原理由圖 3.1 的總體框圖,可知傳感器電路作為一個單獨的構(gòu)件,擁有自己的處理器。這樣在其供電設(shè)計中就需要兩路穩(wěn)壓,一路穩(wěn)至 5v 給傳感器模塊,另一路穩(wěn)壓至 3.3v 給 430 單片機。如下圖所示,傳感器電路分為穩(wěn)壓部分、單片機、傳感器接口部分、JTAG
23、 及串口通訊四個部分。這個設(shè)計有兩個主要的弊端:(1)指南針模塊供電應(yīng)為 5v,而這里給了 3.3v。同樣指南針模塊的高電平應(yīng)為 5v 左右,而這里達(dá)不到。(2)沒有引出備用引腳,單片機資源浪費。圖 2.6 傳感器電路圖對于第二個弊端,由圖 3.6 就很容易看出來,而對于第二個弊端,下面詳細(xì)探討一下,并找出了解決方案。下面為指南針模塊 HM55B 的技術(shù)資料,而開始設(shè)計時并沒有考慮到這一點。表 2.1 指南針模塊技術(shù)資料解決的辦法是:電源改接 5V,輸入信號三極管升壓(下圖) ,輸出信號分壓進單片機。圖 2.7 電平轉(zhuǎn)換2.4電機穩(wěn)壓電路設(shè)計LM2596-ADJ 用來穩(wěn)壓到 6V,給伺服電機供
24、電,同時也是給主控板供電。之所以選用這款芯片,主要是因為它能承載較大電流負(fù)載(3A) ,滿足 18 個伺服電機工作的需要。LM2596 還有其他型號的片子,可以穩(wěn)壓到 3.3V、5V、12V 等,而LM2596-ADJ 可以通過調(diào)節(jié)兩個電阻的比值來達(dá)到電壓穩(wěn)至某值的目的。圖 2.8 穩(wěn)壓芯片 LM2596-ADJ 資料圖 2.9 2596-6V 電路實現(xiàn)2596 的輸出電壓 Vout=Vref*(1+R2/R1)這里 Vref=1.23V,R1=1K,只要將 R2 調(diào)到 3.88K,就能使輸出電壓 Vout=6V。需要注意的問題:(1)肖特級管 D1 的選取,一定要選取承載電流較大的,市場上
25、5825 很難買到,可以用 5822 來代替,一般不要用 5819。(2)LM2596-ADJ 選用直插封裝,而不用貼片,為的是容易散熱,并且必須在 2596-ADJ 后面安裝散熱片。(3)前置電容 C1-470uF,后置電容 C2-220uF 均用電解電容,額定電壓 50V以上。(4)電感 L1 的取值認(rèn)真參考 LM2596 用戶手冊,實驗中 33uH-68uH 表現(xiàn)都不錯。一定要買額定電流 3A 的產(chǎn)品。2.5安裝調(diào)試過程中的問題及解決問題一:主控制板上的 LM1117-33 的 1-VIN、3-GND 引腳顛倒。電源部分應(yīng)該是焊板子的第一步,在檢查出來這部分是否正確的時候,最好不要焊其他
26、元件。而在開始焊上這部分后加電檢查時,發(fā)現(xiàn) 2 腳 VOUT 沒有電壓輸出。然后檢查與各個引腳連接的元件,發(fā)現(xiàn) 1117 的 1、3 引腳放置是反的。解決方案:焊接 LM1117-33 時字朝下反焊。LM1117 輸出 3.3V 電壓,正常。問題二:主控制板上 JTAG 上 1-TDO、3-TDI 顛倒,下不了程序。主控制板焊好之后連上下載器從電腦上下載簡單的實驗程序,卻下不了。顯示信息為找不到可下載器件,分析原因可能是 JTAG 下載器(也是自己焊的)、連接線或者主板上 JTAG接口的問題。對照電路圖逐一檢查,發(fā)現(xiàn)是主控制板上 JTAG 上 1-TDO、3-TDI 顛倒。解決方案:將下載線
27、1、3 線割開反過來連接。問題三:單片機下載熔絲燒斷,不能再下程序。JTAG 和下載線都是好的,單片機突然不能下程序了,提示語是熔絲燒斷!而且這樣的事情竟然在小組內(nèi)六足機器人和四足機器人的主控制板上均發(fā)生了兩次,也就是燒掉了四片 149!熔絲燒斷的 149 雖然不能下載程序,但是片內(nèi)的程序還可以讓機器人按照設(shè)定運動。為什么會燒,至今未找到原因。解決方案:第一次燒掉片子時,將片子用熱風(fēng)吹下來重新焊上新片子。當(dāng)同樣的事第二次發(fā)生在四足機器人上時(后來我的第二片也燒了) ,搭檔不敢再吹下片子,因為電路板是在西安本地做的,工藝水平不允許反復(fù)吹焊盤。尋找其他的解決方案,得知有一種下載器-Boot Str
28、ap Loader,是 JTAG 不能下載時的彌補方法。搭檔立即詢問利爾達(dá)杭州總部技術(shù)人員,并馬上到中工電子市場利爾達(dá)售貨點買回產(chǎn)品。這種下載器使用串口,只要簡單地引出幾條線接上,軟件也很容易掌握。 為什么 149 那么容易被燒?是 149 的原因還是主控制板的原因?有人認(rèn)為是單片機引腳與舵機驅(qū)動口直接連接造成大電流回流損傷單片機,建議將單片機引腳與舵機驅(qū)動口之間加上一個合適阻值的電阻,以后重新制版時可以考慮。還有單片機選型時可以換其他型號,如 MSP430F13X。問題四:該不該將板子直接接觸上了絕緣漆的金屬?開始連接電機試驗時,沒有加絕緣層就直接把焊點林立的電路板放到機器人結(jié)構(gòu)件上,這是噴
29、過漆的鋼板,放上去之前量了一下導(dǎo)電性,確認(rèn)了絕緣之后就毫無顧忌地放上去了。直到第一片 149 燒掉之后,分析可能是尖尖的焊點劃破薄薄的絕緣漆引起部分短路造成的。然后就立即找絕緣材料,一行三人冒雨到邊家村建材市場找到裝潢用的雙層塑料板,回到實驗室立即鋸、磨、鉆孔,絕緣隔板出來了,后來銅柱也加上了,不過還是沒有阻止第二片 149 繼續(xù)毀滅。那么絕緣板加的是不是多余的?筆者認(rèn)為絕緣板加上絕不是多余,如果沒有絕緣板,焊點劃破絕緣漆引起短路是很有可能的,防范還是必要的。第三章 行走算法及程序細(xì)節(jié)3.1編號、建表要把 18 個電機管理得井井有條并不是簡單的事,首先要做的就是給每個電機編個號(取個名字) ,
30、這樣就不用反復(fù)查找線的源頭,也方便建表及在編程過程中隨時查表對照。下圖為 18 個電機編號:圖 3.1 電機編號由上圖,將電機分為 6 個小組,編號是從 0 到 5,每一小組電機包括實現(xiàn)不同作用的三個電機。根據(jù)電機的作用不同,將電機分為下面三種:負(fù)責(zé)水平面上方向控制的電機:臂電機 有 1A、4A、1B、4B、1C、4C;負(fù)責(zé)上下動作的電機:腿電機 有 2A、5A、2B、5B、2C、5C;負(fù)責(zé)與地面摩擦的電機:腳電機 有 3A、6A、3B、6B、3C、6C。再根據(jù)每根線連的具體端口,就得到了下面的表:P4.0-6A-13P4.1-1C-4P4.2-4B-3P4.3-2C-10P4.4-5B-9P
31、4.5-3C-16P4.6-6B-15P4.7-6C-17P1.0-2B-8P1.1-4C-5P1.2-4A-1P1.3-1A-0P1.4-1B-2P6.3-3A-12P6.4-3B-14P6.5-5C-11P6.6-5A-7P6.7-2A-6表 3.1 端口-編號對應(yīng)表3.2行走動作算法及動作細(xì)化必須分工合作,3 只腿脫離地面運動的時候必須有三只腿支撐地面。這樣將6 個小組又組合成兩大組,相隔的三個為一組。這樣編號為 0、2、4 的為一組,1、3、5 為另一組。當(dāng)將第一組抬起時,第二組必須支撐地面;抬起的第一組臂和腳向前運動;第一組放下接觸地面后電機恢復(fù)原來的位置,這樣就產(chǎn)生了可以推動機器人
32、前進的摩擦力;第一組放下時,第二組抬起來動作。這就是設(shè)計動作時最初的想法最初動作簡化得到的五步法很粗陋,動作也不協(xié)調(diào),但是它對于動作的形成有直接的作用。五步法的步驟為:第一步:抬第一組腿和腳;第二步:放第一組腿,抬第二組腿和腳;第三步:蹬第一組腳;第四步:放第二組腿;第五步:蹬第二組腳。可以看出,這里沒有加臂電機的動作,放第一組腿和抬第二組腿在一個動作里,必然造成動作的僵硬。但是這些都沒有關(guān)系,只要驗證這個思路是正確的,機器人能向前挪動,哪怕一點點,就算是成功了。但是結(jié)果出來卻不盡如人意,機器人只是在原地扭動,絲毫前進不了。為什么呢?仔細(xì)看動作和腳的形態(tài),發(fā)現(xiàn)了一個似乎幼稚的問題:機器人每組的
33、三只腳與地面之間的摩擦力合力為零!因為其動作關(guān)于圓中心對稱。這個案例在以后的設(shè)計中時刻提醒我:一定要注意細(xì)節(jié),每個電機動作的細(xì)微之處與其他電機或許是不同的。修改了動作細(xì)節(jié)之后,按照預(yù)想的樣子,機器人爬起來了,動作笨拙,但是它的確在前進。接下來要做的就是更加細(xì)化動作,使機器人的運動更加協(xié)調(diào)連貫。這樣就形成了八步法,加上了臂電機的運動。下面具體講一下八步法的實現(xiàn),結(jié)合程序中的一些定義。假設(shè)初始狀態(tài)時電機均處于中心位置。確定一個軸向,比如以第 4 小組為軸向。以下是八步法的動作具體步驟:第一步:抬第一組腿。2C 前腿上抬至某處- Terminal_UP_2。2B、2A 后腿上抬至某處- Termin
34、al_UP_2。 第二步:抬第一組腳,并旋轉(zhuǎn)第一組臂。3C 前腳上抬至某處- Terminal_UP_3。3B、3A 后腳反方向抬至某處- Terminal_DW_3。1B (處于軸向左邊)順時針旋轉(zhuǎn)至某處- Terminal_CLK_1。1A (處于軸向右邊)逆時針旋轉(zhuǎn)至某處- Terminal_ATCLK_1。 第三步:放下第一組腿。2C 前腿回到中心位置- Center_Position_2。2B、2A 后腿回到中心位置- Center_Position_2。 第四步:抬第二組腿5C、5B、5A 上抬至某處- Terminal_UP_2。 第五步:抬第二組腳,并旋轉(zhuǎn)第二組臂。6B、6C
35、抬起至某處- Terminal_UP_3。6A 反方向抬起至某處- Terminal_DW_3。4B (處于軸向左邊)順時針旋轉(zhuǎn)至某處- Terminal_CLK_1。4C (處于軸向右邊)逆時針旋轉(zhuǎn)至某處- Terminal_ATCLK_1。 第六步:蹬第一組腳,并旋轉(zhuǎn)第一組臂回原位。3C 前腳向前扒地-Center_Position_3。3B、3A 后腳向后蹬地-Center_Position_3。1B (處于軸向左邊)逆時針旋轉(zhuǎn)回初始位置-Center_Position_1。1A (處于軸向右邊)順時針旋轉(zhuǎn)回初始位置-Center_Position_1。 第七步:放第二組腿。5C、5B、
36、5A 回到初始位置- Center_Position_2。第八步:蹬二組腳,并旋轉(zhuǎn)第二組臂回原位。6B、6C 前腳向前扒地- Center_Position_3。6A 后腳向后蹬地- Center_Position_3。4B (處于軸向左邊)逆時針旋轉(zhuǎn)回原位- Center_Position_1。4C (處于軸向右邊)順時針旋轉(zhuǎn)回原位- Center_Position_1。 這里的有關(guān)變量的定義為:#define Center_Position_1 308 /臂電機的中心位置量。#define Center_Position_2 300 /腿電機的中心位置量。#define Center_Po
37、sition_3 320 /腳電機的中心位置量。#define Step_1 35 /臂電機轉(zhuǎn)動的偏角。#define Step_2 130 /腿電機轉(zhuǎn)動的偏角。#define Step_3 50 /腳電機轉(zhuǎn)動的偏角。#define Terminal_UP_3 Center_Position_3 + Step_3 /腳電機上抬的終點量。#define Terminal_DW_3 Center_Position_3 - Step_3 /腳電機下置的終點量。#define Terminal_UP_2 Center_Position_2 - Step_2 /腿電機上抬的終點量(常用) 。#defin
38、e Terminal_UU_2 Center_Position_2 + Step_2 /腿電機上抬的終點量(不常用) 。#define Terminal_ATCLK_1 Center_Position_1 + Step_1 /臂電機逆時針轉(zhuǎn)動的終點量。#define Terminal_CLK_1 Center_Position_1 - Step_1 /臂電機順時針轉(zhuǎn)動的終點量。 顯然是把這些量作為全局變量在主函數(shù)的開始預(yù)定義。同樣還有對應(yīng)舵機舵盤在個位置的值,定義一個數(shù)組 PWM_Duty18來完成。Unsigned int PWM_Duty18 = Center_Position_1, Ce
39、nter_Position_1, Center_Position_1, Center_Position_1, Center_Position_1, Center_Position_1, Center_Position_2, Center_Position_2, Center_Position_2, Center_Position_2, Center_Position_2, Center_Position_2, Center_Position_3, Center_Position_3, Center_Position_3, Center_Position_3, Center_Position_3
40、, Center_Position_3;以上定義的共同特點是將 18 個電機看作 3 種電機(臂、腿、腳)而對于同樣的如臂電機不加區(qū)分。好處是方便編程,但是由于安裝等問題,即使同樣作用的電機也會有差異性,這種差異性如果在軟件上來修正是比較恰當(dāng)?shù)?,效果也會更好。留給日后的師弟師妹們來做。這樣編程出來,前進的動作蠻完美。然后就想到怎么使機器人按任意軸向前進,也就是怎樣運用歸納法得出一般性的算法。定義出下面幾個變量,由 Mode的值來計算其他變量的值。Mode,Mode_couple,pwm_0,pwm_1,pwm_2,pwm_3,pwm_4,pwm_5,pwm_6,pwm_7,pwm_8,pwm_
41、9, pwm_10,pwm_11,pwm_12,pwm_13,pwm_14,pwm_15。在上面的以第 4 小組為軸向的例子中,看看怎樣用變量來代替原來確定的電機(由編號來表示) 。Mode=4, Mode_couple 是與第四小組沿直徑關(guān)于中心對稱的小組編號,參見圖3.1 可知是第一小組,所以 Mode_couple1。pwm_0-2Cpwm_1-2Bpwm_2-2Apwm_3-3Cpwm_4-3Bpwm_5-3Apwm_6-1Bpwm_7-1Apwm_8-5Apwm_9-5Bpwm_10-5Cpwm_11-6Apwm_12-6Bpwm_13-6Cpwm_14-4Bpwm_15-4C表 3
42、.2 一般性變量代替表 然后要做的事就是根據(jù) Mode 的值計算出這些變量的值。程序中的Compute_pwmN()函數(shù)就是完成這項任務(wù)的函數(shù)。void Compute_pwmN(void) pwm_0 = Mode + 6; pwm_3 = Mode + 12; if(Mode 3) pwm_1 = pwm_0 - 4; pwm_2 = pwm_0 - 2; pwm_4 = pwm_3 - 4; pwm_5 = pwm_3 - 2; pwm_6 = Mode - 4; /保證 pwm_6 在軸向左邊 pwm_7 = Mode - 2; /保證 pwm_7 在軸向右邊 else pwm_1 =
43、 pwm_0 + 2; pwm_2 = pwm_0 - 2; pwm_4 = pwm_3 + 2; pwm_5 = pwm_3 - 2; pwm_6 = Mode + 2; /保證 pwm_6 在軸向左邊 pwm_7 = Mode - 2; /保證 pwm_7 在軸向右邊 if(Mode = 3) Mode_couple = Mode - 3; else Mode_couple = Mode + 3; pwm_8 = Mode_couple + 6; pwm_11 = Mode_couple + 12;/Mode_couple 定義與軸向相對的腿,以此好計算出第二組腿。注意Mode_coupl
44、e 的左/邊就是 Mode 軸向的右邊。 if(Mode_couple 3) pwm_9 = pwm_8 - 2; pwm_10 = pwm_8 - 4; pwm_12 = pwm_11 - 2; pwm_13 = pwm_11 - 4; pwm_14 = Mode_couple - 2; /pwm_14:軸向的左邊 pwm_15 = Mode_couple - 4; /pwm_15:軸向的右邊 else pwm_9 = pwm_8 - 2; pwm_10 = pwm_8 + 2; pwm_12 = pwm_11 - 2; pwm_13 = pwm_11 + 2; pwm_14 = Mode_
45、couple - 2; /pwm_14 軸向的左邊 pwm_15 = Mode_couple + 2; /pwm_15 軸向的右邊 這樣前進一步的動作細(xì)化(分為八步)程序可以寫出來了。PWM_Duty18是一個數(shù)組,用來定義分別控制 18 個電機的 PPM 脈沖寬度對應(yīng)值。PWM_Duty0- PWM_Duty17的順序?qū)?yīng)圖 4.1 的編號序列。void SetPWM_Duty(void) static unsigned char flag = 1; /設(shè)置標(biāo)志 flag,目的是動作分步。 static unsigned char elong = 0; /設(shè)置標(biāo)志 elong,目的是延長步與
46、步之間的時間,使動作舒緩。/-下面兩句可以用作幅度不大的轉(zhuǎn)向。-/ / PWM_DutyMode = Center_Position_1 + 15; PWM_DutyMode_couple = Center_Position_1 + 10; /修正尾舵中心值 if(elong 3) elong +; else if(flag = 1) /第一步,抬第一組腿,pwm_0及對應(yīng)的臂和腳為軸 PWM_Dutypwm_0 = Terminal_UP_2; PWM_Dutypwm_1 = Terminal_UP_2; PWM_Dutypwm_2 = Terminal_UP_2; flag+; elong
47、 = 0; else if(flag = 2) /第二步,抬第一組腳+旋轉(zhuǎn)第一組臂 PWM_Dutypwm_3 = Terminal_UP_3; /前腳 UP 上抬 PWM_Dutypwm_4 = Terminal_DW_3; /后腳 DW 上抬 PWM_Dutypwm_5 = Terminal_DW_3; /后腳 DW 上抬 PWM_Dutypwm_6 = Terminal_CLK_1; PWM_Dutypwm_7 = Terminal_ATCLK_1; /右邊的臂逆時針旋轉(zhuǎn) flag+; elong = 0; else if(flag = 3) /第三步,放第一組腿。本來第三步和第四步合在
48、一起,但是那樣動作在換腿的時候聲音很大,對機械的損傷也大。 PWM_Dutypwm_0 = Center_Position_2; PWM_Dutypwm_1 = Center_Position_2; PWM_Dutypwm_2 = Center_Position_2; flag+; elong = 0; else if(flag = 4) /第四步,抬第二組腿 PWM_Dutypwm_8 = Terminal_UP_2; PWM_Dutypwm_9 = Terminal_UP_2; PWM_Dutypwm_10 = Terminal_UP_2; flag+; elong = 0; else i
49、f(flag = 5) / 第五步,抬第二組腳+旋轉(zhuǎn)第二組臂 PWM_Dutypwm_11 = Terminal_DW_3; PWM_Dutypwm_12 = Terminal_UP_3; PWM_Dutypwm_13 = Terminal_UP_3; PWM_Dutypwm_14 = Terminal_CLK_1;/軸向左邊的順時針轉(zhuǎn) PWM_Dutypwm_15 = Terminal_ATCLK_1; /軸向右邊的逆時針轉(zhuǎn) flag+; elong = 0; else if(flag = 6) /第六步,蹬第一組腳+旋轉(zhuǎn)第一組臂,這是第二步的逆動作,目的是借助摩擦力推動機器人。 PWM_D
50、utypwm_3 = Center_Position_3; /第一次利用摩擦力前進 PWM_Dutypwm_4 = Center_Position_3; PWM_Dutypwm_5 = Center_Position_3; PWM_Dutypwm_6 = Center_Position_1; /第二次利用摩擦力前進 PWM_Dutypwm_7 = Center_Position_1; flag+; elong = 0; else if (flag = 7) /第七步,放第二組腿 PWM_Dutypwm_8 = Center_Position_2; PWM_Dutypwm_9 = Center_
51、Position_2; PWM_Dutypwm_10 = Center_Position_2; flag+; elong = 0; else if(flag = 8) /第八步,蹬第二組腳+旋轉(zhuǎn)第二組臂,是第五步的逆動作,仍然借助摩擦力推動機器人。 PWM_Dutypwm_11 = Center_Position_3; /第三次利用摩擦力前進 PWM_Dutypwm_12 = Center_Position_3; PWM_Dutypwm_13 = Center_Position_3; PWM_Dutypwm_14 = Center_Position_1; /第四次利用摩擦力前進 PWM_Dut
52、ypwm_15 = Center_Position_1; flag = 1; elong = 0; 3.3PPM 產(chǎn)生程序及其他 產(chǎn)生 PPM 波可以利用定時器產(chǎn)生 PWM 波的方法,MSP430F149 有兩個定時器TimerA 圖 3.2 PPM 控制伺服電機原理和 TimerB,可以同時產(chǎn)生八路 PWM 輸出,其中,TimerA 產(chǎn)生兩路,TimerB 產(chǎn)生六路。但是這樣仍不能滿足六足機器人行走需要。并且當(dāng)使用定時器的這一功能時,TA0(P1.1),TB0(P4.0)就不能作為 PWM 輸出口。故采用另一種 PWM 產(chǎn)生方式:即用純軟性 for 循環(huán)來產(chǎn)生,用到定時器 B 的中斷功能。
53、下面的程序是如何產(chǎn)生 18 路 PPM 波及初值是如何裝載的。其中 TBCCR0 中斷子程序用中斷的方式產(chǎn)生周期為 20ms 的波,而 InitServo()函數(shù)是如何規(guī)定定時器 B 以及如何使用簡單的 for 循環(huán)語句產(chǎn)生高電平為 1.5ms 的 PPM 波,即達(dá)到初始化電機的目的,而 Servo_Control()函數(shù)是 PWM_Duty值載入的過程,采用順序掃描的方式,輪流裝載。/TBCCR0 中斷子程序#pragma vector = TIMERB0_VECTOR_interrupt void TimerB_CCR0() /每約 20ms 中斷一次 _BIC_SR_IRQ(CPUOFF
54、); /退出時喚醒 CPU void InitServo() unsigned int h,l; /PWM 波高電平持續(xù)時間變量和低電平持續(xù)時間變量 unsigned char i; /計數(shù)器,使得電機保持垂直站立約 2 秒 / unsigned int high; /定時器,定時 PPM 的脈沖寬度 P4DIR |= 0XFF; /P4 口全作為輸出,輸出 8 路 PPM 波給舵機 P4OUT = 0X00; /P4 口清零 P1DIR |= 0XFF; /P1 口 1.0-1.4 輸出 5 路 PPM P1OUT = 0X00; /P1 口清零 P6DIR |= 0XFF; /P6 口 6
55、.3-6.7 輸出 5 路 PPM P6OUT = 0X00; / P6 口清零 for(i=0;i10;i+) P4OUT = 0XFF; /P4 口全輸出高,對應(yīng) PPM 高電平部分開始 P1OUT = 0XFF; /P1 口全輸出高,對應(yīng) PPM 高電平部分開始 P6OUT = 0XFF; /P6 口全輸出高,對應(yīng) PPM 高電平部分開始 for(h=0;hPWM_Duty17;h+); /高電平持續(xù)約 1500us,即對應(yīng)舵機舵盤處在中間位置 P4OUT = 0X00; /P4 口全輸出低,對應(yīng) PPM 低電平部分開始 P1OUT = 0X00; /P1 口全輸出低,對應(yīng) PPM 低電
56、平部分開始 P6OUT = 0X00; /P6 口全輸出低,對應(yīng) PPM 低電平部分開始 for(l=0;l5000;l+); /低電平持續(xù)約 20ms TBCTL |= TBSSEL_1 + TBCLR; /TIMER_B 時鐘源設(shè)為 ACLK,并清 TAR TBCCR0 = 655; /CCR0 中斷周期約為 20ms TBCCTL0 |= CCIE; /允許 CCR0 中斷 TBCTL |= MC_1; /TIMER_B 工作于增計數(shù)方式 /電機控制程序 void Servo_Control() unsigned int high; P4OUT |= BIT0; /P4_0 輸出 1,對
57、應(yīng)第 1 路 PPM 輸出的高電平開始 for(high=0;highPWM_Duty13;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_0 輸出 0,對應(yīng)第 1 路 PPM 輸出的低電平開始 P4OUT |= BIT1; /P4_1 輸出 1,對應(yīng)第 2 路 PPM 輸出的高電平開始 for(high=0;highPWM_Duty4;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_1 輸出 0,對應(yīng)第 2 路 PPM 輸出的低電平開始 P4OUT |= BIT2; /P4_2 輸出 1,對應(yīng)第 3
58、路 PPM 輸出的高電平開始 for(high=0;highPWM_Duty3;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_2 輸出 0,對應(yīng)第 3 路 PPM 輸出的低電平開始 P4OUT |= BIT3; /P4_3 輸出 1,對應(yīng)第 4 路 PPM 輸出的高電平開始 for(high=0;highPWM_Duty10;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_3 輸出 0,對應(yīng)第 4 路 PPM 輸出的低電平開始 P4OUT |= BIT4; /P4_4 輸出 1,對應(yīng)第 5 路 PPM
59、 輸出的高電平開始 for(high=0;highPWM_Duty9;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_4 輸出 0,對應(yīng)第 5 路 PPM 輸出的低電平開始 P4OUT |= BIT5; /P4_5 輸出 1,對應(yīng)第 6 路 PPM 輸出的高電平開始 for(high=0;highPWM_Duty16;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_5 輸出 0,對應(yīng)第 6 路 PPM 輸出的低電平開始 P4OUT |= BIT6; /P4_6 輸出 1,對應(yīng)第 7 路 PPM 輸出的高
60、電平開始 for(high=0;highPWM_Duty15;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_6 輸出 0,對應(yīng)第 7 路 PPM 輸出的低電平開始 P4OUT |= BIT7; /P4_7 輸出 1,對應(yīng)第 8 路 PPM 輸出的高電平開始 for(high=0;highPWM_Duty17;high+); /延時一段時間,對應(yīng) PPM 的脈沖寬度 P4OUT = 0X00; /P4_7 輸出 0,對應(yīng)第 8 路 PPM 輸出的低電平開始 P1OUT |= BIT0; /P1_0 輸出 1,對應(yīng)第 9 路 PPM 輸出的高電平開始
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年自動化儀表項目發(fā)展計劃
- 醫(yī)療機構(gòu)執(zhí)業(yè)醫(yī)師崗位全職聘用及醫(yī)療設(shè)備更新改造合同
- 系統(tǒng)安全審計補充協(xié)議
- 城市更新拆遷補償款分配與離婚房產(chǎn)分割協(xié)議書
- 有機嬰幼兒奶粉品牌授權(quán)與銷售渠道拓展協(xié)議
- 文旅產(chǎn)業(yè)投資基金合作管理協(xié)議
- 展覽會現(xiàn)場藝術(shù)品鑒定及補充服務(wù)協(xié)議
- 虛擬角色影視制作租賃合同及版權(quán)轉(zhuǎn)讓協(xié)議
- 2025年運載火箭遙測系統(tǒng)檢測設(shè)備項目建議書
- 科技研發(fā)人員兼職競業(yè)限制與成果歸屬協(xié)議
- 從偏差行為到卓越一生3.0版
- 江蘇省小學(xué)科學(xué)實驗知識競賽題庫附答案
- 單元三 防火防爆技術(shù) 項目三 點火源控制 一、化學(xué)點火源
- 2024網(wǎng)站滲透測試報告
- JTT663-2006 公路橋梁板式橡膠支座規(guī)格系列
- 電纜管廊敷設(shè)施工方案及流程
- 中風(fēng)的早期識別和急救處理方法
- pets5歷年真題(口語)
- 高速公路投訴培訓(xùn)課件
- 《天然藥物化學(xué)》課程標(biāo)準(zhǔn)
- 本科畢業(yè)論文寫作指導(dǎo)講座課件
評論
0/150
提交評論