0
雷锋网按:本文作者qqfly,上海交通大学机器人所博士生,本科毕业于清华大学机械工程系,主要研究方向机器视觉与运动规划,会写一些好玩的内容在微信公众号:Nao(ID:qRobotics)。
「协作机器人」应该算是2016年机器人领域的一个重要关键词,我们一起来聊一聊,最后还有一个好玩的视频,大家可以看看。
当然,这里我不想去过多的讨论什么是协作机器人,我只关心怎么做。如果对其定义不清楚的,可以查看一篇不错的文章《What Does Collaborative Robot Mean ?》
协作机器人的研究点
协作机器人的主要目的是要让人能与机器人协同工作。
传统的机器人由于无法感知到人的存在,如果与人发生碰撞还是很危险的。
所以,协作机器人的一大研究点就是机械臂与人的碰撞检测。
说到这点,就不禁让我想到当年看 Sami Haddadin 在德国宇航中心DLR时发布的视频。(当然,他现在跑去做了个Franka,也很厉害。)
然后下面这个是高(zuo)阶(si)玩法:
视频在这里:
当然,现在已经入坑运动规划了,不可能再去做这个。但是,我还是好奇这么好玩的功能是怎么做出来的。
虽然各种论文里也都或多或少会提及他们的算法,但一直只看论文总感觉差点意思。
这时候应该列出一大堆论文
但是我就不。
协作机器人的实际操作过程
纸上得来终觉浅,绝知此事要躬行。所以,我决定尝试做一个。哦,不,1/7个(单关节)。
首先,在实验室小伙伴们的帮助下,搭了一个实验平台:
大概就是一个交流电机带着一个灰铸铁做的连杆。控制器采用的是实时操作系统RTX,然后用EtherCAT进行通信。
经过调研,要做这种能检测碰撞的协作机器人,基本的思路就是建立机器人动力学模型,之后对比真实力矩与动力学计算力矩,从而判断是否碰撞。
测量力矩的话,我们就直接通过驱动器反馈的电流估计好了。传说中的 Sensor-less Collision Detection,瞬间有种很厉害的感觉。
这个动力学就不细说了。我们可以得到上面这个动力学公式,大概就是一个质量项,一个重力项。(直驱就先不考虑摩擦力了)。参数的话,直接从SolidWorks中读取就好了。
于是,我画出了测量力矩与计算力矩的曲线:
嗯,误差50%
看来,这里需要做一下参数辨识。
于是,我打开了本科毕设论文。
幸好本科做了点微小的工作,现在直接就在这1/7个机器人上用了起来。
动力学参数辨识后的效果果然不错,误差立马降到了8%内。
有了精确的动力学模型,就可以开始实(zuo)验(si)了。
首先,要测试碰撞的效果,就是用各种物品去碰运行的机器:
危险动作,请勿模仿。后果可能变得跟下面这个木棒一样:
画出真实力矩、计算力矩与它们的差值如下:
看来,碰撞对力矩的影响还是很明显的。那么,我们很容易就能检测到机械臂是否发生碰撞。
第二步,我们就是要让机械臂在碰撞之后停止运动:
效果不错,一张纸就能让机械臂停止运动。
但是,我们看前面 Haddadin 的视频,机械臂在检测到碰撞后并不是立马停止运行的,而是进行重力补偿模型(zero-G mode)。
如上图,Haddadin 的论文中说,检测到碰撞后让机械臂进入重力补偿模式的方法(图中Strategy 2)的接触力最小,对人的影响也最小。
好吧,既然大神这么说了,我也就这样做做看。
但是,我的动力学模型并不是非常准确,没法做到完全的 zero-G,我这里的做法是用在碰撞后采用“重力补偿+小增益PD控制”的方法,这样应该可以达到类似效果。
嗯,效果也不错。
不过,既然我可以将机械臂的刚度降到这么低,那岂不是可以做拖动示教(Hand Guiding)了?
所有视频在这里:
当然,真的要在多轴机器人上实现这些功能还是比较复杂的。其中,最复杂的一个就是摩擦力了,我们并不知道摩擦力的具体模型,这样就没法进行辨识补偿了。
我这里给大家看个极端的例子:100kg负载,86减速比(行星齿轮)。
然后,我用同样的方法做动力学参数辨识。如果不考虑摩擦力的话,辨识结果如下图:
机构的动力学模型完全没法拟合出力矩曲线。说明在这种情况下,摩擦力是没办法忽略的。
但是,即使我想把摩擦力辨识出来,尝试过几种摩擦力经验公式,也没办法完全消除误差。
这就是为什么现在绝大多数协作机器人都必须加关节力矩传感器,这样就能跳过传动系统,减小摩擦力的影响。
最后,奉劝大家一句:摩擦力的话,入坑需谨慎。
最最后,把 Sami Haddadin 的完整视频放在这里:
雷峰网特约稿件,未经授权禁止转载。详情见转载须知。