赞
踩
同知乎Winter:机械臂的阻抗、导纳控制(间接力控):第一篇 思想源泉 - 知乎
这个控制是用在机器人执行某一个任务过程中。就是说他是在运动着的。在这个过程中,如果他不小心碰到了一个物体。比如说是你的手。如果你想让他表现的是一个软绵绵的弹簧的话。如果这个机械臂撞到了你的手臂。那么它就会像一个弹簧一样弹开。如果你想让他表现是一个很硬的弹簧。那么你的手臂对他来说就是个障碍,它就会像一个很硬的弹簧一样按照它的轨迹继续运行。
我们接下来拿一个物块,举一个这个例子,就把他当做机器人的一个关节,然后他再向右运动。
仔细看下面这张图,然后搞清楚每个图中的每个因素各对应着什么?我们之前看不懂,阻焊控制就是概念很模棱两可,比如说你想要像弹簧,那么弹簧在哪儿它起点是哪终点又是哪?如果你看懂了这张图,那么阻抗控制的控制,你自己就可以写出来。
这里我想让这个机器人物块儿移动到右边红旗的位置那里。到了之后直接停下来,速度为0。红色的实线是实际真正存在的东西。而我用绿色表示的就是你希望他表现出来的弹簧阻尼系统。
这里还没有涉及到与环境接触力的问题。我们就先简单分析这个场景。如果你希望。你的机器人系统所表现出来很大的刚度。也就是这里的弹簧k很大。那么在机器人物块距离期望目标位置一定的情况下。弹簧产生的拉力就非常大。那么他的速度必然就很快。
K : 所以这里的目标就出现了。如果这个物块跑得很快。那么你就会觉得确实这个弹簧的刚度很大。就是位置变化很快
B:如果你希望这个系统的阻尼很大,那么他表现的情况就是很缓慢。那么你就要让这个物体的速度变化很慢。
M:如果你想让这个物体的质量。很大。那么它所表现出来的特性就是它的加速度不容易改变。
也许这里加上力之后,会让你理解更加直观一点。在这个物块执行他任务的过程中,也就是移动到预期位置的时候。你的手不小心碰到了他。就在你手的位置接触到的那一刻。如果你希望这个木块它的刚度又大,质量也大。那么你就要控制这个物块,对你的手输出一个很大的力。
这个就是:基于力的阻抗控制,控制目标是力的大小(你可以自主采用各种方法实现)
换一种思路。你的手在不同的位置触碰到物块的时候,感受到的是相同的力。那么你在偏左边的时候。你就会觉得这个物块这个系统的刚度很小。如果你是在右边感受到同样的力,那么你就会觉得这个的刚度很大。
这个就是:基于位置的阻抗控制,(让用户感受相同力下)控制目标是位置(你也可以自主采用各种方法实现)
本来要理想的打薄,但是锈迹太厚,产生力,我想要这个机器人表现很强硬,K很大,那么目前位置和实际位置有一个差值,这个是运动,那我理想阻抗特性K很大,那么我产生一个很大的力(控制目标),就是打磨力这才符合我的特性,所以里面就有一个力控制,
如果是另一种,传感器是接触力传感器,我同样要K很大,那我这个机器人系统怎么表现很刚,K很大,在这个力传感器测的一定值,那么位移差就越小,那这个机器人就越要接近目标位置(控制目标),尽管障碍物拦着,我还是要拼命去压它,让它感受我的K很大
这里我们采用第二种(控制目标是位置的)
机器人任务:这个物块要靠近期望的位置
情景一、
情景二、
情景三、
你可以看到,它的弹簧刚度是10,力也是10,正好位置就停靠在(5-4)=1差1,就像是你的手对弹簧施加力之后弹簧停在那里。
你可能觉得移动的固定位置太简单,想要追踪变化的,这里以sin函数为例(你直接想象那个弹簧的右边连接点一直sin移动就行)
你可能会觉得,这个蓝色的曲线这也太差了,我随便一个PID瞎调节都可以比它跟踪的好
所以你接下来还是费心思设计控制器去追踪这个看起来很垃圾的蓝色曲线,这个具体你想用什么方法就不属于阻尼控制范围了,我只是告诉你你应该这么办
码字不易,多多点赞,关注Winter,后续将这个推广到6关节机器人,然后用simulink仿真
参考文献
力控机器人(触觉感知)阻抗控制性能(performance specifications)与MATLAB程序实现 - 古月居
附录
- clc;clear;close all
- % 机器人阻抗控制程序
- % 机器人参数
- m = 1; % 质量
- k = 10; % 刚度
- c = 1; % 阻尼
- % 阻抗控制参数
- K = 10; % 位置控制增益
-
- M = 5; % 质量控制增益
- B = 2; % 阻尼控制增益
- % 目标参考位置和力/力矩
- qr = 5; % 参考位置
- fe = 10; % 参考力/力矩
- % 初始状态
- x0 = [0; 0]; % 位置和速度
- f0 = 0; % 初始力/力矩
- % 阻抗控制循环
- t = 0:0.01:100; % 时间向量
- x = zeros(2, length(t)); % 位置和速度
- f = zeros(1, length(t)); % 力/力矩
- x(:,1) = x0; % 初始状态
- f(1) = f0;
- for i = 2:length(t)
- % 计算误差和误差导数
- e = qr - x(1, i-1); % 位置误差
- de = -x(2, i-1); % 速度误差
- % 计算控制力/力矩
- % fc = Kp*e + Kv*de + M*(fr-f(1)) + B*(-x(2,i-1))+m*;
-
- % fc = Kp*e + Kv*de + M*(fr-f(1)) + B*(-x(2,i-1));
- % a = (fc - c*x(2,i-1) - k*x(1,i-1))/m;
-
- a=M\(K*e+B*de-fe);
-
- x(2,i) = x(2,i-1) + a*0.01;
- x(1,i) = x(1,i-1) + x(2,i)*0.01;
- % 记录控制力/力矩和位置
- % f(i) = fc;
- end
- % 绘图
- plot(t, x(1,:), 'b', t, qr*ones(size(t)), 'r--')
- xlabel('时间 (s)')
- ylabel('控制目标:位置 (m)')
- legend('控制目标:位置', '参考位置')
- title('单自由度机器人阻抗控制')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。