58 張圖,手把手教會你 Simscape Multibody 物理建模與剛體變換
作者 | 安布奇
責編 | 胡巍巍
本文乾貨滿滿,主要以一個單擺為例,講述如何進行物理建模。58張實操圖,手把手帶你學會Simscape Multibody物理建模與剛體變換!
在MatLab命令行輸入smnew,打開一個新的simscape multibody項目。
在命令行輸入sm_lib,打開Simscape Multibody block library選擇自己想要添加的塊。
創建機械連接
塊類型說明:
Rigid Transform(剛體變換)塊:提供端坐標系。
Solid(立體)塊:提供幾何(geometry),慣性(inertia),顏色(color)特性。
Rigid Transform塊在Frame and Transform 下,Solid塊在Body Element下。
連接塊圖:
設置Solid block 特性:左鍵快速單擊solid block兩次,在彈出的對話框中將參數設置為如下圖所示:
將長寬高用變數LHW代替,密度用rho代替,顏色用rgb代替,方便修改參數。這裡出現錯誤是因為我們輸入的變數未定義,將在下面定義。
設置Rigid Transform塊:左鍵快速單擊Rigid Transform block,在彈出的對話框中將參數設置為如下圖所示:將Rigid Transform 設置為如下圖所示:
將Rigid Transform1 設置為如下圖所示:
生成子系統:
同時選中Rigid Transform,Rigid Transform1和solid block,在高亮的地方右鍵選擇Create Subsystem from Selection:
得到如下所示子系統:
定義前面的參數:右鍵單擊Subsystem,在彈出的對話框中選擇 Mask > Create Mask。
在彈出的對話框中選擇 Parameters & Dialog,在左邊的欄中添加五個
到 Parameters,然後將變數名改為前面輸入的變數名。
在右邊欄Properties > value中將各變數值設置為如下所示:
確定,然後在simulink界面中選擇Simulation > Update Diagram,更新塊圖,得到如下圖的立體:
添加旋轉部件:
在matlab命令行輸入smnew,新建一個模型,刪除不需要的塊並將上述的Subsystem複製過來。
從Simscape > Multibody > Joints 中添加一個 Revolute Joint(旋轉節點)到圖中,並連接成如下圖所示:
滑鼠左鍵快速單擊圖中的solid block兩次,在彈出的對話框中將其參數設置為如圖所示:
點擊確定。
設置重力:旋轉節點(Revolute Joint block)使用底座和從動件坐標系的公共Z軸作為旋轉軸,為了讓從動件在重力的作用下旋轉,需要使重力矢量偏移Z軸。滑鼠左鍵快速單擊Mechanism Configuration block兩次,在彈出的窗口中將重力設置為[0 -9.81 0](-y方向)。
設置單擺起始位置:滑鼠在左鍵快速單擊Revolute Joint兩次,在彈出的對話框中選擇State Targets > Position進行設置,默認為水平。
配置求解器:
在simulink中選擇Simulation > Model Configuration Parameters,配置為如下圖所示:
選擇確定。
組裝模型:選擇Simulation > Update diagram,得到如圖所示的模型。
選擇View convention將其設置為Y up (XY Front),保證重力與屏幕垂直對齊,選擇view > standard view 中的一項來刷新視圖。選擇
來保存設置。運行模型:點擊Simulation > Run,運行模型,將會看到單擺擺動。分析模型:測量單擺運動:左鍵快速單擊Revolute Joint block兩次,在彈出的對話框中選擇Sensing 下的Position 和Velocity。
添加以下塊到模型:PS-Simulink Converter:在Simscape > UtilitiesTo Workspace:在Simulink > Sinks如圖:
將文件另存為一個新文件 simplependulumanalysis。擺角、角速度關於時間的函數:打開剛剛的文件 simplependulumanalysis ,然後選擇Simulation > Run,在matlab命令行中輸入以下命令:figure; % Open a new figure
hold on;
plot(q); % Plot the pendulum angle
plot(W); % Plot the pendulum angular velocity
得出擺角(藍色)與角速度(紅色)關於時間的函數圖像:
無阻尼條件下擺角與角速度關係在matlab命令行中輸入以下命令:figure;
plot(q.data, W.data);
得到函數圖像:縱軸為角速度,橫軸為擺角。
在 Revolute Joint block State 對話框的Targets> Position中設置不同的起始角:-80, -40, 0, 40和80 °,重複上述的命令得到不同起始角下擺角與角速度的關係:
有阻尼下擺角與角速度關係:左鍵快速單擊Revolute Joint block,在彈出的對話框中將 Internal Mechanics > Damping coefficient 設為8e-5(N*m)/(deg/s),確保State Targets > specify Position Target > Value為0(初始角為0)。在matlab命令行輸入以下命令:figure;
hold on;
plot(q);
plot(w);
得到如下圖所示擺角(藍色)、角速度(紅色)與時間的函數關係:
在matlab命令行中輸入以下命令:figure;
plot(q.data, W.data);
得到擺角與角速度的關係。
改變初始角為-240,-180, -120, -60, 0, and 60 °,重複上述命令可以得到如圖:
有阻尼和激勵下的單擺:
左鍵快速單擊Revolute Joint兩次,在彈出來的對話框中設置Actuation > Torque為 `Provided by Input。添加以下兩個模塊:
連接成如下圖所示:
左鍵快速單擊Sine Wave block 兩次,在彈出的對話框中將Amplitude設置為0.06,在Revolute Joint block 對話框中將確認 State Targets > Position > Value為0。運行模擬,在matlab命令行中輸入以下命令畫出擺角、角速度與時間的關係:figure;
hold on;
plot(q);
plot(w);
如下圖所示:
在matlab命令行中輸入以下命令畫出擺角與角速度的函數關係:plot(q.data, W.Data);
如下圖所示:
Simscape剛體變換創建坐標系:以一個L梁作為示例,在matlab命令行輸入smdoc_lbeam_inertia。將會彈出一個L梁的坐標關係圖:
左鍵快速點擊圖中的立方體兩次,彈出立體對話框:
點擊Frames左邊的「+」號,選擇new frame右邊的加號。
會彈出一個坐標對話框。
從上到下依次為:
坐標名稱
坐標原點
主軸
副軸
按自己想要的設置即可。
添加立體到模型中打開simulink:
選擇Simscape下的Multibody:
將默認存在的塊體刪除,選擇Library Browser >> Simscape >> Multibody >> Body Elements:
將其中的solid拖到窗口中即可。
建立坐標系及剛體變換剛體轉動變換:將兩個立方體連接起來,使立方體的世界坐標系在空間上是重合的。
可視化立體坐標系:將Simscape >> Utilities >> Solver Configuration 拖到模型中,並與一個立方體連接:
選擇Simulation > Update Diagram更新流程圖,將會打開Mechanics Explorer窗口
應用剛體變換:在Multibody>Frames and Transforms拖一個rigid Transform,將它連接到兩個立體的中間,左鍵快速單擊兩次,在彈出對話框中選擇:
Rotation > Method to Standard Axis.Rotation > Axis to -Z.Rotation > Angle to 45.
選擇OK然後Simulation > Update Diagram更新流程圖,如下圖,完成了一個剛體轉動變換。
點擊Rigid Transform 可以看到,兩個立體的坐標系原點和Z軸是重合的,X軸和Y軸彼此錯開了45°。平動變換:將Translation > Method 設置為 Cartesian,Translation > Offset to [1 1 0]。
offset數組表示相對於基礎坐標系(Base Frame,就是與變換塊「B「介面相連的立體坐標系)在x,y,z方向上的偏移量,後面的是單位。
選擇OK然後Simulation > Update Diagram更新流程圖,如下圖,完成了一個剛體平移變換。
作者簡介:單雨,90後工科男,偽文藝青年。目前就讀於北京理工大學宇航系,喜歡研究AI,網路爬蟲,微信小程序以及機器人,痴迷於Coding,睡前必擼碼。【End】
※史上最強最貴Mac Pro誕生,iPadOS 和 iOS 分家!WWDC19 全面總結
※從 0 到 1 | 手把手教你如何使用哈工大 NLP 工具——PyLTP
TAG:CSDN |