拓冰建站拓冰建站
首页 / 资讯中心 / 正文

动态运动基元DMP:从轨迹数据到智能运动规划实战

简介本资源是一套面向机器人控制与智能运动规划方向的MATLAB实现代码包专为高校研究生、机器人算法初学者及运动学习研究者设计聚焦动态运动基元DMP在六自由度姿态-位置耦合轨迹规划中的落地应用。压缩包共6个.m文件总大小仅3KB轻量紧凑但功能完整涵盖DMP核心建模DMP.m、轨迹交互获取GetTraj.m、轻型冗余机械臂LWR动力学接口、已学轨迹回放Recall.m、可视化分析Plot.m及异常响应处理Fai.m形成“输入—学习—执行—验证—容错”闭环流程。已有727人学习下载适用于课程实验、课题原型开发或DMP算法二次改进。读者可直接运行复现从鼠标手绘轨迹到带四元数朝向约束的平滑运动生成全过程快速掌握基于DMP的端到端轨迹规划方法论与工程实现细节。1. 项目概述从轨迹数据到智能运动基元最近在整理一个老项目时翻出了一个名为DMP-MyPro.zip的压缩包。看到这个名字很多做机器人、机械臂控制或者动画生成的朋友可能会心一笑。DMP全称 Dynamic Movement Primitives翻译过来叫动态运动基元它不是什么新鲜概念但在处理“如何让机器优雅地动起来”这个问题上一直是个非常实用且迷人的工具。这个项目简单来说就是一套我基于实际轨迹数据构建、训练并应用DMP最终实现轨迹规划与生成的完整流程工具包。它解决的问题很直接给你一条示教轨迹比如老师傅手把手教机械臂画个圆或者记录下一段优美的舞蹈动作如何让机器学会这个动作的精髓并且能灵活地调整速度、幅度甚至适应新的起点和目标点生成一条全新的、合理的运动轨迹这听起来像是机器学习但DMP的哲学更偏向于“运动控制”与“学习”的结合。它不像深度学习黑箱其核心是一个精心设计的微分方程系统具有明确的物理意义和良好的数学性质比如收敛性、稳定性。flow2oq这个关键词我猜是项目中某个具体模块或转换流程的代号可能涉及从原始数据流flow到某种内部表示比如四元数 oq 代表 orientation quaternion的预处理。无论如何其核心目标不变将复杂的、高维的轨迹数据提炼成一组简洁的参数即“运动基元”这些参数就是机器理解和复现该运动技能的“密码”。这套东西适合谁呢如果你是机器人领域的工程师或学生正在为机械臂的轨迹示教、技能学习发愁如果你是做游戏动画的程序员想让人物动作更自然、更易调整或者你是对生物运动控制、类脑计算感兴趣的研究者那么理解并动手实现一遍DMP绝对会让你对“运动智能”有更深的体会。它不算最前沿的算法但绝对是工具箱里经久耐用的一把“瑞士军刀”理解了它再去接触更现代的模仿学习、强化学习方法会更有根基。2. DMP核心原理与数学模型拆解要玩转DMP不能只停留在调包层面必须理解其背后的数学“引擎”。DMP的核心思想是模仿弹簧阻尼系统但加入了一个“形状吸引子”来刻画复杂的轨迹形状。我们通常从最简单的一维情况开始理解。2.1 弹簧阻尼模型与轨迹编码想象一个质量为 m 的小球连接在一个弹簧上弹簧的另一端固定在目标点 g 上。这个系统的经典运动方程是τ²ẍ α (β (g - x) - τẋ)其中x 是位置ẋ 和 ẍ 是速度和加速度τ 是时间缩放因子α 和 β 是正的常数用来调节系统的阻尼和刚度使得系统在到达目标 g 时是临界阻尼的没有超调平稳停下。这个系统只能产生单调趋向目标的指数收敛轨迹画不出一个圆或者一个“S”形。DMP 的妙处在于它在右边加了一个非线性的强制项 fτ²ẍ α (β (g - x) - τẋ) f(s)这个f(s)就是关键所在它是一个关于相位变量 s 的函数。相位变量 s 本身由一个一阶系统定义τṡ -α_s s。这里 α_s 是正常数。s 从 1 开始随时间衰减到 0。这个设计非常巧妙它将时间依赖转换成了对相位 s 的依赖。无论我们如何用 τ 缩放时间加快或放慢动作强制项 f 都是 s 的函数从而保证了轨迹形状在时间缩放下的不变性。那么 f(s) 具体是什么它通常由一组径向基函数RBF的加权和来表示f(s) (Σ_{i1}^{N} ψ_i(s) w_i / Σ_{i1}^{N} ψ_i(s)) * s * (g - x_0)这里ψ_i(s) exp(-h_i (s - c_i)²)是第 i 个高斯径向基函数c_i 是其中心h_i 控制其宽度。w_i 就是我们需要从示教轨迹中学习出来的权重。(g - x_0)项用于对强制项进行幅值缩放使得学习到的形状可以适应不同的起点 x_0 和目标点 g。分子上的 s 项称为“递减项”它确保当 s 趋近于0时f(s) 也趋近于0从而保证系统的稳定性最终完全由弹簧阻尼项主导精确收敛到目标 g。2.2 从示教轨迹中学习权重 w_i给定一条示教轨迹我们记录下了时间序列上的位置 x_demo(t)速度 ẋ_demo(t) 和加速度 ẍ_demo(t)。学习的目标是找到一组权重 w_i使得 DMP 系统生成的轨迹尽可能接近示教轨迹。我们可以从上面的变形方程反推出对于示教轨迹所需的“理想”强制项 f_targetf_target(t) τ² ẍ_demo(t) - α (β (g - x_demo(t)) - τ ẋ_demo(t))同时根据示教的时间通过相位系统τṡ -α_s s可以计算出对应的 s(t)。现在问题转化为寻找 w_i使得f(s(t)) ≈ f_target(t)。由于 f(s) 是关于 w_i 的线性函数在给定 s 和基函数的情况下这成了一个线性回归问题。通常我们使用局部加权回归LWR来求解每个 w_i因为 LWR 对于每个基函数区域的数据给予不同的权重拟合效果更稳定。具体地对于第 i 个基函数中心 c_i 附近的相位点 s我们用 ψ_i(s) 作为权重进行线性回归实际上因为分子分母都有求和通常采用一种归一化的处理或者直接拟合f_target(t) * Σψ / s(g-x0)这个量。实操心得这里有一个非常重要的细节就是基函数中心 c_i 在相位空间 s 上的分布。因为 s 是指数衰减的时间在末端被“压缩”。如果我们把 c_i 在时间轴上均匀分布那么在 s 空间里它们会全部挤在靠近1的地方。正确的做法是根据 s 的动力学τṡ -α_s s推导出 s(t) exp(-α_s t / τ)然后将 c_i 在 s 从0到1的范围内均匀或根据时间对数均匀分布。这样才能让基函数在轨迹的起始、中间、结束阶段都有良好的覆盖。2.3 扩展到多维与姿态表示以上是一维比如关节空间的一个关节角度或者笛卡尔空间的X坐标的DMP。对于机器人我们通常需要控制多个维度7个关节或3D位置3D姿态。一个直接且有效的方法是为每个维度独立训练一个DMP但它们共享同一个相位系统 s。这意味着所有维度的运动都由同一个“时钟” s 来同步从而保证了多自由度运动在时间上的协调性。这是DMP一个非常强大的特性。对于位置3D每个坐标x, y, z独立一个DMP目标点 g 也是三维的这很直接。对于姿态情况就复杂了。欧拉角有万向锁问题不适合直接用作DMP的状态变量。旋转矩阵或四元数是更好的选择。这就是为什么在项目关键词中看到flow2oq可能的原因——它可能是一个将某种运动流数据可能是基于旋转矩阵或轴角的增量转换为单位四元数Orientation Quaternion表示的模块。在四元数空间定义DMP需要特别小心因为四元数乘法不可交换且必须保持模长为1。一种常见的方法是定义在四元数的虚部空间即旋转轴*sin(θ/2)的部分上使用DMP或者使用对数映射将四元数映射到三维的切空间so(3)李代数在这个三维空间里应用标准的DMP然后再通过指数映射映射回四元数。这个过程需要处理好在单位四元数流形上的插值和微分。注意事项在实现姿态DMP时确保你的四元数始终是单位四元数在积分步骤后可能需要重新归一化。此外定义在切空间中的角速度、角加速度与四元数导数之间的关系需要正确处理。这部分数学相对复杂但已有成熟的论文和代码库如pyquaternion结合DMP可供参考。我的DMP-MyPro项目中就包含了针对单位四元数的DMP实现模块。3. 项目架构与flow2oq数据处理流程现在让我们深入到DMP-MyPro这个项目的具体架构中。一个完整的、用于生产和研究的DMP工具箱绝不仅仅是几个数学函数的堆砌。它需要包含数据预处理、模型训练、轨迹生成、参数调节和可视化评估等一系列模块。3.1 整体项目模块划分根据我的实现项目主要分为以下几个核心目录/模块data_io/负责数据的读取和写入。支持从多种格式读取轨迹数据例如CSV文件、ROS的bag包、MATLAB的.mat文件甚至是实时数据流。flow2oq很可能就是该模块下的一个子功能。preprocess/这是数据处理的“厨房”。原始示教轨迹往往带有噪声、时间戳不均匀、起点终点不理想等问题。这个模块包含滤波与平滑使用巴特沃斯滤波器或Savitzky-Golay滤波器对位置、速度数据进行平滑减少高频噪声对微分求速度加速度的影响。重采样将轨迹在时间轴上均匀重采样得到固定时间步长 Δt 的数据序列这是数值积分和后续处理的基础。坐标变换例如将笛卡尔空间轨迹转换为关节空间轨迹或反之以及关键的flow2oq流数据转四元数。dmp_core/DMP算法的核心实现。包含一维/多维DMP类实现标准DMP的数学方程、权重学习LWR和轨迹积分生成。四元数DMP类专门处理姿态的特殊DMP实现。相位系统独立的相位变量生成器。基函数管理器负责生成和放置RBF基函数。trainer/封装训练流程。给定预处理好的轨迹数据自动配置DMP参数α, β, α_s, 基函数数量N执行学习并保存模型参数主要是权重 w_i 和基函数参数。generator/轨迹生成器。加载训练好的模型给定新的起始点x0_new、目标点g_new、时间缩放τ_new即可生成一条新的轨迹。还可以在这里集成障碍物回避的扩展功能通过在线修改强迫项 f。utils/工具函数包括轨迹距离计算DTW等、可视化绘图绘制原始轨迹、学习后的轨迹、强制项形状、基函数等、性能评估指标。examples/示例脚本和笔记本展示从数据到生成的全流程。3.2 深入flow2oq从运动流到四元数轨迹flow2oq是这个项目数据处理链中的一个特色环节。在很多实际场景中我们获取姿态数据的方式可能不是直接的四元数。例如来自IMU惯性测量单元的数据可能提供的是角速度 gyro 的积分流。来自视觉里程计/SLAM的数据提供的是相机姿态的增量变换通常用旋转矩阵或轴角表示。来自动画软件的数据可能是欧拉角序列。“flow”在这里可以理解为一种增量或微分形式的运动数据。flow2oq的任务就是将这些增量信息整合成一条光滑的、连续的单位四元数轨迹q(t)。假设我们有一系列时间戳t_k和对应的角速度向量ω_k在机体坐标系下。我们知道四元数导数与角速度的关系是dq/dt 0.5 * q(t) ⊗ [0, ω_x, ω_y, ω_z]这里 ⊗ 表示四元数乘法。要从ω(t)得到q(t)我们需要进行积分。由于噪声的存在直接积分会漂移。因此flow2oq模块通常包含以下步骤输入预处理对角速度序列ω_k进行低通滤波减少高频噪声。数值积分采用四阶龙格-库塔法等数值积分方法从初始姿态q0开始积分四元数微分方程。积分步长使用给定的时间间隔Δt_k t_{k1} - t_k。四元数归一化每一步积分后对得到的四元数进行强制归一化q q / ||q||保证其单位长度。平滑与重采样积分得到的轨迹可能因为噪声累积而不够平滑。我们可以对四元数轨迹在其切空间即so(3)空间进行平滑处理然后在均匀时间轴上重新采样得到干净、均匀的四元数序列q(t)。计算角速度与角加速度为了DMP学习我们还需要从q(t)数值微分得到“干净”的角速度ω(t)和角加速度α(t)。这可以通过四元数差分和对数映射来实现。如果输入是旋转矩阵增量ΔR_k流程类似将ΔR_k转换为轴角或四元数增量Δq_k然后通过四元数乘法累加得到绝对姿态q_k q_{k-1} ⊗ Δq_k再进行后续的平滑和重采样。踩坑记录四元数积分中最容易忽略的是角速度的参考坐标系。上述导数公式假设ω是局部坐标系机体坐标系下的角速度。如果你的ω数据是世界坐标系下的需要先用当前姿态四元数将其转换到局部坐标系下再积分或者使用对应的世界坐标系下的积分公式。搞错坐标系会导致积分结果完全错误。在我的代码中flow2oq函数明确要求指定输入ω的坐标系并内置了转换逻辑。4. DMP模型训练与参数调优实战有了干净的数据下一步就是训练DMP模型。这个过程看似是调用一个fit()函数但里面的参数选择和技巧决定了模型的好坏。4.1 训练步骤详解假设我们已经有了预处理后的多维轨迹数据包括位置pos(N x 3)、四元数姿态quat(N x 4)、以及对应的时间戳t(N,)。训练分为两条线位置DMP和姿态DMP。对于位置DMP (每一条坐标轴):设置系统参数α和β通常设置为α 25β α / 4 6.25这样可以保证临界阻尼。这两个参数一般不需要调整。α_s相位系统的衰减系数。它决定了相位变量s衰减的速度间接影响基函数在时间轴上的“宽度”。通常设为与α相同或类似的值如α_s 25 / τ其中 τ 是轨迹的总时间或归一化后的时间缩放因子示教时 τ1。n_bfs径向基函数的数量。这是最重要的超参数之一。太少无法捕捉复杂形状太多容易过拟合。通常从20-50开始尝试。对于非常复杂或长时间的轨迹可能需要更多。配置基函数根据α_s和轨迹时长T计算相位轨迹s(t)。然后将n_bfs个基函数的中心c_i在s从0到1的范围内均匀或按指数间隔分布。宽度h_i通常根据相邻中心的距离来设置例如h_i (0.65 / (c_{i1} - c_i))^2确保基函数之间有足够的重叠。计算目标强制项对于每个时间步利用公式f_target τ² ẍ_demo - α(β(g - x_demo) - τẋ_demo)计算目标值。这里g是轨迹的终点x_demo[-1]x0是起点x_demo[0]。执行局部加权回归 (LWR)对于每个基函数ψ_i用它作为权重对数据点(s(t), f_target(t))进行加权线性回归求解权重w_i。实践中为了避免数值问题我们通常回归的是f_target(t) * D(s) / s / (g-x0)其中D(s) Σ ψ_i(s)。对于姿态DMP (四元数)对数映射将单位四元数轨迹q(t)通过对数映射log: S³ - so(3)映射到三维向量空间φ(t)旋转向量模长为旋转角方向为旋转轴。这样我们就得到了一个三维轨迹。计算角速度与角加速度在φ(t)空间通过数值微分计算角速度ω(t)和角加速度α(t)。注意这里的ω和α是 so(3) 元素可以看作三维向量。训练三维DMP对φ(t)轨迹的每一个维度共3维分别训练一个标准DMP但共享相位。目标强制项的计算公式在形式上与位置DMP类似但状态变量换成了φ。保存模型保存的参数包括所有维度的权重w_i、基函数参数 (c_i,h_i)、系统参数 (α,β,α_s)、以及轨迹的初始姿态q0和目标姿态q_goal用于后续的指数映射。4.2 关键参数调优指南与经验基函数数量n_bfs这是影响拟合精度和泛化能力的首要参数。建议做法绘制学习后的轨迹与原始轨迹的对比图并计算均方根误差RMSE。不断增加n_bfs直到RMSE不再显著下降。同时观察生成的强迫项f(s)的形状如果出现剧烈的震荡说明可能过拟合了需要减少n_bfs或增加基函数的宽度。基函数宽度参数宽度决定了每个基函数的影响范围。我常用的启发式设置是h_i (scale / (c_{i1} - c_i))^2其中scale在0.5到1.0之间调整。scale越大基函数越“胖”重叠越多生成的强迫项越平滑。时间缩放因子τ在训练时我们通常归一化时间设τ 1.0。在生成时τ 1.0会使动作变慢τ 1.0会使动作变快。注意改变τ不仅缩放时间根据公式τ²ẍ ...它也会等比例缩放加速度。如果你的系统有加速度限制在设置τ时需要检查生成的加速度是否超限。起点x0和目标点g的泛化DMP最大的优势之一就是可以轻松改变起点和目标。但要注意如果新的(g_new - x0_new)与示教的(g - x0)方向相反或差异极大强制项f(s)的缩放可能会产生奇怪的结果。一种改进是使用耦合项或调制矩阵来更智能地调整形状。正则化在LWR回归中可以加入一个小的正则化项如L2正则化来防止权重w_i过大提高数值稳定性尤其是在数据噪声较大或基函数很多时。实操心得不要只盯着轨迹位置的拟合误差。对于机器人控制而言速度曲线和加速度曲线的平滑性同样重要甚至更重要因为它们直接关系到电机的扭矩和系统的振动。训练后务必绘制并对比原始和生成的速度、加速度曲线。如果生成的加速度曲线有毛刺或突变可能需要回去调整基函数参数或增加平滑滤波。一个平滑的加速度曲线是高质量轨迹的标志。5. 基于DMP的轨迹生成与实时规划应用模型训练好后我们就拥有了一个可以随时“演奏”的运动技能。生成新轨迹的过程就是积分DMP微分方程的过程。5.1 轨迹生成算法流程生成过程是一个前向积分过程通常采用欧拉法或龙格-库塔法步长dt需要与你的控制系统周期匹配。初始化设置新的起始状态x x0_new,ẋ 0(或给定的初始速度)。设置新的目标g g_new。设置时间缩放τ τ_new。初始化相位s 1。初始化轨迹记录列表。循环积分直到s小于某个小阈值如 1e-5计算当前相位导数ṡ -α_s * s / τ。更新相位s s ṡ * dt。计算当前基函数激活值ψ_i(s) exp(-h_i * (s - c_i)²)。计算归一化因子sum_ψ Σ ψ_i(s)。计算强制项值f (Σ (ψ_i(s) * w_i) / sum_ψ) * s * (g - x0_new)。注意这里的x0_new是新的起点用于幅值缩放。计算加速度根据DMP方程τ² ẍ α (β (g - x) - τẋ) f解出当前加速度ẍ。积分得到新状态ẋ ẋ ẍ * dtx x ẋ * dt记录当前的状态(x, ẋ, ẍ)。将s和状态更新。对于姿态DMP流程类似但需要在 so(3) 空间φ进行积分然后将每一步的φ通过指数映射exp: so(3) - S³转换回四元数q并归一化。5.2 在复杂场景中的应用动态障碍物与实时调制基础的DMP生成的是固定的轨迹。在实际任务中比如机械臂在动态环境中抓取物体我们需要轨迹能够在线调整以避开障碍物。这就是DMP的扩展方向之一耦合DMP。其核心思想是在强迫项f(s)上增加一个额外的耦合项c(x, ẋ, o)其中o代表障碍物的状态位置、速度等。τ²ẍ α (β (g - x) - τẋ) f(s) c(x, ẋ, o)这个耦合项c通常被设计为一个排斥力场当机器人与障碍物距离近时产生一个加速度使机器人偏离原轨迹。一个经典的例子是使用人工势场法来构造c。实现实时避障的步骤感知在每一个控制周期通过传感器如摄像头、激光雷达获取障碍物的实时位置/速度o。计算耦合项根据当前机器人状态(x, ẋ)和o计算排斥加速度c。例如c γ * R * ẋ * exp(-β * d)其中d是到障碍物的距离γ和β是增益系数R是一个旋转矩阵将速度方向偏转到远离障碍物的方向。修改DMP方程将c加入到加速度计算中。积分使用修改后的方程积分一步得到下一个周期的期望状态。发送指令将期望状态位置、速度发送给底层机器人控制器如位置环或阻抗控制器。注意事项在线耦合项可能会破坏DMP原有的稳定性。必须谨慎设计c确保它不会引入不稳定的振荡并且当障碍物消失后系统仍能收敛到目标。通常要求耦合项在机器人远离障碍物时迅速衰减为零。此外实时计算c和积分DMP对控制器的计算能力有一定要求需要确保能在控制周期内通常是几毫秒完成。5.3 与主流规划器的结合DMP也可以与传统规划器结合形成分层架构全局规划层使用A*、RRT*等采样规划器在任务空间或构型空间规划出一条无碰撞的路径一系列途径点。局部整形层使用DMP。将全局路径的途径点作为DMP的一系列中间子目标。可以训练一个DMP学习如何平滑地经过这些子目标或者使用多个DMP分段拼接。这样DMP负责将粗糙的路径转化为平滑、动态可行的轨迹。实时避障层如上所述在DMP层加入耦合项处理全局规划未考虑的、突然出现的动态障碍物。这种结合方式既利用了采样规划器强大的全局搜索和避障能力又发挥了DMP在轨迹平滑、时间可控和在线调制方面的优势。6. 常见问题排查与性能优化技巧在实际部署DMP时你会遇到各种各样的问题。下面是我在项目中总结的一些典型问题及其解决方案。6.1 轨迹复现不准确或抖动问题现象生成的轨迹与示教轨迹形状差异大或者轨迹光滑但存在高频抖动。排查思路检查数据预处理这是最常见的问题源。确认你的原始轨迹是否经过充分的平滑和滤波速度、加速度是通过平滑后的位置数值微分得到的吗噪声大的加速度数据会导致学习出错误的强制项。建议先对位置数据进行低通滤波然后用滤波后的数据计算速度和加速度。检查基函数放置在s空间而非时间t空间均匀放置基函数中心了吗使用s(t) exp(-α_s t / τ)公式检查你的c_i分布。可以绘制基函数ψ_i(s)随t变化的图看看它们是否覆盖了整个轨迹时间段。调整基函数数量和宽度增加n_bfs可以提高拟合精度但可能引起抖动过拟合。减少n_bfs或增加基函数宽度增大h_i可以使强迫项更平滑。检查权重学习在LWR回归中是否加入了小的正则化项如 λ1e-6这可以防止病态矩阵求逆。检查学习到的权重w_i是否数量级异常大。验证积分过程生成轨迹时使用的积分步长dt是否足够小尝试将dt减半看生成的轨迹是否变化。使用更高阶的积分方法如RK4。6.2 改变目标或时间缩放后轨迹变形问题现象当g_new与g_demo相差很大或τ_new很小时生成的轨迹形状扭曲甚至出现不自然的环或尖刺。原因与解决幅值缩放问题标准DMP使用(g - x0)对强制项进行线性缩放。当(g_new - x0_new)与(g_demo - x0_demo)方向相反时强制项f会被反向缩放导致形状反转或畸变。解决方案考虑使用更复杂的幅值缩放策略例如分离平移和旋转的缩放或者使用耦合项来局部调整形状。时间缩放极限当τ变得非常小高速运动时根据方程τ²ẍ ...为了达到相同的位移所需的加速度会按1/τ²增大。这可能超出物理系统的加速度极限导致轨迹失真。解决方案在生成轨迹后检查加速度曲线是否超过执行器的最大加速度。如果超过需要增大τ或对加速度进行限幅但这会破坏轨迹形状。相位速度过快当τ很小时相位s衰减极快基函数被快速“扫过”可能导致强迫项计算的不连续。解决方案确保积分步长dt相对于τ足够小以捕捉相位的快速变化。6.3 姿态DMP的特殊问题问题现象姿态轨迹在生成过程中出现跳变、不连续或者最终姿态误差大。排查要点四元数符号歧义q和-q代表相同的旋转。但在插值或积分过程中如果相邻四元数点积为负说明它们处于流形的对立面直接处理会导致不必要的旋转。在预处理和积分过程中需要实施“最短路径插值”即确保相邻四元数点积为正否则将其中一个取反。对数映射的奇异性当旋转角接近π时对数映射log(q)存在奇异性因为旋转向量方向不确定。在训练数据中应避免包含接近180度的大幅度旋转。如果无法避免可以考虑使用两个四元数DMP来分别处理旋转的大圆路径。SO(3)空间的线性假设DMP在 so(3) 切空间是线性的但映射回 S³ 是非线性的。对于非常大的旋转这种线性近似误差会累积。建议对于大角度姿态运动可以将长轨迹分割成多个小段每段训练一个DMP。6.4 性能优化技巧实时性优化在机器人控制循环中调用DMP生成轨迹时每一步都需要计算所有基函数的值。如果n_bfs很大如100计算exp()函数可能成为瓶颈。技巧1预计算。由于相位s是单调衰减的可以预先计算一个精细的s值表及其对应的所有ψ_i(s)和归一化强迫项值f(s)。在线生成时根据当前s值查表插值可以极大减少计算量。技巧2使用更少的基函数。在满足精度要求的前提下尽量减小n_bfs。可以使用主成分分析PCA等方法对学习到的权重进行降维或者采用稀疏编码技术学习更紧凑的基函数集。内存与存储一个DMP模型需要存储权重向量w(长度n_bfs)、基函数中心c和宽度h。对于多自由度系统如7轴机械臂位置3维姿态4维需3维模型参数总量是(n_dofs * n_bfs * 2 n_dofs * 2)权重和基函数参数。对于嵌入式系统需要注意模型大小。可以通过量化如将float64存为float32来减少存储空间。最后分享一个调试时非常有用的小技巧可视化一切。不要只看最终的位置轨迹。把你的相位变量s(t)、每个维度的强制项f(s)、每个基函数的激活值ψ_i(s)、速度曲线、加速度曲线都画出来。这些图能告诉你模型内部正在发生什么是定位问题最快的方式。例如如果f(s)曲线充满高频噪声那问题肯定出在数据预处理或基函数配置上如果s(t)衰减得太快或太慢那就要调整α_s。图形化的调试手段在运动规划领域永远比看数字更直观。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门