使用Koopman理论识别机器人动力学的非线性系统(Matlab代码实现)
然后使用Koopman动力学的提升状态采恢复非线性系统的状态(给定有关我们基函数的知识),然后将我们估计的非线性系统的这种状态序列与系统的实际动力学进行比较。为了识别杜宾汽车模型的非线性动力学,我们使用Koopman算子理论首先从系统的仿真中提升数据,利用这些提升的数据来识别Koopman空间中的线性系统,然后恢复我们原始动力学的非线性向量场。算子可以描述非线性系统的可观测状态量在高维空间中的线性
👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
为了识别杜宾汽车模型的非线性动力学,我们使用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代码实现
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)