天天看點

倒立擺:Simulink模組化倒立擺:Simulink模組化

倒立擺:Simulink模組化

内容

在此頁面中,我們概述了如何建立倒立擺系統的模型,刹車使用Simulink及其附件進行仿真。然後可以使用非線性仿真來測試模型的線性化版本的有效性。仿真模型還可以用于評估基于線性化模型設計的控制方案的性能。

實體設定和系統方程式

在此示例中,我們将考慮帶有手推車的倒立擺系統的二維版本,其中放置被限制為在下圖所示的垂直平面中移動。對于該系統,控制輸入是

倒立擺:Simulink模組化倒立擺:Simulink模組化

使推車水準移動的力,輸出是擺的角位置

倒立擺:Simulink模組化倒立擺:Simulink模組化

和推車的水準位置

倒立擺:Simulink模組化倒立擺:Simulink模組化

倒立擺:Simulink模組化倒立擺:Simulink模組化

對于此示例,我們假設以下數量: (M)推車品質0.5公斤 (m)擺品質0.2公斤 (b)推車的摩擦系數為0.1 N / m / sec (l)到擺品質中心的長度0.3 m (I)擺的品質慣性矩0.006 kg.m ^ 2 (F)施加在推車上的力 (x)推車位置坐标 垂直(向下)的(θ)擺角 下面是該系統的兩個自由圖。

倒立擺:Simulink模組化倒立擺:Simulink模組化

由于手推車和擺錘之間的實體限制(銷接頭)會降低系統的自由度,是以該系統在Simulink中中進行模組化具有挑戰性。手推車和擺錘都具有一個自由度(為分别

倒立擺:Simulink模組化倒立擺:Simulink模組化

狀語從句:

倒立擺:Simulink模組化倒立擺:Simulink模組化

)。我們修正牛頓第二定律(

倒立擺:Simulink模組化倒立擺:Simulink模組化

)的第一原理生成這些自由度的微分方程,如下所示。 (1)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(2)

倒立擺:Simulink模組化倒立擺:Simulink模組化

但是,有必要包括互相作用力

倒立擺:Simulink模組化倒立擺:Simulink模組化

以及

倒立擺:Simulink模組化倒立擺:Simulink模組化

手推車和擺錘之間的互相作用力,以便對系統的動力學進行完全模組化。這些力量的加入需要模組化

倒立擺:Simulink模組化倒立擺:Simulink模組化

-和

倒立擺:Simulink模組化倒立擺:Simulink模組化

品質的鐘擺中心的翻譯-components除了其旋轉動力性能。在“ 倒立擺:系統模組化” 教程中,互相作用力

倒立擺:Simulink模組化倒立擺:Simulink模組化

倒立擺:Simulink模組化倒立擺:Simulink模組化

進行了代數求解。 通常,我們想利用 Simulink的模組化功能來為我們代數。是以,我們将為擺的附加

倒立擺:Simulink模組化倒立擺:Simulink模組化

-和-

倒立擺:Simulink模組化倒立擺:Simulink模組化

組分方程模組化,如下所示。 (3)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(4)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(5)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(6)

倒立擺:Simulink模組化倒立擺:Simulink模組化

但是,位置坐标

倒立擺:Simulink模組化倒立擺:Simulink模組化

倒立擺:Simulink模組化倒立擺:Simulink模組化

是的精确函數

倒立擺:Simulink模組化倒立擺:Simulink模組化

。是以,我們可以用的導數表示它們的導數

倒立擺:Simulink模組化倒立擺:Simulink模組化

。首先解決

倒立擺:Simulink模組化倒立擺:Simulink模組化

-component方程,我們得出以下結果。 (7)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(8)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(9)

倒立擺:Simulink模組化倒立擺:Simulink模組化

然後處理

倒立擺:Simulink模組化倒立擺:Simulink模組化

-component方程式,我們得到以下結果。 (10)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(11)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(12)

倒立擺:Simulink模組化倒立擺:Simulink模組化

然後,這些表達式可以代入表達式

倒立擺:Simulink模組化倒立擺:Simulink模組化

倒立擺:Simulink模組化倒立擺:Simulink模組化

從上方如下。 (13)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(14)

倒立擺:Simulink模組化倒立擺:Simulink模組化

現在,我們可以在Simulink中表示這些方程式。Simulink可以直接與非線性方程式一起使用,是以沒有必要像在“ 倒立擺:系統模組化” 頁面中那樣線性化這些方程式。

用Simulink建立非線性模型

我們可以按照下面給出的步驟,使用上面導出的公式在Simulink中建立倒立擺模型。

  • 首先在MATLAB指令視窗中鍵入 simulink 以打開Simulink環境。然後,通過在打開的 Simulink起始頁 視窗中選擇“ 建立”>“ Simulink”>“空白模型” ,或按 Ctrl-N, 在Simulink中打開一個新模型視窗。
  • 更改每個Fcn塊的标簽以比對其關聯功能。
  • 輕按兩下每個Integrator塊以添加相關狀态變量的 State Name :。有關示例,請參見下圖。還要将“ 初始條件” 更改為 : “
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    鐘擺角度”為“ pi”,以表示鐘擺開始筆直指向上方。
倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 從Simulink / Signal Routing庫中插入四個多路複用器(Mux)塊,每個Fcn塊一個。
  • 分别從Simulink / Sinks和Simulink / Sources庫中插入兩個Out1塊和一個In1塊。然後輕按兩下塊的标簽以更改其名稱。兩個輸出用于手推車的“位置”和擺的“角度”,而一個輸入用于應用于手推車的“力”。
  • 将Mux塊的每個輸出連接配接到相應Fcn塊的輸入。
倒立擺:Simulink模組化倒立擺:Simulink模組化

現在我們将四個方程式(1),(2),(13)和(14)分别輸入到Fcn塊中。讓我們從下面重複的等式(1)開始。 (15)

倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 按照上一步中指定的順序将這三個輸入連接配接到此Mux塊。
  • 輕按兩下第一個Fcn塊,然後輸入 xddot 的方程式,如下所示。
倒立擺:Simulink模組化倒立擺:Simulink模組化

現在,讓我們輸入方程式(2),下面将重複進行。 (16)

倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 将上面的方程式輸入到Fcn塊中,更改Mux塊的輸入數量,然後以正确的順序将正确的信号連接配接到Mux塊。
  • 對下面重複的方程式(13)和(14)重複此過程。

(17)

倒立擺:Simulink模組化倒立擺:Simulink模組化

(18)

倒立擺:Simulink模組化倒立擺:Simulink模組化

完成所有這些步驟後,生成的模型應如下所示。

倒立擺:Simulink模組化倒立擺:Simulink模組化

為了将所有這些元件儲存為單個子系統塊,請首先選擇所有塊,然後右鍵單擊所選部分,然後從菜單中 選擇“ 從選擇中 建立子系統” 。您的模型應如下所示。您也可以通過右鍵單擊 此處 ,然後選擇“ 将連結另存為...” 來下載下傳該系統的檔案。

倒立擺:Simulink模組化倒立擺:Simulink模組化

用Simscape建立非線性模型

在本節中,我們還顯示了如何使用Simulink的Simscape擴充的實體模組化子產品來建構倒立擺模型。Simscape庫中的塊代表實際的實體元件;是以,可以建構複雜的多體動力學模型,而無需像上面通過應用牛頓定律所做的那樣,根據實體原理來建構數學方程。 打開一個新的Simulink模型,并按照以下步驟在Simscape中建立倒立擺模型。為了使自己定向,我們将假設一個坐标系統,其中小車沿-

倒立擺:Simulink模組化倒立擺:Simulink模組化

方向(向右正

倒立擺:Simulink模組化倒立擺:Simulink模組化

方向)移動,而正-方向朝上。按照标準慣例,

倒立擺:Simulink模組化倒立擺:Simulink模組化

然後将正方向指向運動平面。

  • 從Simscape / Multibody / First Generation(1G)/ Bodies庫中插入一個Body塊來表示購物車。遵循本頁頂部給出的系統參數,輕按兩下塊,然後将 品質: 設定為“ 0.5”,機關為 kg 。預設情況下,Body塊包括兩個端口。由于我們需要端口來定義擺錘與手推車的連接配接位置以及施加外力和摩擦力的位置,是以必須添加第三個端口。這可以通過“ 位置”頁籤右側的按鈕完成。由于手推車隻能沿一個次元移動,是以兩個力必須沿該次元并置(
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    -方向)。由于我們實質上是将購物車模組化為隻能平移的點品質,是以您不必更改任何其他預設參數。但是,我們計劃使用Simscape對系統的運動進行動畫處理,是以将建立額外的端口以相對于其重心(CG )定義購物車的四個角(僅二維)。下圖顯示了推車主體的可能定義。
倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 插入第二個Body塊來代表擺錘。輕按兩下該塊,然後将 品質: 設定為“ 0.2”,機關為 kg。由于擺隻能繞-
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    軸旋轉,是以唯一需要定義與該主方向相關的慣性。為簡單起見,定義慣量: 等于“ 0.006 * eye(3)”,機關為 kg * m ^ 2 。由于我們将擺錘模組化為具有大小和品質的剛體,是以該本體可以旋轉,是以正确定義擺錘在推車上的附着位置及其CG非常重要。具體來說,定義連接配接點 CS1 位置為[[0 0 0]”,并且原點 相鄰 并且将 CG 定義為與附件 CS1 (如上定義)相距0.3米。還定義擺的四個角。確定顯示定義連接配接點的端口。在“ 可視化” 頁籤下,您還可以更改擺錘的顔色以使其從購物車中脫穎而出。
倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 接下來,從Simscape / Multibody / First Generation(1G)/ Jjoints庫中添加一個Revolute塊,以定義将擺錘連接配接到購物車的關節。預設情況下,關節将被定義為圍繞-
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    軸旋轉,該軸與我們正在模組化的情況相比對。将與推車相對應的車身子產品連接配接到關節的基礎端口(B ),将與擺錘相對應的車身子產品連接配接到關節的從動端口( F )。輕按兩下“ Revolute”塊,并将“ 傳感器/執行器端口數: ”設定為“ 2”。
  • 然後從Simscape / Multibody / First Generation(1G)/ Sensors&Actuators庫中添加一個Joint Initial Condition塊和一個Joint Sensor塊,并将這些塊連接配接到Revolute塊。輕按兩下“聯合初始條件”塊,然後選中“ 啟用”框。我們可以将預設值用于關節的初始位置和速度。采用0度的初始位置對應于根據上面的擺體的定義垂直向上指向的擺。這與的原始定義不一緻
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    ,但是它将使響應結果與本示例其他頁面中從線性化模型生成的結果一緻。接下來,輕按兩下“關節傳感器”塊,然後将“角度” 測量的機關更改為 rad 。角位置是此關節所需的唯一測量,其他框可能保持未選中狀态。
  • 從Simscape / Multibody / First Generation(1G)/ Joints庫中添加兩個Prismatic塊,以定義手推車的平移自由度以及對手推車的作用力。由于手推車在技術上是點品質,是以我們隻需要一個棱柱塊,但是通過使用兩個棱柱塊,我們可以在不同的位置施加力。輕按兩下每個棱鏡塊,然後将“ 動作軸”更改為“ [1 0 0]”,以反映兩個力沿-
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    方向作用的事實。然後,将每個子產品的從動端口(F )連接配接到代表手推車的車身子產品上施加力( CS1 )和摩擦力( CS2 )的端口。
  • 接下來,從Simscape / Multibody / First Generation(1G)/ Bodies庫中添加兩個Ground塊,以定義推車運動的基礎。具體來說,将每個接地塊的輸出連接配接到每個棱柱形塊的基本端口( B )。
  • 對于您剛剛建立的接地塊之一,輕按兩下該塊并選中“ Show Machine Environment”端口框。然後從Simscape / Multibody / First Generation(1G)/ Bodies庫中添加一個Machine Environment子產品,并将其連接配接到您剛剛為其添加端口的Ground子產品。機器環境子產品允許我們在仿真中定義重力。在這種情況下
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    ,m / s ^ 2 機關的預設方向(負方向)和大小(“ 9.81”)是正确的。該塊還允許我們定義可視化和數值求解器的參數。對于此示例,預設參數是合适的。
  • 接下來,從Simscape / Multibody / First Generation(1G)/ Sensors&actuators庫中添加兩個關節執行器子產品和一個關節傳感器子產品。關節緻動器子產品将用于生成外部作用力和摩擦力,而關節傳感器子產品将感測小車的運動。注意,還有一個平移摩擦塊可用,但是由于我們僅采用簡單的粘性模型,是以我們将自己計算摩擦力。輕按兩下“棱柱”塊之一,并将“ 傳感器/執行器端口數: ”設定為“ 1”(對于力執行器)。對于其他棱柱形塊,設定 傳感器/執行器端口數: 到“ 2”(一個用于力緻動器,另一個用于手推車傳感器)。然後按所述連接配接關節執行器和關節傳感器子產品。對于這種情況,關節執行器子產品的預設值已足夠,但是由于計算摩擦力需要速度,是以我們必須将關節傳感器子產品更改為輸出位置和速度。輕按兩下“關節傳感器”子產品,然後選中“ 速度 ”框,同時選中“ 位置 ”框。無需更改預設名額機關。同時取消選中“将 所選參數作為一個信号輸出 ”複選框。
  • 從Simulink / Math Operations庫中添加一個增益塊,以表示粘性摩擦系數
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    。按照頁面頂部的定義将“增益”設定為“ 0.1”,并将輸入連接配接到小車的關節傳感器子產品的速度輸出,并将增益的輸出連接配接到摩擦力的關節執行器。
  • 接下來,從Simulink / Ports&Subsystems庫中添加兩個Out1塊和一個In1塊。将Out1子產品連接配接到其餘的關節傳感器子產品輸出,将In1子產品連接配接到其餘的關節執行器輸入。
  • 最後,如下圖所示連接配接并标記元件。您可以按照與翻轉塊類似的方式旋轉塊,即,右鍵單擊塊,然後從“ 旋轉和翻轉” 菜單中選擇“ 旋轉塊 ” 。
倒立擺:Simulink模組化倒立擺:Simulink模組化

您還可以将該模型另存為單個子系統塊,如上一節所述。您可以通過右鍵單擊塊并從結果菜單中選擇“ 背景顔色” 來更改子系統的 顔色 。您可以通過右鍵單擊 此處 下載下傳完整的模型檔案,但請注意,您需要Simulink的Simscape附加元件才能運作該檔案。我們在“ 倒立擺:Simulink控制器設計” 頁面中使用此模型 。

産生開環響應

現在,我們将模拟倒立擺系統對施加到推車上的沖擊力的響應。該仿真需要脈沖輸入。由于Simulink庫中沒有這樣的子產品,是以我們将使用Pulse Generator子產品來近似機關脈沖輸入。我們可以使用上面生成的任何一個模型,但是,在這種情況下,我們将使用Simscape模型,因為它可以使我們可視化倒立擺系統的運動。請按照以下步驟進行操作。

  • 打開上面生成的倒立擺simscape模型。
  • 從Simulink / Sources庫中添加一個Pulse Generator子產品。輕按兩下該塊并更改參數,如下所示。特别是,将“ 期間: ”更改為“ 10”。由于我們将模拟運作10秒鐘,是以可以確定僅生成一個“脈沖”。還要将 幅度 更改為“ 1000”,并将 脈沖寬度(周期的百分比) 更改為“ 0.01”。這些設定一起産生一個近似于機關脈沖的脈沖,因為輸入的幅度在很短的時間内非常大,脈沖的面積等于1。
倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 從Simulink / Sinks庫中添加一個範圍塊。
  • 為了在示波器上顯示兩個輸入,請右鍵單擊“示波器”塊,選擇“ 信号和端口”, 然後将“ 輸入端口數 ”更改為“ 2”。

如圖所示,連接配接子產品并标記連接配接到示波器子產品的信号。

倒立擺:Simulink模組化倒立擺:Simulink模組化

将該系統另存為Pend_Openloop.slx,或右鍵單擊 此處 并選擇“ 将連結另存為...”進行下載下傳 。 在開始仿真之前,我們要啟用倒立擺系統的可視化。從模型視窗頂部的菜單中,選擇“ 仿真”>“模型配置參數” 。然後從視窗左側的目錄中選擇 Simscape Multibody 1G 。然後選中 仿真過程 中 顯示動畫 的框,如下圖所示。

倒立擺:Simulink模組化倒立擺:Simulink模組化

現在,開始模拟(從“ 模拟” 菜單中選擇 “運作” 或輸入 Ctrl-T )。在仿真過程中,倒立擺的動畫(如下圖所示)将可視化系統産生的運動。

倒立擺:Simulink模組化倒立擺:Simulink模組化

然後打開範圍。您将看到以下有關擺角和手推車位置的輸出。

倒立擺:Simulink模組化倒立擺:Simulink模組化

請注意,鐘擺反複擺動完整的旋轉,其中角度以

倒立擺:Simulink模組化倒立擺:Simulink模組化

弧度翻轉。此外,手推車的位置不受限制地增長,但在擺動的擺錘的影響下會擺動。這些結果與“ 倒立擺:系統分析” 頁面中顯示的開環仿真結果相差很大。當然,這是由于該模拟采用了完全非線性的模型,而先前的分析卻依賴于倒立擺模型的線性逼近。為了更直接地将仿真模型的結果與先前的結果進行比較,我們将從仿真模型中提取一個線性模型。

從仿真中提取線性模型

除了将我們的仿真模型與先前的結果進行比較之外,出于分析和設計的目的,可能還需要提取一個線性模型。通常應用于動态系統分析及其關聯控制設計的許多分析技術隻能應用于線性模型。是以,可能期望從非線性仿真模型中提取近似線性模型。我們将在Simulink中完成此操作。

  • 首先,打開上面生成的Simulink模型之一Pend_Model.slx或Pend_Model_Simscape.slx。
  • 如果使用變量生成了仿真模型,則必須在執行線性化之前在MATLAB工作區中定義實體常數。這可以通過在MATLAB指令視窗中輸入以下指令來完成。

M = 0.5; m = 0.2; b = 0.1; I = 0.006; g = 9.8; l = 0.3;

  • 接下來,從模型視窗頂部的菜單中選擇“ 分析”>“控制設計”>“線性分析” 。這将導緻 線性分析工具 視窗打開。
  • 為了執行我們的線性化,我們首先需要确定模型的輸入和輸出以及我們希望對其進行線性化的工作點。首先,右鍵單擊代表Simulink / Simscape模型中“力”輸入的信号。然後從結果菜單中選擇“ 線性分析點”>“開環輸入 ”。同樣,右鍵單擊模型的兩個輸出信号(擺角和小車位置)中的每一個,然後在每種情況下從結果菜單中選擇“ 線性分析點”>“開環輸出 ”。現在,應該在模型上通過箭頭符号辨別最終的輸入和輸出,如下圖所示。
倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 接下來,我們需要确定要線性化的工作點。從“ 工作點:” 菜單中,選擇“ 修剪模型” ,如下圖所示。這将打開“ 修剪模型” 視窗。在此視窗中,選擇綠色三角形訓示的 開始修整 按鈕。這将建立操作點 op_trim1 。
  • 由于我們希望檢查該系統的脈沖響應,是以請傳回“ 線性分析” 頁籤并選擇“ 脈沖” ,如下圖所示。
倒立擺:Simulink模組化倒立擺:Simulink模組化
  • 最後,從“ 操作點:” 拖放到菜單中選擇 op_trim1 ,然後由綠色小三角形表示的“ 脈沖” 按鈕。這将自動生成脈沖響應圖和線性化模型 linsys1 。
  • 為了将結果與“ 倒立擺:系統分析” 頁面中生成的圖進行比較,有必要更改-
    倒立擺:Simulink模組化倒立擺:Simulink模組化
    軸比例縮放。這可以通過在快捷菜單中選擇“ 屬性” 來實作。然後出現的視窗應如下所示,其中上圖是擺角的響應,下圖是手推車位置的響應。
倒立擺:Simulink模組化倒立擺:Simulink模組化

這些圖與“ 倒立擺:系統分析” 頁面中生成的圖非常相似,但不完全相同。 我們還可以将生成的線性化模型導出到 MATLAB工作區中,以進行進一步的分析和設計。隻需在 線性分析工作區中 的 linsys1 對象上單擊 滑鼠 右鍵以複制該對象,即可完成此操作。然後在 MATLAB工作區中 單擊以對象為對象。

繼續閱讀