【2023 · CANN訓(xùn)練營第一季】智能小車課堂筆記
【2023 · CANN訓(xùn)練營第一季】智能小車課堂筆記
一、開發(fā)自動(dòng)駕駛小車需要的模塊
1.穩(wěn)固的結(jié)構(gòu)模塊
2.運(yùn)動(dòng)控制模塊
3.超聲波傳感器模塊
4.攝像頭視覺模塊
5.其他傳感器模塊
二、小車的整體控制思路圖
這里老師附上了一個(gè)對(duì)整個(gè)小車的設(shè)計(jì)思路圖,以下未畫線的為原圖:

我將老師幾個(gè)設(shè)計(jì)點(diǎn)的思路圖簡單畫線標(biāo)注了一下:

我們可以看到,三種顏色其實(shí)可以簡略的代表了我們需要完成的幾個(gè)功能:
1.灰色:
相關(guān)的初始化操作,硬件初始化、自動(dòng)化測(cè)試、位置合法檢查、模型加載等一系列前置檢查工作,確保小車后續(xù)可以正常運(yùn)行
2.藍(lán)色:
小車需要得知的前方環(huán)境信息均來自各種攝像頭、傳感器,采集了相關(guān)數(shù)據(jù)后,送入加載好的模型進(jìn)行推理,并后處理結(jié)果為具體場(chǎng)景下的一些信息,反饋回主控部分函數(shù),分析模型推理結(jié)果提供的動(dòng)作序列,并下發(fā)給相關(guān)控制模塊,下發(fā)給小車運(yùn)動(dòng)的控制模塊主控芯片ESP32,并尤其進(jìn)行實(shí)際的動(dòng)作指令下發(fā),如電機(jī)控制、舵機(jī)控制
3.黃色:
控制完成后,ESP32需上報(bào)其動(dòng)作執(zhí)行的情況,到主控函數(shù)進(jìn)行分析。
其實(shí)老師這里也提到用編碼電機(jī)等方式,其實(shí)就說明如果進(jìn)行精密控制,也可以在主控中加入一些PID算法,輔助進(jìn)行小車的姿態(tài)控制
三、小車設(shè)計(jì)思路
1.小車的三維結(jié)構(gòu)設(shè)計(jì)
基本原則:
1.滿足小車運(yùn)轉(zhuǎn)過程中運(yùn)動(dòng)干涉率為0
2.安裝時(shí)的易用性和可行性
3.小車的重心位置的控制
4.模塊預(yù)留的最大運(yùn)動(dòng)尺寸
2.ESP32控制器開發(fā)入門
1.esp32單片機(jī)控制電機(jī)和舵機(jī)的原理:
依靠PWM信號(hào)脈沖的占空比,以改變電機(jī)轉(zhuǎn)速或者舵機(jī)角度
2.小車運(yùn)動(dòng)控制與接口程序
(1)通信方式
通過可以雙向通信的I/O引腳實(shí)現(xiàn)通信串口的功能。其中ESP32老師使用的是Arduino封裝好的C接口,并且可以自定義用作串口收發(fā)的IO,Atlas端老師是用的Pthon中的pyserials包封裝的主控設(shè)備串口庫,修改其中的HardwareSerial類就可以指定對(duì)應(yīng)的引腳。
注意:兩邊串口的TX和RX要交叉對(duì)聯(lián)哦!不然兩邊都收不到。。。

(2)通信協(xié)議與控制邏輯
串口是一個(gè)字節(jié)一個(gè)字節(jié)進(jìn)行發(fā)送的,為了提高控制的效率,盡可能簡潔的內(nèi)容達(dá)到控制的目的
老師這里設(shè)置的協(xié)議是7個(gè)字(short型)長的內(nèi)容,前4個(gè)字對(duì)應(yīng)的是電機(jī)的速度值,后2個(gè)字是舵機(jī)的角度值,最后一個(gè)字是校驗(yàn)碼,有校驗(yàn)碼的存在可以對(duì)數(shù)據(jù)傳輸鏈路下發(fā)數(shù)據(jù)的正確性有一定的保證。
(3)ESP32主程序設(shè)計(jì)思路
做好電機(jī)、舵機(jī)的底層硬件封裝庫后,老師的主程序主要由以下部分組成
setup函數(shù):
針對(duì)串口、電機(jī)、舵機(jī)等進(jìn)行初始化.
set_motor函數(shù):
預(yù)配置好4個(gè)電機(jī)的初速度后,通過該函數(shù)控制電機(jī)的速度
ps:老師用的是兩項(xiàng)電機(jī),這里應(yīng)該是有正和負(fù)的
set_servo函數(shù):
預(yù)配置好2個(gè)舵機(jī)的初速度后,通過該函數(shù)控制舵機(jī)的角度
loop函數(shù):
主循環(huán)函數(shù),一直循環(huán)讀取串口數(shù)據(jù)并解析。
(4)python主程序設(shè)計(jì)
1.實(shí)現(xiàn)對(duì)基本運(yùn)動(dòng)控制的功能函數(shù)
2.串口數(shù)據(jù)收發(fā)
3.序列化控制指令和防止指令沖突或丟失:其目的是為了保證同一時(shí)刻僅能下發(fā)一個(gè)指令到ESP32
3.循跡推理任務(wù)的設(shè)計(jì)思路
設(shè)計(jì)思路框圖如下

通過對(duì)場(chǎng)景的大量數(shù)據(jù)喂給模型,進(jìn)而獲得不同場(chǎng)景下的權(quán)重參數(shù),老師的處理思路如下:

這里我根據(jù)自己的理解簡單做了標(biāo)注:
1.紅色部分:
建立對(duì)賽道的邊界線建立回歸,使小車可以獲得到賽道的邊界情況,確定兩條邊界線的中心線,我覺得這和那種用掃點(diǎn)檢測(cè)黑白賽道的那種建立中線有一定的相似哈哈,通過縱軸的中心線和賽道中心線的交點(diǎn),使小車知道其應(yīng)該行進(jìn)的方向,
2.綠色部分:
綠色點(diǎn)的位置是小車攝像頭下邊沿的中心點(diǎn),這代表著小車的目前前端的朝向位置,這個(gè)點(diǎn)和上面紅色的交點(diǎn)的連線角度,就是小車實(shí)際方向和期望方向的一個(gè)偏移角度,以此為目標(biāo)進(jìn)行后續(xù)的姿態(tài)動(dòng)作調(diào)整處理
4.停車和追蹤任務(wù)的簡單思路描述
這兩個(gè)任務(wù)其實(shí)都是根據(jù)的對(duì)目標(biāo)框大小和邊界的檢測(cè)的判斷:
自動(dòng)泊車:

根據(jù)綠色標(biāo)注的這個(gè)停車標(biāo)志的大小和這個(gè)紅色的邊界線的一個(gè)判斷,當(dāng)綠色框框的大小到一定閾值時(shí),小車在進(jìn)行平移運(yùn)動(dòng)進(jìn)行泊車,這其實(shí)有點(diǎn)像人眼的判斷方法,我們看到了停車標(biāo)志,判斷與它越來越近,合適的位置就進(jìn)行泊車,如果想做的更逼真一點(diǎn),可以判斷到一定大小時(shí)進(jìn)行逼近,正常駛?cè)氩⒄{(diào)整姿態(tài)
追蹤

追蹤的思路其實(shí)和泊車的思路是一樣的,通過描框大小和描框中心點(diǎn)去判斷離被追蹤小車的距離和偏移角度。
四、ROS2與激光雷達(dá)建圖入門
基礎(chǔ):
在開發(fā)多傳感器融合的樣例時(shí),ROS就可以很好做到一個(gè)通信橋梁的作用,規(guī)整各個(gè)傳感器與話題、服務(wù),內(nèi)置多種插件,可以適用到多種不同的場(chǎng)景,還包含了不同的SLAM算法功能包
目前常用的SLAM開源算法可以分為兩類:
1.基于濾波,比如擴(kuò)展卡爾曼濾波(EKF:Extended KalmanFilter)、粒子濾波(PF:Particle Filter)等
2.基于圖優(yōu)化,先通過傳感器進(jìn)行構(gòu)圖,然后對(duì)圖進(jìn)行優(yōu)化。目前比較主流的是圖優(yōu)化的方法,Cartographer就是基于圖優(yōu)化實(shí)現(xiàn)的。圖優(yōu)化相對(duì)于濾波,不用實(shí)時(shí)的進(jìn)行計(jì)算,效率更高消耗的資源更少,所以在實(shí)際場(chǎng)景中使用的更多
ps:該文僅是為了記錄CANN訓(xùn)練營的學(xué)習(xí)過程所用,不參與任何商業(yè)用途