兩種智能小車的構(gòu)造簡介
在市面上常見的兩種智能小車都是基于輪式的,在某寶上面賣的最多的,各位在學(xué)生時代拿來應(yīng)付課程設(shè)計和畢業(yè)設(shè)計用的各種小車分為兩種。
1.后輪驅(qū)動,前輪阿克曼轉(zhuǎn)向的,通常后軸通過有刷直流電機驅(qū)動,前軸通過舵機帶動連桿轉(zhuǎn)向。英文通常稱為Car-like Model.
2.差速驅(qū)動,這種最為多見,可以做成輪式的,也可以做成履帶式的。通過每個輪子都有電機,當然你可以說成為輪轂電機驅(qū)動。這種通常稱為Tank-like Model.
通過在分析控制問題的時候,第一步就是需要對被控對象進行數(shù)學(xué)模型的建立。
這里我們不強調(diào)模型的復(fù)雜性,因為大多數(shù)都在低速情況行駛,所以可以只考慮運動學(xué)模。
如果您需要參加XXX智能車比賽,這類競速類的項目,就必須考慮動力學(xué)模型,且需要通過大量的試驗對模型進行參數(shù)估計和辨識。
本次只談?wù)摵喴椎倪\動學(xué)模型,并且進行Simulink環(huán)境的模型搭建,最后通過一個仿真環(huán)境來驗證模型的可用性!
需要的軟件與硬件
1.電腦一臺
2.裝有Matlab/Simulink的軟件本次只在仿真環(huán)境中建模,不需要小車的硬件和控制器硬件。
Car-like小車建模與仿真
1.模型推導(dǎo)
先給大家一個直觀的印象,如在我的上一篇博客中的小車就屬于Car-like 小車。您可以跳回上一篇文章進行查看小車圖片。
那么對于小車研究運動學(xué)模型,是需要對其簡化的,可以簡化成如下圖所示的模型。如果您不想看數(shù)學(xué)推導(dǎo),可以直接看最后的推導(dǎo)結(jié)果。





其中v是小車軸向速度,x,y代表小車后軸中心點的大地坐標。
2.Simulink模型搭建
首先,根據(jù)上節(jié)中的內(nèi)容搭建仿真模型,具體模型如下圖所示,如果您才入門Simulink,可以按照我的模型自己動手建一遍。

您會問我為什么會報錯呢,原因很簡單,我并沒有在Baseworkspace或者數(shù)據(jù)字典定義參數(shù)的具體數(shù)值,所示編譯器無法識別具體參數(shù),為什么我這么做呢,因為會將這部分模型封裝成子系統(tǒng)。
在子系統(tǒng)封裝界面輸入?yún)?shù)。
具體報錯原因我點進去幾個模塊給您看一下。例如這個積分模塊

這個模塊輸出值代表小車的大地坐標中的橫坐標,在Initial Condition中是定義小車的初始值,這里通過參數(shù)定義小車的初始橫坐標,采樣時間用參數(shù)表示方便自定義采樣時間,不用每次都打開模型輸入。
其他方位角,縱坐標,軸距其實都是一樣的。輸出模塊我用了Bus模塊,也是方便我們查看自己感興趣的輸出信號。接下來封裝子系統(tǒng)。全選界面,右鍵選擇Create Subsystem from Selection。
如下圖所示,可以看到,還是存在報錯情況,不過沒關(guān)系,稍后會進行解決。
車身系統(tǒng)目前就建立完了。

然后我們將進行轉(zhuǎn)向系統(tǒng)和驅(qū)動系統(tǒng)的建立,驅(qū)動系統(tǒng)的建立我就不用示意了,這時只需要把上次的模型拿過來,接入速度接口就可以了。
輸入:期望車速。輸出:實際速度。當然控制器不屬于系統(tǒng)本身的模型,這里我為了后期方便仿真,就放在一起了。

那么轉(zhuǎn)向系統(tǒng)的模型如何建立呢?
小車使用的是一個舵機,舵機具有非常大的慣性,如果用過的同學(xué)肯定都知道,這里我使用一個一階慣性環(huán)節(jié)來表示轉(zhuǎn)向系統(tǒng),一階慣性環(huán)節(jié)的滯后這里我就不做詳細的數(shù)學(xué)推導(dǎo)了,從bode圖上可以看相位有90度的滯后。
這里就用一個開環(huán)控制,因為轉(zhuǎn)向舵機我目前無法通過傳感器進行反饋控制。時間常數(shù)tao的選取決定了系統(tǒng)滯后時間。
不過注意不要將慣性環(huán)節(jié)和延遲環(huán)節(jié)進行混淆,千萬需要注意!其中Saturation模塊是對小車的期望轉(zhuǎn)角做一個限制的,限制最大轉(zhuǎn)角,在模塊中輸入?yún)?shù)MaxSteerAngle,后期進行封裝使用。

如果您不確定滯后參數(shù),可以加個Scope看一下滯后的時間,從而選定時間常數(shù)tao。這時我們將整個系統(tǒng)表示為如下圖所示。

軟件的架構(gòu)一定要清晰,這是最基本的!
接下來創(chuàng)建一個整體的子系統(tǒng)。

在VehicleBody子系統(tǒng)里,參數(shù)沒有定義還是處于報錯狀態(tài)。那么右鍵子系統(tǒng),選擇Mask->Create Mask,出現(xiàn)下圖界面:

先選中Parameters,再點擊左側(cè)的Edit。編輯成如下圖所示:

其中name對應(yīng)您設(shè)置的參數(shù)名字,Prompt對應(yīng)您在封裝界面顯示的名字。
并且您可以在Documentation條目中進行子系統(tǒng)的描述。最后點擊Ok。
再次點擊您的子系統(tǒng),可見已經(jīng)封裝完成。

當然您也可以右鍵子系統(tǒng)Mask->Add Icon Image選擇您小車的圖片,我也將自己的小車圖片加上去了。
并且您可以在Library中將您的模型生成自定義庫。

3.Car-like小車模型仿真
本次的仿真環(huán)境我使用Mathworks培訓(xùn)視頻提供的一個demo,在此demo上進行修改。
這個demo的需求是:通過規(guī)劃好路徑,設(shè)計純追蹤控制器,使小車能夠良好的跟蹤軌跡。

emo中分為三個部分:
第一個部分是尋找預(yù)瞄點,通過對車輛反饋的當前位置和參考路徑位置進行計算。
第二部分就是控制器算法,具體算法這里我就不解釋了,在CSDN搜索純跟蹤您可以看到關(guān)于此類車輛模型詳細的控制器數(shù)學(xué)推導(dǎo)。
第三部分就是車輛模型部分了。
從圖可以看到這個demo使用的Powertrain Blockset工具箱中的3dof自行車動力學(xué)模型。
我們需要將此模型替換成我們剛剛建立好的模型用我們的模型進行仿真,其他參數(shù)一律不進行修改。

已經(jīng)替換完成,設(shè)置小車參數(shù)以及車輛在坐標系初始位置。其中SignalProcess子系統(tǒng)里是信號的處理。



這時點擊仿真。紅色點是小車的實際路徑,參考路徑是藍色的,可以明顯看到,小車在預(yù)瞄距離0.3米的情況下,跟蹤的很好。
和官方的二自由度小車動力學(xué)模型結(jié)果幾乎誤差,這里我就沒有把兩者的誤差進行對比了,大家可以看下軌跡效果。
說明基于運動學(xué)建立的模型在低速環(huán)境下使用是沒有問題的。

前輪轉(zhuǎn)角也十分平穩(wěn),這里我用的離散模型,采用時間是5e3秒,官方提供的模型是連續(xù)的,只不過它在后面的信號處理用了RateTransition模塊。

Tank-like小車建模與仿真
1.模型推導(dǎo)
Tank-like小車模型較前者簡單,并且在某寶的普及率是遠遠高于帶前輪轉(zhuǎn)向的小車的,因為價格相對便宜很多,通過用兩塊亞克力板和四個輪子加香蕉電機就可以完成組裝。下圖即為小車簡化后的模型。


運動學(xué)關(guān)系就非常清晰了,可以通過速度和角速度求解出x與y的位置,也可以求解出左右的速度分別是多少。那么下一步就可以在Simulink中建模了。
2.Simulink模型搭建
建模也十分簡單,將上面推導(dǎo)的公式代入,就可以得到一系列的輸出了,這里我輸出了8個值,分別是小車的x和y的位置信息,x和y的速度信息,方位角和角速度信息和兩個車輛不同的前進速度!

注意在高亮的模塊中,是需要和上個模型一樣在模塊中定義初始值和采樣時間的,最后用總線信號輸出。然后按照上一個模型類似步驟的簡單封裝,就可以做成如下圖所示的樣子。

當您需要輸出什么信號的時候,后接一個Bus Selector即可選擇您想要的任何信號。
3.控制器推導(dǎo)


當然您可以發(fā)現(xiàn)我們需要的距離 x xx是在小車坐標系下的,而預(yù)瞄距離是在大地坐標系下的,所以在求出預(yù)瞄點坐標的時候,您需要將預(yù)瞄點坐標轉(zhuǎn)換到小車的坐標系中,而坐標系按如下方法進行轉(zhuǎn)換的:
(1)首先將預(yù)瞄點坐標平移到以小車坐標為原點的坐標系中。
(2)將平移后的坐標系旋轉(zhuǎn)小車的方位角θ ,得到最終的小車坐標系。
4.仿真環(huán)境搭建
參考軌跡按照上個模型的仿真環(huán)境不變,計算預(yù)瞄點距離的算法子系統(tǒng)不變,我們需要改變的是控制器子系統(tǒng)和車輛模型子系統(tǒng)。


再看控制器如何設(shè)計的,最重要的就是坐標系的轉(zhuǎn)換(藍色區(qū)域),建議有興趣的同學(xué)可以自己推算一遍,十分簡單的數(shù)學(xué)幾何關(guān)系。
這里就沒有使用參考軌跡的方位角信息了!

整體模型架構(gòu)如下:

本次仿真設(shè)置的是預(yù)瞄距離20cm,車速0.5m/s,開始仿真。看一下期望軌跡。

這是差速小車,當然您可以將左輪速度和右輪速度輸出看一下。總體來說弄懂原理十分簡單。參數(shù)的具體值就不對比了。
如果您有興趣可以從頭自己搭建一個您自己期望的參考軌跡,根據(jù)已經(jīng)設(shè)計好的控制器進行仿真看一下效果。將x和y坐標接入xyGraph模塊一樣可以看到實際軌跡。
總結(jié)
本次進行了兩種常見的小車模型推導(dǎo),建模與仿真,其中Tank-like小車您也可以沿用成履帶式的小車,在低速有約束的情況下都是模型都是通用的。
當您從某寶等電商平臺購買回一臺小車,我建議您從小車的構(gòu)造本質(zhì)進行入手,才能最其進行更好的控制,控制首先需要對被控對象進行深入的了解,無論是正向原則和數(shù)據(jù)驅(qū)動的方式建模,都需要對模型進行搭建,才能展開后續(xù)控制器的設(shè)計。
如果您使用的是Matlab2019b,那您可以在機器人工具箱中找到我今天做的兩種小車模型和差速小車純跟蹤控制器,區(qū)別在于工具箱中的模塊是基于面向?qū)ο?a target="_blank">編程的方法,沒有用Simulink模塊搭建,底層代碼是不可見的。
您可以驗證下本次教程的模型搭建是否和官方的模型有出入。

審核編輯:劉清
電子發(fā)燒友App








評論