机械臂是怎么保证速度平滑且位置精确的?

比如需要划一条曲线,在任务空间把路径细分成一段一段的小的直线,如果用插值的话,那么点到点的运动方式就会使机械臂不停的启动停止(到达一个目标点就会停止,…
关注者
590
被浏览
284,716

18 个回答

最近论文间隙,带着师弟们写了个业余的项目。最初的想法是为了避免我们在做 robot learning from demonstration 的过程中重复造轮子,写着写着变成了 做大做强,再创辉煌,所以就有了把示教学习从头实现到尾的冲动。也就是从多模态数据采集开始、到示教数据的表征学习、再到机器人的轨迹生成和控制,最后再来一个仿真器轻松验证轨迹就完美了。

Rofunc Package

先上repo的链接


轨迹规划

至于题主所问的 机械臂是怎么保证速度平滑且位置精确的,答案就在上图的蓝色部分。我们使用的是我们的合作伙伴 Sylvain Calinon 老师的 LQT (Linear Quadratic Tracking)iLQR (iterative Linear Quadratic Regulator) 系列。Calinon 老师是一个硬核的大佬,最近搞了个repo专门针对机器人的轨迹规划与优化控制问题,不过可惜的是只给出了2D example,适合教学使用。

而我们的rofunc呢,则是摸着Calinon老师过河,旨在开发简单易用、且能够直接用在真实机器人上的API。那么对于机械臂是怎么保证速度平滑且位置精确的,我们的解决方案真是简洁又美观

import rofunc as rf

via_points = ...
u_hat, x_hat, mu, idx_slices = rf.lqt.uni(via_points)
rf.lqt.plot_3d_uni(x_hat, mu, idx_slices, ori=False, save=False)

我还贴心地在package中打包了 test data,例如

import rofunc as rf
import numpy as np
from importlib_resources import files

via_points = np.load(files('rofunc.data.LQT_LQR').joinpath('rolling_pin_1.npy'))
filter_indices = [0, 1, 5, 10, 22, 36]
via_points = via_points[filter_indices]u_hat, x_hat, mu, idx_slices = rf.lqt.uni(via_points)
rf.lqt.plot_3d_uni(x_hat, mu, idx_slices, ori=False, save=False, for_test=True)

简单来讲,LQT根据几个via-point poses,可以生成指定时间间隔、指定长度、且可指定状态变量维度(x or [x, dx] or [x, dx, ddx])的轨迹,满足实际机器人的平滑轨迹需求,而不至于如题主所说需要在每两个via-points之间来一回加速减速。这是通过设计一个兼顾跟踪损失和控制损失的cost function来实现的,所以就会呈现出平滑且精确追踪指定路径点的效果。至于其具体原理已经被我结合代码放在了package的documentation里,这里就不赘述了。

我们还提供了仿真环境以验证轨迹

相关代码见

Rofunc里还有很多LQT,iLQR的变种,感兴趣的小伙伴可以自行探索。目前Rofunc还处于v0.0.0.9的初级版本,还有很长的路要走,同时我也有很多关于机器人的有趣的知识需要学习,所以欢迎各位在github上多多提issue(当然也要多多star哦),助力我们共同进步。


10.28 更新

Rofunc 文档上新了!

我们在 Quick start 中以一个简单却有趣的小例子(从人类示教中学习太极云手),展示了 Rofunc package 的全流程示教学习 pipeline,并将其部署在我们 lab 自主设计搭建的双臂类人机器人 CURI 上。

从人类示教中学习太极云手https://www.zhihu.com/video/1569302987662635008

太极云手 task 相关的 paper 已经在投 T-Mech,相关的真机实验视频会在中稿之后放出(期待能中)。当然这篇论文肯定不止 LfD 这么简单,主要是关于 whole-body adaptive impedance controller,不过这就超出本文范畴了。


2023.05.16更新

上面的例程已经被全面更新了,还增加了很多其他的examples,欢迎大家参考 example gallery 使用rofunc,并提出宝贵意见!

你好,这是轨迹规划的问题,建议仔细看看教材。我推荐一本:

Biagiotti L, Melchiorri C. Trajectory planning for automatic machines and robots[M]. Springer Science & Business Media, 2008.

当然,这种插补要求你能同时控制机器人的位置、速度、加速度,你插值后的曲线的每个路径点并不是简单的位置点,而是包含位置、速度、加速度信息的waypoint,这样,每个路径点的速度不为0,自然就不会停下了。

一般,如果是购买的工业机器人,你是无法控制到底层的,除非是自己做的控制器。但是一般产品都会有类似point streaming功能,也即你可以一边运行,一边给机器人发送未来的路径点(至少要比当前点多两个点),这样,机器人的底层控制器会自动插值,不在中间点停顿。

当然,每个机器人的使用方法不同,建议看说明书,或者问厂家技术支持。