兩種智能小車的構(gòu)造簡介
在市面上常見的兩種智能小車都是基于輪式的,在某寶上面賣的最多的,各位在學(xué)生時(shí)代拿來應(yīng)付課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)用的各種小車分為兩種。
1.后輪驅(qū)動(dòng),前輪阿克曼轉(zhuǎn)向的,通常后軸通過有刷直流電機(jī)驅(qū)動(dòng),前軸通過舵機(jī)帶動(dòng)連桿轉(zhuǎn)向。英文通常稱為Car-like Model.
2.差速驅(qū)動(dòng),這種最為多見,可以做成輪式的,也可以做成履帶式的。通過每個(gè)輪子都有電機(jī),當(dāng)然你可以說成為輪轂電機(jī)驅(qū)動(dòng)。這種通常稱為Tank-like Model.
通過在分析控制問題的時(shí)候,第一步就是需要對被控對象進(jìn)行數(shù)學(xué)模型的建立。
這里我們不強(qiáng)調(diào)模型的復(fù)雜性,因?yàn)榇蠖鄶?shù)都在低速情況行駛,所以可以只考慮運(yùn)動(dòng)學(xué)模。
如果您需要參加XXX智能車比賽,這類競速類的項(xiàng)目,就必須考慮動(dòng)力學(xué)模型,且需要通過大量的試驗(yàn)對模型進(jìn)行參數(shù)估計(jì)和辨識。
本次只談?wù)摵喴椎倪\(yùn)動(dòng)學(xué)模型,并且進(jìn)行Simulink環(huán)境的模型搭建,最后通過一個(gè)仿真環(huán)境來驗(yàn)證模型的可用性!
需要的軟件與硬件
1.電腦一臺
2.裝有Matlab/Simulink的軟件本次只在仿真環(huán)境中建模,不需要小車的硬件和控制器硬件。
Car-like小車建模與仿真
1.模型推導(dǎo)
先給大家一個(gè)直觀的印象,如在我的上一篇博客中的小車就屬于Car-like 小車。您可以跳回上一篇文章進(jìn)行查看小車圖片。
那么對于小車研究運(yùn)動(dòng)學(xué)模型,是需要對其簡化的,可以簡化成如下圖所示的模型。如果您不想看數(shù)學(xué)推導(dǎo),可以直接看最后的推導(dǎo)結(jié)果。
其中v是小車軸向速度,x,y代表小車后軸中心點(diǎn)的大地坐標(biāo)。
2.Simulink模型搭建
首先,根據(jù)上節(jié)中的內(nèi)容搭建仿真模型,具體模型如下圖所示,如果您才入門Simulink,可以按照我的模型自己動(dòng)手建一遍。
您會(huì)問我為什么會(huì)報(bào)錯(cuò)呢,原因很簡單,我并沒有在Baseworkspace或者數(shù)據(jù)字典定義參數(shù)的具體數(shù)值,所示編譯器無法識別具體參數(shù),為什么我這么做呢,因?yàn)闀?huì)將這部分模型封裝成子系統(tǒng)。
在子系統(tǒng)封裝界面輸入?yún)?shù)。
具體報(bào)錯(cuò)原因我點(diǎn)進(jìn)去幾個(gè)模塊給您看一下。例如這個(gè)積分模塊
這個(gè)模塊輸出值代表小車的大地坐標(biāo)中的橫坐標(biāo),在Initial Condition中是定義小車的初始值,這里通過參數(shù)定義小車的初始橫坐標(biāo),采樣時(shí)間用參數(shù)表示方便自定義采樣時(shí)間,不用每次都打開模型輸入。
其他方位角,縱坐標(biāo),軸距其實(shí)都是一樣的。輸出模塊我用了Bus模塊,也是方便我們查看自己感興趣的輸出信號。接下來封裝子系統(tǒng)。全選界面,右鍵選擇Create Subsystem from Selection。
如下圖所示,可以看到,還是存在報(bào)錯(cuò)情況,不過沒關(guān)系,稍后會(huì)進(jìn)行解決。
車身系統(tǒng)目前就建立完了。
然后我們將進(jìn)行轉(zhuǎn)向系統(tǒng)和驅(qū)動(dòng)系統(tǒng)的建立,驅(qū)動(dòng)系統(tǒng)的建立我就不用示意了,這時(shí)只需要把上次的模型拿過來,接入速度接口就可以了。
輸入:期望車速。輸出:實(shí)際速度。當(dāng)然控制器不屬于系統(tǒng)本身的模型,這里我為了后期方便仿真,就放在一起了。
那么轉(zhuǎn)向系統(tǒng)的模型如何建立呢?
小車使用的是一個(gè)舵機(jī),舵機(jī)具有非常大的慣性,如果用過的同學(xué)肯定都知道,這里我使用一個(gè)一階慣性環(huán)節(jié)來表示轉(zhuǎn)向系統(tǒng),一階慣性環(huán)節(jié)的滯后這里我就不做詳細(xì)的數(shù)學(xué)推導(dǎo)了,從bode圖上可以看相位有90度的滯后。
這里就用一個(gè)開環(huán)控制,因?yàn)檗D(zhuǎn)向舵機(jī)我目前無法通過傳感器進(jìn)行反饋控制。時(shí)間常數(shù)tao的選取決定了系統(tǒng)滯后時(shí)間。
不過注意不要將慣性環(huán)節(jié)和延遲環(huán)節(jié)進(jìn)行混淆,千萬需要注意!其中Saturation模塊是對小車的期望轉(zhuǎn)角做一個(gè)限制的,限制最大轉(zhuǎn)角,在模塊中輸入?yún)?shù)MaxSteerAngle,后期進(jìn)行封裝使用。
如果您不確定滯后參數(shù),可以加個(gè)Scope看一下滯后的時(shí)間,從而選定時(shí)間常數(shù)tao。這時(shí)我們將整個(gè)系統(tǒng)表示為如下圖所示。
軟件的架構(gòu)一定要清晰,這是最基本的!
接下來創(chuàng)建一個(gè)整體的子系統(tǒng)。
在VehicleBody子系統(tǒng)里,參數(shù)沒有定義還是處于報(bào)錯(cuò)狀態(tài)。那么右鍵子系統(tǒng),選擇Mask->Create Mask,出現(xiàn)下圖界面:
先選中Parameters,再點(diǎn)擊左側(cè)的Edit。編輯成如下圖所示:
其中name對應(yīng)您設(shè)置的參數(shù)名字,Prompt對應(yīng)您在封裝界面顯示的名字。
并且您可以在Documentation條目中進(jìn)行子系統(tǒng)的描述。最后點(diǎn)擊Ok。
再次點(diǎn)擊您的子系統(tǒng),可見已經(jīng)封裝完成。
當(dāng)然您也可以右鍵子系統(tǒng)Mask->Add Icon Image選擇您小車的圖片,我也將自己的小車圖片加上去了。
并且您可以在Library中將您的模型生成自定義庫。
3.Car-like小車模型仿真
本次的仿真環(huán)境我使用Mathworks培訓(xùn)視頻提供的一個(gè)demo,在此demo上進(jìn)行修改。
這個(gè)demo的需求是:通過規(guī)劃好路徑,設(shè)計(jì)純追蹤控制器,使小車能夠良好的跟蹤軌跡。
emo中分為三個(gè)部分:
第一個(gè)部分是尋找預(yù)瞄點(diǎn),通過對車輛反饋的當(dāng)前位置和參考路徑位置進(jìn)行計(jì)算。
第二部分就是控制器算法,具體算法這里我就不解釋了,在CSDN搜索純跟蹤您可以看到關(guān)于此類車輛模型詳細(xì)的控制器數(shù)學(xué)推導(dǎo)。
第三部分就是車輛模型部分了。
從圖可以看到這個(gè)demo使用的Powertrain Blockset工具箱中的3dof自行車動(dòng)力學(xué)模型。
我們需要將此模型替換成我們剛剛建立好的模型用我們的模型進(jìn)行仿真,其他參數(shù)一律不進(jìn)行修改。
已經(jīng)替換完成,設(shè)置小車參數(shù)以及車輛在坐標(biāo)系初始位置。其中SignalProcess子系統(tǒng)里是信號的處理。
這時(shí)點(diǎn)擊仿真。紅色點(diǎn)是小車的實(shí)際路徑,參考路徑是藍(lán)色的,可以明顯看到,小車在預(yù)瞄距離0.3米的情況下,跟蹤的很好。
和官方的二自由度小車動(dòng)力學(xué)模型結(jié)果幾乎誤差,這里我就沒有把兩者的誤差進(jìn)行對比了,大家可以看下軌跡效果。
說明基于運(yùn)動(dòng)學(xué)建立的模型在低速環(huán)境下使用是沒有問題的。
前輪轉(zhuǎn)角也十分平穩(wěn),這里我用的離散模型,采用時(shí)間是5e3秒,官方提供的模型是連續(xù)的,只不過它在后面的信號處理用了RateTransition模塊。
Tank-like小車建模與仿真
1.模型推導(dǎo)
Tank-like小車模型較前者簡單,并且在某寶的普及率是遠(yuǎn)遠(yuǎn)高于帶前輪轉(zhuǎn)向的小車的,因?yàn)閮r(jià)格相對便宜很多,通過用兩塊亞克力板和四個(gè)輪子加香蕉電機(jī)就可以完成組裝。下圖即為小車簡化后的模型。
運(yùn)動(dòng)學(xué)關(guān)系就非常清晰了,可以通過速度和角速度求解出x與y的位置,也可以求解出左右的速度分別是多少。那么下一步就可以在Simulink中建模了。
2.Simulink模型搭建
建模也十分簡單,將上面推導(dǎo)的公式代入,就可以得到一系列的輸出了,這里我輸出了8個(gè)值,分別是小車的x和y的位置信息,x和y的速度信息,方位角和角速度信息和兩個(gè)車輛不同的前進(jìn)速度!
注意在高亮的模塊中,是需要和上個(gè)模型一樣在模塊中定義初始值和采樣時(shí)間的,最后用總線信號輸出。然后按照上一個(gè)模型類似步驟的簡單封裝,就可以做成如下圖所示的樣子。
當(dāng)您需要輸出什么信號的時(shí)候,后接一個(gè)Bus Selector即可選擇您想要的任何信號。
3.控制器推導(dǎo)
當(dāng)然您可以發(fā)現(xiàn)我們需要的距離 x xx是在小車坐標(biāo)系下的,而預(yù)瞄距離是在大地坐標(biāo)系下的,所以在求出預(yù)瞄點(diǎn)坐標(biāo)的時(shí)候,您需要將預(yù)瞄點(diǎn)坐標(biāo)轉(zhuǎn)換到小車的坐標(biāo)系中,而坐標(biāo)系按如下方法進(jìn)行轉(zhuǎn)換的:
(1)首先將預(yù)瞄點(diǎn)坐標(biāo)平移到以小車坐標(biāo)為原點(diǎn)的坐標(biāo)系中。
(2)將平移后的坐標(biāo)系旋轉(zhuǎn)小車的方位角θ ,得到最終的小車坐標(biāo)系。
4.仿真環(huán)境搭建
參考軌跡按照上個(gè)模型的仿真環(huán)境不變,計(jì)算預(yù)瞄點(diǎn)距離的算法子系統(tǒng)不變,我們需要改變的是控制器子系統(tǒng)和車輛模型子系統(tǒng)。
再看控制器如何設(shè)計(jì)的,最重要的就是坐標(biāo)系的轉(zhuǎn)換(藍(lán)色區(qū)域),建議有興趣的同學(xué)可以自己推算一遍,十分簡單的數(shù)學(xué)幾何關(guān)系。
這里就沒有使用參考軌跡的方位角信息了!
整體模型架構(gòu)如下:
本次仿真設(shè)置的是預(yù)瞄距離20cm,車速0.5m/s,開始仿真??匆幌缕谕壽E。
這是差速小車,當(dāng)然您可以將左輪速度和右輪速度輸出看一下??傮w來說弄懂原理十分簡單。參數(shù)的具體值就不對比了。
如果您有興趣可以從頭自己搭建一個(gè)您自己期望的參考軌跡,根據(jù)已經(jīng)設(shè)計(jì)好的控制器進(jìn)行仿真看一下效果。將x和y坐標(biāo)接入xyGraph模塊一樣可以看到實(shí)際軌跡。
總結(jié)
本次進(jìn)行了兩種常見的小車模型推導(dǎo),建模與仿真,其中Tank-like小車您也可以沿用成履帶式的小車,在低速有約束的情況下都是模型都是通用的。
當(dāng)您從某寶等電商平臺購買回一臺小車,我建議您從小車的構(gòu)造本質(zhì)進(jìn)行入手,才能最其進(jìn)行更好的控制,控制首先需要對被控對象進(jìn)行深入的了解,無論是正向原則和數(shù)據(jù)驅(qū)動(dòng)的方式建模,都需要對模型進(jìn)行搭建,才能展開后續(xù)控制器的設(shè)計(jì)。
如果您使用的是Matlab2019b,那您可以在機(jī)器人工具箱中找到我今天做的兩種小車模型和差速小車純跟蹤控制器,區(qū)別在于工具箱中的模塊是基于面向?qū)ο?a href="http://www.wenjunhu.com/v/tag/1315/" target="_blank">編程的方法,沒有用Simulink模塊搭建,底層代碼是不可見的。
您可以驗(yàn)證下本次教程的模型搭建是否和官方的模型有出入。
審核編輯:劉清
評論
查看更多