SimMechanics/Second Generation倒立擺模型建立及初步仿真學習

? ? 筆者最近搗鼓Simulink,發現MATLAB的仿真模塊真的十分強大,以前只是在命令窗口敲點代碼,直到不小心敲入simulink,就一發不可收拾。話說simulink的模塊化建模確實方便,只要拖拽框框然后雙擊設置屬性就可以慢慢堆建自己的模型,這一點我很中意(*^__^*) 。

? ? 最近在學習一些控制理論,發現倒立擺是個不錯的學習平臺,開始學習肯定需要機構上面的運動學及動力學建模,一直習慣Adams進行運動仿真,但Adams安裝比較繁瑣。。。便想利用MATLAB代替仿真,順便學習了解下傳說的simulink,直接搜查閱資料。發現Simscape里面的simmechanics就是運動仿真模塊。于是趕緊打開俺的MATLAB2015b,敲入simulink再用力敲打回車,就出現如下窗口。。。

一.新建一個模型New Model

?

? ? 新建模型將出現空白界面,所有建模要用的block都必須拖到該界面進行設置和連接,因為模塊庫里Block特別的多,一個一個找真的特別麻煩,強烈建議記下常用block的名字,比如示波器scope,時鐘clock,階躍信號step等等等等,今后可以直接在模型空白處敲入字符,自動檢索,真的是方便感人,如圖。

二.SimMechanics/First Generation模型

? ? 需要注意的是,SimMechanics庫分為First Generation和Second Generation,即第一代和第二代。

其實MATLAB幫助文檔里面很多demo值得學習理解,我簡單了解了第一代模塊,跟著說明建立了一個平面四連桿機構模型,模塊框圖和仿真界面如下:

?

?

?難點就是body block的屬性設置,必須清楚了解坐標系的建立,新建的CS(coordinate system)相對哪個坐標平移,又相對哪個坐標旋轉。其中World坐標系是世界坐標系,也就是絕對坐標系,所有的坐標系都是相對它而言的,所以說這個模塊必不可少。

? ? 總之,模型的建立順序一般如圖,除了機械環境Env,其它的block連接都是坐標系與坐標系之間的連接,但body與body之間不能直接連接,必須通過joints確定兩者之間的連接副。最后的body與地面連接就形成閉環機構,也可以只出現一個Ground,即懸空機構,像單擺運動,機械臂等只有基座與地面連接。當然也可以body與body之間形成閉環。Joint/Body Actuator 是連接副和機構驅動器,發送信號可以向Joint或者body添加動力或運動;同理有Joint和Body的Sensor,即傳感器,可以利用scope示波器觀察Joint和body的受力情況和運動規律。

三.SimMechanics/Second Generation模型

?第二代模型比較直觀,可以直接建立幾何特征,solid代替了一代的body,可以直接從中設置很多屬性。參考MATLAB的demo模型,在使用 second generation建立機構模型時,必須添加的模塊

1) ?solver configuration求解器配置塊,是進行求解的必須模塊,雙擊可以配置具體求解方式。

2) ?world frame 世界坐標系,其它一切坐標系都要直接或間接與其連接。

3mechanism configuration 機構配置塊,雙擊打開可以修改重力的大小和方向等。

?

? 為了建立倒立擺,我打算添加兩個構件,一個是小車構件,記為cart,質量設置在重心處,與地面(世界坐標系)為滑塊連接(移動副),幾何外形簡化為為長方體;另一個是倒立桿構件,記為pole,質量在最高處,與小車進行旋轉副連接,外形簡化為圓柱體。

幾何體的建立模塊為solid,如下圖,參數編輯窗口分為Description和Properties兩欄,描述的內容十分有閱讀價值,了解其屬性才能設置好具體參數,以下是小車機構的屬性設置:

?

? ? 小車構件新建了一個Frames,在第二代SIMmechanics里面坐標系用Frames表示,一個零件可以添加多個Frame,并且兩個Frame之間可以直接連線進行剛性連接,中間可以不用joint進行連接,如下圖,我把倒立桿的外形潤色了一下:

現在的模塊窗口有以下Block,直接連接的話就是和World Frame作剛性連接,那么整個機構將是靜止不動的,所以接下來是Joint block的添加。

接下來是比較重要的連接模塊,即連接副的選擇,如下是庫里面提供的連接副:

?

單級直線倒立擺的機構只需兩個連接副,即revolute joint(平面旋轉副)和prismatic joint(柱形滑塊副),將其拖入窗口進行屬性設置和連接。屬性設置窗口如下:

如上圖所示,兩個副的設置窗口比較復雜,必須仔細閱讀Description里面的內容,本模型設計了阻尼系數,并且打開了Sensing接口,這樣可以通過采集兩個副的位置,速度,加速度等運動參數。最后方框圖如下:

連接模塊直接進行仿真的話會彈出如下窗口,重力的默認方向是world frame的-z方向,所以模擬會發生異常,圖示整個機構會自由落體向下。。。。

? ? 所以必須引入參考系模塊,如下圖。這個才是設置難點,因為每個坐標系的連接和參考都不同,為了找到合適的方向和位移,必須記牢每個坐標系關于世界坐標系的方位,也可能是英語看的人頭疼,我在這里設置了好久。第一個rigid transform是讓移動副相對world frame的+y方向旋轉90度,第二個rigid transform的引入是可以改變擺桿的初始位置。

?

?

連接后的模型框圖為

?

仿真界面如下

為了顯示運動參數,可以添加示波器,不過示波器顯示的是信號量,必須將運動副的sensor接口連接到PS-Simulink Converter轉為信號量,如下圖:

?

?

?

仿真結果為

?

因為設置的初始角度為豎直向上,所以裝置靜止,信號穩定輸出為水平線,所以接下來添加外力模塊如圖,同理需要將方波信號轉為物理信號,模擬在一秒時給擺桿質心一個推力,推力設置為x方向。

最后模型框圖為:

?

仿真結果如下:

?

?

?? ?由圖中可以得知,在1s時擺桿頂部球心處受到100N沿世界坐標系+x持續0.5S的推力,產生的各種運動參數曲線可以直接在示波器中看到,因為沒有控制力的引入,擺桿會直接倒下。此時為了實現倒立擺的平衡,會在小車x方向添加一個控制力來保持平衡,接下來便是控制器的設計,倒立擺的控制算法有很多,從經典控制理論(傳遞函數),現代控制理論(狀態空間),一直到智能控制理論。每一個理論都可以用來控制倒立擺,可見倒立擺的控制實驗是學習控制理論的最有效平臺。。。

? ? 為了初步設計控制器輸出控制力的信號,我了解了自控理論最經典的PID控制算法,得知其控制理念是直接采集被控變量進行對比然后處理輸出(如下圖),只是參數的整定比較繁瑣,不過卻可以進行初步的實驗仿真,激發自己的學習興趣。PID控制器參考https://www.cnblogs.com/shangdawei/p/4825259.html。文中說的很詳細。里面有程序流程圖教你寫最簡單的控制程序,筆者手頭剛好有12xs128的MCU、普通有刷直流電機和光電編碼器。根據流程,設計了電機的穩定轉速控制器,不過難度依舊是參數的整定。好在MATLAB里關于PID的工具十分強大,里面的可視化工具包pidTuner,命令工具TuningGoal,systune等對于控制器的設計十分有幫助,最近一直在理解這幾個函數指令,自己也從中受益頗深,尤其考驗對自控原理的理解掌握。。。理解后PID算法后,就可以在simulink下開始控制倒立擺的平衡了,由于筆者整定參數還不太利索,經歷多次嘗試后,擺桿還是會倒下。。。。慚愧啊。

以下是運動規律:

?

?

不過之后我發現MATLAB里面自帶了一個demo模型,在MATLAB命令窗口鍵入?InvertedPendulumExample即可打開如下界面。可見,此模型的控制方法是PID Controller和傳遞函數控制器綜合輸出為控制力F(其實角度控制也能用PID調節,只要響應夠快就能實現擺桿的平衡)。不過想要更好的控制倒立擺還是需要動力分析,將傳遞函數寫出,進行根軌跡找出極點,確定好平衡位置。

?? ?

? ? 總之,Simulink對倒立擺的控制學習也提供了可視化的模擬。之后我打算以此模型為基礎,添加不同控制器,學習基本控制理念。今后的大致框圖將擴展成如下幾個區域(當然可以整成一個subsystem):

(1)直線倒立擺模型

(2)干擾信號發生器

(3)參數采集顯示器

(4)不同控制調節器

?

轉載于:https://www.cnblogs.com/PHH5201314/p/8325657.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

10 行代碼提取復雜 Excel 數據

把 Excel 文件導入關系數據庫是數據分析業務中經常要做的事情,但許多 Excel 文件的格式并不規整,需要事先將其中的數據結構化后再用 SQL 語句寫入數據庫。而一般情況下,結構化的工作量會比較大,而且很難通用,每次都要針…

將一個數組拆分為若干個相等數組

var a [法國,澳大利亞,智利,新西蘭,西班牙,加拿大,阿根廷,美國,0,國產,波多黎各,英國,比利時,德國,意大利,意大利]; var b []; var result []; var k 0; for(var i 0; i<a.length; i){ if(i%3 0){ b []; for(var j 0; j<3; j){ if(a[ij] undefined){ continue; …

人工智能模型的網絡結構可視化

本文主要介紹人工智能模型的網絡結構可視化的常見方法。對于使用神經網絡模型來說&#xff0c;我們主要關注的是模型的輸入和輸出。在 ML.NET 中使用 ONNX 模型時&#xff0c;我們就需要了解這些信息&#xff0c;以便在構成神經網絡的所有層之間生成連接映射。下圖就是昨天 《Y…

Git 撤銷操作 / 回滾歷史

撤銷操作 git checkout -- <filename>&#xff0c;放棄文件的當前更改&#xff0c;回到最近一次的提交狀態git reset HEAD <filename>&#xff0c;取消暫存文件git commit --amend&#xff0c;覆蓋上一次的提交&#xff0c;雖然不是撤銷操作&#xff0c;但有類似的…

整理ASP.NET MVC 5各種錯誤請求[401,403,404,500]的攔截及自定義頁面處理實例

http://2sharings.com/2015/asp-net-mvc-5-custom-404-500-error-hanlde https://blog.csdn.net/yhyhyhy/article/details/51003683 ASP.NET MVC 5的開發中&#xff0c;服務器的各種錯誤[如&#xff1a;401&#xff08;登錄授權驗證&#xff09;&#xff0c;403&#xff08;禁止…

url字符轉義

作者在做短鏈接功能時&#xff0c;url參數里帶了&字符&#xff0c;結果無法轉換。后來查了一下&#xff0c;發現可以用其它符號代替。下面是對應表 URL 中號表示空格 %2B 空格 URL中的空格可以用號或者編碼 %20 / 分隔目…

編輯器領域正發生變革?從面試看 Visual Studio Code 的崛起

Visual Studio Code&#xff08;VS Code&#xff09;的使用率在迅速上升&#xff0c;現在已經成為大多數工程師的首選編輯器&#xff0c;并似乎正迅速搶占其他頂級編輯的市場份額。Triplebyte 每周都會面試數百名工程師。在每次面試中&#xff0c;我們都會記錄面試者使用的編輯…

C#7.0 ref引用傳遞

1.概要在工作中大家用到引用類型是非常多的&#xff0c;大家都知道引用類型在使用過程中傳遞的是對象引用并不會發生整個對象復制。而值類型在傳遞的過程中就不一樣了&#xff0c;我曾經在編寫代碼時希望通過值類型來壓低應用程序的內存占用&#xff0c;在高并發的情況大量的對…

Vue+Axios同步請求

axios本身是沒有同步請求的&#xff0c;要實現同步請求&#xff0c;用到的是ES7的async和await ES7的異步特性async / await async用于聲明一個函數是異步的&#xff0c;await用于聲明在一個異步函數中等待語句執行完畢。也就是說await只能在async函數中使用。簡單示例如下&a…

關于vue執行打包后,如何在本地瀏覽問題

最近一個人在搗鼓vue&#xff0c;寫完項目后發現在npm run dev下可以正常訪問&#xff0c;bulid之后卻一片空白&#xff0c;查看console出現許多Failed to load resource: net::ERR_FILE_NOT_FOUND。恩&#xff0c;看了下網上評論找到了正確的方法 webpack.prod.conf.js 中outp…

ELFhash

字符串哈希算法&#xff08;以ELFHash詳解&#xff09; 更多字符串哈希算法請參考&#xff1a;http://blog.csdn.net/AlburtHoffman/article/details/19641123 先來了解一下何為哈希&#xff1a; 哈希表是根據設定的哈希函數H(key)和處理沖突方法將一組關鍵字映射到一個有限的地…

android面試詳解

前臺就是和用戶交互的進程 可見進程例如一個activity被一個透明的對話框覆蓋&#xff0c;該activity就是可見進程 服務&#xff1a;service進程 后臺一個activity按了home按鍵就是從前臺退回到后臺 標準模式&#xff1a;不管任務棧是否存在相同的activity都會創建一個新的activ…

element-ui Notification重疊問題,原因及解決辦法

在1個方法中調用兩次this.$notify方法&#xff0c;會出現通知框重疊的問題 methods: {checkLogin: function () {if (this.username ) {this.$notify({title: 提示,message: 請輸入用戶名})}if (this.password ) {this.$notify({title: 提示,message: 請輸入用戶密碼})}}}網上…

Visual Stiudio使用技巧

技巧1 自動生成帶參構造函數當我們在編寫代碼時會經常遇到初始化一個的類&#xff0c;需要通過構造函數進行對象初始化。那么這個時候我們可能會需要逐個去手動寫&#xff0c;這樣的工作即重復又無趣。如果是在項目非常緊急的情況下還有大量的字段需要與入參一一對應起來簡直太…

js將時間戳格式化為HH:ii:ss的格式

將時間戳格式化為 HH:ii:ss的格式 <html> <head> </head> <body><span id"time"></span><script>var timestamp Date.parse(new Date())/1000;var time_old Date.parse(new Date())/1000;timeAdd()/*** purpose : …

Struts 整合 SpringMVC

Struts 整合 SpringMVC 過程&#xff1a;這篇文章是我在整合過程中所做的記錄和筆記 web.xml &#xff1a;篩選器機制過濾 原機制是攔截了所有 url &#xff0c;即 <url-pattern>/*</url-pattern>新機制為了將 structs2 的 url 與 SpringMVC 的 url 區分開來&#…

Vue保持用戶登錄及權限控制

vue-router-power-demo 核心內容有兩點&#xff1a; 一是保持用戶登錄狀態&#xff0c;二是根據登錄用戶的角色動態掛在路由 使用vuex保持用戶登錄 點擊登錄按鈕&#xff0c;使用vuex的actions分發登錄操作&#xff0c;發送用戶名和密碼到后臺獲取登錄token&#xff0c; 并存…

java B2B2C Springcloud多租戶電子商城系統-Spring Cloud Sleuth

在微服務框架中&#xff0c;一個由客戶端發起的請求在后端系統中會經過多個不同的的服務節點調用來協同產生最后的請求結果&#xff0c;每一個前段請求都會形成一條復雜的分布式服務調用鏈路&#xff0c;鏈路中的任何一環出現高延時或錯誤都會引起整個請求最后的失敗。 愿意了解…

C#性能測試BenchmarkDotnet

1.簡介在我們開發高性能代碼時&#xff0c;需要各種針對性能優化進行編碼。那么如何才能知道我們所加的代碼是否有性能方面的正向優化呢&#xff1f;有了BenchmarkDotNet&#xff0c;做性能對比測試就非常容易了&#xff0c;只需要把你的測試方法加上特性[Benchmark], 想做不同…

Requests獲取連接的IP地址

在接口自動化的時候&#xff0c;需要獲取到連接的本地IP地址&#xff0c;方法如下 1 import requests 2 3 rsp requests.get("http://www.baidu.com", streamTrue) 4 print rsp.raw._connection.sock.getpeername()[0] 5 print rsp.raw._connection.sock.getsockna…