基于 STM32 的自動泊車系統(tǒng) -智能小車 - 物聯(lián)網(wǎng)單片機(含代碼)
大家好,今天給大家介紹基于 STM32 的自動泊車系統(tǒng)
1 背景
目前我們所能見到的汽車企業(yè)大多數(shù)都控制在 L2 級半自動駕駛, 其中包括半自動泊車系統(tǒng): 傳感器技術(shù)的組成配合下收集精確的環(huán)境信息實現(xiàn)“泊車路徑規(guī)劃” 、 系統(tǒng)進行“車輛控制” 等功能, 在部分自動泊車(高級泊車輔助 APA)系統(tǒng)的輔助下駕駛員可以在監(jiān)控下實現(xiàn)泊車動作。 現(xiàn)實中, 車輛激增帶來的停車問題變得更加復(fù)雜, 大城市停車空間有限, 將汽車駛?cè)敫魇礁鳂拥耐\囄恢檬敲總€駕駛員一項必備的技能。
與之相隨而來的交通壓力、 復(fù)雜多樣的停車環(huán)境、 有限苛刻的停車空間, 停車難成為眾多駕駛員的一大難題。 泊車過程中出現(xiàn)的輕微碰撞以及剮蹭事件的頻繁發(fā)生, 市場需求的增長, 環(huán)境檢測基礎(chǔ)的相對成熟, 推進了自動泊車系統(tǒng)研究的技術(shù)發(fā)展。
2 設(shè)計概要
自動泊車系統(tǒng)(Automated Parking System,簡稱 APS)是一項屬于無人駕駛的重要技術(shù),隨著車輛的激增, 汽車自動駕駛技術(shù)的不斷創(chuàng)新與發(fā)展, 自動泊車系統(tǒng)尚未普及, 為降低當(dāng)下人工停車的難度, 設(shè)計了一種基于 STM32F103ZET6 實現(xiàn)自動倒車入庫和側(cè)方位停車的智能化小車系統(tǒng)。
該自動泊車系統(tǒng)利用紅外光感 HJ-IR2 傳感器、 超聲波 HC-SR04 模塊、 循跡 TCRT5000模塊、 標(biāo)準(zhǔn)的 IEEE 802.11nd 的 WIFI 模塊組成進行環(huán)境檢測, 實現(xiàn)了障礙物識別, 并將采集到的數(shù)據(jù)傳送到處理器, 處理器將數(shù)據(jù)轉(zhuǎn)換為電信號驅(qū)動小車的控制 L298N 驅(qū)動模塊, 這些模塊在 Keil uVsion5 編譯環(huán)境下整合到一起, 在路徑規(guī)劃下對小車進行速度控制和轉(zhuǎn)向控制。
系統(tǒng)根據(jù)停車位識別在模擬停車環(huán)境下控制小車進行入庫操作, 滿足了在不同的停車環(huán)境下進行智能化自動泊車, 此系統(tǒng)屬于嵌入式系統(tǒng)兼容于多數(shù)汽車實現(xiàn)側(cè)方位泊車和倒車入庫并自行細(xì)微調(diào)整, 實現(xiàn)更穩(wěn)定的入庫停車。
3 硬件選型
3.1 主控 -STM32
意法半導(dǎo)體公司中的 STM32 系列芯片
3.2電機驅(qū)動
為了更真實模擬汽車運作狀態(tài), 本設(shè)計安裝了四個電機, 如下圖所示。 本設(shè)計通過 PWM 占空比來調(diào)節(jié)直流電機的轉(zhuǎn)速, 并通過控制前后輪的不同速度完成小車的轉(zhuǎn)向。
電機用到了主控板的 8 個 IO 口, 通過對電機的高低電平控制使之正反轉(zhuǎn), 電機分有正負(fù)極, 前進時: 先將正極的電平置 1, 負(fù)極復(fù)位 0; 后退則正極復(fù)位 0, 負(fù)極置 1; 停止則都復(fù)位 0。
電機與芯片管腳配置表
小車由于左右兩邊各用一個驅(qū)動, 所以 A 和 C 兩個電機只需要 C 電機控制, B 和 D電機只需 B 控制, 這里將 D 電機控制腳當(dāng)電機使能: 將 DUP 和 DDOWN 的電平置 1。
3.3紅外遙控設(shè)計
學(xué)長設(shè)計的系統(tǒng)采用紅外遙控來實現(xiàn)對小車的初步控制, 紅外線遙控是目前使用最廣泛的一種通信和遙控手段, 具有體積小、 功耗低、 功能強、 成本低的優(yōu)點。 通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成, 應(yīng)用編/解碼專用集成電路芯片來進行控制操作, 發(fā)射部分包括鍵盤、 編碼調(diào)制、 LED、 紅外發(fā)送器; 接收部分包括光、 電轉(zhuǎn)換放大器、 解調(diào)、 解碼電路。
紅外遙控器
紅外接收及解碼
相關(guān)技術(shù)原理:
- 引導(dǎo)碼: MCU 檢測到正確的引導(dǎo)碼之后確認(rèn)接收后面的數(shù)據(jù), 以此來保證數(shù)據(jù)的穩(wěn)定性和正確性,
- 客戶碼: 區(qū)分不同紅外遙控設(shè)備
- 操作碼: 客戶操作時產(chǎn)生的編碼, 通過操作的不同產(chǎn)生不同的碼值, 等待紅外接收頭接收。
- 解碼: 芯片通過接收到的電平信號, 解析操作碼的碼值, MCU 在根據(jù)碼值做出相應(yīng)動作。
根據(jù)遙控器提供的鍵碼, 優(yōu)先滿足小車的基本運動, 前進、 后退、 左轉(zhuǎn)、 右轉(zhuǎn)、 以及停止, 設(shè)計算法, 短按則為 200MS 運作, 長按則持續(xù)運行。 預(yù)留其他按鈕進入自動駕駛狀態(tài), 即: 循跡模式、 避障模式、 超聲波模式、 攝像頭模式、 側(cè)方位自動泊車, 倒車入庫自動泊車等。
3.4 傳感器部分
3.4.1 循跡模塊
遵循既有的道路現(xiàn)狀, 給定小車相關(guān)的循跡算法, 基于一個三路循跡和兩個二路循跡的循跡模塊, 使得小車自動行駛在路勁規(guī)劃下, 稱為循跡技術(shù)。
3.4.2 紅外避障模塊
紅外光電傳感器(HJ-IR2), 發(fā)射出探測的脈沖, 當(dāng)在一定距離中探測到物體會重新輸入到 MCU 中進行處理, 它相當(dāng)于一個紅外開關(guān), 檢測到障礙物輸出低電平, 未檢測到則反之。 在得知在停車過程中遇到的障礙物可以依據(jù)此對小車進行控制避免碰撞, 此為避障功能。
接收管接收到信號之后, 經(jīng)集成電路進行放大, 會點亮模塊的 LED 燈管, 并同時輸出給 MCU 一個低電平信號。
3.4.3 超聲波模塊
HC-SR04 超聲波測距可提供 2cm-40cm 的非接觸式距離感測功能測距精度可達(dá)高到3mm; 模塊包括超聲波發(fā)射器、 接收器與控制電路。 本設(shè)計利用超聲波傳感器來達(dá)到對自動泊車中精細(xì)調(diào)整。
小車在進入自動泊車模式后, 環(huán)境檢測部分會通過超聲波收集左右部掐障礙物的具體位置, 在側(cè)方位泊車中可以利用檢測前后車輛的停車距離,倒車入庫泊車中可以檢測左右車輛的精準(zhǔn)距離, 實現(xiàn)更完美的泊車路徑規(guī)劃。 超聲波模塊如圖
3.4.4 WIFI 視頻模塊
設(shè)計模擬倒車途中的后視攝像頭, 將倒車時的情景展示在與上位機的屏幕當(dāng)中,模擬出更真實的停車環(huán)境, 實時監(jiān)控倒車時的情況, 并通過 WIFI 模塊, 在上位機編寫好指定代碼傳送給小車上的 WIFI 模塊, WIFI 模塊中的芯片進行解碼并發(fā)送電信號給 MCU進行控制, MCU 根據(jù) WIFI 模塊中的信號對小車進行控制。
PC控制軟件
軟件中的界面基本滿足對小車的基本控制, 附帶有打開攝像頭的指令, 在設(shè)置中也可以按照需求編寫新指令發(fā)送給主控芯片。 操作界面如下圖所示
這里的設(shè)計需要注意, 同時開啟數(shù)據(jù)的收發(fā), 根據(jù)收到的 WIFI 信號進行判斷, 串口 WIFI 解碼代碼如下:
unsigned char rec_data; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE); /* Read one byte from the receive data register */ rec_data = USART_ReceiveData(USART3); if(start!=0&&rec_data!=0xff) //如果已收到包頭并且當(dāng)前收到的不是包尾 {
buf[start-1]=rec_data; //緩存數(shù)據(jù) start++;
} else if(start!=0&&rec_data==0xff)//如果收到包尾 {
mode[0]=buf[0]; //給狀態(tài)存儲數(shù)組賦值 mode[1]=buf[1];
mode[2]=buf[2];
start=0;
mode1=1; //指示主函數(shù)循環(huán)檢測一次 } else if(rec_data==0xff&&start==0) //如果收到的是包頭 start++;
}
4 小車成品展示
攝像頭則安裝在車尾處, 可以觀察倒車時后視的環(huán)境, 也適用于作為圖像處理的后續(xù)功能推進, WIFI 模塊在開發(fā)板的下方, 不影響信號的前提下也得到了合理的空間放置。
5 泊車算法設(shè)計
常見的泊車方式有: 側(cè)方位泊車和倒車入庫泊車, 本設(shè)計根據(jù)兩種泊車方式設(shè)計了不同的算法。
5.1 側(cè)方位泊車
側(cè)方位停車位的設(shè)置主要是為了道路的寬度而設(shè)置, 機動車駕駛證考試中的科目二就有一項側(cè)方位停車法。 本設(shè)計由科目二駕駛中的側(cè)方停車為標(biāo)準(zhǔn), 側(cè)方位泊車如圖所示。
根據(jù)停車的不同場景, 本設(shè)計通過收集的環(huán)境信息進行了不同的處理, 并作出不同的控制電信號。
如果未掃描到障礙物和相鄰小車, 系統(tǒng)主要通過循跡模塊對停車線反射的強度不同來定位停車位的具體位置。 具體算法邏輯如流程圖所示:
算法步驟:
- 1、 按下遙控器按鈕平行泊車模式, 開始檢測周圍環(huán)境信息, 如果超聲波反射回來的距離小于 10CM 則判斷為障礙物, 大于 10CM 則判斷為無障礙物。
- 2、 減速后退直到超聲波判斷距離大于 10CM 且紅外避障無感應(yīng)。
- 3、 紅外避障有感應(yīng)則繼續(xù)后退, 重復(fù)(1)(2)步驟。
- 4、 左循跡模塊感應(yīng)到停車線, 系統(tǒng)收集到此時車輛左轉(zhuǎn)角度, 然后繼續(xù)左轉(zhuǎn)。
- 5、 右循跡模塊感應(yīng)到停車線, 系統(tǒng)收集到此時車輛位置信息, 由于小車左轉(zhuǎn)角度還不足, 系統(tǒng)此時再給予一個 200MS 的左轉(zhuǎn)信號。
- 6、 車輛左轉(zhuǎn)角度已經(jīng)足夠, 停車時的車輛速度不能過快, 修改高電平的占比, 降低速度, 給出一個持續(xù)前進的電信號
- 7、 中循跡模塊感應(yīng)到邊緣停車線, 小車停止。
- 8、 開始擺正車身, 根據(jù)左轉(zhuǎn)的角度, 給出相同延時右轉(zhuǎn)信號擺正車身
- 9、 右轉(zhuǎn)進行時, 對中循跡模塊進行判定, 如果收集到電信號, 對小車進行后退調(diào)整,然后完成整個系統(tǒng)泊車操作。
關(guān)鍵代碼
if(LL_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); auto_flag = 1; } CarRight(); } else if (auto_flag == 1) { if(RR_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); CarRight(); delay_ms(6000); CarStop(); delay_ms(18000); auto_flag = 2; } CarRight(); } else if(auto_flag == 2) { SPEED_DUTY = 10; if(SEARCH_M_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); CarBack(); delay_ms(6000); back_time = 0; back_flag = 0; auto_flag = 3; } CarGo(); } else if(auto_flag == 3) { SPEED_DUTY = 30; if(back_time <= 600) { CarLeft(); if(SEARCH_M_DATA == BLACK_AREA) { back_flag = 1; } if(back_time == 599)auto_flag = 4; } } else if (auto_flag == 4) { if(back_flag == 0)sensor_flag = 0; else if(back_flag == 1) { SPEED_DUTY = 20; CarBack(); delay_ms(4000); CarStop(); sensor_flag = 0; } }
5.2 倒車入庫
倒車入庫是多數(shù)停車場中的停車建設(shè), 停停車場都有較為規(guī)范的停車線規(guī)劃和停車建設(shè), 對于線條的感應(yīng)也更容易, 倒車入庫示意圖如圖所示:
算法設(shè)計
算法流程:
- 1、 按下遙控器按鈕垂直泊車模式, 開始檢測周圍環(huán)境信息, 如果超聲波反射回來的距離小于 10CM 則判斷為障礙物, 大于 10CM 則判斷為無障礙物。
- 2、 減速后退直到超聲波判斷距離大于 10CM, 且紅外避障未感應(yīng)到障礙物, 開始左轉(zhuǎn)
- 3、 左循跡模塊感應(yīng)到停車線, 系統(tǒng)收集到此時車輛左轉(zhuǎn)角度, 然后繼續(xù)左轉(zhuǎn)
- 4、 右循跡模塊感應(yīng)到停車線, 系統(tǒng)收集到此時車輛位置信息,
- 5、 車輛左轉(zhuǎn)角度已經(jīng)足夠,調(diào)整車身, 左轉(zhuǎn)至車身垂直。
- 6、 根據(jù)車身調(diào)整位置, 三路循跡在同一條直線上, 給出前進信號。
- 7、 倒車入庫完成。
void AUTO_Vertical(void) { if (auto_flag == 0 ) { if(obstacle_flag == 0) { if(distance_cm < 15 ) { SPEED_DUTY = 10; CarGo(); return; } else if(distance_cm >= 15 ) { CarStop(); obstacle_flag = 1; } } if( obstacle_flag == 1) { SPEED_DUTY = 30; CarRight(); if(LL_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); auto_flag = 1; } } } else if (auto_flag == 1) { if(SEARCH_L_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); auto_flag = 2; } CarRight(); } else if(auto_flag == 2) { SPEED_DUTY = 10; CarGo(); if(SEARCH_M_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); CarBack(); delay_ms(8000); auto_flag = 3; back_time = 0; } } else if(auto_flag == 3) { SPEED_DUTY = 30; if(back_time >= 12)auto_flag = 4; if(back_time <= 14) { CarRight(); } } else if(auto_flag == 4) { if(SEARCH_M_DATA == BLACK_AREA) { CarStop(); delay_ms(18000); CarBack(); delay_ms(6000); sensor_flag = 0; } SPEED_DUTY = 10; CarGo(); } }
6 測試效果
優(yōu)先模擬的周圍無障礙物的情形, 會通過判斷停車線然后根據(jù)算法步驟將車停進去車位。 經(jīng)過多次測試, 小車多次穩(wěn)定的停入車位, 但若控制者將車駛在與停車位平行的位置, 會導(dǎo)致停車緩慢且容易出錯, 車位可供停車的范圍需對小車的位置有限制。 運行完側(cè)方位泊車之后小車的位置如圖
- 贊