机器人系统辨识——基于MATLAB的非线性系统辨识
Hello,歡迎做客我的博客。
這里會介紹關于機器人的方方面面,希望對你有所幫助。
今天的內容關于機器人動力學模型的參數辨識,這是在做機器人控制前的關鍵一步!
工具和參考鏈接
由于機器人動力學模型往往都是非線性的,這里用到的工具是:
MATLAB的System Identification Toolbox(系統辨識工具箱),其中的Nonlinear Grey-Box Models(非線性灰箱建模工具),鏈接如下:
System Identification Toolbox
Nonlinear Grey-Box Models
主要的參考示例:
Modeling an Industrial Robot Arm
1 機器人動力學模型
在對模型參數進行辨識之前,首先需要對機器人進行建模,建模的方法通常是牛頓歐拉法或者拉格朗日方法。關于建模的部分,讀者可以參考我之前的博客。如:
機器人動力學建模之牛頓歐拉法推導
此處,直接給出機器人的非線性動力學模型如下:
x˙1=Kasin?x2x˙2=Kbx32x˙3=uy1=x1y2=x2y3=x3\begin{aligned} \dot{x}_1 &=K_a\sin{x_2}\\ \dot{x}_2 &=K_bx_3^2\\ \dot{x}_3 &=u\\ y_1 &= x_1\\ y_2 &= x_2\\ y_3 &= x_3 \end{aligned} x˙1?x˙2?x˙3?y1?y2?y3??=Ka?sinx2?=Kb?x32?=u=x1?=x2?=x3??
其中,xxx代表狀態,uuu代表輸入,yyy代表輸出。
KaK_aKa?和KbK_bKb?為待辨識參數。
2 辨識前的準備——采集實驗數據
在進行參數辨識前,我們需要采集輸入和輸出數據,即給定一組uuu,然后記錄系統的yyy。通常,我們可以讓uuu是正弦信號,或者多個正弦信號的疊加,以獲得更好的辨識效果。
通常來說,我們需要通過實驗去采集數據。
在這里,我們的目的是介紹MATLAB系統辨識工具箱的用法,為了更加直觀的看出系統辨識的效果,我們可以基于上述動力學模型生成一組數據,來檢驗MATLAB的系統辨識效果。
數據生成程序:
clc; clear all; close all;period = 0.01; % 注意這里是采樣時間 T = 10;% 參數設置 Ka = 1.21; Kb = -0.6;x1 = 0; x2 = 0; x3 = 0;Input = []; Output = [];for t = 0:period:T% 給定輸入,正弦函數u = sin(2*pi/10*t);% 系統動力學模型迭代x1_p = x1 + Ka*sin(x2)*period;x2_p = x2 + Kb*x3^2*period;x3_p = x3 + u*period;x1 = x1_p;x2 = x2_p;x3 = x3_p;% 輸出y1 = x1;y2 = x2;y3 = x3;% 保存數據Input = [Input; u];Output = [Output; y1,y2,y3]; end% 保存數據 save('blogexample.mat', 'Input', 'Output');注意,這里我們設置了Ka=1.21K_a=1.21Ka?=1.21以及Kb=?0.6K_b=-0.6Kb?=?0.6。下面,我們可以看看MATLAB是否能辨識得到這組參數。
3 系統辨識——MATLAB代碼示例
利用MATLAB進行系統辨識的步驟分為兩步:
- 定義模型文件(定義機器人動力學模型)
- 設置辨識過程()
3.1 模型文件
程序如下:
function [dx, y] = blogmodel_m(t, x, u, Ka, Kb, varargin) %% 函數的參數dx,y,t,x,u不可更改 %% 函數參數Ka,Kb即為待辨識參數% 輸出方程y = [x(1); x(2); x(3)];% 動力學模型(微分方程),dx即為x的導數dx = [Ka*sin(x(2)); ...Kb*x(3)^2; ...u]; end3.2 定義辨識過程
整個辨識過程主要用到四個函數:
- idnlgrey:生成一個系統辨識對象(包含了系統模型,輸入,狀態,輸出向量等等信息)
- iddata:將數據打包為iddata格式,便于系統辨識工具箱使用
- nlgreyest:系統辨識函數(主要函數,執行的就是優化參數的過程)
- compare:對比真實輸出和模型輸出的結果
下面是詳細程序以及注釋:
程序如下:
4 系統辨識結果
4.1 辨識前
4.2 辨識后
參數辨識的結果為:Ka=1.211K_a=1.211Ka?=1.211和Kb=?0.600K_b=-0.600Kb?=?0.600。和我們生成數據時設置的Ka=1.21K_a=1.21Ka?=1.21以及Kb=?0.6K_b=-0.6Kb?=?0.6幾乎完全相同。
另外,從辨識結果也可以看到,參數辨識的效果相當只好。
5 更多
更多關于參數辨識過程的設置,比如優化算法,容許誤差,可參考:
nlgreyestOptions
關于模型驗證,參數辨識效果的展示,可參考:
Model Validation
關于本文的實例,大家可從下面鏈接中下載整理好的版本:
MATLAB參數辨識的小例子
總結
以上是生活随笔為你收集整理的机器人系统辨识——基于MATLAB的非线性系统辨识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上传突破学习笔记
- 下一篇: 在Windows上安装FFmpeg程序