陳正敏步行機(jī)器人-實驗報告_第1頁
陳正敏步行機(jī)器人-實驗報告_第2頁
陳正敏步行機(jī)器人-實驗報告_第3頁
陳正敏步行機(jī)器人-實驗報告_第4頁
陳正敏步行機(jī)器人-實驗報告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、機(jī)電綜合實驗步行機(jī)器人機(jī)械與運載工程學(xué)院機(jī)自1103班實驗者:陳正敏學(xué) 號:20110401310二零一四年12月16日一、認(rèn)識龍人步行者盡管它看起來很簡單,但確實這種使用兩個伺服電機(jī)實現(xiàn)兩足移動的步行機(jī)器人比兩輪機(jī)器人復(fù)雜的得多。它通過機(jī)械機(jī)構(gòu)和 C 語言指令控制來實現(xiàn)行走。實際上,步行機(jī)器人可使用許多傳感器作為反饋元件,其中包括能檢測到一定距離內(nèi)是否有物體的紅外線發(fā)射器及紅外線檢測器,緩沖傳感器(閃光腳趾)和用以測量傾斜參數(shù)的加速度計。(注意,閃光腳趾和加速度計不是步行機(jī)器人的標(biāo)準(zhǔn)配件,用戶需另外采購。)如果你耐心調(diào)節(jié)步行機(jī)器人的硬件和軟件,步行機(jī)器人可以完成輪式機(jī)器人所能完成的所有動作。

2、步行機(jī)器人不僅比輪式機(jī)器人有趣很多,而且通過學(xué)習(xí)步行機(jī)器人行走控制,也能更加熟練的掌握控制程序的編寫。步行機(jī)器人的編程將會引導(dǎo)你學(xué)會如何設(shè)計C語言程序,包括如何使用常量和變量、數(shù)組、程序的指針,函數(shù)以及存儲數(shù)據(jù)的EEPROM(電可擦除只讀存儲器)。程序設(shè)計是否良好的其中一個標(biāo)準(zhǔn)是,在對一些機(jī)械裝置調(diào)整后,不需重新編寫整個程序,只需對程序作簡單修改就能實現(xiàn)所要求的功能,即我們通常所說的可維護(hù)性。步行機(jī)器人的運動由兩個伺服電機(jī)控制(這有點類似于操縱飛機(jī)的螺旋槳)。兩個伺服電機(jī)有各自的作用, 頂部的伺服電機(jī)控制機(jī)器人的重心位置在1.5CM的范圍內(nèi)擺動,而底部的伺服電機(jī)控制機(jī)器人的前后行走。步行機(jī)器人

3、的腿和腳踝之間采用了一個簡單的平行連接件,確保雙腳能夠平行的站在地面上。兩條腿都連接在同一個電機(jī)上,所以一只腳向前移動時,另一只腳就會向后移動。單獨控制一個電動機(jī),步行機(jī)器人能夠完成前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等動作。綜合控制步行機(jī)器人兩個伺服電機(jī)的運動,能實現(xiàn)更加協(xié)調(diào)、更加平穩(wěn)的行走。步行機(jī)器人的伺服電機(jī)和傳感器由一個 AVR 單片機(jī)來控制。 AVR 單片機(jī)是工程中運用很廣泛的一種芯片,它提供了較大的程序空間、存儲空間供機(jī)器人使用,并且處理速度快比 51 單片機(jī)快 1 倍以上。二、實驗要求1、了解和掌握自動化系統(tǒng)集成的一般過程和方法,同學(xué)們在課程中逐步掌握使用、調(diào)試、維護(hù)自動化系統(tǒng)方面的能力。2、

4、了解AT89S52芯片的主要性能,學(xué)會分析和使用常用電子芯片、電子元件和儀器設(shè)備的能力。3、掌握機(jī)器人機(jī)械工作方式,紅外避障工作原理,掌握機(jī)器人尾隨行走所需的閉環(huán)控制算法,學(xué)會將機(jī)械運動和自動化(利用軟、硬件)緊密結(jié)合。4、學(xué)會查閱科技參考資料,根據(jù)自己的設(shè)計任務(wù)和設(shè)計方法編制程序、調(diào)試程序軟、硬件聯(lián)機(jī)調(diào)試,達(dá)到設(shè)計要求收集實驗數(shù)據(jù),并對結(jié)論進(jìn)行分析,寫好實驗報告。三、實驗原理1)時間測量和電壓在這本學(xué)習(xí)指南中,我們將多次提到幾個重要的時間單位秒(s),毫秒(ms),微秒(us)。通常,我們將秒用小寫字母“s ”表示,所以,可以將1秒寫成1s。毫秒則用“ms”表示,1毫秒等于1/1000秒;微

5、秒用“us”表示,1微秒等于1/1000000秒,從毫秒、微秒與秒的關(guān)系你是否已經(jīng)推出:1毫秒=1000微秒。在2)運動原理從AVR CPU中發(fā)送出來的一組控制伺服電機(jī)的控制信號被稱為“脈沖序列”,如圖2-1所示。AVR CPU能夠通過編程產(chǎn)生這樣的信號波形,而且還能用它任意的一個I/O口進(jìn)行信號的輸出。在下面的例子中,AVR CPU向 PC2(跨步伺服電機(jī))和PC3(傾斜伺服電機(jī))各發(fā)送一個1500微秒的脈沖信號。在1500微秒的高電平送出后,AVR CPU繼續(xù)發(fā)送一個25毫秒的低電平給該引腳,產(chǎn)生一組脈沖序列如圖所示,這個脈沖序列由1500微秒的高電平和25毫秒的低電平組成。伺服電機(jī)的控制

6、主要由1500微秒的高電平來控制,我們通常稱這一段時間為脈寬。脈沖信號由低電平到高電平這一變化過程我們稱為上升沿。同理,由高電平到低電平的變化我們稱為下降沿。步行機(jī)器人的行走的分4個步驟:a. 向一邊傾斜b. 移動被提起的那只腿c. 向另一邊傾斜d. 移動被提起的那只腿3)滑動式轉(zhuǎn)彎步行機(jī)器人有點不大靈活。它只能向前或向后移動它的步子,不能相對它的身體旋轉(zhuǎn)步子。但這并沒有阻礙他的轉(zhuǎn)彎能力,當(dāng)走直線時,步行機(jī)器人和人走直線是相似的,而轉(zhuǎn)彎就明顯不同。步行機(jī)器人轉(zhuǎn)彎和人最接近的是就象人穿著平底鞋站在冰面上轉(zhuǎn)彎的情形。人站在冰上右轉(zhuǎn)彎的過程是相當(dāng)簡單的,把你的左腳向前邁一步放在地面上,然后把左腳向后

7、滑行回收,這樣你就可以以右腳為軸向右轉(zhuǎn)了。如果冰是濕滑的話可能要多次轉(zhuǎn)動才能轉(zhuǎn)過 90 度。同樣要左轉(zhuǎn)就滑行右腳。標(biāo)準(zhǔn)的步行機(jī)器人在冰上轉(zhuǎn)彎的效果并不理想,但利用這種原理,在其它表面上可以轉(zhuǎn)得很好。步行機(jī)器人的平滑金屬腳提供了一個光滑的表面。當(dāng)它站在能提供摩擦力的表面上來做轉(zhuǎn)彎,效果會更加好。如果走的平面太光滑,那么對步行機(jī)器人的腳掌進(jìn)行一些處理以便提供更大的摩擦力。最典型的做法四、相關(guān)資料及問題(一)、PWM 直流電機(jī)調(diào)速原理:通過AVR 單片機(jī)ATmega8直接產(chǎn)生PWM 波形經(jīng)過電機(jī)驅(qū)動芯片L298 分別驅(qū)動兩個直流電機(jī),PWM 將占空比不同的脈沖變成不同的電壓驅(qū)動直流電機(jī)轉(zhuǎn)動從而得到不

8、同的轉(zhuǎn)速,且實現(xiàn)電機(jī)啟動、停止、正反轉(zhuǎn)等功能。(二)、直流電機(jī)控制模塊1、控制板的使用說明#define POSITIVE_DIR 1/正向旋轉(zhuǎn)#define NEGATIVE_DIR 0 /反向旋轉(zhuǎn)#define LEFT_MOTOR 0/左電機(jī)#define RIGHT_MOTOR 1/右電機(jī)#define NOT_STOP 0/不停止#define STOP 1/停止#define BY_10MS 0/時間控制系數(shù)10毫秒倍率#define BY_100MS 1/100毫秒倍率#define BY_1000MS 2/1000毫秒倍率#define NOT_CONTROL_TIME 3/不

9、控制時間2、通過TTL串口驅(qū)動PWM直流電機(jī)驅(qū)動模塊void write_pwm(unsigned char bDirection, unsigned char bSide, unsigned char bStop, unsigned char TimeFactor, unsigned char Speed, unsigned char Time)unsigned char Command;bSide = bSide << 1;bStop = bStop << 2;TimeFactor = TimeFactor << 3;Command = bDirecti

10、on | bSide | bStop | TimeFactor; /組合命令字節(jié)soft_send_enable (); /允許軟串口發(fā)送EA=1;rs_send_byte(0xaa);/發(fā)送控制命令的頭部,恒為0xaars_send_byte(Command);/發(fā)送命令字節(jié),想要了解命令格式rs_send_byte(Speed);/發(fā)送速度描述字節(jié),0255rs_send_byte(Time);/發(fā)送時間倍率,0255rs_send_byte(0xbb);/發(fā)送控制命令的尾部,恒為0xbbwhile(rs_f_TI=0);/等待所有的命令發(fā)出完畢EA=0;3、幾個基本函數(shù)驅(qū)動電機(jī)后退函數(shù)原

11、理:左電機(jī)正轉(zhuǎn),右電機(jī)反轉(zhuǎn),以同樣的速度旋轉(zhuǎn),完成后退動作參數(shù):Speed:速度系數(shù)(0255);TimeFactor:時間系數(shù)(X10ms,X100ms,X1000ms);Seconds:時間倍率(0255);時間倍率*時間系數(shù)=實際時間void Backward(unsigned char Speed, unsigned char TimeFactor, unsigned char Seconds)write_pwm(POSITIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);write_pwm(NEGATIVE_DIR,RIGHT

12、_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);驅(qū)動電機(jī)右轉(zhuǎn)函數(shù)原理:左右電機(jī)正轉(zhuǎn),以不一樣的速度旋轉(zhuǎn),完成右轉(zhuǎn)動作參數(shù):Speed:速度系數(shù)(0255);TimeFactor:時間系數(shù)(X10ms,X100ms,X1000ms);Seconds:時間倍率(0255);時間倍率*時間系數(shù)=實際時間void Right(unsigned char Speed, unsigned char TimeFactor, unsigned char Seconds)write_pwm(POSITIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor

13、,Speed,Seconds);write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);驅(qū)動電機(jī)左轉(zhuǎn)函數(shù)原理:左右電機(jī)反轉(zhuǎn),以不一樣的速度旋轉(zhuǎn),完成左轉(zhuǎn)動作參數(shù):Speed:速度系數(shù)(0255);TimeFactor:時間系數(shù)(X10ms,X100ms,X1000ms);Seconds:時間倍率(0255);時間倍率*時間系數(shù)=實際時間void Left(unsigned char Speed, unsigned char TimeFactor, unsigned char Seconds)write_pwm(

14、NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);write_pwm(NEGATIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);驅(qū)動電機(jī)前進(jìn)函數(shù)原理:左電機(jī)反轉(zhuǎn),右電機(jī)正轉(zhuǎn),以同樣的速度旋轉(zhuǎn),完成后退動作參數(shù):Speed:速度系數(shù)(0255);TimeFactor:時間系數(shù)(X10ms,X100ms,X1000ms);Seconds:時間倍率(0255);時間倍率*時間系數(shù)=實際時間void Forward(unsigned char Speed, unsigned

15、 char TimeFactor, unsigned char Seconds)write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);(三)、頭文件及PWM_Init()函數(shù)說明uart.h:硬串口的相關(guān)程序。包含該文件后,在程序中調(diào)用uart_Init()函數(shù),即可完硬串口的初始化。soft_rs232.h:TTL-RS232的實現(xiàn)程序。在該文件中,可修改TTL-RS23

16、2的通信波特率以及輸出端口。如果在設(shè)置的TTL-RS232數(shù)據(jù)輸出端口外接一個RS232電平轉(zhuǎn)換芯片并搭載DB9串口接口,這樣相當(dāng)于構(gòu)建了C51平臺上的第二個串口。該程序構(gòu)建的串口為單工串口。Movement.h:該文件提供了龍人貝塔的運動控制函數(shù)的范例。在包含該文件之前,請包含BetaRobot.h文件。否則,在編譯程序的時候會出現(xiàn)錯誤。 PWM_Init()函數(shù)的作用是為初始化第一層與第二層之間的TTL串口連接。其中TTL串口的數(shù)據(jù)輸出口定義為P1.0口,在程序設(shè)計的過程中,請回避該端口,避免引起機(jī)器人運動控制的錯誤。在KEIL工程中,如果要使用到機(jī)器人的運動控制部分,那么在主程序的開頭部

17、分,就必須首先執(zhí)行該函數(shù),進(jìn)行TTL串口初始化。五、步行機(jī)器人走“日”字#include<WalkingRobot.h>#include<uart.h>#define uint16_t unsigned int#define StrideServo P1_0/stride servo#define TiltServo P1_1/Tilt servo#define MoveDelay 15 /in ms time#define TiltStep 25 /step size#define StrideStep 25 /step size#define RightTilt 1

18、200 /tilt limits#define CenterTilt 1500#define LeftTilt 1800#define RightStride 1800 /stride limits#define CenterStride 1500 #define LeftStride 1200 /movement state numbers:#define TL 0 /representation of tiltleft #define TC 1/representation of tiltcenter#define TR 2 /representation of tiltright#def

19、ine SL 3 /representation of strideleft#define SC 4 /representation of stridecenter#define SR 5 /representation of strideright#define xx 255 /end representation int code WalkForward5=TR,SL,TL,SR,xx; /state tableint code WalkBackward5=TR,SR,TL,SL,xx;int code TurnLeft5=TL,SR,TC,SL,xx;int code WideTurnL

20、eft9=TL,SR,TC,SL,TR,SL,TL,SR,xx;int code TurnRight5=TR,SL,TC,SR,xx;int code PivotRight9=TR,SL,TC,SR,TL,SL,TC,SR,xx;/-variables-int MoveLoop; /loop times of repeat movement uint16_t Pulses; /pulses variableuint16_t CurrentTilt; /uint16_t CurrentStride;uint16_t NewValue;int *Mx; /state table index/-mo

21、vement routines-void MovementTilt(void) /tilt int step;Pulses= CurrentTilt;if(Pulses>NewValue)step=-TiltStep;elsestep=TiltStep;while(Pulses!=NewValue) TiltServo=1;delay_nus(Pulses);TiltServo=0;StrideServo=1;delay_nus(CurrentStride);StrideServo=0;delay_nms(MoveDelay); Pulses=Pulses+step;CurrentTil

22、t=NewValue;void MovementStride(void) /stideint step;Pulses= CurrentStride;if(Pulses>NewValue)step=-StrideStep;elsestep=StrideStep;while(Pulses!=NewValue) TiltServo=1;delay_nus(CurrentTilt);TiltServo=0;StrideServo=1;delay_nus(Pulses);StrideServo=0;delay_nms(MoveDelay); Pulses=Pulses+step;CurrentSt

23、ride=NewValue;/-subroutines-void ResetCC(void) /move initialCurrentTilt=CenterTilt;CurrentStride=CenterStride;for( Pulses=0;Pulses<=10;Pulses=Pulses+StrideStep) TiltServo=1;delay_nus(CenterTilt);TiltServo=0;StrideServo=1;delay_nus(CenterStride);StrideServo=0;delay_nms(MoveDelay);void Movement(voi

24、d) /move by data table referenced by Mxwhile(*Mx != xx) switch(*Mx) /比3小,執(zhí)行MovementTilt() case 0:NewValue=LeftTilt; MovementTilt(); break;case 1:NewValue=CenterTilt; MovementTilt(); break;case 2:NewValue=RightTilt; MovementTilt();break;case 3:NewValue=LeftStride;MovementStride();break;case 4:NewValu

25、e=CenterStride;MovementStride();break;case 5:NewValue=RightStride;MovementStride();break; Mx+; /INPUT;Mx=table index ; END:Mx=xx /-Main-int main(void) uart_Init();printf("Program started!rn");ResetCC() ; for(MoveLoop=1;MoveLoop<=10;MoveLoop+) / WalkForward Mx=WalkForward; Movement(); for(MoveLoop=1;MoveLoop<=7;MoveLoop+) /turn rightMx=TurnRight;Movement(); for(MoveLoop=1;MoveLoop<=5;MoveLoop+) / WalkForward Mx=WalkForward; Movement(); for(MoveLoop=1;MoveLoop<=7;MoveLoop+) /turn rightMx=TurnRight;Movement(); for(MoveLoop=1;MoveL

溫馨提示

  • 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

提交評論