進(jìn)階實(shí)驗(yàn)
3. 實(shí)現(xiàn)平衡小車直立時(shí)處于靜止?fàn)顟B(tài)
下面兩個(gè)圖片是小車靜止時(shí)受到干擾后小車運(yùn)動(dòng)的圖片
靜止2.gif (3.52 MB, 下載次數(shù): 199)
下載附件
靜止2
2016-4-16 11:39 上傳
靜止3.gif (5.12 MB, 下載次數(shù): 175)
下載附件
2016-4-16 21:50 上傳
第一張圖的速度環(huán)是用的PI,第張圖用的是PD,可以看到第一張圖中:用手推車,車會(huì)回到原來的位置;第二張圖中:用手推車則不會(huì)會(huì)到原來的位置。下面是代碼:
- Speed_Least=(float)(g_iLeftMotorPluseSigma+g_iRightMotorPluseSigma)/2.0;//獲取速度
- g_iRightMotorPluseSigma=g_iLeftMotorPluseSigma=0;//速度清零
- g_fCarSpeed=Speed_Least*0.75+g_fCarSpeed*0.25;//速度濾波
- fDelta = g_iCarSpeedSet;//此處全局整形目標(biāo)車速 g_iCarSpeedSet為零
- fDelta -= g_fCarSpeed;//得到速度偏差
- fP = fDelta*g_fcSpeed_P;//速度偏差乘上比例系數(shù)
復(fù)制代碼上面代碼是兩個(gè)車速度環(huán)的公共代碼。
下面是第一個(gè)圖片中PI速度環(huán)的代碼:
- fI = fDelta*g_fcSpeed_I;速度偏差乘上積分系數(shù)
- g_fCarPosition += fI; //偏差累加,在開始初始化的時(shí)候g_fCarPosition是為零的
- /****************加入積分限幅*****************/
- if(g_fCarPosition>20000)g_fCarPosition=20000;
- if(g_fCarPosition<-20000)g_fCarPosition=-20000;
- /*********************************************/
- g_fSpeedCtrlOut = fP+g_fCarPosition;//速度環(huán)控制量輸出
復(fù)制代碼
下面是第二個(gè)圖片中PD速度環(huán)的代碼:
- fD = (fDelta-g_fcSpeedDerta)*g_fcSpeed_D;//得到速度的變化率
- g_fSpeedCtrlOut = fP+fD;<span style="line-height: 1.5;">//速度環(huán)控制量輸出</span>
復(fù)制代碼
所有代碼:
所有代碼.zip
(144.52 KB, 下載次數(shù): 36)
2016-4-16 22:56 上傳
點(diǎn)擊文件名下載附件
所有代碼 下載積分: 黑幣 -5
附件里的代碼跟喵大的差不多,我是照著喵大的代碼敲的,不過我的這個(gè)有些地方比較難看。我剛開始看喵大的代碼的時(shí)候,看著也頭大,后來我就先看程序名,看看這個(gè)程序的流程;看個(gè)大概了,之后再了解程序的細(xì)節(jié),死扣每一句,之后慢慢理解了小車。
由衷感謝喵大的這個(gè)平臺(tái),讓我學(xué)到了平衡小車的知識(shí),感謝,感謝,感謝。  
|