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

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

👨‍🎓个人主页

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

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

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

💥1 概述

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

image.gif 编辑

image.gif 编辑

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

image.gif 编辑

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

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

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

1. Koopman理论的核心概念与机器人应用基础

1.1 理论起源与数学框架

  • 基本定义:Koopman算子(1931年由Bernard Koopman提出)是一种将非线性动力系统映射到无穷维函数空间的线性算子。对于离散系统 xk+1=f(xk),其作用于观测函数 g(x) 满足 κg(xk)=g(f(xk))=g(xk+1),实现非线性动力学的全局线性化。
  • 提升机制:通过可观测函数 ϕ(x) 将状态空间映射到Koopman空间(高维线性空间),使非线性动力学转化为线性演化:zk+1=Kzk,其中 z=ϕ(x)。
  • 有限维近似:实际应用中需构造有限维不变子空间,将Koopman算子表示为矩阵 K,实现线性系统理论的应用。

1.2 在机器人领域的适用性

  • 解决痛点:机器人动力学常含强非线性(如欠驱动结构、非完整约束、柔性形变),传统线性化方法(如雅可比线性化)仅在平衡点附近有效,而Koopman提供全局线性表征。
  • 应用场景:涵盖腿式机器人地形适应、软体机器人形变控制、飞行器气动效应建模、多智能体协同等。

2. 机器人动力学的典型非线性系统分类

根据资料,机器人非线性系统主要分为三类:

类型 特征 案例
欠驱动系统 控制输入数少于自由度,含非完整约束 四足机器人步态
柔性/软体系统 连续体形变导致几何非线性 气动软臂
环境耦合系统 与环境交互力(如地面效应、流体阻力)引入时变非线性 水下机器人

关键特性:此类系统通常无法通过静态反馈线性化,且动力学方程含前馈非线性项(如离心力、科里奥利力)。


3. Koopman理论识别非线性系统的关键技术

3.1 核心算法流程

image.gif 编辑

3.2 关键技术详解

  1. 状态提升函数设计
  • 基础函数库:多项式基、径向基函数(如高斯函数)。
  • 深度学习方法:利用自编码器学习最优提升函数 ϕ(x)ϕ(x),捕捉高阶非线性。
  • 对称性利用:针对对称机器人系统(如四足机器人),采用谐波分析分解正交子空间提升泛化性。
  1. 算子计算方法
  • EDMD (Extended Dynamic Mode Decomposition)
  • 步骤:构造数据矩阵 X,Y → 求解优化问题 min⁡∥Y−KX∥F→ 得矩阵 K 。
  • 优势:优于传统DMD,支持控制输入扩展 zk+1=Azk+Buk。
  • 深度Koopman模型
  • 架构:双神经网络分别学习 ϕ(x)ϕ(x) 和逆映射 ϕ−1(z)ϕ−1(z),辅以线性层拟合 A,BA,B 。
  1. 控制集成技术
  • Koopman-MPC:基于线性预测模型设计模型预测控制器,实时求解最优控制量。
# 伪代码示例
while not converged:
    z_t = phi(x_t)          # 状态提升
    U_opt = solve_MPC(A, B, z_t, reference)  # 求解控制序列
    apply(u_t)               # 执行首步控制
  • image.gif
  • 主动学习策略:控制过程同步优化Fisher信息矩阵,提升数据效率。

4. 机器人应用案例与性能对比

4.1 代表性研究成果

系统类型 研究方法 性能提升 文献
气动软体机械臂 EDMD + MPC 轨迹跟踪误差降低37%(vs 传统线性MPC)
四足机器人 深度Koopman + 延迟嵌入 预测精度提高52%,可控性增强(RPCA预处理消除噪声影响)
磁流变阻尼器 高斯基EDMD 力跟踪误差<5%,实时性满足30ms控制周期

4.2 理论优势

  • 全局线性化:准确捕捉极限环、涡旋吸引子等非线性特征。
  • 计算效率:线性模型允许使用LQR、卡尔曼滤波等快速算法。

5. 挑战与未来方向

5.1 当前局限

  • 维度灾难:高维提升空间增加计算负担(如50维状态需39个高斯函数)。
  • 混沌系统限制:对湍流等强混沌行为表征不足。
  • 观测函数依赖:人工设计基函数泛化性差,数据驱动学习需大量样本。

5.2 前沿探索

  1. 混合物理-数据模型:融合拉格朗日方程与Koopman提升,增强可解释性。
  2. 连续谱处理:扩展深度学习框架以识别连续频率特征(如涡脱落频率)。
  3. 硬件加速:FPGA实现EDMD实时计算(逻腾科技已部署于球形机器人)。

结论

Koopman理论通过全局线性嵌入解决了机器人非线性动力学的建模瓶颈,结合EDMD/深度学习实现了从欠驱动机构到软体机器人的高精度控制。未来研究需突破高维计算效率强混沌表征等难题,进一步推动其在自主机器人系统的落地应用。

📚2 运行结果

image.gif 编辑

image.gif 编辑

主函数代码:

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算子的全方位移动机械臂建模与轨迹资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取【请看主页然后私信】

相关文章
|
17天前
|
人工智能 JavaScript 前端开发
实战使用 Qwen3-coder 低代码开发 HTML 个人网站
阿里巴巴开源的Qwen3-coder模型,凭借强大性能和低代码能力,助力用户快速搭建个人网站。本文详解环境配置、提示词设计与部署流程,适合编程新手快速上手,掌握AI辅助开发技能。
1165 8
|
2天前
|
自然语言处理 前端开发 JavaScript
js异步
js异步
190 108