SimMechanics/Multibody入門

目錄

 

1. 引言

2. 介紹

3. 從單擺說起

3.1 創建模型

3.2 建立一個連桿

3.3 建立一個單擺

3.4 模型仿真

4. 總結


1. 引言

在機器人的平臺中,我比較常用的是ROS(C++),Robotic Toolbox(Matlab third party)以及SimMechanics/Multibody (Matlab Simulink)。因此以後我的“機器人學”欄目中文章的仿真實踐部分均會使用到這三個平臺。

這裏提一下,之所以稱爲SimMechanics/Multibody是因爲這個工具在Matlab 2014上叫做SimMechanics,但是在Matlab 2018上SimMechanics已經找不到了,只有Multibody,但基本組件沒什麼變化,具體哪個版本出現的這種變化我沒去深究。總之在以後的仿真應用中,如無特殊說明,我使用將是Matlab 2018a。

2. 介紹

Matlab的SimMechanics模塊集成在Simulink中,是一個多體機構仿真環境。SimMechanics提供了幾何體、關節、約束、施力單元以及傳感器等大量的組件,這使得在Matlab中搭建一個機構仿真框圖十分容易。同時SimMechanics集成了3D可視化組件,這使得仿真結果更爲直觀。

SimMechanics可以用於機構運動學、動力學仿真及控制算法驗證等。Matlab的官方文檔其實是很豐富的,但都是英文。因此這個欄目裏的一部分文章將建立在對官方文檔翻譯的基礎上。

3. 從單擺說起

單擺應該可以認爲是最簡單的機械系統了,因此我們首先利用SimMechanics來仿真一個單擺的運動。

3.1 創建模型

有多種方法可以打開SimMechanics開發環境。因爲SimMechanics屬於Simulink的一個模塊,因此可以首先從菜單欄打開Simulink或者在命令行輸入simulink並回車,打開如下Simulink項目創建頁面。

之後向下瀏覽到Simscape --> Multibody的模板項目,點擊這個項目即可創建一個Multibody的仿真模型。其實還有一種更簡單的創建方式,在Matlab的命令窗口輸入smnew就可以直接創建一個Multibody的仿真模型。新建立的模型如下圖所示。單擊某個模塊會顯示該模塊的名稱,在第一次用到某個模塊時我會大致介紹這個模塊的用途。

3.2 建立一個連桿

  1. 刪掉Simulink-PS Converter,PS-Simulink Converter和Scope,這些暫不需要,後面再添加進來;
  2. 複製Rigid Transform模塊,注意鼠標右鍵按住模塊並拖動即可完成複製;
  3. 按照下面的方式連接各個模塊,注意兩個Rigid Transform模塊的B端都需要連接到Solid模塊的R端,所謂B端是Base也就是基座標系的意思,讓Rigid Transform的B端連接Solid代表這兩個座標系是以Solid的座標系爲基座標系進行定義。模塊連接完畢如下圖所示。

接下來我們配置Solid模塊,這個模塊代表一個幾何體,在這裏也就是我們單擺對應的連桿,我們可以配置這個連桿的質量,形狀,密度,慣量等剛體的基本參數。雙擊Solid模塊,在參數配置對話框中進行如下配置。

Solid模塊配置
參數 參數值 單位
Geometry --> Dimensions [L W H] m
Inertia --> Density rho 默認
Graphic -->Visual Properties --> Color rgb

表格的第一項是配置幾何體尺寸,L W H分別代表長方體的長寬高,也是長方體在x, y, z三個維度上的尺寸。第二項代表的是幾何體的密度,在這種情況下我們認爲幾何體是的質量是均勻分佈的。第三項代表的是幾何體的顏色,我們可以設置它的rgb值。需要注意的是這裏我們不需要給出具體值,只需給出這些參數對應的變量,如L W H等,後面我們再處理這些參量找不到而導致的錯誤。參數配置完後如下圖所示。

接下來我們配置兩個Rigid Transform模塊。所謂Rigid Transform,字面意思是剛性變換,意思就是由Rigid Transform定義的座標系與其基座標系(B端連接的座標系)的關係是固定不變的。我們希望這兩個Rigid Transform分別定義在連桿兩端,各個軸分別與Solid的軸保持平行。因此對兩個Rigid Transform作如下配置。再次強調請先忽略因未知參數引起的錯誤。

Rigid Transform模塊配置
參數 Rigid Transform1

Rigid Transform

Units
Translation --> Method Standard Axis Standard Axis
Translation --> Axis -X +X
Translation --> Offset L/2 L/2 m

這個配置的含義是在長方體的Solid模塊上建立兩個固定座標系,這兩個座標系分別沿着Solid模塊的座標系向X軸正向和X軸負向平移長方體長度的一半,圖形化表示如下。

Solid自身的座標系建立在其幾何中心(在這裏也是質心)處,L代表的是x方向上的長度,上圖關於這三個座標系之間的關係描述得比較清晰了。

接下來我們創建一個子系統,選中兩個Rigid Transform模塊和Solid模塊,之後在高亮區域點擊鼠標右鍵選擇Create Subsystem from Selection或者直接利用Ctrl+G快捷鍵來創建一個子系統。如下圖所示。

接下來我們終於可以開始處理關於未定義變量的問題。Matlab提供了一種工具來支持用戶在Simulink下自定義變量,英文爲Mask,我覺得這個名字是比較形象的,它的作用就是在某個模塊上蓋上一個透明的“薄膜”,這樣當用戶雙擊該模塊時,會進入Mask的配置而不再是打開原來的模塊屬性。因此Mask可以認爲是遮罩、蒙版、掩模等等,只要大家有這樣一個認識就可以了。

在Subsystem1上右擊選擇Mask --> Create Mask。這樣會打開Mask的編輯器。我們在這個編輯器中將添加之前在Solid和Rigid Transform中鍵入的變量。在Mask編輯器Parameters & Dialog標籤頁中我們添加五個Edit控件,分別對這五個控件進行屬性編輯,編輯的屬性如下表。

創建Mask
Prompt Name
Length(m) L
Width(m) W
Thickness(m) H
Density(kg/m^3) rho
Color[R G B] rgb

配置完後的控件如下圖所示。

編輯完後點擊OK完成Mask添加。此時在Subsystem1上雙擊就不會再進入這個子系統了,而是會打開Mask的配置。如果想要進入這個子系統,需要點擊Subsystem1模塊左下角的向下箭頭來完成。

雙擊Subsystem1模塊打開Mask配置用於給各個變量賦值。各個變量的賦值如下表。

Mask參數值設置
參數
Length(m) 1
Width(m) 0.01
Thickness(m) 0.01
Density(kg/m^3) 2700
Color[R G B] [0.25 0.40 0.70]

至此我們就完成了一個連桿子系統的創建。

3.3 建立一個單擺

前面在3.2節建立的連桿子系統將作爲本節單擺的擺動杆。我們看在當前建立的仿真模型右上角有一個藍色的模塊,這個模塊可以用來插入Simscape Multibody的各種模塊,雙擊打開模塊庫(當然你也可以直接打開Simulink的模塊庫瀏覽到Simscape進行模塊添加,只需點擊工具欄的)以添加模塊。選擇Joints --> Revolute Joint來添加一個旋轉關節。選擇Body Elements --> Solid來添加一個Solid模塊。利用如下圖所示的方式連接各個模塊。

Solid模塊和Revolute Joint模塊的B端均與基座標系World Frame連接,代表它們相對基座標系靜止。此處的Solid模塊可以認爲是充當關節的實體部分,因爲Revolute Joint本身並不綁定任何的實體,在仿真環境中只能看到一個座標系可能顯得不那麼美觀。Solid模塊本身與基座標系固連在一起,因此它對單擺系統動力學沒有任何影響。我們只對該模塊進行如下配置。

Solid模塊配置
參數 單位
Geometry > Dimensions [0.04 0.04 0.04] m
Graphic > Visual Properties > Color [0.80 0.45 0]

接下來我們申明重力加速度的方向,Revolute Joint默認是繞着Z軸旋轉,如果重力加速度是沿着Z軸的負向,那麼重力就不會使單擺產生加速度了,爲了保證單擺能在重力加速度影響下襬動,我們讓重力加速度沿着Y軸的負向。雙擊Mechanism Configuration,選擇Uniform Gravity --> Gravity參數並設置爲[0 -9.81 0]。

爲了讓單擺擺動還需要一個偏離平衡點的初始位置,我們可以在Revolute Joint模塊對關節初始位置進行設定。選擇State Targets --> Specify Position Target。默認值是0其實已經偏離了平衡位置90度了,所以這裏暫時不設置了。至於爲什麼偏離了90度可以參考下面的圖。爲了方便我把視圖沿x軸旋轉了90度。g代表重力加速度。因此-90度爲系統的平衡點,關節初始值是0度,所以已經偏離平衡點90度了。

Matlab在系統仿真時實際上是依賴於各種求解器來模仿系統動態的,我們這裏需要對求解器進行簡單的配置,以使得仿真更真實。

  1. 在模型編輯窗口的菜單欄依次選擇Simulation --> Model Configuration Parameters打開模型配置參數對話框。在求解器標籤頁選擇ode15s (stiff/NDF)求解器。對於物理模型而言比較推薦這個求解器。
  2. Solver Details下蛇者Max step size爲0.01並點擊OK完成配置。在這裏步長設置越小仿真越精確但同時計算量也會增大從而影響仿真速度。由於模型比較簡單,在這裏我們設置0.01是比較合適的。

3.4 模型仿真

經過前面一系列配置之後我們的模型終於建立完成,寫了非常多但實際操作起來其實是很容易的。我們在模型編輯窗口菜單欄選擇Simulation --> Update diagram就可以打開三維可視化頁面,在這個頁面我們可以完成仿真工作。3D可視化頁面如下圖所示。

習慣上我們希望重力加速度向下,所以需要翻轉一下視角,在該頁面的工具欄選擇即可完成視圖變換,此時y軸向上,如下圖所示。

此時點擊工具欄的即可開始仿真。在這個頁面其實還有很多實用的小工具,大家可以自行嘗試,這裏就不再一一介紹了。

4. 總結

這篇文章主要介紹了SimMechanics的基本使用方法,我們用它建立了一個自由運動的單擺。下一篇文章將爲大家分享如何驅動模型的運動以及測量模型的輸出量等。

發佈了14 篇原創文章 · 獲贊 13 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章