中國工程機器人大賽暨國際公開賽(RoboWork)

學校:上海第二工業大學
作者:池呂庭、毛安澤、何豔東、葛浩然
指導老師:陸翔宇

目 錄

一、摘要 1
二、正文主體 2
1.1綜述 2
1.2系統整體設計 3
1.3機械結構設計 11
1.4硬件設計 14
1.5軟件設計 18
1.6系統開發與調試 39
1.7結論 41
三、參考文獻 42
四、致謝 43









摘要

工程機器人的機構設計是機器人研製開發的首要問題。我們根據項目的環境,首先確定了過障礙小車的整體設計方案,其次根據研製進度的需要,按重要程度由高 至低分步地進行了機構的設計、加工、裝配和調試,直到滿足設計要求。研究目的:掌握使用圓周舵機、白標傳感器,白標傳感器光感變化的強弱來判斷機器人是否偏離了運行軌道,再使用程序來控制左右舵機的轉速差來微調,保持機器人不偏離軌道,通過機械結構的設計以及程序的調控是小車過完一系列障礙。成果:採用履帶式加獨輪擺臂結構,將前輪做成傾斜式,與地面成30°夾角,通過諸如臺階,草坪時更加順暢。結論:目前機器人能夠按照大賽規定的要求,在最短時間內完成指定動作,並不會跑偏軌道。主要創新之處: 使用履帶和獨輪的配合使用能過掉所有障礙,車身後方添加的獨輪裝置。該裝置採用標準舵機爲裝置提供旋轉力,使其可以上下襬動,圓周舵機爲輪子提供動力。
關鍵詞 : 圓周舵機、白標傳感器、履帶、擺臂
ABSTRACT
Engineering robot mechanism design is the first problem of robot research and development. We according to the project environment, first determine the obstacle to the car’s overall design scheme, secondly according to the needs of the development progress, according to the important degree from high to low step by step to the institution design, fabrication, assembly and debugging, until meet the design requirements. Research purposes: the master using circular steering gear, White mark sensor, White mark sensor light of change of feeling to judge whether robots from orbit, then use the program to control the speed of left and right steering gear differential to fine tune, keep the robot not off track, through the control of mechanical structural design and procedure is the car after a series of obstacles. Results: the crawler and wheel swing arm structure, tilting of the front wheel make it, and ground into 30 ° Angle, through such as stairs, smooth lawn. Conclusion: at present, the robot can according to the requirements of the competition, in the shortest possible time to complete various tasks, track will not wandering. Main innovation: using crawler and wheel alone can cooperate to use over all the obstacles and rear bodywork add one-wheel device. The device adopts the standard servo device provides rotating force, make its can bobbing up and down, circular power steering gear for the wheels.
Keywords: circular steering gear, White mark sensor, caterpillar, swing arm



正 文

1.1 綜述

機器人是作爲現代高新技術的重要象徵和發展結果,已經廣泛應用於國民生產的各個領域,並正在給人類傳統的生產模式帶來革命性的變化,影響着人們生活的方方面面。隨着市場需求的變化和製造業迴流發達國家趨勢的顯現,我國製造業的弊端顯現,在當下工業4.0的時代,以機器人、智能製造爲主的新型生產方式,針對機器車過全地形的障礙爲小車修正機械結構與程序的調試使機器小車能夠在全地形的障礙中暢通無阻。

1.2 系統整體設計

本次比賽場地障礙較爲複雜,有高低臺階,草地,斜坡,石塊地形,隧道等多項複雜地形,因此,我們認爲機械車的最難點在於機械結構及軟件程序的調試兩部分。故截止最終確定機械結構及軟件程序時,經過不斷改進及調試設計了多種方案,期間也查閱了大量資料。

方案一
動起來,能夠識別路線是初步目標,因此,參照常見車輛結構,利用7*11孔面板、小輪,舵機,黑標傳感器,主板,電源及其他輔助零件組裝設計了小車,經過程序調試後,實現了初步目標,可以識別場地上的路線,自動調整小車方向實現直線行走和轉彎。
該方案結構簡單,因此有以下問題:
1.底盤太低,無法通過大部分障礙
2.動力不足
3.對地形的適應能力差
4.結構設計粗糙,有待優化
解決方法:
有問題太多,故方案二重新設計機械結構。







圖2-1
在這裏插入圖片描述

方案二
本次方案本想解決車身卡障礙的問題,因此設計了8個輪子,如下圖示例

圖2-2
在這裏插入圖片描述

該設計可以通過柵格及防滑帶這種容易被架空的障礙,因爲中間的3號輪子可以起支撐作用,但此設計弊端是車身前後重量差別較大,通過比如高臺階時,下臺階會出現翻車的現象。並且安裝傳感器的空間非常有侷限性。因爲還要添加其他傳感器和機械部件,因此該設方案的機械結構設計部分不可行。

方案三
該方案最大變化是將結構設計爲了履帶式的,此方案小車重量相對平穩,也可以通過草地,柵格,減速帶這類障礙,對地形的適應力良好,並且履帶的抓地力強,原地轉彎性好,隧道障礙寬度窄,因此原地轉彎非常有優勢。
但弊端是該結構的前後兩輪子間距短,且重心高,上斜坡容易前後翻車,容納傳感器的空間還是不足,而且履帶的行進速度慢,對比賽時間把控不利。

圖2-3
在這裏插入圖片描述

圖2-4(圖2-3中2號輪作爲履帶的張緊輪)
在這裏插入圖片描述

方案四

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

上圖是在方案三基礎上添加的可上下襬動的裝置。其目的在於希望改進通過所有障礙的順暢度和降低誤差率,最主要目的是克服車身太短,通過高臺時掉落的情況。
後面添加的擺動裝置主要起支撐和提高動力的作用,可增通過階梯,斜坡,草地時的速度。支撐輪作用是,當擺動裝置擡起時,履帶繃緊,而平放時,履帶鬆弛,需要支撐輪支撐一定高度,防止履帶脫落或者防止擡高過程中履帶與機械輪子的卡槽錯位。選擇兩個支撐輪是因爲該裝置長度不夠,一個支撐輪不能提供足夠高度,擺動裝置擡起時1號支撐輪是懸空狀態,無作用。整個裝置的擡起,依靠中間的舵機加連接杆支撐,從而實現裝置的上下襬動控制。

方案五
本方案對整體結構做出了很多細節性優化,除最終的高臺障礙以外,其餘的所有障礙都能順利通過,因爲是輪子結構,行進速度比履帶式快,但原地轉彎性能不如履帶式。

圖2-5
在這裏插入圖片描述

圖2-6
在這裏插入圖片描述

細節優化展示:
1.採用6輪結構,且中間輪子靠裏側,主要是在保證最小小車寬度的前提下,爲兩側色標傳感器的安裝留足夠空間。
2.孔面板橫向兩側各加了一個雙足支桿,增大小車平板面積,從而可以使輪子左右間距擴大,爲車身底部傳感器的安裝提供空間。
3.前後兩排輪子通過添加90度支架,增加前後輪距,爲底部傳感器的安裝增大空間,細節見圖2-7、2-8。該優化策略使車身變長,上下臺階時重心平穩,不會翻車。


圖2-7
在這裏插入圖片描述

圖2-8
在這裏插入圖片描述

4.除兩側的色標傳感器外,其餘的傳感器都在小車身下方,避免了爲傳感器添加輔助機械結構,而導致的比如車身長,程序編寫更復雜,通過障礙時傳感器卡障礙的等等潛在問題。這樣的結構設計也比較美觀,小巧靈活。

方案六
該方案對結構進行了很多地方的修正,優化和增減。
1.採用履帶式結構,但輪子的結構,根據之前經驗,將前輪做成傾斜式,與地面成30°夾角,通過諸如臺階,草坪時更加順暢。且在最後的高臺部分,獨輪擺臂式的結構會因爲車身中間懸空沒有支點而掉落,但履帶式則避免了該情況。
在這裏插入圖片描述


2.具有創新性思維的一點是,車身後方添加的獨輪擺臂裝置。該裝置採用標準舵機爲裝置提供旋轉力,使其可以上下襬動,圓周舵機爲輪子提供動力。如上圖所示
因爲小車動力不足,上斜坡會發生上不去或者速度非常慢的情況,在後方添加獨輪擺臂裝置,起支撐和輔助推動左右,有效增加了上坡平穩性和速度。且該裝置根據需求擡高和放下,在過高臺障礙部分,當小車後半身懸空時,獨輪裝置放下,提供支撐,避免了因爲行進速度慢而衝不過懸空間距掉落的情況。

3.該車身爲所有設計中最長的,將雙足支桿打磨爲與7*11孔平板相同寬度,爲其增加長度,一是爲履帶調試爲最佳配合效果,二是因爲爲過高臺而需要的長車身。並且長車身過臺階時車身傾斜角度更小,不易發生車身偏轉和翻車。
在這裏插入圖片描述

4.上圖爲色標傳感器的分佈圖,1-4號傳感器爲黑標傳感器,作用是判斷線路,1號和4號黑色標傳感器的位置精度要求比較高,其距離要與場地上鎖設置黑色線路等寬,若有偏差,小車會發生不斷左右擺動。5號和6號爲白色標傳感器,功能爲小車轉彎提供判斷指令。7號傳感器也爲白色標傳感器,功能爲小車提供判斷,當前位置爲障礙還是平地。
在這裏插入圖片描述

在這裏插入圖片描述

1.3 機械結構設計

機械結構的整體設計用到的零件有:5個圓周舵機、1個標準舵機、6個電機支架、6個輸出頭、1個U形支架、組裝式履帶、輪胎、10個J25小輪、4個J09墊片、7mm11mm孔平板、6個J05 90°支架、2個J23雙足支架、4個J11 機械手 20 mm、4個J12 機械手 40mm、J01 10mm滑軌、3個J13 機械手驅動、1塊J03 5mm7mm孔平板、ARM7主控板、P03 7.4V鋰電池、2個白標傳感器和5個黑標傳感器。以及各種型號的螺絲、隔離柱若干。

輪胎形式的輪子是以兩片J25小輪作爲主要支架,中間由4個M38內螺紋隔離柱作爲間隔將兩片小輪分開,在外側用M35的螺絲作爲連接件將其固定,再加上輪胎。在輪子中間加上和舵機的連接片,組合而成。
在這裏插入圖片描述

在這裏插入圖片描述

我們主要選擇履帶作爲整個車的行進方式,根據之前的以輪胎做行進方式的經驗,輪胎的抓地力更強,速度快,但是過高臺時當前輪通過時中兩個輪子中間的間距容易卡住;以及過一些障礙時因其速度以及各方面原因容易偏離;而履帶的驅動輪只卷繞履帶而不在地面上滾動,機械的全部重量都壓在多片履帶板上使機器的牽引附着性能要好的多,過障礙要比輪式機器好過。我們選擇的履帶形式的輪子是以兩片J25小輪作爲主要支架,中間由8個M313內螺紋隔離柱作爲間隔將兩片小輪分開,在外側用M35的螺絲作爲連接件將其固定,組合而成。選擇J25小輪作爲主要的輪子結構是因爲它大小適中,適合整體設計。而由8個M3*13內螺紋隔離柱作爲中間的支撐因爲正好適合履帶的大小,每個隔離柱的距離正好適合履帶的卡距,使驅動輪能夠更好的與履帶之間的齧合。
在這裏插入圖片描述

舵機選擇的是圓周舵機和標準舵機。
舵機參數
參數 轉速 扭力 轉動角度 額定電壓
標準舵機 0.13s/60° 2.9kg·cm 40.30磅·英寸 土90° 6V
圓周舵機 78r/min 2.2kg·cm 30.61磅·英寸 360° 6V
直流電機參數
減速比 額定電壓 額定電流 扭力 轉速
87 4.5V 180mA 5kgf·cm 69r/min
標準舵機的用途是製作擺動機構,如:關節模塊等;而圓周舵機的用途是製作圓周運動的機構,如:輪子等。而圓周舵機與直流電機的區別在於,舵機是由直流電機改造而來的,比直流電機多了電路板和電位器。圓周舵機能夠使用舵機函數比較方便地調整速度,只佔用一個單片機端口,而直流電機的調速則要設計定時器的配置和模擬量輸出函數,且通常需要佔據2~3個端口。直流電機控制方便,不容易燒壞,舵機堵轉後容易燒壞。舵機需要6V電壓才能工作,直流電機由電池直接供電,工作電壓是一個範圍。圓周舵機需要尋找中值,理論中值爲90,找到中值才能讓舵機靜止,而直流電機沒有這個參數,只要不供電就可以了。綜合考慮,結合機體結構,和過障礙的需要,選擇舵機作爲整個機器的動力提供。
主動輪的組成是圓周舵機和電機支架由4個M38螺絲將其固定,組合而成。共使用5個圓周舵機提供動力。其中4個主動輪和履帶連接,作爲主要的動力,另一個圓周舵機和輪胎結合組成一個輔助輪,主要是用來過障礙時提供動力和輔助作用。
選用一個標準舵機作爲擺動機構,用J01 10mm滑軌連接以圓周舵機和輪胎結合組成的輔助輪。主要提供輔助輪的起降作用。
用2個J09墊片中間以3個M3

13內螺紋隔離柱作爲間隔將兩片小輪分開,在外側用M35的螺絲作爲連接件將其固定,組合而成,作爲履帶的支撐輪。用1個J05 90°支架和1個J12 機械手 40mm與前輪舵機連接在一起,再用1個J11 機械手 20 mm固定在J05 90°支架和J12 機械手 40mm中間使其穩固,,兩個前輪均做成同樣的形式。
以7mm
11mm孔平板和一半J23雙足支架拼接成整個機器的主板,將已做好的4個舵機裝在主板上,使支撐輪與後輪在同一水平面上,支撐輪和前輪與地面形成的傾角爲30°。
這樣組裝的理念是使車身變長,在行走中更加穩定;而讓輪與地面形成30°的傾角的原因是爲了更好的過障礙,使其上障礙更加方便。用U形支架與標準舵機拼接,再以J03 5mm*7mm孔平板將後輪連接在一起與之前裝好的標準舵機拼裝在一起。 使其在巡線的時候能夠收起來,當過障礙時在使其放下來,其一是因爲履帶的摩擦力不夠,在過障礙時不能正常通過障礙,使其在後面提供一個動力,更方便通過障礙,其二是因在前輪做成傾角式,在過窄橋的時候會翻車,所以使其車身變得長一點,和重心往後調一下,保證其不會翻,,能夠穩定的從窄橋上下來;其三是爲了上高臺,因爲高臺和窄橋中間有一定的距離,原來的車身在上高臺的時候,當前身上去的時候後後邊脫離窄橋,重心在後邊會掉下去,所以加一個支撐使其在重心沒有通過窄橋和高臺中間的間隙時使其掉下去,其四在能夠滿足過其他障礙時有又能同時在不妨礙過隧道,在過隧道的時候能夠把其收起來。綜上所述,加上這個輔助輪能夠滿足一些以前不能夠過的障礙,同時還不妨礙過其它的障礙。
用1個J23雙足支架作爲主要模型,在輔以3個J12 機械手 40mm、2個J13 機械手驅動、2個J11 機械手 20 mm和1個J01 10mm滑軌做成一個裝置傳感器的模塊,使其成爲模塊化,這樣方便其拆卸和調試。
主控板選擇的是ARM7主控板,ARM7主控板是使用非常廣泛的一款主控板。它具有4個傳感器端口、六個舵機端口、2個輸出端口以及1個紅外通信端口。傳感器端口和紅外通信進行了反插處理,增加了使用安全性。一般的傳感器都是三根線,但是這款主控板的傳感器端口預留了一個備用針,因此都是四針的。同樣的處理在舵機端口也存在,舵機也是3根針的,因此在搭接時最上面一根針是空閒的,這些空閒的備用針爲後期二次開發提供了方便。所以選擇這款主控板。將其裝在車身的四分之三的位置處。電池選擇的是P03 7.4V鋰電池,將其裝在整個車身的四分之二處,因爲車身後邊加有輔助輪,整個重心靠後,所以將電池安裝在車身的前端,使其整個重心不至於整體偏後。
在這裏插入圖片描述












1.4 硬件設計

1、主控板部分(晶振:11.0592M)
我們此次選用ARM7爲主控板,其主要特點是ARM7系列是低功耗的32位RISC處理器中的一員(AdvancedRISCMachines),適用於對價位與功耗要求較高的一系列消費類應用。ARM7的內核是0.9MIPS/MHz的三級流水線和馮·諾伊曼結構。同時,ARM7TDMI提供了非常好的性能--功耗比。它包含了THUMB指令集快速乘法指令和ICE調試技術的內核.ARM7支持USB、藍牙、UCOS-Ⅱ操作系統、C語言、RRS圖形化軟件、手柄編程和用戶自定義開發。
微處理器系列
ARM7微處理器系列具有如下特點:
*具有嵌入式ICE-RT的邏輯,調試開發時方便。
*極低的功耗,適合對功耗要求較高的應用。
*提供了0.9MIPS/MHz的三級流水線結構。
*代碼密度高併兼容16位的Thumb指令集。
*對操作系統的支持廣泛,包括Windows CE、Linux、Palm OS等。
*指令系統與ARM9系列、ARM9E系列和ARM10E系列兼容,便於用戶的產品升級換代。
*主頻最高可達130MIPS,高速的運算處理能力能勝任絕大多數的複雜應用。
ARM7適用於那些需要功能強大的RISC處理器,可應用於系統電訊、數據通信、協議轉換、掌上電腦、自動控制系統、發動機管理、便攜式計算機、單元信息存貯、系統存儲卡、GSM終端控制等方面。
ARM7系列微處理器的主要的應用領域是:工業控制、Internet設備、網絡和調制解調器設備、移動電話等多種多媒體和嵌入式應用。
ARM提供一系列內核、體系擴展、微處理器和系統芯片方案。由於所有產品均採用一個通用的軟件體系,所以相同的軟件可在所有產品中運行。使用的產品如下(4_1)
在這裏插入圖片描述













                     (4-1)

我們使用的主控制板電路圖(4-2):
在這裏插入圖片描述

                     (4-2)

2、傳感器部分
傳感器的主要特點是:微型化、數字化、智能化、多功能化、系統化、網絡化,促進了傳統產業的改造、更新換代,且還可能建立新型工業。套件中包括了,閃動傳感器,通過光線的晃動來判斷。光強傳感器,通過感受光線的強度變化來判斷。聲控傳感器,通過感受聲響,接受距離大致2m以外。近紅外傳感器,感受紅外線物體的靠近。黑標傳感器、觸碰傳感器等。
傳感器數據採集,數據採集的意義與任務。在生產過程中,對工藝參數進行採集,爲提高質量。作用,能夠降低成本,提供準確的信息. 在科學研究中,獲取微觀, 動靜態的信息。 意義:爲了 解決依靠人不能解決的問題. 解決掉靠人不能解決的問題。其任務,採集傳感器輸出的模擬信號,並轉化成所需的數字信息,然後傳入,系統再對數字信號進行處理。其功能一般有:採集數據,按照採樣的週期,對模擬數字,開關信號進行採樣等。
在生產過程中要進行—個明確的測量工作,要考慮選用哪一種原理的傳感器,這就要分析傳感器的多方面因素,進而確定。即便在測量同一物理量時,就會有多種原理的傳感器可以選用,那麼何種原理的傳感器更加合適,就需要根據被測量的特點和傳感器的使用條件考慮到以下的一些具體問題:量程的大小;測量方式爲接觸式還是非接觸式;被測位置對傳感器體積的要求;信號的引出方法,有線、是非接觸測量;傳感器的來源,國產或是進口,價格是否承受。
此次我們選用了得是白標傳感器,屬於中斷型。其主要參數有:線性度、靈敏度、遲滯、重複性、漂移等。可識別到1cm以上寬度的白色標記,在較近的距離檢測到障礙。(工作電壓4.4-5.5V,工作電流:1.2mA)
在這裏插入圖片描述




3、舵機部分
套件中包括16個標準舵機,8個圓周舵機,具有速度和角度的調節功能。我們使用的是圓周舵機,其可以作爲直流電機使用。(工作電源:4.8-6V,其工作電源:10mA;扭力:2.2kg/cm)。
圓周舵機是在標準舵機的基礎上進行改造,拆除了標準舵機中電位器和減速箱之間的反饋電路,導致標準舵機的電機不能夠判斷自身的轉動角度,進而持續轉動,因此,圓周舵機在軟件控制原理上與標準角度舵機相同,由PWM來控制。好比,在相同的控制參數下,對標準舵機是控制轉動角度,而對圓周舵機而言,是控制轉速。
舵機控制函數Servo(uint8 Num,uint16 Ang),第一個參數爲插接在主控制板上的輸出端口的序號,第二個參數的範圍在0~180之間,該參數對圓周舵機而言,越接近0或180,舵機轉動速度越快,反之越慢,參數等於90時圓周舵機停止轉動,由於舵機硬件的誤差,舵機停止轉動的參數往往不等於90,一般是在90左右。因此,圓周舵機的停止參數值大小需要人爲的設定,對圓周舵機的控制也以此值爲標準。
在這裏插入圖片描述



本次的主要參數:
單片機工作頻率:2MHz
串口速率:9600bps
紅外檢測距離:20cm-500cm
機器人最快速度:78mm/s
編碼器分辨率:33脈衝/轉
驅動輪直徑:75mm,寬度:21mm
兩驅動輪中心矩:155mm






1.5 軟件設計

程序的編寫
*1電源接口和電池接口

	#include "config.h" 
	#include "lib_io.h"
	#include "lib_arm.h"
	#include "lib_io_uart_lpc2138.h"
	int main(void)
	{
		 
		
	Initial_ARM();




	
	
	{
int s;
int i;
int a;



while(1)
{   
	s=0;
	for (i=0;i<3;i++) //依次讀取3個傳感器的觸發狀態,並給變量s的低3位分別置0或者置1
	{
		s=s|(Input(i+1,1)<<i);
		
		if (Input(i+1,1)==1) LedIn(i+1,2);
		else LedIn(i+1,0);
		
		
	}

	switch (s) //根據變量s低3位所存儲的傳感器觸發狀態,分別讓小車的左轉、右轉或直行
	{
	
	case 0x01 : if(GPIO_In(0,28,0)==1)
				{LedIn(1,1);


				GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(200);
				Servo(2,120);
		Servo(3,120);	
		Servo(4,50);
		Servo(5,50);
		Delay(200);
				
				GPIO_Out(0,7,0);    //P2
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(1000);
				Servo(4,140);
				Servo(5,140);
				Servo(2,140);
				Servo(3,140);
				Delay(1200);
				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(700);
			}
	
	
	
		
		else
		
		{GPIO_Out(0,7,0);    //P2
		GPIO_Out(0,8,0);//P3
		Servo(4,120);
		Servo(5,120);
		Delay(100);}
		break;
		
		
		
		
		case 0x02 :
		Servo(2,50);
		Servo(3,50);	
		Servo(4,120);
		Servo(5,120);
		Delay(200); break;
		
		
		
		
		
		case 0x04 :if(GPIO_In(0,28,0)==1)
				{LedIn(1,1);


				GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(200);
				Servo(2,120);
		Servo(3,120);	
		Servo(4,50);
		Servo(5,50);
		Delay(100);
				
				GPIO_Out(0,7,0);    //P2
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(1000);
				Servo(4,50);
				Servo(5,50);
				Servo(2,50);
				Servo(3,50);
				Delay(1000);
				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(700);
			}
			
			
			
			GPIO_Out(0,9,0);    //P4
		GPIO_Out(0,0,0);//P5
		Servo(2,50);
		Servo(3,50);
		Delay(100); break;
	
	
		
		
		
		
		case 0x05 :GPIO_Out(0,7,0); 
	
		
		
		
		GPIO_Out(0,8,0);//P3
		GPIO_Out(0,9,0);//P4
		GPIO_Out(0,0,0);
		Servo(2,50);
		Servo(3,50);	
		Servo(4,120);
		Servo(5,120);
		
			DelayNS(300);
		
		break;//P5
		
		
		
		
		
		
	
	 case 0x07 :  
	
		  if(Input(4,1)==1)
		{
			LedIn(1,1);
			LedIn(2,1);
			LedIn(3,1);
			LedIn(4,1);
		
	    
		Servo(2,50);
		Servo(3,50);	
		Servo(4,120);
		Servo(5,120);
		
			DelayNS(2000);
		 
		 }
		 
		 
		 else
			 
			
			 				{
				GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(400);
				

				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(400);
			}
		
		
		
		
		
		
		
		
		
		break;//P5
		
		default:
		
		GPIO_Out(0,9,0);//P4
		GPIO_Out(0,0,0);//F5
		
		Servo(2,50);
		Servo(3,50);
		Delay(50);
				 
			 
			 
		
		break;
	}
}
return(1);
        
		
	
	}
	
}

*2
#include “config.h”
#include “lib_io.h”
#include “lib_arm.h”
#include “lib_io_uart_lpc2138.h”
int main(void)
{





	Initial_ARM();




	
	
	{
int s;
int i;
int a;



while(1)
{   
	s=0;
	for (i=0;i<3;i++) //依次讀取3個傳感器的觸發狀態,並給變量s的低3位分別置0或者置1
	{
		s=s|(Input(i+1,1)<<i);
		
		if (Input(i+1,1)==1) LedIn(i+1,2);
		else LedIn(i+1,0);
		
		
	}

	switch (s) //根據變量s低3位所存儲的傳感器觸發狀態,分別讓小車的左轉、右轉或直行
	{
	
	case 0x01 : if(GPIO_In(0,28,0)==1)
				{LedIn(1,1);


				GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(200);
				Servo(2,120);
		Servo(3,120);	
		Servo(4,50);
		Servo(5,50);
		Delay(200);
				
				GPIO_Out(0,7,0);    //P2
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(1000);
				Servo(4,140);
				Servo(5,140);
				Servo(2,140);
				Servo(3,140);
				Delay(1200);
				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(700);
			}
	
	
	
		
		else
		
		{GPIO_Out(0,7,0);    //P2
		GPIO_Out(0,8,0);//P3
		Servo(4,120);
		Servo(5,120);
		Delay(100);}
		break;
		
		
		
		
		case 0x02 :
		Servo(2,50);
		Servo(3,50);	
		Servo(4,120);
		Servo(5,120);
		Delay(200); break;
		
		
		
		
		
		case 0x04 :if(GPIO_In(0,28,0)==1)
				{LedIn(1,1);


				GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(200);
				Servo(2,120);
		Servo(3,120);	
		Servo(4,50);
		Servo(5,50);
		Delay(100);
				
				GPIO_Out(0,7,0);    //P2
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(1000);
				Servo(4,50);
				Servo(5,50);
				Servo(2,50);
				Servo(3,50);
				Delay(1000);
				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(700);
			}
			
			
			
			GPIO_Out(0,9,0);    //P4
		GPIO_Out(0,0,0);//P5
		Servo(2,50);
		Servo(3,50);
		Delay(100); break;
	
	
		
		
		
		
		case 0x05 :GPIO_Out(0,7,0); 
	
		
		
		
		GPIO_Out(0,8,0);//P3
		GPIO_Out(0,9,0);//P4
		GPIO_Out(0,0,0);
		Servo(2,50);
		Servo(3,50);	
		Servo(4,120);
		Servo(5,120);
		
			DelayNS(300);
		
		break;//P5
		
		
		
		
		
		
	
	 case 0x07 :  
	
		  if(Input(4,1)==1)
		{
			LedIn(1,1);
			LedIn(2,1);
			LedIn(3,1);
			LedIn(4,1);
		
	    
		Servo(2,50);
		Servo(3,50);	
		Servo(4,120);
		Servo(5,120);
		
			DelayNS(2000);
		 
		 }
		 
		 
		 else
			 
			
			 				{
				GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(400);
				

				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(400);
			}
		
		
		
		
		
		
		
		
		
		break;//P5
		
		default:
		
		GPIO_Out(0,9,0);//P4
		GPIO_Out(0,0,0);//F5
		
		Servo(2,50);
		Servo(3,50);
		Delay(50);
				 
			 
			 
		
		break;
	}
}
return(1);
        
		
	
	}
	
}

*3
#include “config.h”
#include “lib_io.h”
#include “lib_arm.h”
#include “lib_io_uart_lpc2138.h”
int main(void)
{





	Initial_ARM();




	
	
	{
int s;
int i;
int a;



while(1)
{   
	s=0;
	for (i=0;i<3;i++) //依次讀取3個傳感器的觸發狀態,並給變量s的低3位分別置0或者置1
	{
		s=s|(Input(i+1,1)<<i);
		
		if (Input(i+1,1)==1) LedIn(i+1,2);
		else LedIn(i+1,0);
		
		
	}

	switch (s) //根據變量s低3位所存儲的傳感器觸發狀態,分別讓小車的左轉、右轉或直行
	{
	
	case 0x01 :
		if(GPIO_In(0,27,0)==0)
				{
					
				
					
					LedIn(1,1);
		        
		        GPIO_Out(0,7,0);
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(200);
				Servo(2,120);
		        Servo(3,120);	
		        Servo(4,50);
		        Servo(5,50);
		    
				GPIO_Out(0,7,0);    //P2
				GPIO_Out(0,8,0);//P3
				GPIO_Out(0,9,0);//P4
				GPIO_Out(0,0,0);
				Delay(800);
				Servo(4,140);
				Servo(5,140);
				Servo(2,140);
				Servo(3,140);
				Delay(1000);
				Servo(2,50);
				Servo(3,50);
				Servo(4,120);
				Servo(5,120);
				Delay(400);}
			
		
			
			
	else
		
		
		
		Servo(2,80);
		Servo(3,80);	
		Servo(4,100);
		Servo(5,100);
		Delay(50);
		
		
		break;
		
		
		
		
		case 0x02 :
		Servo(2,45);
		Servo(3,45);	
		Servo(4,110);
		Servo(5,110);
		Delay(200); break;
		
		
		
		
		
		case 0x04 :
			if(GPIO_In(0,28,0)==0)
				{
					if(Input(4,1)==1)
		{
			LedIn(1,1);
			LedIn(2,1);
			LedIn(3,1);
			LedIn(4,1);
		
	    
		Servo(2,55);
		Servo(3,55);	
		Servo(4,120);
		Servo(5,120);
		
			DelayNS(1000);
		 
		 }
		 
		 
		 else
				
					
					
										{
					LedIn(2,1);


					GPIO_Out(0,7,0);
					GPIO_Out(0,8,0);//P3
					GPIO_Out(0,9,0);//P4
					GPIO_Out(0,0,0);
					Delay(200);
					Servo(2,120);
					Servo(3,120);
					Servo(4,50);
					Servo(5,50);
					
					GPIO_Out(0,7,0);    //P2
					GPIO_Out(0,8,0);//P3
					GPIO_Out(0,9,0);//P4
					GPIO_Out(0,0,0);
					Delay(1000);
					Servo(4,50);
					Servo(5,50);
					Servo(2,50);
					Servo(3,50);
					Delay(850);
					Servo(2,50);
					Servo(3,50);
					Servo(4,120);
					Servo(5,120);
					Delay(400);
				}
			}
			
		else
	
		Servo(2,80);
		Servo(3,80);	
		Servo(4,90);
		Servo(5,90);
		Delay(50);   //zuo
			
		 break;
	
	
		
		
		
		
		case 0x05 :
	    GPIO_Out(0,7,0); 
	    GPIO_Out(0,8,0);//P3
		GPIO_Out(0,9,0);//P4
		GPIO_Out(0,0,0);
		
		Servo(2,120);
		        Servo(3,120);	
		        Servo(4,50);
		        Servo(5,50);
				Delay(30);
		break;//P5
		
		
		
		
		
		
	
	 case 0x07 :  
	
		  if(Input(4,1)==1)
		{
			LedIn(1,1);
			LedIn(2,1);
			LedIn(3,1);
			LedIn(4,1);
		
	            
				

				Servo(2,45);
		Servo(3,45);	
		Servo(4,110);
		Servo(5,110);
				Delay(400);
		 
		 }
		 
		 
		 else
			 
			
			 				{
				

				Servo(2,45);
		Servo(3,45);	
		Servo(4,110);
		Servo(5,110);
				Delay(100);
			}
		
		
		
		
		
		
		
		
		
		break;//P5
		
		default:
		
		
		Servo(4,120);
		Servo(5,120);
		Servo(2,50);
		Servo(3,50);
		Delay(50);
				 
			 
			 
		
		break;
	}
}
return(1);
        
		
	
	}
	
}

*4
GPIO_Out(0,28,1);//s1 p2
GPIO_Out(0,27,1);//s2 p3
GPIO_Out(0,11,0);//s3 p5
GPIO_Out(1,22,1);//led p6



UART0_Init(); //取消註釋後,可啓動串口接收中斷

	Initial_ARM();


	{
int s;
int i;
int b;



while(1)
{   for (i=0;i<5000;i++) //依次讀取3個傳感器的觸發狀態,並給變量s的低3位分別置0或者置1
	{ if (Input(1,1)==1) b=1;
			else b=0;
		
		
		
	}

		
	

	UART0_SendByte(b);
	DelayNS(20);
	b=0;
}

        
	}

}
1.舵機控制
讓小車做出一系列動作的核心是舵機的控制,在實驗器材中的圓周舵機和標準舵機(可以180°的範圍內指定角度的旋轉)中,我們選用了圓周舵機,能夠實現正反向圓周轉動。
通過多次的實驗,發現圓周舵機能夠控制的範圍在0到180,在90°時舵機停止了。從舵機外部看,大於90順時針旋轉,小於則是逆時針旋轉,若值偏離90越大,速度越大。瞭解到了兩種舵機的特性後,選用了圓周舵機用於輪子的傳動,通過對左右輪的旋轉角度,速度的控制,實現小車的左轉、右轉、前進、後退等一系列動作具體見程序。因爲圓周舵機的初始位置和數值的對應關係不確定,因而要通過實驗來確定好參數。


2.傳感器控制
本次套件中包含了有許多傳感器,初步方案中我們選用了,黑標、白標傳感器,通過一次次實驗,發現使用白標傳感器較爲合理,能控制到所需的距離,其能對外部環境不同條件的信息接收。獲到正確的傳感器輸入值,作出相應的反應動作。

1.6 系統開發與調試

1.舵機的種類
在我們能夠使用的舵機有,標準舵機與圓周舵機。
標準舵機各類參數,轉速0.13s/60°,扭力2.9kg·cm/40.30磅·英寸,轉動角度±90°,額定電壓6v。
圓周舵機各類參數,轉速78r/min,扭力2.2kg·cm/30.16磅·英寸,轉動角度360°,額定電壓6v。
2.舵機的選取
在舵機的選取中我們選擇了圓周舵機來作爲機器人運動時輪子旋轉的驅動裝置,以此捨去了標準舵機。在參數中可見標準舵機轉動的角度限制,無法滿足我們的所需條件。
工作原理:舵機三根線分別爲GND(黑色)、Vcc(供電,紅色)和信號線(白色),控制電路板接受來自信號線的控制信號,控制電機轉動,電機帶動一系列齒輪組,減速後傳動至輸出舵盤。舵機的輸出軸和位置反饋電位計是相連的,舵盤轉動的同時,帶動位置反饋電位計,電位計將輸出一個電壓信號到控制電路板,進行反饋,然後控制電路板根據所在位置決定電機轉動的方向和速度,從而達到目標停止。其工作流程爲:控制信號→控制電路板→電機轉動→齒輪組減速→舵盤轉動→位置反饋電位計→控制電路板反饋。
傳感器:在我們能夠使用的傳感器有,觸碰傳感器,觸碰開關閉合時觸發,可用作按鈕或碰撞開關,接觸式感應;觸鬚傳感器,彈簧向兩側彎曲時觸發,可做仿生昆蟲觸角,接觸式感應;光強傳感器光線變暗時觸發,可用作仿生夜間生物活動的觸發裝置;近紅外傳感器,接收端前方5cm以內有障礙物時觸發,可用於避障、跟隨等;黑標傳感器,可識別白色背景中的黑色區域、空曠空間,可用於走黑標和懸崖識別;白標傳感器,可識別黑色背景中的白色區域,可用於機器人走白標;聲控傳感器,接收到50分貝以上聲音時觸發,如正常拍手,可用作聲控裝置;控傳感器閃動傳感器,接收到光線明暗閃爍時觸發,可用於識別物體經過、揮手、閃光等。
傳感器的選取:在根據現有的條件和環境,我們初步選取了黑標傳感器和白標傳感器。在機器人的組裝完成之後,我們選擇了黑標傳感器。根據黑標傳感器的光感變化的強弱,來判斷機器人是否偏離了運行軌道。再使用程序來控制左右舵機的轉速差來微調,保持機器人不偏離軌道。我們在讓機器人過草坪時會卡在草坪上。原因是因爲安裝在機器人上的黑標傳感器的位置太低,阻礙了機器人的運行。於是我們捨去了黑標傳感器,轉而選擇白標傳感器。
工作原理:在我們使用的白標傳感器是通過把光強度的變化轉換成電信號的變化來實現的控制,光電傳感器一般分爲:發送器、接收器和檢測電路。發送器對準目標發射光束,發射的光束一般來源於半導體光源,發光二極管(LED)、激光二極管及紅外發射二極管。光束不間斷地發射,或者改變脈衝寬度。接收器有光電二極管、光電三極管、光電池組成。在接收器的前面,裝有光學元件如透鏡和光圈等。在其後面是檢測電路,它能濾出有效信號和應用該信號。此外,光電開關的結構元件中還有發射板和光導纖維。三角反射板是結構牢固的發射裝置。它由很小的三角錐體反射材料組成,能夠使光束準確地從反射板中返回,具有實用意義。它可以在與光軸0到25的範圍改變發射角,使光束幾乎是從一根發射線,經過反射後,還是從這根反射線返回。
ARM7主控板:ARM7是一塊嵌入式芯片的主控板。美國電氣和電子工程師協會對嵌入式系統的定義:“用於控制、監視或者輔助操作和設備的裝置。”中國國內普遍認同的定義:以應用爲中心,計算機技術爲基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。它總共有4個輸入端口,6個舵機端口、2個輸出端口以及1個紅外線通信端口。
調試:在機器的運行過程中,我們發現機器人在走巡線時走不直,過障礙時總是會跑偏。於是我們調整了,舵機之間的平行度和垂直度。讓誤差最小化,再次運行時就發現這些問題都有所改善,但是並不是做得更好。每個細節的誤差,到最後都會被反應成一個更大的誤差。爲了讓機器在走巡線的時候更加的平直,我們在程序裏細化了這部分的微調。當外部硬件與程序的精密控制。在過巡線時,基本滿足了我們的要求。在過巡線的時候轉彎的地方,機器總是不能正確的拐彎。會在程序里加入自動修正的程序,以此來達到來辨識。在爬坡的時候,機器人是上不去的。於是我們分析是動力不足,於是調大了動力的。依舊存在爬坡無力的情況。再次分析過後,我們將機器人的輪子換成履帶,來增大與斜坡的摩擦力。情況得到改善。爬上斜坡之後,在下坡的階段,機器人是從斜坡上翻下來。而非正常的滑下,於是我們做出調整,將機器的重心降低。再次運行的時候便沒有出現類似的狀況。我們讓機器在階梯上運行,總是出現機器偏向一邊的狀態。我們初步分析,可能是支撐點與重心不重合,於是機器總是歪向一遍。經過分析我們在車尾,加了一個導向輪以此來彌補上臺階的缺陷。再次運行的時候,這種情況得到改善。 在上高臺的部分,總是會出現從會從中間掉下去。前面已經搭上高臺,後方掉下去。我們認爲是動力不足的原因,但是並不是這個原因。我們試圖在車尾搭一個架子來,來彌補懸空的前方動力的不足。再次運行,機器上高臺。後尾的輪子,顯然彌補了很大的空間。機器在上高臺上,即便以小於90°的方向上高臺,車子依舊正常運行。










1.7 結論

整個設計過程中,在機器人的機械結構上我們曾經遇到了很大的困難,好幾次的設計 都由於設計不符合要求已經被改的面目全非,好在團隊成員的團結合作下,最終解決了機械機構問題。,按照理論規劃的數據在加上我們的實際操作,我們最終確定使用方案六參加此次“中國工程機器人大賽暨國際公開賽”,原因是方案六完全解決了前五個方案所產生的問題,不會再出現:底盤太低,無法通過大部分障礙、動力不足,無法衝上斜坡、重心高,上斜坡容易前後翻車,容納傳感器的空間不足,履帶的行進速度慢,無法上高臺等問題。方案六靈活的採用履帶式和單輪結合的機械結構,在輪子的結構上,根據之前經驗,將前輪做成傾斜式,與地面成30°夾角,使車子過臺階和草坪柵格等障礙時更加順暢。具有創新性思維的一點是,車身後方添加的獨輪裝置。該裝置採用標準舵機爲裝置提供旋轉力,使其可以上下襬動,在履帶車後方添加獨輪裝置,起支撐和輔助推動左右,有效增加了上坡平穩性和速度。且該裝置根據需求擡高和放下,在過高臺障礙部分,當小車後半身懸空時,獨輪裝置放下,提供支撐,避免了因爲行進速度慢而衝不過懸空間距掉落的情況。
整個工程車的研發無疑是一個充滿辛苦的過程,在團隊成員的共同努力下,我們最終完成了整個工程車的調試製作。

參考文獻
【1】郭天祥,51單片機C語言教程-入門、提高、開發、拓展全攻略,北京,電子工業出版社,2009,(1):8-16,(2):17-20:(3):41(4):521-522
【2】王濱生、劉輝、劉佳男、鄭世傑、毛文睿,模塊化機器人創新教學與實踐:“探索者”模塊化機器人平臺系列,哈爾濱,2016,(1):4-22
(2):28-31(3):202\


致 謝

在做過障礙小車的過程中,我們發現做這個做小車本身就是一個很好的學習機會,機器人 大賽給我們一個自我鍛鍊與學習的機會,在完成自小車機械製作的過程中,我們計劃安排了時間。在機械確定、硬件設計方面,我們比較挑選方案,親手製作了多個模型,通過網絡、 實地購買,才完整買到所有電子元件。進行軟件編程時,遇到了各式各樣的麻煩,我們盡心與耐心,一部分一部分進行調試,最終進行總體調試,當我們看到整個機器人開始工作時,先前的所有辛苦與疲憊也灰飛煙滅。能夠完成作品,那種成就感和欣慰,沒有經歷是永遠無法體會其中那份無以言表的感受。能順利完成這件作品,首先感謝我們的指導老師陸翔宇老師,他密切關心作品的進度,耐心指導,給我們所需的幫助。在整個過程中學習和體會了很多東西,不僅加強了我們的動手能力,在專業技術和知識方面也有所鞏固和加深。我們的交際能力也得到了鍛鍊,還開拓了我們的視野,同時也給予了我們書本上學不到的知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章