机械臂逆运动学建模
本例展示了如何使用模糊系统来建立双关节机械臂的逆运动学模型。
什么是逆运动学?
运动学是研究运动的科学。在双关节机械臂中,给定关节的角度,运动学方程就给出了机械臂尖端的位置。逆运动学是指逆过程。给定机械臂尖端的理想位置,关节的角度应该是多少,才能将机械臂尖端定位在理想位置。通常有不止一个解决方案,有时可能是一个很难解决的问题。
这是机器人技术中需要解决的一个典型问题,控制机械臂执行指定的任务。在二维输入空间中,有两个关节的机械臂,并给定所需的坐标,问题就简化为寻找所涉及的两个角度。第一个角是第一个手臂和地面(或任何它所附着的物体)之间的角。第二个角在第一个角和第二个角之间。
图1:有两个角度的双关节机械臂,θ₁
而且θ
为什么使用模糊逻辑?
对于像双关节机械臂这样的简单结构,给定臂尖的理想位置,可以从数学上推导出关节处的角度。然而,对于更复杂的结构(例如:在三维输入空间中工作的n关节机械臂),推导出逆运动学的数学解可能具有挑战性。
利用模糊逻辑,我们可以构造一个模糊推理系统,在已知问题的正运动学的情况下推导出逆运动学,从而避免了开发解析解的需要。此外,模糊解易于理解,不需要特殊的背景知识来理解和评估。
在下一节中,将描述开发这种解决方案的大致轮廓,然后详细阐述步骤。
模糊解法概述
由于已知双关节机械臂的正运动学公式,推导出了两个关节的整个旋转角度范围内机械臂尖端的x坐标和y坐标。坐标和角度被保存作为训练数据来训练ANFIS(自适应神经模糊推理系统)网络。
在训练过程中,ANFIS网络学会绘制坐标(x
,y
)到各个角度(θ₁
,θ
).训练后的ANFIS网络被用作一个更大的控制系统的一部分,以控制机械臂。控制系统在知道机械臂的目标位置后,利用训练好的ANFIS网络推导出关节的角度位置,并对机械臂的关节施加相应的力,使其移动到目标位置。
什么是ANFIS?
ANFIS是自适应神经模糊推理系统。它是一种混合神经模糊技术,将神经网络的学习能力引入模糊推理系统。该学习算法利用训练输入输出数据调整sugeno型模糊推理系统的隶属度函数。
在本例中,输入/输出数据指的是“坐标/角度”数据集。坐标作为ANFIS的输入,角度作为输出。学习算法教会ANFIS通过一个称为训练的过程将坐标映射到角度。在训练结束时,经过训练的ANFIS网络将学习输入-输出映射,并准备部署到更大的控制系统解决方案中。
数据生成
让θ₁
第一个手臂与地面的夹角。让θ
为第二臂与第一臂之间的夹角(参见图1)。第一个臂的长度为l1
第二臂是l2
.
假设第一个关节的旋转自由度有限,它可以在0到90度之间旋转。类似地,假设第二个关节的旋转自由度有限,可以在0到180度之间旋转。(这一假设消除了处理一些特殊情况的需要,这些情况会使话语混乱。)因此,0 < =θ₁< =π/ 2
而且0 < =θ< =π
.
图2:展示所有可能的插图θ₁
而且θ
值。
现在,对于每一个组合θ₁
而且θ
x和y坐标的值是用正运动学公式推导出来的。
下面的代码片段显示如何为所有组合生成数据θ₁
而且θ
值并保存到一个矩阵中作为训练数据。下一节将解释将数据保存在两个矩阵中的原因。
L1 = 10;第一臂长度%L2 = 7;第二臂长度%Theta1 = 0:0.1:pi/2;%所有可能的theta1值Theta2 = 0:0.1: π;%所有可能的theta2值[THETA1,THETA2] = meshgrid(THETA1,THETA2);%生成网格的角度值X = l1 * cos(THETA1) + l2 * cos(THETA1 + THETA2);%计算x坐标Y = l1 * sin(THETA1) + l2 * sin(THETA1 + THETA2);%计算y坐标data1 = [X(:) Y(:) THETA1(:)];创建x-y-theta1数据集data2 = [X(:) Y(:) THETA2(:)];创建x-y-theta2数据集
下图显示了通过循环不同组合生成的所有X-Y数据点θ₁
而且θ
然后分别推导出x和y坐标。可以使用下面的代码生成图形。为了便于理解,对情节作了进一步的注释。
情节(X (:), Y (:), ' r。');轴相等;xlabel('X','fontsize',10) ylabel('Y','fontsize',10) title('所有theta1和theta2组合的X-Y坐标','fontsize',10)
图3:生成X-Y坐标θ₁
而且θ
用正运动学公式组合
建立ANFIS网络
为这个问题建立ANFIS解决方案的一种方法是建立两个ANFIS网络,一个用于预测θ₁
另一个是预测θ
.
为了使ANFIS网络能够预测角度,它们必须使用样本输入输出数据进行训练。第一个ANFIS网络将以X和Y坐标作为输入和对应的训练θ₁
值作为输出。矩阵data1
包含了x-y-theta1
训练第一个ANFIS网络所需的数据集。因此data1
将被用作训练第一个ANFIS网络的数据集。
类似地,第二个ANFIS网络将以X和Y坐标作为输入和对应的来训练θ
值作为输出。矩阵data2
包含了x-y-theta2
训练第二个ANFIS网络所需的数据集。因此data2
将被用作训练第二个ANFIS网络的数据集。
要训练ANFIS网络,首先使用anfisOptions
命令。对于本例,使用指定FIS对象7
每个输入变量的隶属度函数。培训系统150
禁止“命令窗口”显示训练信息。
opt = anfisOptions;opt.InitialFIS = 7;opt.EpochNumber = 150;opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;
使用第一组训练数据训练ANFIS系统,data1
.
disp (——>培训第一个ANFIS网络)
——>培训第一ANFIS网络。
Anfis1 = anfis(data1,opt);
改变输入隶属函数的数量,并使用第二组训练数据训练ANFIS系统,data2
.
disp (——>培训第二个ANFIS网络。)
——>训练第二个ANFIS网络。
opt.InitialFIS = 6;Anfis2 = anfis(data2,opt);
在本例中,输入隶属度函数的数量和训练周期的选择是基于对不同潜在值的实验。
anfis1
而且anfis2
表示两个经过训练的ANFIS网络,将部署在更大的控制系统中。
一旦训练完成,两个ANFIS网络已经学会了近似角度(θ₁
,θ
)作为坐标的函数(x
,y
).使用模糊方法的一个优点是,ANFIS网络现在可以近似计算与训练时相似但不完全相同的坐标的角度。例如,经过训练的ANFIS网络现在能够逼近训练数据集中包含的两点之间的坐标角度。这将允许最终控制器在输入空间中平稳地移动手臂。
我们现在有两个训练有素的ANFIS网络,准备部署到更大的系统中,利用这些网络来控制机械臂。
验证ANFIS网络
训练完网络后,一个重要的后续步骤是验证网络,以确定ANFIS网络在更大的控制系统中的表现如何。
由于这个示例问题处理的是一个两关节机械臂,其逆运动学公式可以推导出来,因此可以用推导公式的答案来测试ANFIS网络生成的答案。
假设对ANFIS网络来说,在工作范围内具有低误差是很重要的0 < x < 2
而且8 < y < 10
.
X = 0:0.1:2;% x坐标用于验证Y = 8:0.1:10;% y坐标用于验证
的θ₁
而且θ
数值是用逆运动学公式从x和y坐标推导出来的。
[X,Y] = meshgrid(X,Y);c2 = (x ^2 + y ^2 - l1^2 - l2^2)/(2*l1*l2);S2 =√(1 - c2.^2);THETA2D = atan2(s2,c2);% theta2被推导出来K1 = l1 + l2.*c2;K2 = l2*s2;THETA1D = atan2(Y,X) - atan2(k2,k1);% theta1被推导出来
THETA1D
而且THETA2D
变量是否包含的值θ₁
而且θ
利用运动学逆公式推导。
θ₁
而且θ
使用该命令获得训练后的ANFIS网络预测的值evalfis
它为给定的输入计算FIS。
在这里,evalfis
是用来找出FIS输出相同的x-y值在前面的逆运动学公式中使用。
Xy = [x (:) y (:)];THETA1P = evalfis(anfis1,XY);% theta1由anfis1预测THETA2P = evalfis(anfis2,XY);% theta2由anfis2预测
现在,我们可以看到FIS输出相对于推导出的值有多接近。
theta1diff = THETA1D(:) - THETA1P;theta2diff = THETA2D(:) - THETA2P;Subplot (2,1,1) plot(theta1diff) ylabel(“theta1d - theta1p”)标题(推导-预测) subplot(2,1,2) plot(theta2diff) ylabel(theta2d - theta2p)标题("推导-预测")
错误在1 e - 3
范围,这对于应用程序来说是一个相当不错的数字。但是,对于另一个应用程序,这可能是不可接受的,在这种情况下,参数为简称anfis
可以对函数进行调整,直到达到可接受的解决方案。此外,还可以探索其他技术,如输入选择和建模问题的替代方法。
围绕训练过的ANFIS网络构建解决方案
现在给定一个特定的任务,比如机器人在装配线上捡起一个物体,更大的控制系统将使用经过训练的ANFIS网络作为参考,很像一个查找表,以确定手臂的角度必须是什么,给定手臂尖端的理想位置。知道了所需的角度和关节的当前角度,系统将对手臂的关节施加适当的力,将它们移动到所需的位置。
的invkine
命令启动一个GUI,显示了当被要求跟踪一个椭圆时,两个经过训练的ANFIS网络的表现。
图4:逆运动学建模的图形用户界面。
示例中使用的两个ANFIS网络已经过预训练,并部署到一个更大的系统中,该系统控制两个关节机器人手臂的尖端,以跟踪输入空间中的椭圆。
要跟踪的椭圆可以四处移动。将椭圆移动到稍微不同的位置,通过将机械臂的尖端从当前位置移动到椭圆新位置的最近点,观察系统如何响应。还可以观察到,只要要跟踪的椭圆位于表示用于训练网络的数据网格的“x”标记点内,系统就会平滑地响应。一旦椭圆被移动到它训练的数据范围之外,ANFIS网络的反应不可预测。这强调了拥有相关和有代表性的培训数据的重要性。数据必须基于预期的操作范围来生成,以避免这种不可预测性和不稳定性问题。