問題描述
現有一個Solidworks中的小車模型,如圖所示。
現在需要在matlab中進行物理仿真,所以需要在matlab中建立物理模型,這里使用Simscape較為合適。
導入模型到matlab中
分別將車身(除輪子以外的部分)與車輪保存為stl或step格式。
在simulink中創建file solid,file為先前保存的車身、車輪。
建立模型
步驟
我們可以對首先建立一個與實際情況近似的模型,使機構基本能夠工作,后續迭代可以逐漸增加模型的復雜度。建模步驟按照下述方法進行:
1.定義機構中的剛體
2.定義剛體之間的連接(關節、約束等)
3.孤立地考慮每一個剛體,建立剛體的簡單近似模型。
4.利用關節/約束等組裝剛體。
模型建立
1)理論模型
圖1 理論模型圖
平衡車可以看成一個倒立擺,車輪與車體之間由轉動副連接,車輪與地面之間相當於一個移動副(棱柱副)。
需要注意兩個細節:
轉動副和移動副會提供一個自由度,這個自由度必須沿成這樣,它連接兩個剛體,轉軸必須是z軸,所以應當做好連接部分的坐標變換,使得連接處的轉軸為z軸。這個非常重要!!
revolute joint prismatic joint
現在我們在matlab命令行輸入smnew建一個模板,如圖所示。
2)車體
車體需要提供一個連接口,位置在圖1中的ro處,以便與輪子用轉動副連接,這個需要用Rigid Transform來實現,這個模塊就是用來變換坐標的,B為Base frame(基本構架),F為follower frame(下一個構架)。
不論怎么變換,最后注意z軸與轉軸方向一致,如圖所示:
提示一下,可以連接到世界坐標系運行,這樣可以看到模型,方便調整,弄完后封裝為子系統(Subsystem)全都選中就可以封裝,如果有興趣,還可以右鍵->Mask弄一個小界面,最后就像這樣。
3)車輪
車輪要提供兩個接口,一個用於連接棱柱副,車體的移動方向要為z軸,一個用於連接轉動副,輪子的轉動軸要為z軸。
封裝好后:
4)連接成整體模型
這里我們為了進行PID控制,要在轉動副上添加傳感器,在移動副上施加力。
用input port 和output port把這幾個模塊信號引出,再封裝成子系統:
控制
直立控制
直立控制很簡單,當擺桿向下運動的時候,受重力作用,擺桿會加速向下,那么怎么給擺桿一個反力呢,那就需要給下方的車一個同向的加速度,產生一個反力,這個反力應當包括回復力$k_1{\theta}$和阻尼力$k_2{\theta}^{\prime}$,其中$k_1,k_2$為比例系數(阻尼力可以使擺盡快穩定):
在模型中表示就是:
然后就是調節PD參數的時候(I不管),不斷調節,使小車能夠穩定即可。
目前的效果: