基於Matlab/Simulink的模型開發(連載一)
- 2019 年 10 月 17 日
- 筆記
概述
基於模型的開發將省去繁瑣的程式碼編寫步驟,只需要拖動幾個模組,就像搭積木一般,輕鬆搭建您自己的飛控演算法。飛控開發人員可以將更多的精力放在演算法本身,而不需要過多關注程式碼實現的細節,這樣將大大加快開發的效率,減少在程式碼編寫過程中產生的錯誤。同時,基於模型的開發具有優秀的程式碼復用性。也就是說,已經設計好的功能模組,只需要簡單的複製粘貼,就能輕鬆地應用到其它任何地方,免去了程式碼移植過程的繁瑣。
基於模型的開發另外一個強大的優勢即在於「一次試驗,多次模擬」的目的。結合Simulink強大的開環和閉環模擬系統,只需採集一次數據,便可通過模擬再現在真實世界中的實際表現。通過修改模型演算法或參數,可以進行在線的數據模擬和調試,大大簡化調試的難度。
系統介面與匯流排設計
在我們設計控制系統之前,首先要做的就是定義系統的輸入/輸出介面。在Simulink中,介面一般都是以匯流排的方式進行定義。可以將匯流排理解為C語言中的結構體,當把Simulink模型自動生成C程式碼後,也可以看到匯流排最終是用結構體來進行實現的。
對於內環的姿態環控制器來說,輸入匯流排設計如下:
Command_Bus
Element | Type | Unit | Meaning |
---|---|---|---|
reset | uint8 | [0,1] | 為1複位控制器 |
mode | uint8 | [0,1] | 0:角度控制,1:角速度控制 |
base_th | int16 | 0~1000 | 姿態環基礎油門 |
Reference_Bus
Element | Type | Unit | Meaning |
---|---|---|---|
phi_ref_rad | single | rad | 目標roll |
theta_ref_rad | single | rad | 目標pitch |
psi_ref_rad | single | rad | 目標yaw |
p_ref_radDs | single | rad/s | 目標roll角速度 |
q_ref_radDs | single | rad/s | 目標pitch角速度 |
r_ref_radDs | single | rad/s | 目標yaw角速度 |
States_Bus
Element | Type | Unit | Meaning |
---|---|---|---|
phi_rad | single | rad | roll當前值 |
theta_rad | single | rad | pitch當前值 |
psi_rad | single | rad | yaw當前值 |
p_radDs | single | rad/s | roll角速度當前值 |
q_radDs | single | rad/s | pitch角速度當前值 |
r_radDs | single | rad/s | yaw角速度當前值 |
輸入介面總共有三個匯流排,分別是Command_Bus,Reference_Bus和States_Bus。其中Command_Bus是控制匯流排,用來對控制系統進行一些設置,如模式設置,複位等。Reference_Bus和States_Bus是目標訊號匯流排和狀態訊號匯流排,可以理解為控制器的目標值和當前值。控制器的目的就是通過控制來使得當前值儘可能收斂到目標值。
輸入介面設計完了,接下來是輸出介面。輸出介面相比輸入要簡單很多,無非就是多路pwm指令輸出。這裡我們預留6個pwm輸出介面,即最多可以支援6軸的控制,當面,也可以根據自己的需要,來進行修改。
Control_Out_Bus
Element | Type | Unit | Meaning |
---|---|---|---|
pwm1 | uin16 | 1000~2000 | 電機1 pwm訊號 |
pwm2 | uin16 | 1000~2000 | 電機2 pwm訊號 |
pwm3 | uin16 | 1000~2000 | 電機3 pwm訊號 |
pwm4 | uin16 | 1000~2000 | 電機4 pwm訊號 |
pwm5 | uin16 | 1000~2000 | 電機5 pwm訊號 |
pwm6 | uin16 | 1000~2000 | 電機6 pwm訊號 |
好了,現在介面都定義好了,那麼下一步的問題就是如何在Simulink裡面來實現這些介面定義了。
其實,在Simulink中實現這些介面定義很簡單。Simulink提供了一個Bus Editor的工具,只需要進行簡單配置就可以定義任何你需要的介面或者匯流排了。
下面一步一步地講解一下匯流排的定義方法:
-
首先打開控制模型,點擊Edit->Bus Editor
-
這裡我之前已經配置過了,所以能看到我已經定義過的匯流排。但是如果是自己第一次進行設計的話,這裡應該是空的。可以點擊如紅色圈圈所示的add bus來添加Bus訊號,這裡我們總共需要添加4個Bus。三個輸入匯流排和一個輸出匯流排。Bus添加好後,在最右邊的Property,修改Bus的名稱。添加好Bus之後,我們下面就需要往Bus裡面添加Element,即匯流排的元素。首先選定一個Bus,然後點擊藍色圈圈圈出的add element選項,即可添加元素。
-
-
然後需要對Element進行配置。如圖所示,我們一般只需要對Name,Data Type和Dimension三個選項進行配置即可。Dimension為變數的維度,如果我們的element需要配置為向量或者矩陣,那麼就需要對Dimension進行配置。
-
配置完成後,需要點擊File->Export to File來將Bus的配置保存成.m還活著.mat文件。因為Bus的定義都是保存在工作空間的。當你下次打開matlab的時候,工作空間都是會被清除的,所以我們需要將我們的Bus定義保存成文件,這樣,當下次打開matlab的時候,只需要load一下我們的.mat/.m文件,就能將我們定義的Bus再load進工作空間。
微信公眾號關注《阿木實驗室》獲取更多無人機開發測評資訊,關注《阿木社區》獲取更多學習課程資訊。
社區論壇地址:bbs.amovauto.com 參與討論。