聊聊协作机器人中柔顺控制那点事儿

176
1
2020年9月15日 12时02分

嗨伙计们,忙到爆炸的月更侠罗伯特祥又来和大家见面了!今天我们来聊聊协作机器人中柔顺控制那点事儿~

 

我们先来讲下本次文章的安排,首先我们要在webots中建立一个连杆模型,然后我们需要对它进行动力学建模,基于这个模型,我们通过阻抗控制使它呈现出一个柔顺的效果!

 

那进入正题之前呢,请允许我先来打波广告~

聊聊协作机器人中柔顺控制那点事儿插图

 

之前呢,几篇文章大体介绍了webots的基本使用,也开过一次公开课《如何入门webots机器人仿真神器 · 罗伯特祥》,但是这些都是基于python或者c++的,为了打通ROS与webots的联合仿真,博主又倾情打造了一套ROS与webots的联合仿真教程:《如何实现ROS与Webots联合仿真 · 罗伯特祥》,在这套课程中,我将带你了解webots这款仿真神器中机器人的建模及常见执行器与传感器的使用,也会手把手教你如何在ROS中编写机器人的控制程序以及数据的可视化,同时呢还会教你一些小技巧,例如利用上帝节点实现机器人的3D轨迹绘制等等。

 

聊聊协作机器人中柔顺控制那点事儿插图(1)

 

整套课程使用的是rospy来写的控制器,带有丰富的案例,让你更轻松入门~(小声BB:朋友都说我的声音像李诞,为啥不说他的声音像我呢哈哈哈哈,普通话不太标准,还请各位见谅)

聊聊协作机器人中柔顺控制那点事儿插图(2)

 

建模教程已经实现的差不多了,所以以后的文章中,我将会结合理论性的知识点,在webots中实现一些有意思的仿真小案例。嘿嘿当然啦,这也得在我个人的能力和时间允许的情况下~

 

okok!广告打完了,我们来进入正题!

 

近几年呢协作机器人发展的很快,人机交互以及人机的安全协作技术也跟着走进了我们的视野,其中柔顺控制就是这其中的一项重要技术!

 

正好笔者的研究方向与此相关,所以打算跟大家聊聊柔顺控制的实现过程~

 

机器人的柔顺性一般包括运动柔顺性和力柔顺性,运动柔顺性指的是机器人奇异位形逃逸等相关的一些内容,主要是为了避免运动过程中的冲击;而我们常说的柔顺控制呢,一般是指后者这个力的柔顺性。

 

本文中,我们将使用一个单连杆来模拟它的柔顺控制。

1. webots建模

详细的建模过程,我感觉貌似不用再一步步带着大家走了,那么就直接上模型的结构吧~

 

聊聊协作机器人中柔顺控制那点事儿插图(3)

 

我们在连杆上加了一个陀螺仪,为啥要加它呢,这是为了测量连杆的角速度。

 

一个刚体由惯性张量、质量和质心等10个参数来定义,所以这次我们详细定义了连杆的物理参数。

 

相信你能看明白是怎么建的,如果有些吃力,翻翻以前的文章或者古月学院的课程安排一波呀!

 

聊聊协作机器人中柔顺控制那点事儿插图(4)

 

具体的参数,可以参考我的设置,图在文末。

 

建完的模型也很简单,是这个样子的~

 

聊聊协作机器人中柔顺控制那点事儿插图(5)

2.动力学建模

终于到了正题,我们先来温习一下拉格朗日法的动力学求解。

 

首先第一步,定义拉格朗日函数:

聊聊协作机器人中柔顺控制那点事儿插图(6)

那么它的运动方程为:

聊聊协作机器人中柔顺控制那点事儿插图(7)

也就是:

聊聊协作机器人中柔顺控制那点事儿插图(8)

 

不太熟悉的朋友记得翻翻《机器人学导论》,或者古月居论坛上一些大佬们的文章~

 

下面开始对单连杆进行动力学建模:

 

聊聊协作机器人中柔顺控制那点事儿插图(9)

 

连杆在质心坐标系下的惯性张量矩阵为:

 

聊聊协作机器人中柔顺控制那点事儿插图(10)

 

对于单连杆,总动能为:

 

聊聊协作机器人中柔顺控制那点事儿插图(11)

 

假设连杆运动最低点为零势面,那么总势能为:

 

聊聊协作机器人中柔顺控制那点事儿插图(12)

 

偏导数:

 

聊聊协作机器人中柔顺控制那点事儿插图(13)

聊聊协作机器人中柔顺控制那点事儿插图(14)

聊聊协作机器人中柔顺控制那点事儿插图(15)

 

所以,系统动力学方程为:

聊聊协作机器人中柔顺控制那点事儿插图(16)

 

当然,更简单的是我们直接对连杆进行受力分析,然后通过平行移轴定理得到连杆在旋转轴的转动惯量,计算出由于加速度引起的加速力矩和重力力矩的和。

 

这里要注意,公式里的惯性张量要跟webots中对应起来,因为webots中的坐标系大多数情况下跟我们理论建模的时候是不一致的!

 

3.柔顺控制器

现在到正主儿了,它的发展说来话长,篇幅有限就不多啰嗦了。

 

我们怎么实现它的柔顺性呢?

 

在此之前,我们需要先回顾一下质量-弹簧-阻尼模型,这个模型可太经典了!当年恩师讲这个的情景还历历在目~(怀念我的母校,明德笃学、弘毅拓新,致敬母校,祝母校70周岁生日快乐~)

聊聊协作机器人中柔顺控制那点事儿插图(17)

声明:上图摘自《Modern Robotics Mechanics Planning and Control》,版权归原作者所有。

 

为什么要讲它呢,因为这就是我们体现系统柔顺性的一个关键!

 

那什么是柔顺性?在外力作用下,系统能表现出自然顺从,这就叫柔顺性。

 

为什么又说质量-弹簧-阻尼模型是我们实现柔顺性的一个关键呢?这让我想起了邵总在知乎上的那篇文章,他举了一个简单形象的例子,机器人开门的问题,理想情况下机器人是可以实现开门过程,然而现实世界存在着误差,这就导致外力与门的关节限制发生冲突,从而导致门被破坏或者机器人被扯断,那我们怎么解决这个问题呢,在门与机器人之间加一个弹簧,这个弹簧可以填充理论与现实的误差,所以它能完美的解决这个冲突问题。

 

只有一个弹簧,又会存在什么问题?当然是振动!而为了避免振动的发生,我们应该引入一个阻尼,去消除这个振动。那么这就是我们柔顺控制的一个思想!

 

回过头来看模型,它的动力学方程可以写成:

聊聊协作机器人中柔顺控制那点事儿插图(18)

 

对它进行拉普拉斯变换,假设输入为位置扰动,输出为力,得到系统传递函数为:

聊聊协作机器人中柔顺控制那点事儿插图(19)

 

这就是阻抗的定义,而对于导纳来说,它是阻抗的导数,二者本质上其实是相同的,只不过是不同角度的解读方式。

 

既然是个二阶系统,那么显然参数的不同,将呈现出三种状态,即过阻尼、欠阻尼和无阻尼的情况,后面我们将会通过修改参数去观察一下连杆的反应。

聊聊协作机器人中柔顺控制那点事儿插图(20)

声明:上图摘自《Modern Robotics Mechanics Planning and Control》,版权归原作者所有。

 

问题又来啦,我们怎么应用这个模型去实现柔顺控制?

 

类比这个模型,我们得到二阶误差动力学模型。实际上,柔顺控制就是一个二阶误差动力学应用的结果,我们假想一下,在关节处有一个扭簧和阻尼器(这里我们以关节柔顺控制为例,笛卡尔柔顺控制同理,至于为啥没考虑质量呢,低速情况下我们可以忽略加速度,再者质量m在奇异点以外一般不会太大,当然我们这里的单连杆模型不存在这个问题,所以我们可以直接忽略质量问题),在不受外力(包括重力)的情况下,给它一个外力干扰,由于扭簧的存在,它会呈现出顺从性,而外力消失,在扭簧的作用下它又会慢慢回到平衡点。

 

那么,接下来我们就要写这个控制律了。

 

首先是外力问题,我们需要先给机械臂创造一个出外界作用力外的无外力环境,这时候我们就需要去做零力控制,通俗的说就是去补偿重力和摩擦力(当然还有一些其他因素的影响,我们要抓主要矛盾)。

 

为了简化,这里我们就不考虑关节摩擦力问题了,所以就只对它进行重力补偿。

 

联想到第2节建的动力学模型,由于处于低速情况下,因此我们可以忽略单连杆动力学模型中与角加速度有关的项,那么也就只剩下重力了,重力引起的力矩为:

聊聊协作机器人中柔顺控制那点事儿插图(21)

 

所以它的阻抗控制律为:

聊聊协作机器人中柔顺控制那点事儿插图(22)

 

对你没看错,啰嗦了这么多,实际上就这么一个公式!

聊聊协作机器人中柔顺控制那点事儿插图(23)

 

现在我们就到webots中仿真一下,看看什么效果。

 

聊聊协作机器人中柔顺控制那点事儿插图(24)

 

嗯,有nei味儿了~

 

现在我们再来修改一下阻尼系数,让系统表现出无阻尼和过阻尼的状态:

 

聊聊协作机器人中柔顺控制那点事儿插图(25)
聊聊协作机器人中柔顺控制那点事儿插图(26)

 

具体参数就不给了,大家自己玩玩加深一下印象。

 

注意:在仿真环境下随便设置参数无所谓,但在实际机器人控制中务必要注意不要随便去设置参数,而应该慢慢去尝试一下,否则可能会导致由于参数设置不当导致的控制器失稳,以免发生危险~

 

okay,现在呢我们完成了单连杆柔顺控制的仿真,对于多自由度系统的关节柔顺控制,也很容易由单自由度去扩展得到。具体的柔顺参数的调整,大家还需要去回顾一下二阶系统的特性。

 

今天就先讲到这儿,读万卷书也要行万里路,我是罗伯特祥,下次见!


最后小声BB一句:今年秋招可真是一言难尽,在下太菜,有没有大佬要把我带去做同事?

聊聊协作机器人中柔顺控制那点事儿插图(27)

发表评论

后才能评论

评论列表(1条)