基于Simulink的二關節機器人獨立PD控制仿真

文章目錄

    • 理論模型
    • 仿真窗口
    • 控制函數
    • 目標函數
    • 仿真

本文是劉金琨. 機器人控制系統的設計與MATLAB仿真的學習筆記。

理論模型

對于二關節機器人系統,其動力學模型為

D ( q ) q ¨ + C ( q , q ˙ ) q ˙ = r D(q)\ddot q+C(q,\dot q)\dot q = r D(q)q¨?+C(q,q˙?)q˙?=r

式中, D ( q ) D(q) D(q) n × n n\times n n×n階正定慣性矩陣, C ( q , q ˙ ) C(q, \dot q) C(q,q˙?) n × n n\times n n×n階離心和哥氏力項,在二關節機器人系統中,二者的表達式為

D ( q ) = [ p 1 + p 2 + 2 p 3 cos ? q 2 p 2 + p 3 cos ? q 2 p 2 + p 3 cos ? q 2 p 2 ] , C ( q , q ˙ ) = [ ? p 3 q ˙ 3 sin ? q 2 ? p 3 ( q ˙ 1 + q ˙ 2 ) sin ? q 2 p 3 q ˙ 1 sin ? q 2 0 ] D(q)=\begin{bmatrix} p_1+p_2+2p_3\cos q_2 & p_2+p_3\cos q_2\\ p_2+p_3\cos q_2&p_2\\ \end{bmatrix}, C(q, \dot q)=\begin{bmatrix} -p_3\dot q_3\sin q_2& -p_3(\dot q_1+\dot q_2)\sin q_2\\ p_3\dot q_1\sin q_2 & 0 \end{bmatrix} D(q)=[p1?+p2?+2p3?cosq2?p2?+p3?cosq2??p2?+p3?cosq2?p2??],C(q,q˙?)=[?p3?q˙?3?sinq2?p3?q˙?1?sinq2???p3?(q˙?1?+q˙?2?)sinq2?0?]

該式推導過程見:二關節機器人系統模型推導

獨立的PD控制率為

τ = K d e ˙ + K p e , e = q d ? q \tau = K_d\dot e+K_p e, e=q_d-q τ=Kd?e˙+Kp?e,e=qd??q

接下來,取下列參數進行仿真

p = [ 2.90 0.76 0.87 3.04 0.87 ] , q 0 = [ 0.0 0.0 ] , q ˙ 0 = [ 0.0 0.0 ] , K p = [ 100 0 0 100 ] , K d = [ 100 0 0 100 ] p=\begin{bmatrix}2.90\\0.76\\0.87\\3.04\\0.87\end{bmatrix}, q_0=\begin{bmatrix}0.0\\0.0\end{bmatrix}, \dot q_0=\begin{bmatrix}0.0\\0.0\end{bmatrix}, K_p=\begin{bmatrix}100&0\\0&100\end{bmatrix}, K_d=\begin{bmatrix}100&0\\0&100\end{bmatrix} p= ?2.900.760.873.040.87? ?,q0?=[0.00.0?],q˙?0?=[0.00.0?],Kp?=[1000?0100?],Kd?=[1000?0100?]

仿真窗口

首先,打開Matlab,點擊Simulink按鈕,雙擊新建空白模型,在彈出窗口中,點擊庫瀏覽器,在Simulink中選擇下列模塊

  • Commonly Used Blocks->Demux, Mux, Scope
  • Sources->Step, Clock
  • User-Defined Functions->S-Function
  • Sinks->To Workspace

繪制成如下形式

在這里插入圖片描述

雙擊模塊可更改其屬性,除了變量名稱之外,將t, x1, x2, tol的輸出格式更改為結構體。

其中x1, x2即為兩個關節所在位置,tol即 τ \tau τ

控制函數

雙擊左側的S-Function,將其名稱改為ctrlTest,點擊【編輯】按鈕->打開編輯器,將其保存為ctrlTest.m,確保和simulink文件在同一目錄下。

S函數的輸入參數為t,x,u,flag,其中t為當前仿真時間;x為狀態變量;u為輸入信號。flag為標志變量,與Simulink的狀態有關,其值的含義如下

  • flag = 0:初始化階段,在此階段,S-Function 需要返回模塊的參數信息。
  • flag = 1:計算導數,常用于連續時間系統的狀態方程。
  • flag = 2:更新階段,常用于離散時間系統的更新。
  • flag = 3:計算輸出,通常用于計算模塊的輸出信號。
  • flag = 4:計算下一個采樣時間,通常用于離散時間系統。
  • flag = 9:終止階段,通常用于清理資源。

ctrlTest函數的完整內容如下

function [sys,x0,str,ts] = ctrlTest(t,x,u,flag)
switch flagcase 0, [sys,x0,str,ts]=mdlInitializeSizes;case 3,  sys=mdlOutputs(t,x,u);case {2,4,9}, sys=[];otherwise, error(['Unhandled flag = ',num2str(flag)]);
end%-------mdlInitializeSizes 函數-------------------%
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;         % 結構體模塊的賦值
sizes.NumOutputs     = 2; % 輸出參數為控制力矩, tol 為 2x1 的矩陣(2020.3.25 更新)
sizes.NumInputs      = 6; % 輸入參數 6 個,兩個 step,四個chap2_1plant的輸出
sizes.DirFeedthrough = 1; % 輸入直接控制輸出
sizes.NumSampleTimes = 1; % 采樣時間為 1
sys = simsizes(sizes);    % 確定參數賦值給 sysx0  = [];                 % 初始值為空
str = [];                 % 默認設置為空
ts  = [0 0];              % 采樣時間與偏移量%-------mdlOutputs(t,x,u) 函數-------------------%
function sys=mdlOutputs(t,x,u)
e=[u(1)-u(3);u(2)-u(5)];        % 位置偏差
de=[0-u(4);0-u(6)]; % 角速度偏差Kp=[50 0;0 50]; 
Kd=[50 0;0 50];tol=Kp*e+Kd*de; % PD 控制,在sim中作為輸出變量,輸出到 workspacesys(1)=tol(1);  % 關節 1 的驅動力矩
sys(2)=tol(2);  % 關節 2 的驅動力矩

在【ctrlTest】中,根據系統狀態來選擇處理函數,當系統處于初始化狀態,則調用【mdlInitializeSizes】函數,當系統計算暑促時,調用【mdlOutputs】,其他狀態則輸出空向量。

在初始化函數中,使用了simsizes函數,這是用于獲取Simulink模塊的參數,其返回的結構體中包含以下參數

  • NumInputs: 輸入端口的數量
  • NumOutputs: 輸出端口的數量
  • NumStates: 狀態變量的數量
  • InitialState: 初始條件
  • ContStates: 連續狀態變量的數量
  • DiscStates: 離散狀態變量的數量
  • DirFeedthrough: 是否允許直接饋通
  • SampleTime: 采樣時間

在【mdlOutputs】函數中,其輸入的u即為simuTest圖形中,ctrlTest的三個輸入量,其中u(1), u(2)即為兩個階躍函數,u(3)到u(6)則為后面的目標函數plantTest輸出的sys。

目標函數

右側的S函數用同樣的操作,命名為plantTest,同樣根據系統狀態執行不同的操作。

function [sys,x0,str,ts]=plantTest(t,x,u,flag)
switch flagcase 0, [sys,x0,str,ts]=mdlInitializeSizes;case 1, sys=mdlDerivatives(t,x,u);case 3, sys=mdlOutputs(t,x,u);case {2, 4, 9 },  sys = [];otherwise,  error(['Unhandled flag = ',num2str(flag)]);
end%-------mdlInitializeSizes 函數-------------------%
function [sys,x0,str,ts]=mdlInitializeSizes
global p g                  % 定義全局變量 p g 
sizes = simsizes;
sizes.NumContStates  = 4;   % 連續變量 4 個
sizes.NumDiscStates  = 0;   % 離散變量 0 個
sizes.NumOutputs     = 4;   % 輸出 4 個
sizes.NumInputs      =2;    % 輸入 2 個
sizes.DirFeedthrough = 0;   % 輸入不控制輸出
sizes.NumSampleTimes = 0;   % 采樣時間為 0,被控對象,無需采樣
sys=simsizes(sizes);
x0=[0 0 0 0];
str=[];
ts=[];p=[2.9 0.76 0.87 3.04 0.87];  % p 是D(q)正定慣性矩陣的各項系數
g=9.8;      % 重力系數 9.8%-------mdlDerivatives 函數-------------------%
function sys=mdlDerivatives(t,x,u)
global p g  
D0=[p(1)+p(2)+2*p(3)*cos(x(3)) p(2)+p(3)*cos(x(3));p(2)+p(3)*cos(x(3))        p(2)];  % 正定慣性矩陣
C0=[-p(3)*x(4)*sin(x(3)) -p(3)*(x(2)+x(4))*sin(x(3));p(3)*x(2)*sin(x(3))  0];          % 離心力和哥氏力tol=u(1:2);        
dq=[x(2);x(4)];    % x1的導數,x2的導數S=D0\(tol-C0*dq);  % 動力學方程的反向應用,用于求出角加速度
% 這里的sys 為中間變量,S(1),S(2)為關節角1,2的角加速度
sys = [x(2) S(1) x(4) S(2)];%-------mdlOutputs 函數-------------------%
function sys=mdlOutputs(t,x,u)
sys = x;

在【mdlDerivatives】函數中,實現了二關節機器人的動力學模型,其輸出的sys,將被傳遞給ctrlTest函數中,作為u變量的后四個分量。

仿真

點擊Simulink的運行按鈕,即可開啟仿真,雙擊示波器,即可查看波形

在這里插入圖片描述

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

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

相關文章

【技術架構解析】國產化雙復旦微FPGA+飛騰D2000核心板架構

本文就一款基于飛騰D2000核心板與兩片高性能FPGA的國產化開發主板進行技術解析,包括系統架構、主要硬件模塊、關鍵接口及軟件環境,重點闡述各子系統間的數據路徑與協同工作方式,旨在為行業內同類產品設計與應用提供參考。 隨著國產化要求的加…

Python 數據分析:計算,分組統計1,df.groupby()。聽故事學知識點怎么這么容易?

目錄1 示例代碼2 歡迎糾錯3 論文寫作/Python 學習智能體1 示例代碼 直接上代碼。 def grpby1():xls "book.xls"df pd.DataFrame(pd.read_excel(xls, engine"xlrd"))print(df)"""序號 分類 銷量0 1 文學 51 2 計算機…

【解決“此擴展可能損壞”】Edge瀏覽器(chrome系列通殺))擴展損壞?一招保留數據快速修復

引言 如果你想保留你的數據,敲重點:不要點擊修復,不要修復,不要修復 在使用 Microsoft Edge 瀏覽器時,您可能會遇到擴展程序顯示“此擴展程序可能已損壞”的提示,且啟用按鈕無法點擊。這一問題讓許多用戶感…

AI專業化應用加速落地,安全治理挑戰同步凸顯

7月2日,2025全球數字經濟大會在北京國家會議中心開幕。本屆大會以“建設數字友好城市”為主題,聚焦數字技術對城市發展的影響。開幕式上,一首完全由AI生成的MV成為焦點——從歌詞、譜曲、演唱到視頻制作全流程AI生成,展現人工智能…

Python統一調用多家大模型API指南

隨著大模型技術的快速發展,市場上出現了越來越多的LLM服務提供商,包括OpenAI、Anthropic、Google、百度、阿里云等。作為開發者,我們經常需要在不同的模型之間切換,或者同時使用多個模型來滿足不同的業務需求。本文將詳細介紹如何…

【ESP32】1.編譯、燒錄、創建工程

標題打開一個Hello world工程并燒錄 點擊環境搭建鏈接 遇到的問題: 1.ESP32在VSCODE中燒錄代碼時,跳出窗口,OPenOCD is not running ,do you want to launch it? 可能是OCD沒安裝,重新安裝 ESP-IDF試一下,在終端命令窗…

調參——optuna

它基于貝葉斯優化(Bayesian Optimization)思想,通過構建一個概率模型來預測超參數組合的性能,從而高效地探索超參數空間。相比傳統網格搜索(Grid Search)或隨機搜索(Random Search)&…

Redis的緩存擊穿和緩存雪崩

Redis緩存擊穿和緩存雪崩是兩種常見的緩存問題,它們都可能導致系統性能下降甚至崩潰。以下是對它們的詳細解釋:一、緩存擊穿定義緩存擊穿是指一個特定的緩存數據失效(例如過期),而此時大量請求同時訪問這個數據&#x…

Python訓練營Day4

浙大疏錦行 Python訓練營Day4 內容,pandas處理表格信息: 查看表格統計信息: data.mean()data.mode()data.median() 查看表格信息: data.info()data.describe()data.isnull()data.head() 填充空缺列: 數值型&#xff…

React 基本介紹與項目創建

為什么使用 React 以及前端框架 工作原理 React 通過構建虛擬 DOM(Virtual DOM)來高效管理界面。當組件的狀態或屬性發生變化時,React 會重新渲染生成新的虛擬 DOM,并通過 Diff 算法找出新舊虛擬 DOM 樹之間的差異,最…

OpenCV CUDA模塊設備層-----“小于閾值設為零” 的圖像處理函數thresh_to_zero_func()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 OpenCV CUDA 模塊(cudev) 中的一個仿函數生成器,用于創建一個 “小于閾值設為零” 的圖像處理函數對象。 這個函…

數字圖像處理學習筆記

1-圖像處理基礎_嗶哩嗶哩_bilibili 輸出圖像像素點需要將圖象值要作類型轉換,轉成Int 圖像仿射變換 線性變換平移 線性變換: 1,變換前直線,變換后仍然直線 2,直線比例不變 3,直線到遠點的距離不變 仿射變…

用systemd管理GreatSQL服務詳解

用systemd管理GreatSQL服務詳解 1.GreatSQL服務文件 官網 greatsql.service 文件 [Unit] DescriptionGreatSQL Server Documentationman:mysqld(8) Documentationhttp://dev.mysql.com/doc/refman/en/using-systemd.html Afternetwork.target Aftersyslog.target [Install] …

【AIGC】深度剖析AI倫理:強化隱私防線,推動算法公平性的核心議題

博客主頁: [小????????] 本文專欄: AIGC 文章目錄 🍊1 人工智能興起背后的倫理及道德風險1.1 算法偏見與歧視1.2 數據隱私侵權1.3 透明度受限1.4 決策失衡1.5 AI生成內容的危險性 🍊2 建構AIGC倫理觀:實現人機共創的永…

WebSocket技術全面解析:從歷史到實踐

WebSocket技術全面解析:從歷史到實踐 WebSocket作為一種全雙工通信協議,徹底改變了Web應用的實時交互模式。它于2011年被IETF正式標準化為RFC 6455,解決了傳統HTTP協議在實時通信中的根本缺陷。本文將深入探討WebSocket的發展歷程、技術原理、…

單用戶模式、緊急模式、救援模式有什么區別

文章目錄 **一、單用戶模式(Single User Mode)****功能與用途****啟動特點****進入方式** **二、緊急模式(Emergency Mode)****功能與用途****啟動特點****進入方式** **三、救援模式(Rescue Mode)****功能…

【大模型入門】訪問GPT的API

目錄 0 前言 免費訪問GPT的API Windows下環境變量的設置 1 非流式輸出 1.1 使用requests庫 1.2 使用OpenAI庫 2 流式輸出 2.1 使用requests庫 2.2 使用OpenAI庫 3 使用OpenAI庫與GPT聊天(存儲對話歷史版) 4 嵌入向量embeddings 4.1 創建嵌入向…

Jenkins 部署腳本

java版 #!/bin/bashAPP_NAME"springboot-demo-0.0.1-SNAPSHOT" JAR_PATH"/home/package/target/${APP_NAME}.jar" LOG_PATH"/home/package/logs/app.log"# 查找并停止舊進程 PID$(ps aux | grep "$APP_NAME.jar" | grep -v grep | awk…

NV183NV185美光固態閃存NV196NV201

美光固態閃存技術深度解析:NV183、NV185、NV196與NV201系列 一、技術架構與核心參數對比 1. 制程工藝與容量布局 美光NV183/NV185/NV196/NV201系列采用176層3D NAND技術,通過垂直堆疊提升存儲密度。其中: NV183:主打256GB容量段…

基于單片機PWM控制逆變電源設計資料集:全面掌握逆變電源設計精髓

基于單片機PWM控制逆變電源設計資料集:全面掌握逆變電源設計精髓 去發現同類優質開源項目:https://gitcode.com/ 項目介紹 在現代電子技術中,逆變電源的設計與應用占據了至關重要的位置。今天,我將為您介紹一個優秀的開源項目——基于單片…