使用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动力学的提升状态采恢复非线性系统的状态(给定有关我们基函数的知识),然后将我们估计的非线性系统的这种状态序列与系统的实际动力学进行比较。

使用Koopman理论识别机器人动力学的非线性系统研究文档

一、引言

实际中的大多数系统均为非线性系统,而机器人系统也不例外。非线性系统的研究因其复杂性而具有挑战性,但Koopman算子理论为这一领域提供了新的视角。Koopman算子可以描述非线性系统的可观测状态量在高维空间中的线性演化过程,从而将非线性问题转化为线性问题,这对于非线性系统的研究具有较大的价值。

二、Koopman理论简介

Koopman理论的核心思想是通过坐标转换,将原非线性系统映射到一个无穷维的线性空间中,使得在该空间中系统的演化是线性的。这种转换是通过一个观测函数g(x)实现的,它将原系统的状态空间R映射到一个新的无穷维空间H中。在H空间中,系统通过Koopman算子K进行线性演进。

三、Koopman理论在机器人动力学非线性系统识别中的应用

  1. 数据收集与提升

为了识别机器人动力学的非线性系统,首先需要从系统的仿真或实验中收集数据。然后,利用这些数据来识别Koopman空间中的线性系统。这一过程通常包括数据的预处理、特征提取和观测函数的构建。

  1. Koopman算子的计算

在得到提升后的数据后,下一步是计算Koopman算子。这通常涉及到求解一个线性方程组,以找到使得数据在Koopman空间中线性演进的算子K。

  1. 非线性向量场的恢复

一旦得到了Koopman算子,就可以利用它来恢复原始动力学的非线性向量场。这通常涉及到对观测函数的雅可比矩阵进行计算,并利用Koopman算子的线性表示来求解非线性向量场。

  1. 系统验证与预测

最后,需要对识别出的系统进行验证和预测。这通常涉及到将估计的非线性系统的状态序列与系统的实际动力学进行比较,以评估识别的准确性。此外,还可以利用识别出的系统来进行未来的预测和控制。

四、案例研究

为了说明Koopman理论在机器人动力学非线性系统识别中的应用,我们可以考虑一个具体的案例,如杜宾汽车模型的非线性动力学识别。在这个案例中,我们可以使用Koopman理论从系统的仿真中提升数据,然后利用这些数据来识别Koopman空间中的线性系统,并恢复原始动力学的非线性向量场。最后,我们可以设置并运行杜宾汽车模型的模拟,以验证系统识别的结果。

五、结论与展望

Koopman理论为机器人动力学的非线性系统识别提供了一种新的方法。通过坐标转换和线性表示,它能够将复杂的非线性系统简化为线性系统,从而便于分析和控制。然而,目前的研究还存在一些挑战和限制,如观测函数的选择、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代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值