使用Koopman理论识别机器人动力学的非线性系统(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

实际中的大多数系统均为非线性系统,而Koopman算子可以描述非线性系统的可观测状态量在高维空间中的线性演化过程,可以将非线性问题转化为线性问题,对于非线性系统的研究有较大的价值。利用Koopman算子理论,可以仅依靠实验数据或系统仿真数据建立非线性系统的线性模型,基于该模型可实现对非线性系统的分析、预测和控制[6]。

如图2.1所示,原系统所在空间为 R,且以非线性方式演进。通过观测函数 g (x) 将原系统转换至无穷维空间 H,在 H 中系统通过 K 线性演进。Koopman 算子理论的实质是通过对原系统进行坐标转换实现非线性系统的全局线性化,其中Koopman算符是无穷维度的且满足:

 

不失一般性,无论对于自治系统还是受控系统,基于Koopman算子理论建模的主要目标均是将Koopman算子(广义Koopman算子)近似成一个有限维矩阵,它蕴含了非线性系统在高维空间中随时间线性演化的过程;对于控制系统,该有限维矩阵可以表示在高维空间中控制量对系统演化的影响。

为了识别杜宾汽车模型的非线性动力学,我们使用Koopman算子理论首先从系统的仿真中提升数据,利用这些提升的数据来识别Koopman空间中的线性系统,然后恢复我们原始动力学的非线性向量场。还可以设置并运行Dubins汽车模型的模拟。可以在文件的“设置'部分中更改此模拟的参数。 

使用估计的Koopman算子和估计的非线性向量场,我们需要验证系统识别的结果。我们从原始Dubins汽车模拟中使用的初始条件开始,然后在Koopman空间中迭代推进汽车的动力学。然后使用Koopman动力学的提升状态采恢复非线性系统的状态(给定有关我们基函数的知识),然后将我们估计的非线性系统的这种状态序列与系统的实际动力学进行比较。
 

📚2 运行结果

 

主函数代码:

clc
clear all
close all

%% 1. SIMULATION SETUP
% Simulation Parameters
obj.T = 25;                             % Simulation time
obj.dt = 0.01;                          % Sample time
obj.initial_conditions = [10, -5, 2];     % Sim initial condition
obj.velocity_limit = 1;                 % Limit for velocity input
obj.omega_limit = 10;                   % Limit for omega input
obj.seed = 1;                           % Random seed for input generation
     
%% 2. COLLECT DATA
[t, x, u] = simulate(obj);                          % Simulate Dubins Car
plotting('sim_results',x,0,u,obj,t);                  % Plot sim results

%% 3. LIFT DATA
[psi_x, psi_y] = lift_data(x, u);                   % Lift data to Koopman space

%% 4. CALCULATE DISCRETE-TIME KOOPMAN OPERATOR 
% K = pinv(psi_x) * psi_y;                          % Calculate K (Eq. 17)
K = lsqminnorm(psi_x,psi_y);                        % Calculate K (Eq. 17)

%% 5. CALCULATE CONTINUOUS-TIME KOOPMAN OPERATOR
A = 1/obj.dt * logm(K);                             % Calculate A (Eq. 18)

%% 6. CALCULATE NONLINEAR VECTOR FIELD
% Get analytical Jacobian for psi at initial condition
dpsi_dx = [1, 0, 0, 0, 0, 2*x(1,1), x(1,2), 0, x(1,3), 0, 0, u(1,1), 0, 0, 0, u(1,2), 0, 0, 0, 0;
            0, 1, 0, 0, 0, 0, x(1,1), 2*x(1,2), 0, x(1,3), 0, 0, u(1,1), 0, 0, 0, u(1,2), 0, 0, 0;
            0, 0, 1, 0, 0, 0, 0, 0, x(1,1), x(1,2), 2*x(1,3), 0, 0, u(1,1), 0, 0, 0, u(1,2), 0, 0];
        
F = dpsi_dx.' \ A.';                                % Calculate F (Eq. 21)

%% 7. VALIDATE
x_est = validate(F, x, u, t);                       % Rerun sim using F
plotting('validate_results', ...                    % Plot validation results
         x(1:700,:), ...
         x_est(1:700,:), ...
         u(1:700,:), ...
         obj,...
         t(1:700));

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]常欢. 基于Koopman算子的非线性模型预测控制实现策略[D].吉林大学,2022.DOI:10.27162/d.cnki.gjlin.2022.006905.

[2]张统. 基于Koopman算子的全方位移动机械臂建模与轨迹追踪控制研究[D].天津大学,2020.DOI:10.27356/d.cnki.gtjdu.2020.004410.

🌈4 Matlab代码实现

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值