一. UVW平台介绍
1、这是一种可以实现以平面上任意一点为中心,进行旋转运动的装置,并可沿着任意的方向平移。
2、此平台和视觉CCD纠偏系统对接在一起,可以很快完成高精度的纠偏工作,重复定位精度一般可达±1μm;
UVW平台和以前的xyθ平台相比,有以下几点不同:
1、控制精度高于xyθ平台;
2、UVW平台可以平面上任意一点为中心做旋转运动(包括无限远);而xyθ平台由于仅仅依靠一个电机的转动控制,所以旋转中心必须是固定在平台上某处(θ电机连接处),且必须随平台一同运动。
3、基于第二点的区别,显然UVW平台是需要一个绝对坐标系作为参考系,其旋转中心才有意义;而xyθ平台则必须是一个随平台动的坐标系作为参考系,这样控制计算方法便完全不一样了。
相对于XYθ平台采用传统的串联式设计,UVW平台则是采用并联设计,即将3个驱动轴放置于同一平面内,降氏平台厚度和重心,提高承载能力,这样做的好处就是,即便使用普通的步进马达驱动也可以达到较高的精度,通常能做到1个丝以内的精度,咱们这里不讲过多的硬件,只记录软件开发相关的逻辑代码,
二.计算方法
下述算法由平台相对移动量可算出各执行器(U、V、W)的移动量。
回转中心(at,bt)指的是相对于底座的绝对坐标。
【算法所需的值】
各执行器pin 的初始坐标(固有值)
U执行器:(Ux,Uy)
V执行器:(Vx,Vy)
W执行器:(Wx,Wy)
回转中心 :(at,bt)
现台面位置 (绝对坐标):(X,Y,θ)
台面移动量 (相对坐标) :(X´,Y´,θ´)
【算式】
U执行器移动量
St(u)=((Ux-at)×(sin(θ´+θ)tan(θ´+θ)+cos(θ´+θ))+(bt+(Y´+Y)-Uy)× tan(θ´+θ)+at+(X´+X)-Ux)-((Ux-at)×(sinθtanθ+cosθ)+(bt+Y-Uy)×tanθ+at+X-Ux)
V执行器移动量
St(v)=((Vy-bt)×(sin(θ´+θ)tan(θ´+θ)+cos(θ´+θ))+(Vx-at-(X´+X))×tan(θ´+θ)+bt+(Y´+Y)-Vy)-((Vy-bt)×(sinθtanθ+cosθ)+(Vx-at-X)×tanθ+bt+Y-Vy)
W执行器移动量
St(w)=((Wy-bt)×(sin(θ´+θ)tan(θ´+θ)+cos(θ´+θ))+(Wx-at-(X´+X))× tan(θ´+θ)+bt+(Y´+Y)-Wy)-((Wy-bt)×(sinθtanθ+cosθ)+(Wx-at-X)×tanθ+bt+Y-Wy)
移动后台面位置的绝对坐标
X=X (移动前 X 绝对坐标) +X´
Y=Y (移动前 Y 绝对坐标) +Y´
θ=θ (移动前θ绝对坐标) +θ´
【参考例】
依照表①~④顺序,求得台面移动时各执行器(U、V、W)的移动量。
设置回转中心(at,bt)为(10mm、20mm)。
① 的台面位置视为原点位置。
『从①向②移动』
U执行器相对移动量
St(u)=((67.5-10)×(sin(1+0)tan(1+0)+cos(1+0))+(20+(2+0)-(-59))× tan(1+0)+10+(1+0)-67.5)-((67.5-10)×(sin0tan0+cos0)+(20+0-(-59))×tan0+10+0-67.5)=2.4226mm
V执行器相对移动量
St(v)=((67.5-20)×(sin(1+0)tan(1+0)+cos(1+0))+(-59-10-(1+0))× tan(1+0)+20+(2+0)-67.5)-((67.5-20)×(sin0tan0+cos0)+(-59-10-0)×tan0+20+0-67.5)=0.7853mm
W执行器相对移动量
St(w)=((67.5-20)×(sin(1+0)tan(1+0)+cos(1+0))+(59-10-(1+0))× tan(1+0)+20+(2+0)-67.5)-((67.5-20)×(sin0tan0+cos0)+(59-10-0)×tan0+20+0-67.5)=2.8451mm
向②移动时的台面位置 (绝对坐标)
X= 0 + 1 = 1mm
Y= 0 + 2 = 2mm
θ= 0 + 1 = 1°
『②向③移动』
U执行器相对移动量
St(u)=((67.5-10)×(sin((-2)+1)tan((-2)+1)+cos((-2)+1))+(20+(1+2)-(-59))×tan((-2)+1)+10+(2+1)-67.5)-((67.5-10)×(sin1tan1+cos1)+(20+2-(-59))×tan1+10+1-67.5)=-0.8452mm
V执行器相对移动量
St(v)=((67.5-20)×(sin((-2)+1)tan((-2)+1)+cos((-2)+1))+(-59-10-(2+1))×tan((-2)+1)+20+(1+2)-67.5)-((67.5-20)×(sin1tan1+cos1)+(-59-10-1)×tan1+20+2-67.5)=3.4787mm
W执行器相对移动量
St(w)=((67.5-20)×(sin((-2)+1)tan((-2)+1)+cos((-2)+1))+(59-10-(2+1))×tan((-2)+1)+20+(1+2)-67.5)-((67.5-20)×(sin1tan1+cos1)+(59-10-1)×tan1+20+2-67.5)=-0.6408mm
向③移动时台面位置 (绝对坐标)
X = 1 + 2 = 3mm
Y = 2 + 1 = 3mm
θ = 1 + (-2) = -1°
『③向④的移动』
U执行器相对移动量
St(u)=((67.5-10)×(sin(4+(-1))tan(4+(-1))+cos(4+(-1)))+(20+((-4)+3)-(-59))×tan(4+(-1))+10+((-5)+3)-67.5)-((67.5-10)×(sin-1tan-1+cos-1)+(20+3-(-59))×tan-1+10+3-67.5)=0.5893mm
V执行器相对移动量
St(v)=((67.5-20)×(sin(4+(-1))tan(4+(-1))+cos(4+(-1)))+(-59-10-((-5)+3))×tan(4+(-1))+20+((-4)+3)-67.5)-((67.5-20)×(sin-1tan-1+cos-1)+(-59-10-3)×tan-1+20+3-67.5)=-8.7101mm
W执行器相对移动量
St(w)=((67.5-20)×(sin(4+(-1))tan(4+(-1))+cos(4+(-1)))+(59-10-((-5)+3))×tan(4+(-1))+20+((-4)+3)-67.5)-((67.5-20)×(sin-1tan-1+cos-1)+(59-10-3)×tan-1+20+3-67.5)=-0.4663mm
向④移动时台面位置 (绝对坐标)
X = 3 + (-5) = -2mm
Y = 3 + (-4) = -1mm
θ = -1 + 4 = 3°
简单说明一下视觉对位和运动控制思路:
1、通过UVW平台供应商提供的说明书,找到机械参数,得到UVW三个轴的初始坐标(基于UVW平台原点坐标系);
2、通过视觉标定方法,确定相机坐标系到UVW平台坐标系的转换矩阵;确定标志物模板基于UVW平台原点坐标系的坐标值(x_m, y_m);
3、通过相机得到标志物模板位置和待纠偏标志物之间的x、y、θ偏移量(基于UVW平台原点坐标系);
4、按照上图公式,输入三个轴初始坐标,设置旋转中心为(0,0),输入θ偏移量,可得到UVW三轴新的坐标值,以及待纠偏物体的新的坐标,以及三个电机对应的给进量A1、A2、A3;
5、输入上一步求得的UVW三轴新的坐标值,另外通过上一步求得的待纠偏物体的新的坐标,计算得此时待纠偏物体到模板点位置的x2、y2偏移量;输入x2、y2偏移量,则可以得到三个电机对应给进量B1、B2、B3;
6、将5和6步获取的三个电机的给进量对应相加,分别得到对应电机给进量C1、C2、C3,并用此给进量驱动对应电机即可。即是,将运动过程拆解,变成平移和旋转部分,分别计算电机给进量
三. 相关uvw的两个重要转换:
1:将uvw的三个量转换成x,y,和角度:
void CUVW::uvwtoxya(double sU, double sV, double sW, double & tX, double & tY, double & da)
{
//计算角度
double tA = asin((sU - sV) / CRadius / sqrt(2));
double dx1, dx2, dy;//计算角度引起的UVW变更量
dy = CRadius * sin(tA + YAngle) - CRadius * sin(YAngle);
dx2 = CRadius * cos(tA + X2Angle) - CRadius *cos(X2Angle);
dx1 = CRadius * cos(tA + X1Angle) - CRadius * cos(X1Angle);
//计算平移引起的y变更量,即y平移量.
tY = sW - dy;
//计算平移引起的x变更量,即x平移量.
tX = (sU + sV - dx1 - dx2) / 2;
da = tA;// ARG(tA);
}
2:将x,y,角度转换为当前的uvw量:
void CUVW::xyatouvw(double sx, double sy, double sa, double& tU, double& tV, double& tW)
{
double angle;
angle = sa; // DARG(sa);
double dx1, dx2, dy;//UVW变更量计算
dy = CRadius * sin(angle + YAngle) - CRadius * sin(YAngle);
dx2 = CRadius *cos(angle + X2Angle) - CRadius * cos(X2Angle);
dx1 = CRadius * cos(angle + X1Angle) - CRadius* cos(X1Angle);
//double test = Math.Sin(30); 测试,表明需要弧度单位
//UVW变化等于角度引起的变化加上平移引起的变化.
tU = dx1 + sx;
tV = dx2 + sx;
tW = dy + sy;
}