|
本帖最后由 帆船102 于 2021-5-18 12:26 編輯
花了一段時(shí)間研究了下飛思卡爾恩智浦的K60系列的單片機(jī),主要是通過攝像頭來完成賽道一圈的行駛,本人萌新比較菜,到處CtrlC+V程序,又到處去問,總算是了解了一些,經(jīng)過理解修改代碼,算是入了個(gè)門吧,接下來有空的話搞一搞直立小車,那也就另說了…… 。
發(fā)這篇文的目的主要還是記錄一下自己的經(jīng)歷,順便對(duì)比我還菜的萌新有個(gè)引導(dǎo)作用,額……應(yīng)該沒有吧,感覺有也非常少。
首先我用的是逐飛的一系列的東西,大大小小加起來還是花了上千,有些還是咸魚買的……所以如果想搞智能車大賽的同志們要做好掏空錢包的準(zhǔn)備……當(dāng)然能報(bào)銷最好,我僅僅是出于興趣。。
主板:某一個(gè)寶搜索 逐飛科技智能車基地
K60是非常老的一款單片機(jī),主頻為100MHZ,K66的話主頻為180MHZ。
攝像頭:MT9V032(這是130度的攝像)
電機(jī)驅(qū)動(dòng):雙電機(jī)驅(qū)動(dòng)電路模塊
車模類型:C車車模(自帶3010舵機(jī)與電機(jī))
編碼器(512線)
顯示屏:IPS液晶屏模塊 1.14寸
無線轉(zhuǎn)串口通信:主要是將攝像頭采集的圖片通過上位機(jī)傳輸?shù)诫娔X上YY上位機(jī)上。(傳輸為藍(lán)色,接收為綠色)
另外:編譯環(huán)境用的是IAR,不過需要配置一下逐飛庫的參數(shù)才能用,不然報(bào)錯(cuò),上位機(jī)用的是YY上位機(jī)(能夠以方格形式顯示)
說一下攝像頭小車思路,這里用main函數(shù)說明,可以很好的知道小車具體流程,大致有個(gè)思路,我覺得
{
get_clk(); //逐飛程序必備初始化代碼,可以不用管
Init_Hardware();// 初始化各個(gè)模塊,如串口模塊,電機(jī)驅(qū)動(dòng)模塊,攝像頭模塊,按鍵模塊,等等。
//Test_Steer_CenterVal();//尋找舵機(jī)中值代碼
while(1)
{
if(mt9v032_finish_flag)//一場(chǎng)圖像采集的標(biāo)志
{
JC_isGet_Gray_Image(image,PICTURE_USE2);//得到灰度圖像。
mt9v032_finish_flag = 0;//圖像采集完的結(jié)束標(biāo)志
THRESHOLD = JC_Get_OSTU (PICTURE_USE2);//自動(dòng)尋找最佳閾值,也就是圖像二值化的臨界值,閾值越大黑點(diǎn)越多。
JC_GetBinaryImage(PICTURE_USE2,PICTURE_USE2,THRESHOLD);//得到閾值后,就可以得到二值化的圖像
ips114_displayimage032(PICTURE_USE2[0],IMGW,IMGH) ;//在顯示屏顯示二值化圖像
JC_Element(PICTURE_USE2);//元素處理,如十字處理,彎道處理,環(huán)島處理額這個(gè)沒弄起 。
hauxian();//畫線,在ISP114顯示屏顯示中線位置,可以快速檢測(cè)有無錯(cuò)誤
Test_KD_Control();//這個(gè)簡(jiǎn)單的舵機(jī)PD控制,可以通過按鍵增加P D 與qianzhan值。
//sending(PICTURE_USE2,sizeof(PICTURE_USE2));//當(dāng)需要將圖像發(fā)往PC端yy上位機(jī)時(shí)才加,不然占內(nèi)存。
ips114_showint16(0,-9,st_control.jiao); //在顯示屏顯示舵機(jī)角度。
ips114_showint16(0,-10,st_control.qianzhan); //顯示前瞻值,作用舉個(gè)例子:當(dāng)有彎道出現(xiàn)時(shí),值的增加和減少會(huì)讓 小車提前轉(zhuǎn)彎沖出賽道或延遲沖出賽道。
ips114_showint8(0,-12,st_control.kp);//實(shí)際上我感覺 它調(diào)節(jié)舵機(jī)在規(guī)定范圍內(nèi)的最大角度
ips114_showint8(0,-11,st_control.kd); //實(shí)際上感覺無卵用,當(dāng)然針對(duì)我的代碼,有點(diǎn)問題 鎖定在1或2.
//ips114_showint16(0,-11,st_control.duoji_mid - st_control.jiao); //負(fù)值應(yīng)該向左轉(zhuǎn),正值向右轉(zhuǎn),0的值不轉(zhuǎn),值的絕對(duì)值越大舵機(jī)打角越大
}
}
}
流程大概是這樣,我太懶了也不細(xì)說,代碼附一份,不過文件大概有80M,只有將代碼的.c與.h文件單獨(dú)發(fā)出來,在說一次這是逐飛庫!山外啊龍邱啊請(qǐng)別燒……代碼中有些地方會(huì)有注釋,不過對(duì)于初學(xué)者來說,只需要大概搞懂那一坨代碼干啥的?然后直接調(diào)用就對(duì)了,當(dāng)然你是大佬,覺得代碼太low,那也很正常,逐飛底層代碼也不用管,也不要改,拿來用就是了,當(dāng)然你要深入理解那也就當(dāng)我沒說,反正我沒管。
附圖
俯視圖:
1.png (987.96 KB, 下載次數(shù): 74)
下載附件
2021-5-17 14:34 上傳
側(cè)視圖:
2.jpg (2.81 MB, 下載次數(shù): 65)
下載附件
2021-5-17 14:34 上傳
工程文件遠(yuǎn)大于20M發(fā)不了 ,截取其中需要的代碼上位機(jī)等關(guān)鍵資料附上:
代碼上位機(jī).zip
(10.26 MB, 下載次數(shù): 14)
2021-5-18 12:26 上傳
點(diǎn)擊文件名下載附件
|
|