RostockDeltaKinematics中译全文剖析.docx
《RostockDeltaKinematics中译全文剖析.docx》由会员分享,可在线阅读,更多相关《RostockDeltaKinematics中译全文剖析.docx(31页珍藏版)》请在冰豆网上搜索。
RostockDeltaKinematics中译全文剖析
JohannC.Rocholl(Rostock)Style
Delta机器人运动学
bySteveGraves
前言
首先我要感谢JohannRocholl所做出的贡献,虽然我们未曾谋面,但本文所写出的大部分内容都要归功于他。
例如,本文所有的Rostock图都是通过他的OpenSCAD模型的修改版本生成的,他的Marlin代码也是我验证此概念的依据。
然后,我要感谢他创造了现在最好的DIY3D打印机。
顺便说一句,我自己并没有delta3D打印机,我只有一台型号非常老的cartesian打印机。
这个月,我已经在迫不及待地计划为KosselClear(delta3D打印机项目,由BlueEagleLabs出资)搭建Kickstarter众筹平台。
引言
这是我对Rostock打印机中应用delta机器人的形态的分析报告,已经出版的此类分析报告我还没有看到过,但有一个叫Clavel的人在研究原始delta机器人。
我意识到对Rostock进行协调转化的固件已经唾手可得,并且我在网上查找的时间如果够久,我也能够找到此种转化的一些描述,可是,我喜欢独自理解事物。
我的哲学是,如果一个问题是我能够自己解决的,那么在读现成答案之前我会自己寻找答案。
这种方式让我有更多启发,使我不会受已经被接受的观念所影响而产生偏见,我可以得出看待问题的不同方法而不是现有解。
例如,我使用外心研究正向运动学的方法可能很独特,因为那是我自己想出来的。
一旦你解析了它,这就是一个相当简单的几何问题。
那么,描述几何并定义几何公式就显得很重要了,部分的几何描述也就是建立命名规则。
Delta机器人有三个导轨(Rostock打印机使用一对杆,如图1灰色部分),我们叫这些导轨A、B和C。
每个列都有一个滑座(图1黄色部分)可以沿导轨上下移动,每个滑座有2个平行臂(图1蓝色部分)与运动平台(图1绿色部分)连接,每对臂长度相同,每个滑座与机器人底面的连接都是准确平行的。
底面也被称为“床”(图1红色部分)。
为了让臂之间平行,每个滑座和运动平台连接点的间距是相等的。
图1
首先我发现它的一部分几何设计遵循了比例绘图器的原理。
平行臂并不仅仅彼此平行,他们也使得运动平台的边缘与滑座的连接点平行,我们可以从图2机器人的俯视视角得知。
因为3个滑座的连接点都是与“床”平行的,所以运动平台所在平面也肯定与“床”平面是平行的,换而言之,连接滑座与运动平台的平行臂使得平台平面与“床”平面平行了。
我曾看见有人质疑平行臂,这下你知道它们为什么存在了吧。
我认为,平行臂最大的好处就是使运动平台与“床”平行了。
而且因为运动平台边缘与滑座连接点平行,运动平台与滑座上相应点的间距也是一样的,所以,为方便数学处理,我们可以选择一条连接平台边缘中点和相应滑座连接中点的线,我们可以使用这条线完成大部分的计算。
我们把它叫做我们的运动线,线的一端正好处于平台枢轴点中点,另一端正好处于滑座枢轴点中点,当我们提到滑座和平台,这些点就是我们所提及的。
例如,滑座离“床”的高度就是“床”到相应点的距离,滑座离平台的高度就是平台与滑座相应点的垂直距离。
总之,数学处理可以仅仅基于这条连接滑座与平台的运动线,因为平行臂实现了围绕这条线的几何方向。
图2
有一些简化的假设要提出。
首先,我们假设这些列构成了一个等边三角形,这不是必需的,也可以是一个不等边三角形,但是这种假设简化了数学运算,使我们可以用单一变量代表列间距,列的间距两两相等,我们叫这个变量为间距S(三角形的边)。
这个假设也使我们能选择一个所有列距原点相等的坐标系,注意,这些列可以被点表示。
在Rostock模型中每个列表示成的点处于2个杆的中点。
接下来,我们将假设3对臂都是相同长度,我们叫它长度L。
我并不认为假设列间距相同或者臂长相同是必需的,即使列距不同或臂长不同,通过数学计算也能解决。
这些不同改变了工作区域的覆盖形状,而这也许能成为机器人打印专门对象(一座房屋?
)的一种优势。
下个一假设是,喷头被精确安装在平台正中心。
我们把运动线与平台边缘交点到平台中心的距离叫做E,喷头底部挤压点的坐标叫做X、Y和Z,平台中心点正好位于挤压点上方,它与喷头有着相同的X、Y坐标。
正如以上讨论那样,我们将测量每个滑座的高度,即运动线终止于连接点的长度。
我们把每个滑座离平台的高度叫做Acz、Bcz和Ccz,把滑座离“床”的高度叫做Az、Bz和Cz,把喷头从载体底部延伸的距离叫Hcz,喷头离“床”的高度叫Z。
那么有Az=Z+Acz+Hcz,Bz=Z+Hcz,Cz=Z+Ccz+Hcz,这就使我们简化了问题。
我们能从已知的X、Y平面推导出公式去掉方程里的Z,然后将平面转换到任意Z坐标。
我们只需要关注Acz、Bcz和Ccz,因为它们全部与平台相关,所以我们能计算平台平面中的X、Y坐标。
Az=Z+Acz+Hcz
Bz=Z+Bcz+Hcz
Cz=Z+Ccz+Hcz
SolvingforZ
Z=Az-Acz-Hcz
Z=Bz-Bcz-Hcz
Z=Cz-Ccz-Hcz
以上结论促使我们讨论Z轴。
如果有人将所有滑座向上移动同样距离,那么他会发现在几何上只改变了头部的Z坐标,所以Z坐标直接与滑座高度(Az、Bz和Cz)相关,这些同样由以上方程表现出来。
对Z坐标的观察可以得知,Acz、Bcz和Ccz只取决于X、Y。
接下来得讨论一下逆运动学。
逆运动学
逆运动学是软件控制打印机的方程基础。
它使用给定的X、Y、Z坐标,通过计算滑座位置(Az、Bz、Cz)来使机器人运动到这些坐标上。
图3
现在我们需要定义坐标系。
我们要选择一个原点位于“床”中心的笛卡尔坐标系。
我们把列A放在距原点R+Aey+Acoy的Y轴正向上,其他列在以同样距离为半径的圆上,相互成120°角,列B从上方看呈顺时针120°角,列C从列B顺时针旋转120°角或者从列A逆时针旋转120°。
臂与垂直线形成的一个直角三角形和第三条腿都位于平台平面内,观察到这些可以推导出一组重要的方程。
现在我们需要理解第三条腿是如何与平台中心的X、Y点联系起来的。
我的第一想法是运动线穿过平台中央,但实际上并不是,运动线是垂直于平台边缘的。
因为平台边缘是平行于滑座连接点的,平台上的线在X、Y平面上处于同一方向,这是固定的矢量,我们叫它们为Ae、Be和Ce。
通过我们的定义,它们全部有相同的长度而且方向由对应列的方位确定。
由于矢量加法的交换性,我们可以将这些矢量从弧的末端移动到列的位置上,这使枢纽点改变到了虚拟列位置,这些兴趣点形成一个圆弧,简化了运动算法的计算量。
所以从平台边缘到中心的距离将成为软件初始化时的一个常量。
图4
现在确定我们可以从通过各个机械臂所形成的直角三角形在X-Y平面垂直上升(虚拟列)和行走中获得何种公式。
我们将三角形在XY平面行走的距离(效应器平台的边缘到支架轴心底下的点)称为Ad,Bd和Cd。
通过使用Pythagorian定理我们得到了一下的公式:
Ad^2+Acz^2=L^2
Bd^2+Bcz^2=L^2
Cd^2+Ccz^2=L^2
现在让我们将列与X,Y平面联系起来。
首要的事情是要描述A,B和C列在X,Y平面的基础位置。
我们将称这些物理位置为Ax,Ay;Bx,By;Cx,Cy。
通过观察我们可以发现,实际轴心点均在支架上每条终止了的作用线之下。
我们可以通过减去一个来自每个表示支架弥补的列向量来计算出这些位置。
我们将称这些轴心的位置为Apx,Apy;Bpx,Bpy;Cpx,Cpy。
我们现在将使用这些值,但在之后,我们可以通过移动这些位置到虚拟列位置来减少位置数字。
对于这种分析,我们保持Z不变,这样我们就可以在一个给定的XY平面上限制住效应器平台。
每一列轴心的作用线围绕着支架上的点。
当支架在效应器平台以上的一个给定高度时,这个在XY平面上可能的位置即效应器平台的边缘,满足在给定作用线上是一个围绕着轴心点的弧形。
如果向量Ae,Be和Ce为零,并且作用线在效应器平台的中心,我们的XY坐标将成为这些弧形的交点。
但当Ae,Be和Ce不为零,这些问题会更加复杂。
让我们做一些等式将Ae,Be和Ce与我们的XY坐标联系起来。
让我们称这些作用线满足效应器平台的坐标为Acx,Acy;Bcx,Bcy;Ccx,Ccy。
我们知道向量可以通过deltaX和deltaY来表示,所以我们将这些向量分解为Aex,Aey;Bex,Bey;Cex,Cey。
我们将定义这些向量从效应器平台的边缘指向其中心。
因此我们有一下公式:
X=Acx-Aex=Bcx-Bex=Ccx-Cex
Y=Acy-Aey=Bcy-Bey=Ccy-Cey
基于我们上面讨论的在弧形上移动的作用线。
一个圆的公式是(X-CX)^2+(Y-CY)^2=CR^2。
在这里,CX、CY是圆心而CR是半径。
我们应该能够解决这一列的等式,并且通过相似点确定另外两个。
所以看列A。
(Acx-Apx)^2+(Acy-Apy)^2=Ad^2
解出上面的Acx和Acy并替代,我们得出:
Acx=X+Aex
Acy=Y+Aey
(X+Aex-Apx)^2+(Y+Aey-Apy)^2=Ad^2
我们看见一个简式,我们可以将这个圆的轴心点视为Apx-Aex,Apy-Aey。
我们将称这个点为Avx,Avy。
我们将作出如下定义:
Avx=Apx-Aex
Avy=Apy-Aey
Bvx=Bpx-Bex
Bvy=Bpy-Bey
Cvx=Cpx-Cex
Cvy=Cpy-Cey
这些都是我们“虚拟”列的位置。
这些位置可以在初始化时在软件里被计算出来,然后用到之后所有的计算中。
我们在图5和6展示了这些虚拟列。
我们也展示了在作用线上的单一机械臂。
所有图六是我们的数学模型的一个物理表示。
这些机械臂在X,Y坐标上并在虚拟列上一个支架弥补加效应器弥补远离物理列位置的位置。
这就是我们将运用在硬件中的模型。
图5
图6
现在用我们简化的模型,我们有一下的公式:
(X-Avx)^2+(Y-Avy)^2=Ad^2=L^2-Acz^2
解出Acz
Acz^2=L^2-(X-Avx)^2-(Y-Avy)^2
Acz=sqrt(L^2-(X-Avx)^2-(Y-Avy)^2)
通过求效应器平台以上的支架高度的相似度公式,得出Bcz和Ccz为:
Bcz=sqrt(L^2-(X-Bvx)^2-(Y-Bvy)^2)
Ccz=sqrt(L^2-(X-Cvx)^2-(Y–Cvy)^2)
我们想要的真实值是基底上每个支架的距离。
这些公式在上面已经给出。
这里将它们再次写出:
Az=Z+Acz+Hcz
Bz=Z+Bcz+Hcz
Cz=Z+Ccz+Hcz
这些都是运用在软件中逆向运动学的公式。
现在让我们来检测这些公式的有效性。
如果我们有一些列安置在一个圆上,那么这些虚拟列则位于圆心0开始的半径R上,0和一根脚(A)在Y轴上,我们就得出以下公式:
Avx,Avy=>0,R
Bvx,Bvy=>R*sin(30),-R*cos(30)=R/2,-R*sqrt(3)/2
Cvx,Cvy=>-R*sin(30),-R*cos(30)=-R/2,-R*sqrt(3)/2
所以
Acz=sqrt(L^2-(X-Avx)^2-(Y-Avy)^2)=
sqrt(L^2-(X-0)^2-(Y-R))^2)
Bcz=sqrt(L^2-(X-Bvx)^2-(Y-Bvy)^2)=
sqrt(L^2-(X-R/2)^2-(Y+R*sqrt(3)/2)^2)
Ccz=sqrt(L^2-(X-Cvx)^2-(Y-Cvy)^2)=
sqrt(L^2-(X+R/2)^2-(Y+R*sqrt(3)/2)^2)
L和R为已知的常数,你将它们和所需的X,Y插入到这些公式中,然后得出Acz,Bcz和Ccz。
因此对于X,Y=>0,0我们可以确定Acz,Bcz和Ccz,它们应该是相等的。
在这三个等式中唯一不同的是:
-(X-Avx)^2-(Y-Avy)^2
-(X-Bvx)^2-(Y-Bvy)^2
-(X-Cvx)^2-(Y-Cvy)^2
如果我们设置X和Y为0,然后乘以-1,这些等式就会被重写为:
Avx^2+Avy^2
Bvx^2+Bvy^2
Cvx^2+Cvy^2
如果这些条件是相等的,这些方程就等于:
Avx^2+Avy^2=0+R^2=R^2
Bvx^2+Bvy^2=(R/2)^2+(-R*sqrt(3)/2)^2=(R^2)/4+(R^2*3)/4
分解因子然后结合得:
(4*R^2)/4=R^2
Cvx^2+Cvy^2=(-R/2)^2+(-R*sqrt(3)/2)^2=(R^2)/4+(R^2*3)/4
分解因子然后结合得:
(4*R^2)/4=R^2
这些等式都是相等的,在这种情况下我们的公式是有效的。
正向运动学
正向运动学是当给定支架位置时,用来确定效应器平台X-Y-Z坐标的公式。
它们比逆向运动学要更难一些。
我们的数学模型所使用的虚拟列位置仍然有用。
如果我们使用虚拟列将效应器平台的中心定位为距离虚拟列上每个支架位置为L的点。
这里给出以下等式:
(X-Avx)^2+(Y-Avy)^2+Acz^2=L^2
(X-Bvx)^2+(Y-Bvy)^2+Bcz^2=L^2
(X-Cvx)^2+(Y-Cvy)^2+Ccz^2=L^2
其中Acz,Bcz和Ccz是效应器平台平面上每个支架的高度,它们与Z的关系如下:
Acz=Az-Z-Hcz
Bcz=Bz-Z-Hcz
Ccz=Cz-Z-Hcz
Az,Bz和Cz是给定支架位置的Z分量。
图7
我们有三个方程和3个未知数,但平方使这些困难的方程得到解决。
我们需要找到一个参照系简化问题。
通过这三个点的虚拟托架位置形成一个可行的框架(如绿色图7所示)。
如果我们转移到支架,我们会发现,一个法向量穿过执行器平台位置的平面也通过由三个点形成的三角形的外心。
三角形的外心是三边垂直平分线的交点。
效应器的中心与这三个托架的位置形成一个四面体,其中增量臂形成四面体和由滑架的位置形成的三角形的三个边是一个不规则的金字塔的基座。
这金字塔的侧面是等边三角形。
根据定义,线是成直角等边三角形的基座中位点经历的顶点三角形。
图8
图9
现在,我们可以用公式来找到外心点。
从维基百科条目“外接圆”我们有以下几点:
基于交叉和点产品的中心坐标
在欧几里德空间中,有一个独特的圆经过任何给定的三个非共线的点P1,P2,和P3。
使用笛卡尔坐标来表示这些点作为空间矢量,以使用点积和交叉产品来计算圆的半径和中心。
让
然后该圆的半径由下式给出
圆的中心由线性组合给出
由于
我们可以用这些公式得出的代码。
下面是使用这个公式的一个Java程序。
在我们发现外心点后,我们发现沿法线向量到笛卡尔点的距离。
然后我们可以对外心点添加适当大小的法向矢量而找到我们的笛卡尔点。
double[]forwardKinematics(double[]dZ){
double[]cartesian=newdouble[3];
double[][]dColP=newdouble[3][3];
//结合的输入的Z值为每列创建从X-Y的三个点
for(intiIdx=0;iIdx<3;iIdx++){
dColP[iIdx][0]=dCol[iIdx][0];
dColP[iIdx][1]=dCol[iIdx][1];
dColP[iIdx][2]=dZ[iIdx];
}
//dColP现在已经有三个点在列上。
计算矢量来表示三角形的边。
double[]dv01=vectorSub(dColP[1],dColP[0]);
double[]dv02=vectorSub(dColP[2],dColP[0]);
double[]dv12=vectorSub(dColP[2],dColP[1]);
doubledMag01=vectorMag(dv01);
doubledMag02=vectorMag(dv02);
doubledMag12=vectorMag(dv12);
//这为我们提供了一个矢量垂直于三角形的平面
double[]dvZ=vectorCrossProd(dv02,dv01);
doubledMagZ=vectorMag(dvZ);
doubledDeterminate=2*Math.pow(dMagZ,2);
doublealpha=Math.pow(dMag12,2)*vectorDotProd(dv01,dv02)/dDeterminate;
doublebeta=-Math.pow(dMag02,2)*vectorDotProd(dv12,dv01)/dDeterminate;
doublegamma=Math.pow(dMag01,2)*vectorDotProd(dv02,dv12)/dDeterminate;
double[]pCircumcenter=
vectorAdd(vectorMult(dColP[0],alpha),vectorMult(dColP[1],beta));
pCircumcenter=vectorAdd(pCircumcenter,vectorMult(dColP[2],gamma));
double[]dvCircumcenter=vectorSub(pCircumcenter,dColP[0]);
//找到从外心到托架点上一列的长度(任何列通过外心定义的距离是相的)
doubledMag2Circumcenter=vectorMag(dvCircumcenter);
//现在使用Pythagoremtheorum计算距离
doubledZLen=
Math.sqrt(Math.pow(dArmLen,2)-Math.pow(dMag2Circumcenter,2));
//创建新的载体,并把它添加到外心点
cartesian=vectorAdd(pCircumcenter,vectorMult(dvZ,dZLen/dMagZ));
returncartesian;
}
更多增量分析
由于我们有公式正向和反向运动学的公式,我们就可以回答一些经常被提及
的问题。
两个最常见的问题是:
“什么是印刷区域的形状?
”和“如何解决车厢位置的误差影响执行器的位置?
”为此我写了一个创建一个颜色拓扑图的程序来显示打印形状和可能出现的错误。
基于以上的讨论,我们可以分析的X-Y平面,其结果可以被转换为任何其它X-Y平面。
我写了一个程序,引导通过X-Y空间,并使用逆运动学计算需要为X-Y位置的车厢位置。
然后由每一列误差值改变目标值。
这有几种模式。
在多列模式,我尝试错误的所有组合(+,0,-)所有的三列(26组合,27号全为0),并查找最大误差。
在单表模式下我改变在-和+之间的每一列,保持另外两列在0(6组合),并寻找最大误差。
我也有一些其他的方式,他们分别是:
X轴误差,Y轴误差,Z轴误差,X-Y平面误差和X-Y-Z空间误差。
有关Z.的说明。
尽管我们的工作在一个给定的Z平面,所产生的车厢位置会造成效应器离开了飞机。
因此Z错误。
进一步讨论错误是需要的。
我试图做一些这方面的研究,但我还没有发现任何事物让我觉得我能够处理这个问题。
所以,我不觉得能胜任这个讨论,但在这里不用。
作为一名工程师,我在任何情况下进行测量都会想到一个概率分布。
在许多情况下,人们会近似与高斯函数的概率分布相接近。
但以我的思维,机制的类型决定了错误。
例如,一个梯形螺杆,肯定会有一些间隙。
一方面,几乎可以肯定会有一些错误。
这样的误差分布不一定集中在0附近以及不是高斯概率分布。
另一方面,在DIY三维打印机中使用的皮带驱动器可能具有一个错误,它更多分布在0附近以及分布更可能是高斯概率分布。
我提到这一点,是因为当我们分析在三角洲的错误时,我们必须考虑到,有三个来源会造成错误。
一种能够在基于所有三列的最大误差的给定点计算最大误差,但要知道,误差分布发生了变化。
例如,如果有10%的概率在给定列中的最大误差,则最大误差在所有三列的几率为10%*10%*10%(0.1*0.1*0.1*100)或0.1%。
但在梯形螺杆中,该错误更可能发生的情况下,多列错误具有更多的意义。
所以,我创建了两个模式的测量误差。
与往常一样,事实是介于两者之间。
由于每个图像都有自己的颜色图例。
为每个组计算的误差范围被划分成10个区域,并分配在底部所示的颜色的图例中。
第一套图像的价值是由约翰的马林码值得来的。
虚拟半径124毫米和臂长为250mm。
继第一套图像显示了各种错误模式,有一些图片显示了打印区域的不同手臂和半径的组合图像。
这些模式将大规模基于手臂和半径之间的比率。