当前位置: 华文问答 > 数码

为什么要做机器人动力学分析?请牛人详细、易于理解的阐述一下

2016-02-04数码

谢邀。

前面的答案从理论方面进行了解释,我来举几个生活中的例子来类比一下,不是百分百对应,但本质一样,需要多联想,主要靠意会,意会。

如果以后想到更适合更贴切的例子,本回答将不定时更新。

我们经常在网络/电视上看到军事人员为了提高瞄准射击的稳定性,会通过在枪械上挂载一定的额外重量(水壶、砖头、沙袋)的方式来锻炼手臂力量,提高稳定性,例如这样:

ok,现在想象一下你在做同样的事情,只不过我们换成单臂持手枪。

先来一个最简单的动作,在枪上挂一个装了1L(1kg)水的水壶,然后抬起手臂并保持稳定(1kg并不困难,一般的笔记本重量大约在1.5~2kg,试着感受一下),瞄准10米外的靶子。


很简单吧,接下来我们增加一点点难度,假设挂着你手臂上的水壶会 不定时的随机的 改变它的重量 ,可能会变轻,也可能会变重,这时会发生什么情况?

对,你无法很好的一直瞄准目标了。

当水壶突然变轻时,由于你本来的用力大于实际所需,胳膊会往上抬,偏离目标;

当水壶突然变重时,由于你本来的用力小于于实际所需,胳膊会往下掉,同样偏离目标;

但是不管哪一种情况,偏离目标后,你都可以通过观察手臂朝向与靶标的差距,重新进行瞄准(当然前提是沙袋不要变得太重导致你举不起来)。

////////////////在这里需要插入一丢丢控制理论的知识///////////////////

你通过眼睛观察到了偏差,大脑就会控制手臂移动去减小偏差,与此同时眼睛仍在观察,直到最终瞄准目标,这种基于「偏差/误差/error」进行控制的方法称为反馈控制,PID控制器就是经典的反馈控制之一。

很显然,如果你无法看到需要瞄准的目标,或者虽然你看到了目标但是无法判断到底有多少偏差,那么就无法进行瞄准。即,没有偏差,就无法进行反馈控制。

偏差是反馈控制的基础,也是这种控制策略一些缺点的主要原因。控制之前需要等待产生偏差,会导致控制系统响应变慢。

人通过眼睛来完成绝大部分任务的过程都可以看做是反馈控制,更具体的,由于视觉的存在,有一个专用名词,即「视觉伺服 Visual Servo」。

很多人在研究如何给机器人加上一双好用的眼睛,只不过距离人眼+人类大脑的水平还差的太远。

在射击运动中,你可以认为在人的大脑中产生了一个用于射击的反馈控制器,用于控制人手精确的射击目标。

只不过有的人大脑中的控制参数不行,给定一个目标后,瞄准时间长,射击准确度差(初学射击的人);

而有的人参数调的好,通过大量的练习/训练(肉身完成一次训练时间巨长的学习),可以达到快速瞄准,精准涉及的目的(射击运动员);

///////////////////赶快回来继续动力学//////////////////////////

为什么会发生偏离目标的情况?

因为你不知道沙袋会在什么时候改变重量,也不知道沙袋会变重还是变轻以及变化量是多少,所以在沙袋变化的瞬间你只能以一个旧的稳定状态的出力来处理一个新的状态,导致了控制效果变差。

因此 简单的反馈控制无法快速处理这种时变非线性的情况

而现实的情况是,机器人上所使用的关节控制器/电机控制器绝大部分使用经典的PID算法,因此在这种情况下也会面临这样的问题(绝大部分机器人内部都会配备两种控制器,一种是用来控制电机的关节驱动器,里面通常是传统的PID控制,只能控制一个或者少数几个电机/关节的转动;另一种类似于人类的大脑,用来处理上层的感知,规划,通信以及协调各电机/关节控制器等任务)。

如何能改善这种情况呢?

一个自然而然的思路就是想办法知道什么时候水壶的重量会发生变化,以及变化到多重,提前告知你,你就可以在水壶重量变化的一瞬间加把劲或者略微放松一些来保持手臂的水平,继续瞄准目标(当然这是理想情况,人类的精度控制水平是很模糊的,这里需要意会,你懂的)。

这种 提前把那些会影响你动作的外界因素告知大脑以提高控制精度的方法,在控制理论中被称为前馈控制

在这个例子中,有哪些外界因素需要提前告知呢?

水壶的质量以及变化的时间。

其中, 质量Mass 这个参数就属于动力学的范畴(终于讲到动力学了,呼~)。

在这里我们把水壶当成了一个点来考虑,假设水壶换成了一个棍子横在你的胳膊上,你就要考虑这个棍子的 重心Center of Mass 在什么地方了,毕竟重心在不在胳膊的上方差别很大。

重量变化这个假设对应到机器人上是很常见的,各关节在运动过程中相互位置发生变化,由于重力产生的力也随之变化,例如手臂伸直和垂下两种状态,对肘关节的力量输出要求是不一样的。

质量和重心两个参数与平动有关,涉及到 转动 时就要换成另外一组动力学参数,即 惯量inertia 惯性主轴axes of moment ,就不再说具体例子了。

这是引入动力学的第一个好处, 可以显著提高控制的准确性和响应速度


我们继续,现在射击任务要求有一些变化。

你需要射击10次目标,每次射击前都要求手臂先回到垂直向下状态,然后抬起射击,最终完成10次射击的时间越短越好。

假设一开始水壶是空的,相当于没有额外负载,你轻车熟路,每次都使劲全力快速举枪、射击、放下,20秒完成了10次射击,成绩优异。(20秒是我瞎掰的)

再来一次,不知道谁使坏给你挂上了一个装满水的纯净水桶,估摸有20来公斤吧,你浑然不知,仍然全力举枪。

啊~!good bye,肱二头肌。

举枪时,手臂末端画出了一个圆弧,我们称这个圆弧为 路径规划Path Planning ,然后为了更快的完成任务,我们尽全力赋予了这个圆弧运动一个速度(按照之前的假设,2s一次射击),整个过程我们称之为 轨迹规划Trajectory Planning

当枪的重量远低于手臂力量时,你以多大速度举枪不会有太大影响,因为这在你的肌肉承受范围之内。但是如果你需要举起的力量超出了合理范围(例如前面所说单手横举满的纯净水桶),你仍然要以2s的时间完成一次完整动作,就会造成肌肉拉伤,因为 不合理的速度/加速度要求超出了肌肉的物理限制

肌肉如此,机器人的电机也是如此,只不过人对于手臂的控制没有那么精确,而电机有精确的参数。

这里用到的参数就是电机的 力矩/转矩Torque ,由力矩和惯量就可以得到所允许的最大加速度。

因此动力学的第二个作用,是在规划机器人的运动时,充分考虑机器人动力系统的限制,在不损坏电机的情况下,规划出符合要求的轨迹(时间最短、功耗最优等)。

ok,枪打完了,我们换另一个的例子。

基本上每个人都有过细微调整某些重物位置的经历,例如调整衣柜位置,对准设备的螺丝孔等等,由于比较重,力气小了推不动,稍微用点力,又推过了,神烦。

这是由于摩擦力是非线性的,静摩擦很大,而动起来之后速度较低时的动摩擦又比较小,动静之间切换时控制对象变化过快导致控制精度变差。

在电机低速控制中,有一种速度忽快忽慢的「蠕动」现象就是由于这个原因引起的。

因此,在高精度机器人控制中,也要考虑摩擦力的影响。

除此之外,由于参考系变化「产生」的科氏力,也在基本的动力学方程中,感兴趣的可以回去翻翻教科书。

摩擦力和科氏力同样是动力学的范畴

暂时先这些,以后有时间继续填坑。

其实最开始想到以射击练习作为例子来解释机械臂动力学时,脑子里第一个反应是Howard。


本来后两个例子应该放几张图,但是高铁上实在不方便,见谅。


欢迎关注:

OnionBots - 知乎专栏