智能車總結.doc_第1頁
智能車總結.doc_第2頁
智能車總結.doc_第3頁
智能車總結.doc_第4頁
智能車總結.doc_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

_ 智能車電磁組總結專 業(yè): 信息安全(保密方向) 班 級: 09091401 姓 名: 李龍 學 號: 2014302479 暑期我在智能車基地進行了自己的暑期生產實習,和隊友在之前搭建的智能車基礎上進行完善和改進,參加了恩智浦杯智能汽車競賽。我想本次的實習報告從智能車原理和算法設計上進行敘述。電磁類智能車概述智能車顧名思義便是可以按照預先設定的模式在特定的環(huán)境中自由的運動而不受人為的干預的小車,除了可以自動循跡(沿著特定的軌道跑),他還可以實時顯示自己的各種運動狀態(tài),如:速度,里程,實時輪胎打角狀況等。要實現它的自動化,小車便由三部分組成的傳感器部分、控制部分和執(zhí)行部分。首先傳感器部分便是智能車的眼睛,它用來收集智能車所在環(huán)境中的有用信號,將收集到的模擬信號轉化為數字信號以此為依據進行相應的控制,我們組所做的是電磁類的智能車,傳感器便是電感,通過測量電感所產生的電壓來判斷小車在賽道的位置,由于電壓大小與和導線的距離有關,所以這種方式可以實現位置檢測。測量具體原理如下,有畢奧-薩伐爾定律可知,通有穩(wěn)恒電流I、長度為L的直導線周圍會產生磁場,距離導線距離為r處的磁感應強度為:B=u0I4r(cos2-cos1)對于無線長直導線先來說,上式中2等于,1等于0,u0為真空磁導率,則:B=u0I2r位于磁場中的電感線圈的感應電動勢近似為:E=dtdt=dBSdt=SdBdt=Su02r2dIdt=Su02r2K Ex=KSu02hx2+h2其中Ex為水平方向上的感應電動勢分量(我們將電感臥式放置),x為距離導線的水平距離,h為高,故感應電動勢的大小正比于電流的變化率K,反比于距離r2,由于K是定值,故可通過測量E獲得水平距離r值。接著是控制部分,這部分主要是接受傳感器部分測量的信號進行計算分析,根據預先編進程序的策略傳送出控制信號給各部分執(zhí)行單位,控制部分主要是單片機,我們所用的是K60,他通過ADC模塊接收傳感器模塊傳進來的電壓信號并進行模數轉化,并經過一系列的數據處理得到電壓值,通過電壓的計算得出小車在賽道中的位置值,以此為依據進行相應的控制,當然還接受其他部分傳進的信心以便更精細的控制,如編碼器等。一是轉向控制,當計算出的位置值比較大時,說明小車已經偏離賽道中央或者正在彎道中,這時小車應該向賽道中央拐,控制部分通過FTM定時模塊輸出PWM波到執(zhí)行部分中的舵機中,使舵機進行相應方向的打角讓小車回到賽道中央,為了在不同的車速下確保小車能夠及時回到賽道中央,多級的轉角大小應該對應小車位置的大小,PWM波的占空比決定舵機(步進電機)轉動的角度,具體PWM波的計算在后面會給出。二是速度控制,對于競速型的智能車,速度是小車的關鍵,小車要能夠在保證不沖出賽道的情況下盡量提高速度,這就需要小車具有非常靈敏的加減速功能,除去小車輪胎摩擦力和傾角外等一些硬件方面的因素外,加減速功能主要是通過控制部分的相應功能實現,單片機可通過輸出PWM波到驅動模塊使電機轉動,當然可以改變占空比來控制電機轉動的快慢,從而控制速度的大小,加減速控制的時機和速度的大小可以通過相應的算法進行判斷。最后是執(zhí)行部分,一是舵機模塊,這部分不需要驅動電路,只需將單片機的PWM波輸入到舵機相應的引腳就可以,舵機內部有自己的基準波形,他和輸入的PWM波的占空比等相比較從而決定正轉還是反轉以及轉動的角度。電機模塊有電機的驅動電路和電機本身,一般電機只要通電就可以轉動起來,但要控制其轉動的快慢就需要驅動電路實現電機轉速的控制,同時驅動電路還可以提供相應的電壓。程序設計一、位置獲取方式由電感采集的感應電動勢信號通過信號板輸入單片機的ADC模數轉換模塊的各個端口,單片機將其轉化為數字信號后,可將其作為此刻的電動勢值,每個傳感器每次采集100次數據,然后計算這100次采集的數據中最大值和最小值之差,作為電壓值。由于各個電感固定的位置不同,所測量到的電壓范圍也會有所不同,這些數據便不能直接進行比較或計算,為了能夠很好地處理數據,我們通過歸一化將各個電感的數據統(tǒng)一到同一個范圍之內,這樣便可以進行比較計算了,同時歸一化還可以消除因賽道電流變化產生的誤差,實時地反映賽道的真實狀況,因為歸一化采用的是相對值,不易受絕對數據變動而產生的影響。歸一化的公式為:最終值=當前值-最小值最大值-最小值*設定范圍這部分的程序為:void signal_collecting(void) /傳感器信號采集函數 uint8 i; for(i=0;i100;i+) /每個傳感器采集100次數據 sensor0i = LPLD_ADC_Get(ADC1, AD10); sensor1i = LPLD_ADC_Get(ADC1, AD8); sensor2i = LPLD_ADC_Get(ADC1, AD9); sensor3i = LPLD_ADC_Get(ADC0, AD12);sensor4i = LPLD_ADC_Get(ADC0, AD13);sensor5i = LPLD_ADC_Get(ADC1, AD11); sensor6i = LPLD_ADC_Get(ADC1, AD12); sensor7i = LPLD_ADC_Get(ADC1, AD13); sensor8i = LPLD_ADC_Get(ADC0, AD14); sensor9i = LPLD_ADC_Get(ADC0, AD15); for(i=0;i10;i+) peaki = CalcMaxToMin(sensori); /傳感器信號采集峰值計算 unityi = 300*peaki/maxi; /歸一化公式 uint16 CalcMaxToMin(uint16 data100) /峰值計算函數 uint16 Max = 0; uint16 Min = 0; uint16 i = 0; Max = data0; Min = data0; for(i=0;i Max) Max = datai; /選取數組中最大值 if(datai 0) dis = sqrt(distance); else dis = 0; return dis;float32 Dis_Get1(void) /提線函數1 float32 dis_error; if(unity3unity1) /由13兩個電感值的大小來判斷小車的方向 dis_error=Distance2; /偏左,返回正值 else dis_error=(-1)*Distance2; /偏右,返回負值 return dis_error;二、舵機控制PD算法得到了位置信息之后,我們便可以通過它來進行舵機的控制,我們對于舵機的控制采取位置式PD算法,即:舵機PWM=中間值-P*位置矢量值-D*與前一次位置矢量值之差P為比例系數,它所起的作用便是以最快速度(一次性)減小與目標PWM占空比之間的差距,只要有偏差它便起作用,當偏差為0時它便失去作用,系統(tǒng)保持在平衡狀態(tài),但它很容易產生超調,調節(jié)得太過了,這樣下一次又會往回調,來來回回就容易產生振蕩,不易在短時間內達到目標值,此時就需要D來解決,D為微分系數,與他相乘的便是位置量變化的微分,微分反映位置變化的速率,所以D控制具有一定得預見性,使得在產生偏差之前就消除了偏差,從而一定程度上避免了系統(tǒng)產生超調,至于另外一個積分調節(jié),他是用來消除靜態(tài)誤差的,但由于他積累了每次調節(jié)所產生的誤差,使得系統(tǒng)變化比較大,不易使用。為了防止舵機打角超過一定范圍會因為輪胎卡住而損壞舵機,我們應該限定舵機打角的范圍,另外還有一種異常情況是當電感偏離賽道太遠時,所收集到的電磁信號變得非常小,以至于判斷方向的兩個電感采集的值大小相等,從而舵機不打角甚至向相反的方向打角,使得小車亂跑,這是小車丟線了,為了防止丟線,我們應該在小車失去判別方向能力的前一時刻防止小車大范圍打角,即保持之前的打角狀況,我們來檢測小車是否丟線的方法便是判斷與前一次位置矢量之差是否大于一個閾值,或者直接判斷位置矢量是否超過一個范圍,若是則采取相應的防丟線措施。這部分的程序如下:void rudder_control(void)If(Dis_Error60|Dis_Error 5370 ) rp.rudder_PWM = 5370;if(rp.rudder_PWM 4570 ) rp.rudder_PWM = 4570;LPLD_FTM_PWM_ChangeDuty(FTM3, /使用FTM3 FTM_Ch1, /使用Ch1通道 rp.rudder_PWM); /舵機占空比賦值三、電機控制算法1、目標速度設定我們在這部分控制中進行速度的設定與控制,首先在速度的設定中我們以位置變化速率為依據,選一個速度設定依賴值trend(初始值為0),根據trend的值的范圍選定不同的速度,當位置變化率比較小時,說明小車此時跑的賽道彎度不是很大或者在當前速度下小車跑的姿態(tài)很好,能跟得上軌跡的變化,此時小車可以嘗試再加一點速度,則令trend+,而當位置變化率比較大并且超過了設置的閾值,說明小車此時遇到了大角度彎道或者小車自身速度太快了,已經不能隨著軌跡的快速變化調整自己的位置,此時需要的是快速降速以便小車能夠及時調整自己的位置,這時我們令trend=/2,這種增加降除的策略能夠很好的適應加速平滑減速迅速的需要。最后實時目標速度的設定可以根據現有的trend值得范圍來確定,trend越大,設置的目標速度就越高。接著我們還考慮到小車跑時的姿態(tài)問題,如果小車過彎時在彎道中間或靠近彎道外側時,同樣的速度下在同一時間內肯定沒有切內彎跑得遠,而且太靠近彎道外側速度不容易提高,因為按照之前位置確定的計算方式下,當電感離中心線太遠時,所采集到的電壓值每變化12個單位,位置值則跳變1020,這樣按照我們目標速度設定方法,目標速度就不易提高,但若小車是切內道跑的,可以避免這個問題并且明顯減少跑完一圈所用的時間。要想切內道跑我們所采取的策略是在設置的目標速度上減去與小車位置有關的變量,小車離中心導線越遠,在原來目標速度的基礎上減的就越多,小車就能及時跟得上軌跡變化并且還能靠近彎的內道,當小車在彎內跑平穩(wěn)了還可以加速。目標速度設定的程序如下:void targetspeed(void) /目標速度設置函數standderror = ABS(error9)-ABS(error7); /求位置變化率 if(standderror=0.8 & trend1) trend /= 2; if(trend55)mp.targetspeed =1800 - ABS(rp.rudder_PWM-RUDDER_MID)/40; else if(trend45)mp.targetspeed =1700 - ABS(rp.rudder_PWM-RUDDER_MID)/50; else if(trend30)mp.targetspeed =1600 - ABS(rp.rudder_PWM-RUDDER_MID)/60; else if(trend20)mp.targetspeed =1500 - ABS(rp.rudder_PWM-RUDDER_MID)/70; else if(trend10)mp.targetspeed =1400 - ABS(rp.rudder_PWM-RUDDER_MID)/80;else mp.targetspeed =1400 - ABS(rp.rudder_PWM-RUDDER_MID)/90;if(mp.targetspeed 1800) mp.targetspeed = 1800;if(mp.targetspeed 1300) mp.targetspeed = 1300;2、速度控制算法(增量式PD)目標速度設置好后,還需要速度控制策略保證小車按照目標速度跑,由于車模自身有重量(慣性大)再加上摩擦力的影響,讓小車嚴格按照目標速度跑肯定是做不到的,我們只能盡量控制讓小車接近目標速度跑,將偏差限定的可接受范圍內,速度控制算法還是采用PID控制,和之前舵機控制不一樣,要想對速度進行相對及時且精準的控制,我們還需要測量小車的實時速度,與目標速度進行比較利用差值進行控制,形成閉環(huán)反饋控制。這次我們采取增量式PD算法,增量式PD是由兩個位置式PD相減的結果,它的結果只與上一次的結果有關,當小車速度有非正常跳變時,采用增量式可以降低這突變產生的影響。增量式PID的表達式為:ut=ut-ut-1=Kpet+Kiet+Kdet-e(t-1)由于小車要想跑得快且穩(wěn)就需要有非常及時的加減速能力,要能在該減速的時候迅速降低速度,而且還不能減得太猛,使得小車有較大的停頓,減下來后要及時將速度加上去,因此應該有很好的加減速策略,在速度控制PD算法中已經擁有加減速的功能,但當反饋速度和目標速度相差太多時,減速不見得那么得心應手,總覺得減速的力度不夠大,不能及時將速度減下來,為了克服這一弊端,我們在原來PD控制算法的基礎上有添加了額外的控制算法,即bang-bang控制算法,我對bang-bang算法的理解是它是一個開關控制,每次走的都是兩個極端,在速度偏差比較大時,我們輸出更大的控制力度以求能夠在短時間內達到目標速度,這種做法我的理解是雖然可能錯失了最有效的控制時機,但通過大幅度的控制力度彌補了錯過控制時機的缺陷,但是由于bang-bang算法控制粗糙,不容易實現較為精準的控制,在加上我們使用的B車模本身慣性比較大,若采用bang-bang算法雖然可以及時讓小車減下速來,但是很容易讓小車有停頓,最后我們果斷放棄bang-bang控制算法,仍采用抓住控制時機的控制策略,增量式PD算法由于有微分控制,所以能夠較為準確地抓住控制時機,缺點是控制力度不強,我們就在原來的表達式中加了一個權值,使其控制力度能夠有效增加,最后我們有對這個權值進行變量化,讓它和速度變化速率緊密相關,這樣又進一步降低了小車停頓的可能性。小車速度控制程序如下:void PID(void)if(mp.spdfeedback5) mp.motorPWMlast = 700; mp.speed_error = mp.targetspeed - mp.spdfeedback; /當前的速度差值=目標速度-當/前速度返回值 mp.motorPWM=mp.motorPWMlast+motor_P * (mp.speed_error - mp.speed_eerror) + motor_I*mp.speed_error+motor_D*(mp.speed_error-2*mp.speed_eerror+ mp.speed_eeerror); if(mp.speed_error0 & mp.speed_eerror0 & trend1 =51) trend1+; else if(mp.speed_error-mp.speed_eerror)=50)slow = 0; else if(trend1=40)slow = 0.11; else if(trend1=30)slow = 0.13; else if(trend1=20)slow = 0.15; else if(trend1=10)slow = 0.17; else slow = 0.2; if(mp.motorPWM 10000) mp.motorPWM = 10000; if(mp.motorPWM 320 & unity2pre_unity2)nn = 1;slope=1; If(nn = 1 & unity2320 & unity2320 & unity2pre_unity2)nn = 3; if(nn = 3 & unity2320 & unity220 | Dis_Error30&unity030&unity4100&unity280&unity180&unity3170)&(unity1-unity3)-40) cj = 10; bj = 0 ; /初次檢測到環(huán)島等待確認if(cj=10&(flag=1|bn=1)&(unity2220&(unity1140|unity3140)|(unity6150&unity8150&unity7200&ABS(unity6-unity8)40) bj

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論