步行機(jī)器人教師教學(xué)案_第1頁
步行機(jī)器人教師教學(xué)案_第2頁
步行機(jī)器人教師教學(xué)案_第3頁
步行機(jī)器人教師教學(xué)案_第4頁
步行機(jī)器人教師教學(xué)案_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第一章裝配步行機(jī)器人需要的工具搭建步行機(jī)器人需要以下工具:(包含在零配件中)步驟1:安裝頂部的 傾斜”伺服電機(jī)圖1-1安裝傾斜伺服電機(jī)需要以下配件:4顆M3x8盤頭螺釘4顆普通M3螺母用螺絲刀取出電機(jī)連接部件和電機(jī)輸出軸之間的螺釘,將電機(jī)連接部件從電 機(jī)輸出軸上取下來。保存好螺釘及電機(jī)連接件,以備后面使用。如圖1-1所示,正確安裝步行機(jī)器人的伺服電機(jī)。用 4個M3x8盤頭螺釘和 4個普通M3螺母將其固定。最簡單的方法是用一只手扶螺母另一只手?jǐn)Q螺絲刀。步驟2:安裝底部的“跨步”伺服電機(jī)圖1-2安裝跨步伺服電機(jī)需要以下配件:4顆M3x8盤頭螺釘4顆普通M3螺母1顆步行機(jī)器人的伺服電機(jī)用螺絲刀取出電

2、機(jī)連接部件和電機(jī)輸出軸之間的螺釘,將電機(jī)連接部件從電 機(jī)輸出軸上取下來。保存好螺釘及電機(jī)連接件,以備后面使用。如圖1-2所示,正確安裝步行機(jī)器人的底部伺服電機(jī)。用 4個M3x8盤頭螺 釘和4個普通M3螺母將其固定。步驟3:伺服電機(jī)歸中的電氣調(diào)整需要以下配件:電池盒4只AA電池用口線(RS-232 DB-9 and straight-through)Keil編譯軟件:伺服電機(jī)歸中的調(diào)整應(yīng)該在步行機(jī)器人的其它組裝之前進(jìn)行, 這樣可避免之后編寫程序時出現(xiàn)一些問題。切不能缺省這一步,它可使后面的調(diào)整更加容易。將兩個伺服電機(jī)的連接插頭插入步行機(jī)器人電路板的P12和P13插針。字母B對應(yīng)著伺服電機(jī)的黑色導(dǎo)

3、線,參考圖 1-3。接下來,將4節(jié)電池裝入電池盒中,并將電源的開關(guān)撥至0位。電池盒的插 頭和電路板插孔相連,其中開關(guān)旁邊的排針要用跳線帽來選擇電機(jī)供電電源。使用一根用口線,將步行機(jī)器人的電路板與計算機(jī)相連,ISP下載線與十針 的排線座子相連。伺服電機(jī)的線與插接到3針的排針上,順序是:黑線對應(yīng)標(biāo)有 B的一端。機(jī)器人的電源開關(guān)有3種位置。每一位置對應(yīng)著一種狀態(tài)。三種位置中的1” 對應(yīng)給伺服電機(jī)外所有電路提供電源。位置0”一-不提供電源;位置1” 一-為步行機(jī)器人電路板提供電源;位置2” 一-為電路板、伺服電機(jī)等所有元件提供電源。步驟4:安裝伺服角需要以下配件:兩個伺服電機(jī)連接角2顆將伺服角安裝到伺

4、服電機(jī)上的黑色小螺絲伺服角與伺服電機(jī)通過齒形槽連接,利用步驟1和步驟2中取出的螺絲將連接 件固定在伺服電機(jī)上。步驟5:在跨步伺服電機(jī)上安裝黃銅夾頭需要以下配件:2個黃銅夾頭(黃銅支架,固定螺絲和金屬扣眼-也稱為E-Z連接器)2個M2x5螺絲將兩個黃銅夾頭安裝在跨步伺服電機(jī)連接件最外端的兩個孔上(如圖1-5所示,安裝在伺服電機(jī)白色塑料連接件的兩端)。用鉗子將橡膠夾頭壓入黃銅夾頭 內(nèi),再用兩個M2x5螺絲將其固定,使其不會脫離。(如圖1-6所示)。圖1-5在踏步電機(jī)上安裝黃銅夾頭 圖1-6固定黃銅夾頭3 / 58圖1-7安裝頂板步驟6:安裝頂板需要以下配件:步行機(jī)器人的頂板4顆M3x8平頭螺釘4顆

5、普通M3螺母如圖1-7所示,在步行機(jī)器人支架上安裝 頂板。一只手將M3x8平頭螺釘從頂板上方穿 過頂板及機(jī)器人身軀上對應(yīng)的孔,另一只手將 M3的螺母旋入螺釘,然后將其擰緊。重復(fù)以上 步驟直至頂板安裝完畢。注意:這一步用到的 是M3x8平頭螺釘,而不是平底的圓頭螺釘。步驟7:安裝身軀與腿之間的不銹鋼連接桿需要以下配件:77毫米長金屬圓桿 四個5塑料墊圈如圖1-8所示,將兩根金屬圓桿分別穿過步行機(jī)器人支架上對應(yīng)的兩個孔, 然后在桿的兩端分別上一個墊圈。墊圈可減小步行機(jī)器人與身體之間的摩擦。圖1-8安裝連接桿圖1-9安裝四條腿步驟8:在步行機(jī)器人的身體上安裝雙腿需要以下配件:四只步行機(jī)器人的腿如圖1

6、-9所示,將步彳T機(jī)器人的4條腿分別安裝在兩根金屬圓柱桿上步驟9:用軸環(huán)固定腿部需要以下配件:四個帶有固定螺絲的軸環(huán)4顆M3x5螺絲在配件中找到金屬軸環(huán)并將其套在金屬圓桿的兩端。 如圖1-10所示,用M3x5 螺絲將每一個軸環(huán)固定在金屬桿上。 如果螺絲擰的不夠緊,則在感覺到有阻力的 情況下再轉(zhuǎn)過一個很小的角度,這樣的松緊程度最為合適。但如果擰的太緊,它 可能阻礙伺服電機(jī)的正常工作,致使步行機(jī)器人不能很好的行走。圖1-10安裝軸環(huán)步驟10:安裝兩腿間的連接件需要以下配件:2個白色塑料墊圈(也稱為E-Z調(diào)節(jié)角質(zhì)托架)2顆M3x15盤頭螺釘,2顆M2x5螺釘2顆M3防松螺母2個黃銅直角金屬桿圖1-1

7、1加裝直角托架圖1-12連接四條腿這一步分為兩個子步驟:首先,如圖1-11所示用一顆M3x15盤頭螺釘和一顆防松螺母將機(jī)器人左腿 與塑料直角托架連接起來,再用一顆 M3x15盤頭螺釘和一顆防松螺母將機(jī)器人 右腿與塑料直角托架連接起來。擰螺絲時,注意確保托架與螺絲在兩腿部件上有 足夠的旋轉(zhuǎn)空間可進(jìn)行180度的旋轉(zhuǎn)。取出兩根直角黃銅線,將黃銅線較長的一端穿過黃銅墊圈,如圖1-12所示。 然后將黃銅線較短的一端穿過塑料直角托架。 用手扶住黃銅線,并用M2x5螺絲 將其固定到黃銅夾頭上。調(diào)整連接,保證兩條腿沒有傾斜,并能垂直的站立。假如你需要或者伺服電 機(jī)被移動過,你可以再次校正伺服電機(jī)的中心位置。

8、重復(fù)以上步驟,調(diào)整機(jī)器人 的另一只腳。步驟11:加裝步行機(jī)器人的腳踝需要以下配件:2個腳踝配件4個M2x10盤頭螺釘普通M2螺母圖1-13加裝腳踝如圖1-13所示,用4顆M2x10盤頭螺釘將腳踝加裝到步行機(jī)器人腿上。腳 踝較長的一端應(yīng)朝向步行機(jī)器人腿的后方, 這樣有利于步行機(jī)器人前進(jìn)過程中重 心的調(diào)整,可以更好的控制機(jī)器人。步驟12:安裝步行機(jī)器人的雙腳需要以下配件:步行機(jī)器人的左腳和右腳4顆普通M3x8螺釘中號十字螺絲刀圖1-14加裝腳板如圖1-14所示,將步行機(jī)器人腳踝安裝在步行機(jī)器人腳掌上的第2個大孔上。如果太緊,可以將雙腳稍微向外側(cè)彎曲。用兩顆M3x8螺釘(這種螺釘不宜安裝過緊,安裝完

9、畢后用手轉(zhuǎn)動一下,確 保能夠容易轉(zhuǎn)動)在步行機(jī)器人腳踝上加裝左腳底板。然后以同樣的方法安裝步 行機(jī)器人的右腳底板。為其寫入程序前,確保每一只腳都能自由傾斜。步驟13:安裝傾斜桿需要以下配件:2根直徑2mm不銹鋼桿,兩端有螺紋4個帶有螺紋的半圓形接頭在不銹鋼桿的兩端分別旋入2個半球形接頭,調(diào)整半圓形接頭旋入程度, 者之間的連接距離比步行機(jī)器人直立狀態(tài)下電機(jī)連接件最外側(cè)孔到腳掌最外側(cè) 小孔間的距離稍長一點(diǎn)最為合適。這樣有利于機(jī)器人拐彎時腳緊貼在地面上。以相同的方法加裝另一根傾斜桿。圖1-15帶螺紋的半球形接頭圖圖1-16加裝好的傾斜桿步驟14:固定傾斜桿需要以下配件:4顆M2x10螺釘4個M2螺母

10、4個3塑料墊片如圖1-17所示,用M2x10螺絲將傾斜桿的半圓形接頭固定到電機(jī)連接件最 外側(cè)的孔上,注意在電機(jī)連接件和半圓形接頭之間墊上3塑料墊片,并且螺絲不能擰太緊。兩根傾斜桿分別裝到電機(jī)連接件兩側(cè)的孔上。如圖1-18所示,用M2x10螺絲將傾斜桿的另一半圓形接頭固定到步行機(jī)器 人腳掌最外側(cè)的孔上,注意二者之間需墊上 3塑料墊片,然后將兩顆 M2螺母 擰到螺絲上,用2顆螺母是由于它們自身可以形成自鎖,這樣機(jī)器人運(yùn)動時螺母不易脫落。用相同的方法將另一根傾斜桿連接到機(jī)器人另一腳掌上。步行機(jī)器人的微調(diào):當(dāng)步行機(jī)器人的身體略往后傾斜時,步行機(jī)器人的性能是最佳的。也就是說,當(dāng)兩臺伺服電機(jī)都處在中心位置

11、時, 步行機(jī)器人的雙腳是 平站在地面上的或者略微的有一點(diǎn)向后傾斜。圖1-17安裝傾斜桿圖1-18半圓形接頭和腳掌的連接檢查機(jī)器人時,首先要確定步行機(jī)器人的雙腳平站在地面上, 或者略向前傾 斜。如果需要再一次調(diào)整其他硬件,可以利用AT89S52®新調(diào)整伺服電機(jī)的中心 位置。步驟15:安裝電池盒需要以下配件:電池盒2顆M3x8平頭螺釘2顆普通M3螺母將步行機(jī)器人直立擺好。如圖1-19所示,用兩顆平頭螺釘和螺母將電池盒 固定在步行機(jī)器人的頂部。擰緊平頭螺釘,使平頭螺釘嵌入電池盒中,并且從電 池盒另一側(cè)穿出。圖1-19安裝電池盒 圖1-20安裝支柱步驟16:安裝四個支柱需要以下配件:4根支柱

12、4顆M3x8盤頭螺釘如圖1-20所示,用M3x8盤頭螺釘在步行機(jī)器人頂板上安裝 4根支柱步驟17:連接步行機(jī)器人的電路板和電池管之間的導(dǎo)線需要以下配件:步行機(jī)器人的AT89S52電路板步驟18:裝入4個AA電池需要以下配件:4節(jié)AA電池安裝4節(jié)電池。然后將步行機(jī)器人電路板上的電源開關(guān)撥至“1”位,檢驗電源是否連接正確。如果正確,綠色的電源指示燈將變亮。步驟19:安裝步行機(jī)器人電路板需要以下配件:M3x8平頭螺釘如圖1-22所示,在步行機(jī)器人的頂板上,用平頭螺釘將機(jī)器人的電路板周 定在4個支柱上。將步行機(jī)器人下方的伺服電機(jī)(跨步伺服電機(jī))連接到電路板 的P13處,而將上方的伺服電機(jī)(傾斜伺服電機(jī)

13、)連接到電路板的P12處。注意黑色線對應(yīng)“ B”插頭,紅色線對應(yīng)“ R”插頭。步驟20:再次歸中伺服電機(jī)并作調(diào)整這是裝配步行機(jī)器人最終的一步,重復(fù)前面步驟3一對伺服電機(jī)進(jìn)行中位調(diào) 整,調(diào)整后步行機(jī)器人的雙腳應(yīng)該均衡平坦地站在地面上。檢查機(jī)器人的上部時,步行機(jī)器人的雙腿應(yīng)略向前傾斜。步行機(jī)器人的最佳行走狀態(tài)是步行機(jī)器人 腳略微向后傾斜1至2度而不是直立在地面上,以保證重心處在兩足之間。圖1-22安裝完成的步行機(jī)器人第二章步行機(jī)器人的行走編程步行機(jī)器人的各種運(yùn)動編程方式方式1:野蠻方法這種方式應(yīng)用了大量的子程序,每一個子程序?qū)?yīng)著一個動作。通過調(diào)用和 組合這些子程序來完成步行機(jī)器人復(fù)雜的運(yùn)動。這種

14、方式簡明易懂,但一一列出36種運(yùn)動方式極大浪費(fèi)了寶貴的存儲空間,更加不利于程序的修改。例如,要 改變運(yùn)動速度這一參數(shù),就必須修改程序中所有的運(yùn)動速度參數(shù),極不方便。方式2:用數(shù)組表格這種方式通過找尋36種運(yùn)動之間的共性,特別是一些具有相似功能的子程 序,他們通過帶入不同的參數(shù)實現(xiàn)不同的動作。 把這些參數(shù)歸納到數(shù)組中,是簡 化程序設(shè)計的一種手段。構(gòu)造數(shù)組與編寫各子程序相比更簡潔,因為數(shù)組中只包 含參數(shù)。方式3:狀態(tài)遷移前面兩種編程方式中,程序員必須記下步行機(jī)器人腳步的位置以及需要調(diào)用 的例程,并且要在表格中填入適當(dāng)?shù)膮?shù)值。 而狀態(tài)遷移方式不同于前面的兩種 編程方式,因為步行機(jī)器人跟蹤的雙腳的運(yùn)

15、動軌跡。 遷移動作用于從一個狀態(tài)運(yùn) 動到另一個狀態(tài),基本動作是3種傾斜動作和3種跨步動作,這就明顯少于其他 方式中用到的36種基本運(yùn)動。步行機(jī)器人的運(yùn)動原理步行機(jī)器人只有2種基本的運(yùn)動:直線行走和原地旋轉(zhuǎn)。利用這兩種基本運(yùn) 動,仍然可以讓步行機(jī)器人從 A點(diǎn)移動到B點(diǎn)。步行機(jī)器人白行走的分4個步驟:a.向一邊傾斜b.移動被提起的那只腿c.向另一邊傾斜d.移動被提起的那只腿以上步驟實現(xiàn)一步行走。腿的運(yùn)動方向決定了機(jī)器人的運(yùn)動的行走方向,腿 的移動距離決定了機(jī)器人的行走距離。步行機(jī)器人移動的速度,則主要取決于動 作的執(zhí)行頻率,以及每次移動的距離。步行機(jī)器人通過原地旋轉(zhuǎn)實現(xiàn)轉(zhuǎn)彎的,步行機(jī)器人從A點(diǎn)直線

16、運(yùn)動到B點(diǎn), 在B點(diǎn)原地旋轉(zhuǎn),轉(zhuǎn)向C點(diǎn)的方向,然后直線運(yùn)動至 C點(diǎn)。原地旋轉(zhuǎn)也有4個步驟:a.向一邊傾斜b.移動被提起的那只腿c.兩條腿同時著地d.向相反的方向移動雙腿這個過程靠摩擦力起作用。實際上,步行機(jī)器人的原地旋轉(zhuǎn)是在最后一步(步 行機(jī)器人的雙腳同時在地面上)完成的。它基本的工作原理是一只腳向前運(yùn)動時, 另一只腳向后運(yùn)動,通過雙腳與地面間的摩擦里來實現(xiàn)原地旋轉(zhuǎn)。轉(zhuǎn)動的角度受 腿的運(yùn)動幅度和兩腳與地面之間的摩擦系數(shù)的影響。過低的摩擦系數(shù),導(dǎo)致機(jī)器 人轉(zhuǎn)動很小。過大的摩擦系數(shù)則會使步行機(jī)器人跌倒。61 / 58任務(wù)1:基本的步行運(yùn)動:野蠻編程Movement 0:Starting Posit

17、ionLlovenreiit. 1:Lean Right frorr 513rtMovement 2:Lsan Rig fl 匚 _eft Fa"ir;3rdMoveine-nt 3:Lean Ltft Right 占玳xMownent 4:Lean LM Right FfifwardMovement 5:Lean F ght. Left BachMowemeni 6:Lear Right, Lrt Forward圖2-1前進(jìn)運(yùn)動的幾個動作例 2.1FirstStep/*任務(wù)一:基本的步行運(yùn)動:野蠻編程,對照實驗指導(dǎo)書中圖片*/#include <AT89X52.h>#i

18、nclude <stdio.h>#include <toddler.h>#define RightTilt 1260 向右傾角度#define CenterTilt 1500 /中間位置#define LeftTilt 1720 / 向左傾角度#define RightForward 1300 /& 腿向前#define StrideCenter 1500 /中間位置#define LeftForward 1700 /左腿向前#define StrideServo P1_3 /跨步電機(jī)連接到 P13#define TiltServo P1_2 傾斜電機(jī)連接至U

19、P12int TiltStep = 10; /調(diào)整步長可以調(diào)節(jié)傾斜電機(jī)的運(yùn)動速度int StrideStep = 10; /刪整步長可以調(diào)節(jié)跨步電機(jī)的運(yùn)動速度int MoveDelay = 25;/*起始位置*/void Movement0(void)int i;for(i=0;i<100;i+=StrideStep)StrideServo = 1; /給拖動電機(jī)發(fā)delay_nus(CenterTilt); /一個寬度為:CenterTiltStrideServo=0; /微秒的脈沖TiltServo = 1; /給傾斜電機(jī)發(fā)delay_nus(StrideCenter);/k個寬度為

20、:StrideCenterTiltServo = 0; /微秒的脈沖delay_nms(MoveDelay);/* 從起始向右傾斜*/void Movement1(void)int i;for(i=CenterTilt;i>RightTilt;i=i-TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾邁左腳*/void Movement2(void)int i;for(i=S

21、trideCenter;i<LeftForward;i+=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向左傾斜右腳回收*/void Movement3(void)int i;for(i=RightTilt;i<LeftTilt;i+=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;dela

22、y_nus(LeftForward);StrideServo = 0;delay_nms(MoveDelay);/* 向左傾斜右腳向前*/void Movement4(void)int i;for(i=LeftForward;i>RightForward;i-=StrideStep)TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾斜左腳回收*/void Movement5(void)int i;fo

23、r(i=LeftTilt;i>RightTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(RightForward);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾斜左腳向前*/void Movement6(void)int i;for(i=RightForward;i<LeftForward;i+=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;Stri

24、deServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 機(jī)器人腿居中*/void Movement7(void)int i;for(i=LeftForward;i>StrideCenter;i-=StrideStep)TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 機(jī)器人傾斜電機(jī)居中*/void Movement8(void)int

25、 i;for(i=LeftTilt;i>CenterTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);int main(void)int MoveLoop;Movement。; 起始位置Movement1(); /從起始向右傾斜Movement2(); /向右傾邁左腳for(MoveLoop=0;MoveLoop<10;MoveLoop+) Movement3();

26、 /向左傾斜右腳回來Movement4(); /向左傾斜右腳向前Movement5(); /向右傾斜左腳回來Movement6(); /向右傾斜左腳向前Movement3(); /向右傾邁左腳Movement7(); /機(jī)器人腿居中Movement8(); /機(jī)器人傾斜電機(jī)居中修改例程中的代碼。嘗試以下實驗:調(diào)整TiltStep和StrideStep0一個較小值,觀察步行機(jī)器人的行為。調(diào)整相同常 量到一個較大值,進(jìn)行同樣的觀察。你能想象出伺服電機(jī)的時序圖,并解釋步行 機(jī)器人不同行為的原因嗎?減小MoveDelay值,并觀察步行機(jī)器人的行為。為你的步行機(jī)器人挑選適當(dāng) 的MoveDelay、Til

27、tStep和StrideStepfi,讓步行機(jī)器人按照你的要求進(jìn)行動作。 記錄這些參數(shù)值,為將來的程序設(shè)計做準(zhǔn)備。任務(wù)2:向后行走:野蠻編程事耐 io:Lesr lefl,.4Movs-mBnrt il;由t g./gtrt BackLesr 同g Lefl 5抑Mowment 12:L«5i Rlgr Right 63HMovement 13:Lm巨廣-北圖2-2后退的幾個動作例 2.2WalkingBackward/*任務(wù)二:向后行走:野蠻編程,對照實驗指導(dǎo)書中圖片*/#include <AT89X52.h>#include <stdio.h>#inclu

28、de "toddler.h"#define RightTilt 1260 /向右傾角度#define CenterTilt 1500 /中間位置#define LeftTilt 1720 / 向左傾角度#define RightForward 1300 /& 腿向前#define StrideCenter 1500 /中間位置#define LeftForward 1700 /左腿向前#define StrideServo P1_3 /跨步電機(jī)連接到 P13#define TiltServo P1_2 /傾斜電機(jī)連接到 P12int TiltStep = 10; /

29、調(diào)整步長可以調(diào)節(jié)傾斜電機(jī)的運(yùn)動速度int StrideStep = 10; /倜整步長可以調(diào)節(jié)跨步電機(jī)的運(yùn)動速度int MoveDelay = 25;/*起始位置*/void Movement0(void)int i;for(i=0;i<100;i+=StrideStep)StrideServo = 1; /給拖動電機(jī)發(fā)delay_nus(CenterTilt); /一個寬度為:CenterTiltStrideServo=0; /微秒的脈沖TiltServo = 1; /給傾斜電機(jī)發(fā)delay_nus(StrideCenter);/ 個寬度為:StrideCenterTiltServo

30、= 0; /微秒的脈沖delay_nms(MoveDelay);/* 從起始向右傾斜*/void Movement1(void)int i;for(i=CenterTilt;i<RightTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);/* 機(jī)器人傾斜電機(jī)居中*/void Movement8(void)int i;for(i=LeftTilt;i>CenterTi

31、lt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideCenter);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾邁左腳*/void Movement9(void)int i;for(i=StrideCenter;i>RightForward;i-=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);S

32、trideServo = 0;delay_nms(MoveDelay);/* 向左傾斜右腳回收*/void Movement10(void)int i;for(i=RightTilt;i<LeftTilt;i+=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(RightForward);StrideServo = 0;delay_nms(MoveDelay);/* 向左傾斜右腳向前*/void Movement11(void)int i;for(i=RightForward ;i<

33、;LeftForward;i+=StrideStep) TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾斜左腳回收*/void Movement12(void) int i;for(i=LeftTilt;i>RightTilt;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(LeftForw

34、ard);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾斜左腳向前*/void Movement13(void)int i;for(i=LeftForward;i>RightForward;i-=StrideStep)TiltServo = 1;delay_nus(RightTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);/* 向右傾斜左腳向前*/void Movement14(void)int i;for(i=RightFo

35、rward;i<StrideCenter;i+=StrideStep)TiltServo = 1;delay_nus(LeftTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);int main(void)int MoveLoop;Movement。; 起始位置Movement1(); /從起始向右傾斜Movement9(); /向右傾邁左腳for(MoveLoop=0;MoveLoop<3;MoveLoop+)Movement10(); /向左傾斜右腳回收Mov

36、ement11(); /向左傾斜右腳向前Movement12(); /向右傾斜左腳回收Movement13(); 向右傾斜左腳向前Movement10(); /向右傾邁左腳Movement14(); /機(jī)器人腿居中Movement8(); /機(jī)器人傾斜電機(jī)居中嘗試以下實驗:改變程序中的常量為以下各數(shù)值并實驗。說明步行機(jī)器人的運(yùn)動為什么與先 前的運(yùn)動不同。TiltStep 5 ' TiltServo step sizeStrideStep 5 ' StrideServo step sizeMoveDelay 15 ' in micrcoseconds寫一個程序,實現(xiàn)步行機(jī)

37、器人向前走,然后向后回到原地。任務(wù)3:采用數(shù)組存儲動作進(jìn)行編程例:2.3 First Step Forward with table/*任務(wù)三:用數(shù)組和指針實現(xiàn)步行機(jī)器人的基本運(yùn)動*/#include <AT89X52.h>#include <stdio.h>#include "toddler.h"#include "uart.h"#define RightTilt 1300 向右傾角度#define CenterTilt 1500 /中間位置#define LeftTilt 1760 / 向左傾角度#define RightFo

38、rward 1300 /& 腿向前#define StrideCenter 1500 /中間位置#define LeftForward 1700 /左腿向前#define StrideServo P1_3 /跨步電機(jī)連接到 P13#define TiltServo P1_2 /傾斜電機(jī)連接到 P12int TiltStep = 8; /調(diào)整步長可以調(diào)節(jié)傾斜電機(jī)的運(yùn)動速度int StrideStep = 8; /倜整步長可以調(diào)節(jié)跨步電機(jī)的運(yùn)動速度int MoveDelay = 20;static unsigned int code Movement_array84= CenterTilt

39、,RightTilt,StrideCenter,StrideCenter,RightTilt,RightTilt,StrideCenter,LeftForward, RightTilt,LeftTilt,LeftForward,LeftForward, LeftTilt,LeftTilt,LeftForward,RightForward, LeftTilt,RightTilt,RightForward,RightForward, RightTilt,RightTilt,RightForward,LeftForward, LeftTilt,LeftTilt,LeftForward,StrideC

40、enter, LeftTilt,CenterTilt,StrideCenter,StrideCenter ;unsigned int code StartForward4 = 1,2,0; / movement tableunsigned int code WalkForward21 = 3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,3,4,5,6,0;unsigned int code FinishForward4 = 3,7,8,0;unsigned int *Movement_Index; /動作指針/* 起始位置*/void Movement0(void)unsign

41、ed char i;for(i=0;i<100;i+=StrideStep)StrideServo = 1; /給跨步電機(jī)發(fā)delay_nus(CenterTilt); /一個寬度為:CenterTiltStrideServo=0; /微秒的脈沖TiltServo = 1; /給傾斜電機(jī)發(fā)delay_nus(StrideCenter);/ 個寬度為:StrideCenterTiltServo = 0; /微秒的脈沖delay_nms(MoveDelay);void Movement(void)unsigned int i;unsigned int TiltStart,TiltEnd,St

42、rideStart,StrideEnd;while(*Movement_Index!=0)TiltStart = Movement_array*Movement_Index-10;TiltEnd = Movement_array*Movement_Index-11;StrideStart = Movement_array*Movement_Index-12;StrideEnd = Movement_array*Movement_Index-13;Movement_Index+;if(TiltStart=TiltEnd)/ 判斷傾斜值是否相等,如果相等則是跨步if(StrideStart>

43、StrideEnd)/判斷循環(huán)是增量還是減for(i=StrideStart;i>StrideEnd;i-=StrideStep)TiltServo = 1;delay_nus(TiltStart);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);elsefor(i=StrideStart;i<StrideEnd;i+=StrideStep)TiltServo = 1;delay_nus(TiltStart);TiltServo = 0;StrideServo = 1;d

44、elay_nus(i);StrideServo = 0;delay_nms(MoveDelay);else / 步行機(jī)器人傾斜if(TiltStart>TiltEnd)/ 判斷循環(huán)是增量還是減for(i=TiltStart;i>TiltEnd;i-=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideStart);StrideServo = 0;delay_nms(MoveDelay);elsefor(i=TiltStart;i<TiltEnd;i+=TiltSte

45、p)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(StrideStart);StrideServo = 0;delay_nms(MoveDelay);/for end/while endint main(void)unsigned int i;uart_Init(); /串口初始化,函數(shù)在uart.h 里TiltServo = 0; /傾斜電機(jī)IO 口初始狀態(tài)StrideServo = 0;/跨步電機(jī)IO 初始狀態(tài)Movement0();Movement_Index = StartForward;Movem

46、ent();for(i=0;i<3;i+) Movement_Index = WalkForward;Movement();Movement_Index = FinishForward;Movement();嘗試以下實驗:修改TiltStep, StrideStep 和MoveDelay 的值,使步行機(jī)器人行走盡可能平滑,但并不需要很快。修改WalkForward 數(shù)組,增加步行機(jī)器人行走的步數(shù)。第三章轉(zhuǎn)彎任務(wù)1:做一個轉(zhuǎn)彎的動作步行機(jī)器人轉(zhuǎn)彎是靠兩腳平放在地面然后朝相反的方向滑行來實現(xiàn)的Movement 1Movement 2Movement 3:Movement 4:圖3-1完整的右

47、轉(zhuǎn)彎行走的四個基本動作/*任務(wù)1:做一個轉(zhuǎn)彎動作,實現(xiàn)右轉(zhuǎn)關(guān)鍵就是在程序2.4中增加了 TurnRight程序條目。*/#include<AT89X52.H>#include <toddler.h>#define RightTilt 1300 向右傾角度#define CenterTilt 1500 /中間位置#define LeftTilt 1760 / 向左傾角度#define RightStride 1300 /& 腿向前#define CenterStride 1500 /中間位置#define LeftStride 1700 /左腿向前# define

48、 StrideServo P1_3 /區(qū)動跨步電機(jī)的 IO# define TiltServo P1_2 /當(dāng)區(qū)動傾斜電機(jī)的IO# define TL 0 向左彳皈斜 TiltLeft# define TC 1 /不傾斜TiltCenter# define TR 2 /向右傾斜 TiltRight# define SL 3 /左腳向前跨步StrideLeft# define SC 4 /腳對齊StrideCenter# define SR 5 /右腳向前跨步StrideRight# define xx 255 /結(jié)束標(biāo)志unsigned int TiltStep = 8;unsigned in

49、t StrideStep = 8;unsigned int MoveDelay = 18;/state tableunsigned int WalkForward5=TR,SL,TL,SR,xx; / 向前走unsigned int WalkBackward5=TR,SR,TL,SL,xx;unsigned int TurnLeft5=TL,SR,TC,SL,xx;unsigned int WideTurnLeft9=TL,SR,TC,SL,TR,SL,TL,SR,xx;unsigned int TurnRight5=TR,SL,TC,SR,xx;unsigned int PivotRight

50、9=TR,SL,TC,SR,TL,SL,TC,SR,xx;unsigned int FinishForward4=TR,SC,TC,xx;/variablesunsigned int MoveLoop; /循環(huán)次數(shù)unsigned int CurrentTilt; /用于保存傾斜值unsigned int CurrentStride; /用于保存跨步值unsigned int NewTilt; /用于賦新值unsigned int NewStride; /用于賦新值unsigned int *Movement_Index; /查表指針/movement routines/* 起始位置*/voi

51、d ResetCC(void)unsigned int i;for(i = 0;i<100;i += StrideStep)StrideServo = 1; /給拖動電機(jī)發(fā)delay_nus(CenterTilt); /一個寬度為:CenterTiltStrideServo=0; /微秒的脈沖TiltServo = 1; /給傾斜電機(jī)發(fā)delay_nus(CenterStride);/ 個寬度為:StrideCenterTiltServo = 0; /微秒的脈沖delay_nms(MoveDelay);void TiltMovement(void)unsigned int i;if(Cu

52、rrentTilt>NewTilt)/ 判斷循環(huán)是增量還是減for(i = CurrentTilt;i>NewTilt;i -= TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo = 1;delay_nus(CurrentStride);StrideServo = 0;delay_nms(MoveDelay);elsefor(i=CurrentTilt;i<NewTilt;i+=TiltStep)TiltServo = 1;delay_nus(i);TiltServo = 0;StrideServo =

53、 1;delay_nus(CurrentStride);StrideServo = 0;delay_nms(MoveDelay);/for endCurrentTilt = NewTilt;void StrideMovement(void) unsigned int i;if(CurrentStride>NewStride)/判斷循環(huán)是增量還是減for(i = CurrentStride;i>NewStride;i -= StrideStep)TiltServo = 1;delay_nus(CurrentTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo = 0;delay_nms(MoveDelay);else for(i = CurrentStride;i<NewStride;i += StrideStep)TiltServo = 1;delay_nus(CurrentTilt);TiltServo = 0;StrideServo = 1;delay_nus(i);StrideServo

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論