2021-08-23 11:09:05 索煒達(dá)電子 712
項(xiàng)目編號(hào):E481
文件大?。?6K
源碼說(shuō)明:帶中文注釋
開(kāi)發(fā)環(huán)境:Python
簡(jiǎn)要概述:
小車使用arduino,樹(shù)莓派等硬件模塊,采用攝像頭,并使用MLP神經(jīng)網(wǎng)進(jìn)行路徑識(shí)別的自動(dòng)駕駛。
主要設(shè)計(jì)方法如下,先用arduino、樹(shù)莓派和攝像頭等模塊搭建小車。再用樹(shù)莓派攝像頭采集到的圖片通過(guò)局域網(wǎng)發(fā)送到上位機(jī)。上位機(jī)保存圖像,處理后得到訓(xùn)練集。接著,在電腦上訓(xùn)練mlp神經(jīng)網(wǎng)絡(luò)模型。得到模型后,運(yùn)行自動(dòng)駕駛程序,攝像頭捕獲圖片,上位機(jī)接收?qǐng)D像,加載訓(xùn)練模型,解算圖像得出控制參數(shù),通過(guò)藍(lán)牙發(fā)送給arduino,控制小車。
小車以arduino和樹(shù)莓派為核心,并搭載有攝像頭感器模塊,藍(lán)牙等硬件模塊作為下位機(jī)的硬件部分,用PC機(jī)端相關(guān)程序?yàn)樽鳛樯衔粰C(jī)。 Arduino 主要用于負(fù)責(zé)小車的運(yùn)動(dòng)控制,通過(guò)串口接收來(lái)自PC上位機(jī)所發(fā)來(lái)的控制信息,樹(shù)莓派主要負(fù)責(zé)圖像的接收和發(fā)送,還有與上位機(jī)間的信息傳遞,樹(shù)莓派與上位機(jī)之間通過(guò)無(wú)線局域網(wǎng)絡(luò)進(jìn)行連接。PC機(jī)主要負(fù)責(zé)接收樹(shù)莓派傳來(lái)的圖像數(shù)據(jù),并利用PC機(jī)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,預(yù)測(cè)小車的運(yùn)動(dòng)方向并返回給Arduino。
小車在搭建使用的硬件模塊清單如下:
樹(shù)莓派3b+,
樹(shù)莓派原裝攝像頭,
包含電機(jī)的小車車體,
L298N電機(jī)驅(qū)動(dòng)模塊,
arduino uno R3開(kāi)發(fā)版,
HC05藍(lán)牙模塊。
在小車硬件環(huán)境搭建好后,需要完成arduino驅(qū)動(dòng)程序和樹(shù)莓派端的數(shù)據(jù)采集與發(fā)送程序的編寫(xiě)。小車arduino的驅(qū)動(dòng)程序fourlun.ino,樹(shù)莓派上的程序stream_client.py,收集訓(xùn)練數(shù)據(jù)獲取數(shù)據(jù)集該模塊的功能是在PC機(jī)上收集樹(shù)莓派端傳輸?shù)膱D像以作為訓(xùn)練數(shù)據(jù)并形成數(shù)據(jù)集的功能。收集的數(shù)據(jù)應(yīng)該是我們提前布置好的實(shí)驗(yàn)場(chǎng)景下的跑道圖片,為了使特征明顯,采用在深色地面上用白紙鋪設(shè)跑道的方法。在采集數(shù)據(jù)的過(guò)程中,要保證樹(shù)莓派和上位機(jī)連在同一個(gè)網(wǎng)段下。 240*320分別運(yùn)行下面兩個(gè)代碼在上位機(jī)端和樹(shù)莓派端。收集訓(xùn)練數(shù)據(jù)制作數(shù)據(jù)集的代碼路徑如下:上位機(jī)端運(yùn)行的代碼:collect_training_data3.py 樹(shù)莓派端運(yùn)行的代碼:stream_client.py運(yùn)行訓(xùn)練算法模型的程序,我們就可以將MLP模型通過(guò)搜集好的訓(xùn)練數(shù)據(jù),在上位機(jī)上訓(xùn)練了,執(zhí)行訓(xùn)練程序后,就可以完成訓(xùn)練,得到參數(shù)模型了。訓(xùn)練模型的代碼mlp_training.py 訓(xùn)練之后,就可以得到mlp在我們獲取的數(shù)據(jù)集的參數(shù)模型了。參數(shù)模型的保存路徑為:mlp_xml/ 將模型應(yīng)用到我們的布置的實(shí)驗(yàn)場(chǎng)景下,就可以實(shí)現(xiàn)小車自動(dòng)駕駛功能了。將小車放在預(yù)先鋪設(shè)跑道好的實(shí)驗(yàn)環(huán)境下,并保證樹(shù)莓派和上位機(jī)連接在同一個(gè)局域網(wǎng)下,具體的連接方法為:分別運(yùn)行下面兩個(gè)代碼在上位機(jī)端和樹(shù)莓派端。上位機(jī)端運(yùn)行的程序rC_driver.py 樹(shù)莓派端運(yùn)行程序?yàn)椋?stream_client.py
目錄│文件列表:
└ Self-DrivingCar_MLP_RaspberryPi
│ collect_training_data3.py
│ collect_train_data3.ipynb
│ mlp_training.py
│ rc_driver.py
│ rc_driver_pc.ipynb
│ trainning_car.ipynb
├ fourlun
│ └ fourlun.ino
├ pi
│ └ stream_client.py