代码复现,我能行之DMP-MATLAB

代码复现,我能行——系列一

一、基础概念

Dynamic Movement Primitives (DMP),中文为动态运动基元或动态运动原语,由美国University of Southern California的Stefan Schaal教授团队于2002年提出,是一种用于轨迹模仿学习的方法,可以将机械臂末端轨迹建模为一个弹簧阻尼二阶系统,用于轨迹的复现和泛化,避免了机械臂繁琐的手动编程。

二、原作者信息及环境

DMP-MATLAB代码是由MIT大学Dr. Moses开源,作者全名为Moses C. Nah,是韩国奥林匹克金牌获得者,本科在首尔大学,硕博在MIT,很厉害的履历。特别之处,Dr. Moses的导师是Nevil Hogan,也就是阻抗控制的提出者

代码连接:
https://github.com/mosesnah-shared/DMP-MATLAB

环境:
MATLAB2021以上版本,我使用的是MATLAB R2023a(因为复现这个程序,特意安装了最新版本的MATLAB)

复现本代码需要在MATLAB安装作者开发的Explicit-MATLAB----a MATLAB-based robotic simulator based on differential geometry. 也就是一种基于MATLAB的使用微分几何的机器人模拟器。

Explicit-MATLAB网址:
https://github.com/explicit-robotics/Explicit-MATLAB/tree/e2de82e60f118e1a8fa247367339899c1f510336#authors

三、复现过程

1.首先下载DMP-MATLAB压缩文件,解压到个人存放程序的文件夹

下载链接:https://github.com/mosesnah-shared/DMP-MATLAB

在这里插入图片描述

2.下载Explicit-MATLAB模拟器

下载链接:https://github.com/explicit-robotics/Explicit-MATLAB/tree/e2de82e60f118e1a8fa247367339899c1f510336#authors

同样下载ZIP压缩文件,解压到DMP-MATLAB文件夹下,先把该文件夹下原有的Explicit-MATLAB删除,因此之前是空的。

3.在MATLAB安装Explicit-MATLAB模拟器

在这里插入图片描述

打开MATLAB R2023a,通过上方菜单栏将当前文件夹设置为Explicit-MATLAB文件夹。运行setup.m脚本以包括所有子文件夹。或者也可以直接在命令行窗口中执行以下命令:

setup

如果命令行窗口中出现以下行,则表示已安装成功!

'EXPlicit (c) Moses C. Nah & Johannes Lachner 2022-2023, https://explicit-robotics.github.io'

4.在MATLAB运行DMP程序

在这里插入图片描述

MATLAB导航至DMP-MATLAB的examples文件夹,运行main_IL_iiwa_pos.m程序,中间可能显示路径问题,根据提示进行修改即可,很简单。

四、复现结果展示

在这里插入图片描述
在这里插入图片描述

五、复现过程踩过的坑

在运行examples文件夹中的main_IL_iiwa_pos.m示例时,报如下错误:

在这里插入图片描述

报错原因分析:网上找了关于函数或变量无法识别的情况,但无非是说路径不对,或者变量名要区分大小写,但都不能解决我的问题。因为这个程序之前运行成功过,但这次运行突然报这个错误,只能说明程序本身没问题,一定是哪里设置的问题。

解决办法:在运行examples中的示例前,一定要先运行根目录下的(也就是DMP-MATLAB)中的setup.m程序,最后完美运行。代码作者都明确注释了,只能怪自己眼睛不好使,卡了一天。

在这里插入图片描述

完结,撒花~~

下面是一个关于Dynamic Movement Primitives(DMP)的简单Python例程,它展示了如何使用DMP函数来生成一系列连续的运动轨迹。 首先,我们需要导入所需的库和模块: ```python import numpy as np import matplotlib.pyplot as plt from dmp import DMPs_discrete ``` 然后,我们定义一些常量和变量: ```python # 定义DMP的时长和采样率 T = 5.0 dt = 0.01 # 定义DMP的起始位置和目标位置 start = 0.0 goal = 1.0 # 定义DMP的数量和每个DMP的参数 n_dmps = 1 params = { 'k': 100.0, 'd': 2.0 * np.sqrt(100.0), 'alpha': -np.log(0.01), 'beta': 0.0, 'w': np.zeros((n_dmps, 25)), 'g': np.zeros(n_dmps), 'y0': start, 'dy0': 0.0, 'ddy0': 0.0, } ``` 接下来,我们初始化DMP: ```python # 初始化DMP dmp = DMPs_discrete(n_dmps=n_dmps, dt=dt, T=T) # 设置DMP的参数 dmp.set_params(params) ``` 现在,我们可以生成DMP运动轨迹,并将其可视化: ```python # 生成DMP运动轨迹 y_track, dy_track, ddy_track = dmp.rollout() # 可视化DMP运动轨迹 t = np.arange(0, T, dt) fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True) ax[0].plot(t, y_track) ax[0].set_ylabel('Position') ax[1].plot(t, dy_track) ax[1].set_ylabel('Velocity') ax[2].plot(t, ddy_track) ax[2].set_ylabel('Acceleration') ax[2].set_xlabel('Time') plt.show() ``` 完整的代码如下: ```python import numpy as np import matplotlib.pyplot as plt from dmp import DMPs_discrete # 定义DMP的时长和采样率 T = 5.0 dt = 0.01 # 定义DMP的起始位置和目标位置 start = 0.0 goal = 1.0 # 定义DMP的数量和每个DMP的参数 n_dmps = 1 params = { 'k': 100.0, 'd': 2.0 * np.sqrt(100.0), 'alpha': -np.log(0.01), 'beta': 0.0, 'w': np.zeros((n_dmps, 25)), 'g': np.zeros(n_dmps), 'y0': start, 'dy0': 0.0, 'ddy0': 0.0, } # 初始化DMP dmp = DMPs_discrete(n_dmps=n_dmps, dt=dt, T=T) # 设置DMP的参数 dmp.set_params(params) # 生成DMP运动轨迹 y_track, dy_track, ddy_track = dmp.rollout() # 可视化DMP运动轨迹 t = np.arange(0, T, dt) fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True) ax[0].plot(t, y_track) ax[0].set_ylabel('Position') ax[1].plot(t, dy_track) ax[1].set_ylabel('Velocity') ax[2].plot(t, ddy_track) ax[2].set_ylabel('Acceleration') ax[2].set_xlabel('Time') plt.show() ``` 注意,这个例程使用了另一个Python模块`dmp`,它是一个开源的DMP实现。你需要先安装这个模块,然后才能运行这个例程。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值