劉佳明,史亞寧,劉明宇,方增斌,王昊天
(華北理工大學,河北唐山,063210)
智能循跡是基于自動引導機器人系統(tǒng),用以實現(xiàn)小車自動識別路線,以及選擇正確的路線。智能循跡小車是一個運用計算機控制、傳感器、單片機、電機驅動及自動控制等技術來實現(xiàn)按照預先設定的模式下,不受人為管理時能夠自動實現(xiàn)循跡導航的高新科技。該技術已經應用于汽車制造業(yè)、倉儲業(yè),食品加工業(yè)等多個行業(yè),其中汽車制造行業(yè)中的無人駕駛技術就體現(xiàn)了此性能。
隨著人工智能技術和互聯(lián)網科技的發(fā)展,無人駕駛技術迅速發(fā)展提升。研究人員預測:到2025 年,人類將看到大約800 萬輛無人或半無人汽車在路上行駛無人駕駛正在如火如荼地展開著,百度和沃爾沃共同研發(fā)L4級別無人電動車,特斯拉的Autopilot,奧迪的Traffic Jam Pilo等等。世界上最主流的無人駕駛技術都是基于激光雷達、攝像頭視覺、GPS+IMU 的方案。
本次設計的小車很好地應用了當今社會的衛(wèi)星定位系統(tǒng),同時以MM32 作主控芯片,充分利用最小系統(tǒng)板的便捷之處,將單片機理論融入智能小車的各個模塊應用,為無人駕駛領域提供一種新的思路并且有助于推動單片機技術的發(fā)展[1~3]。
智能車控制系統(tǒng)由測速模塊、簡易慣導模塊、PID 控制模塊、遙控控制模塊、MM32 控制單元、電機控制單元、舵機控制單元組成[4]。其中,通過GPS 和ICM 組成的簡易導航模塊用來控制小車自身的方位;測速模塊是編碼器通過系統(tǒng)定時中斷實時返回電機轉速;PID 控制模塊用來調節(jié)電機轉速和舵機旋轉角度;遙控控制模塊通過連接主板,可以遠程控制智能車的啟停,以防緊急情況的發(fā)生;MM32 控制單元是整個控制系統(tǒng)的核心,負責系統(tǒng)的數(shù)據(jù)處理,中斷響應以及串口通信等功能;電機控制單元可以通過PWM 占空比調節(jié)來控制智能車的速度;舵機控制單元也通過PWM調節(jié)控制智能車自身角度;設計中,GPS 通過串口中斷實時傳回智能車當前經緯度數(shù)據(jù),ICM 通過定時器中斷實時獲得智能車自身方位角信息,見圖1。
圖1 智能車系統(tǒng)構架
在硬件設計中,外設包括編碼器、GPS、ICM 等均通過串口通信方式與單片機進行數(shù)據(jù)交換。在本設計中,編碼器需要主板提供3.3V 標準電壓,并且通過PB4 和PB6獲取電機速度信息,其中PB6 為編碼器方向引腳;電機通過PA5 和PA6 引腳和主板連接,PA5 引腳控制電機轉動的方向[5],PA6 引腳控制主板輸出給電機的PWM;主板通過PA15 引腳給舵機輸出PWM,控制舵機旋轉的角度;GPS通過PC11 和PC10 引腳與主板連接;ICM 通過PB13 與PB15 引腳與主板連接。本設計的硬件原理圖如圖2 所示。
圖2 智能車硬件原理圖
GPS 模塊上有電源供電和通訊接口、復位按鍵、定位指示燈、天線接口等主要模塊。按下GPS 復位按鍵后,模塊會重新冷啟動;當GPS 定位成功后,GPS 模塊上的PPS等(定位指示燈)會每秒閃爍一次;本GPS 模塊上的天線為雙頻天線,配以雙頻GPS 使用,可以接收兩個頻率的衛(wèi)星信號,用于定位的衛(wèi)星數(shù)量也相較于單頻GPS 有一定的提升,定位也要比單頻穩(wěn)定一些。
GPS 模塊輸出的信息主要有xxGGA、xxGSV、xxRMC、xxGLL、xxGSA 等類型的數(shù)據(jù)。其中最重要的是xxRMC 和xxGGA 兩種類型的數(shù)據(jù),通過編程可以對這兩個語句進行解析,可以得到位置、速度、定位狀態(tài)、高度、時間、航向角、用于定位的衛(wèi)星數(shù)量等重要信息,本次設計中獲取用于定位的衛(wèi)星數(shù)量是為了保證定位精度,在定位衛(wèi)星達到23 或24 顆時,定位效果最好;通過GPS 解析獲得的航向角和位置具有很高的精度,可以作為PID控制模塊的設定值。
ICM20602六軸陀螺儀模塊可以獲得六個方向的位置。在本次設計中,由于小車在平面運動,所以只涉及x 軸和y軸的方向角。通過定時器中斷實時讀取ICM 的角度,定時器中斷獲取數(shù)據(jù)時間為5s。通過解析ICM 獲得的方向角,可以作為PID 實時采取的值,在方向環(huán)中,通過實時采集的值與GPS 得到的設定值作對比,實時控制方向。
其余功能模塊主要還包括編碼器、TFT 屏幕、電機、舵機以及蜂鳴器。通過編碼實時獲取電機轉數(shù),設定定時器6中斷時間為100ms;在編寫程序時,將GPS 解讀到的經緯度信息、距離以及方位和ICM 獲取的自身方位角顯示在屏幕上,方便實時觀測信息。
系統(tǒng)整體設計方案為:主板供電后,首先進行初始化程序(包括系統(tǒng)函數(shù)初始化和系統(tǒng)功能模塊初始化),初始化程序完成后,智能車進入待機模式,此時可以通過TFT 屏幕檢測各個模塊有沒有正常啟動。若所有的模塊確認正常啟動,則按下遙控按鈕,智能車啟動,程序不斷在主函數(shù)中循環(huán),直至目標點迭代到達最后一個點,迭代結束時,程序運行結束,此時智能車也完成預定軌跡的循跡,見圖3。
圖3 程序系統(tǒng)運行流程圖
系統(tǒng)上電之后,首先進行的是初始化程序,將各模塊初始化啟動。首先需要初始化芯片時鐘,設定時鐘工作頻率為120MHz。之后是功能模塊的初始化:(1)電機和舵機初始化:初始化主板輸出給電機和舵機PWM 的通道,并設定初始頻率,并輸出初始占空比。(2)串口初始化:需要將需要與GPS 通信的串口進行初始化,設定串口波特率以及發(fā)送接收引腳。(3)外設模塊初始化:給GPS、ICM、編碼器初始化,使其處于工作狀態(tài)。
簡易慣導系統(tǒng)是GPS 與ICM 的組合,GPS 可以實時獲取智能車的位置信息,ICM 可以實時獲取自身的方向角。本文設計的主控方案是通過應用GPS 加ICM 的組合慣導來控制智能車的方向。GPS 通過采集坐標經緯度計算初始的方向角,將數(shù)據(jù)保存下來傳遞給單片機。ICM 可以獲取小車自身實時的方向角,但是大多數(shù)情況下使用ICM 都會存在零點漂移現(xiàn)象,這時就需要通過濾波技術對ICM 檢測到的值進行濾波處理[6],再和單片機保存的方向角作比較,通過PID 控制,使得小車的方向角保持在規(guī)定值。
欲使智能車按照規(guī)定的路徑自主導航,首先需要采集定位預設軌道位置信息。需要將GPS 得到的數(shù)據(jù)轉換為GCJ-02 坐標系下的經緯度,由于GPS 直接使用的坐標系數(shù)WGS-84,所以需要在程序中加入數(shù)據(jù)轉換程序,由此得到的坐標可以直接在百度地圖中找到,不會產生較大偏差。ICM實時檢測智能車自身的方位角,并將此數(shù)據(jù)也記錄下來。
通過提前采集軌道位置信息,可以得到兩個一維數(shù)組。第一個數(shù)組保存軌道的緯度信息,第二個數(shù)組保存軌道的經度信息。兩個數(shù)組同序號對應軌道同一位置。通過程序內的算法,可以得到任意兩點之間的距離。而距離檢測可以實現(xiàn)目標點的迭代,先計算好上一次采集點位置和目標點位置之間的距離,智能車通過GPS 實時采集行駛位置的經緯度,計算與目標點之間的距離。當距離到達要求時,迭代目標點,將前一次的目標點變?yōu)榇舜蔚钠鹗键c,下一個點變?yōu)槟繕它c。如此重復直至目標點正好為最后一個點,迭代結束,完成距離檢測,見圖4。
圖4 基于距離檢測的目標點迭代
PID 控制主要是對系統(tǒng)偏差進行比例、積分、微分三種操作并線性組合成控制量,以減小系統(tǒng)誤差,提高系統(tǒng)響應速度和響應效果。經典PID 控制又分為位置型PID 和增量式PID。
(1)比例控制:控制信號與誤差成正比(誤差越大,控制信號越大,控制量越強,改變現(xiàn)狀的能力也就越強),故當目標距離期望較遠時,誤差較大,控制量也較大,可以使得目標快速接近期望,但問題是當目標接近期望時誤差會變得很小,此時控制量也會很小,這又使得目標只能處于接近但始終不能真正達到期望的情況。
(2)積分控制:累積誤差并直接加到控制量上。當穩(wěn)態(tài)誤差存在時,誤差積分就會變大,同時控制量就會增大。
(3)微分控制:計算當前誤差的變化率并加至控制量。當外界發(fā)生一個很強的干擾時,目標受影響程度就會很大,這時就會很快的偏離期望,而微分控制的應用就是讓目標偏離期望后給它一個很大的控制量,讓其也能很快的返回穩(wěn)態(tài)。
3.4.1 電機PID 控制程序
電機PID 控制中,需要預先設定電機工作的轉速,通過測設找到合適的編碼器轉數(shù)來達到控制目的。在控制中,需要電機工作在一個穩(wěn)定的轉速上,所以PID 的設定值為設定轉速對應的編碼器轉數(shù),然后通過定時器中斷實時返回的編碼器轉數(shù),設定值與返回值作差,將此偏差信號輸入到PID 中,通過PID 控制實現(xiàn)電機轉速控制。
3.4.2 舵機PID 控制程序
通過慣導系統(tǒng),可以獲得兩個方向角,一個是通過GPS 得到的兩個目標點之間的角度,另一個是通過ICM 實時檢測得到的角度[7]。將通過GPS 得到的數(shù)據(jù)計算得到的兩個目標點之間的角度作為預設值,ICM 角度作為反饋值,作PID 控制,控制舵機旋轉相應的角度,在舵機控制中,采用增量型PID 比位置型PID 有更好的控制效果,這是由于舵機旋轉角度是一個較小的值,而且每次調節(jié)過程中需要調節(jié)的角度也較小,是一個平緩的調節(jié),所以增量型PID 調節(jié)有更好的效果,見圖5。
圖5 舵機PID 控制原理圖
經過對MM32 控制下智能車的調試與改進,該智能車可實現(xiàn)自動循跡,速度調控、導航定位等一系列智能化功能。本設計可以為無人駕駛領域甚至機器人領域提供一個全新的思路,在簡易組合慣導的作用下,智能車可以實現(xiàn)自循跡,良好的完成控制任務。