PMAC在同一坐标系下可以做到X、Y、Z、U、V、W、A、B、C-9轴联动(PMAC的培训材料上说的),请问前辈:
1、这9个轴是否可以同时是绝对坐标?(因为U、V、W一般是增量坐标形式) 或同时都是增量坐标?;在同一行指令中他们可以既有绝对坐标也有增量坐标吗?
2、若我做X、Y、Z、A、B五轴联动,比如直线插补命令下(X=100 Y=150 Z=185 A=50 B=130)是否指的是:X、Y、Z做三轴直线插补与此同时,A轴和B轴做同步的匀速旋转?(其实对应的5个电机都在做匀速同步旋转?)
3、PMAC可否不通过坐标系而直接指定两个电机反向同步?某些时候同步,某些时候取消同步。若一定要通过坐标系来指定,有没有一条指令可以直接指定一个轴与另一个轴反向同步(大小相等,方向相反),指定完后在程序中就无需再出现这个轴,运动中直接联动!?
4、在两个不同坐标系下的轴可以做到精确同步吗?例如在坐标系1中:X=100,在坐标系2中:Y=200,是否等同于2轴直线插补?
谢谢!
1、这里的这个U、V、W不是指的坐标形式是增量式,而是指的另外三个分别平行于X、Y、Z轴的伺服轴;同样A、B、C也是指的分别按照右手螺旋法则规定旋向的三个分别绕X、Y、Z轴的旋转伺服轴。因此并非你说的“在同一行指令中他们可以既有绝对坐标也有增量坐标”
2、“X=100 Y=150 Z=185 A=50 B=130”这只是个坐标值,不是插补指令啊
3、“有没有一条指令可以直接指定一个轴与另一个轴反向同步(大小相等,方向相反),指定完后在程序中就无需再出现这个轴,运动中直接联动!? ”------用镜像指令可以实现你的这个要求,不过这是模态的指令
4、没看明白,并没有指定新的坐标系啊!“例如在坐标系1中:X=100,在坐标系2中:Y=200”看起来只是同一个坐标系中的2个伺服轴坐标,如果你当前的坐标位置为已经值得过的坐标系的原点,那么指令 “G17 G01 X100. Y200. FXXXX ”就是走的直线,这时候是的伺服轨迹是一条直线(当然有一定的误差,不可能是绝对的直线),这期间X、Y轴间是按照速度1:2速度协调插补的,不知道这是否就是你说的“同步”?
引用jamesyoung77 的回复内容:2. 楼主理解正确,不光速度成比例,加速度也成比例;
3. 可以,只需要把一马达设为主马达,另一个设为从马达,并把Ixx07变量设为-96就可以了;Ixx07可以确定方向和比例,其实就是电子齿轮功能; 其实如果你不介意用坐标系的话,也可以做类似如下的映射: #1->1000X, #2->-1000X;这样以后你只需要发送X指令,马达1和2可以做你所要的运动;
4. 分属不同坐标系的马达不可以做精确联动,也没有意义;但是你要实现的联动有多种方法,最基本的就是用电子齿轮和坐标系;
谢谢jamesyoung77兄!再请问:
1 PMAC在同一坐标系下,单个指令行内的坐标是否要么为绝对坐标(用ABS指定)要么为增量坐标(用INC指定)?不会出现绝对坐标和增量坐标混用的情况?
2 你所说的坐标系下的反向同步方法可否在运动程序中随时改变电机与轴的映射,比如我在a段时间里需要反向同步,就做映射: #1->1000X, #2->-1000X;b段时间里把它就做一个独立控制的轴,于是在运动程序中直接改映射映射: #2->2000U;这样可以吗?
3.1 我想用IMAC FLEX控制做一个5轴联动机器人(三个旋转轴A、B、C两个移动轴U、V),我把我的IMAC FLEX控制构思说一下,请你给看看是否行得通:
假设一般情况下电机与轴的映射为:#1->1000A, #2->2000B,#3->1500C, #4->1000U,#5->3000V
情况1:电机与轴的映射同上,各轴间无反向同步要求,则首先用反向运动学做X、Y、Z轴对A、U、V的逆解映射(A=f(X、Y、Z);U=f(X、Y、Z、B);V=f(X、Y、Z、B))----实际上是X、Y、Z对柱坐标A(对应柱坐标THETA)、U(对应柱坐标R)、V(对应柱坐标Z)的映射,不过在U(R)的移动臂上嫁接了一个上下方向的摆动臂(B轴),摆动臂的末端是目标坐标点,对应机器坐标系X、Y、Z的坐标,因此不同的摆臂角度会影响到逆解的U(对应柱坐标R),V(对应柱坐标Z)值;然后发线性运动指令例如:X=100 Y=200 Z=300 B=150 C=120,是否就可实现对A、B、C、U、V轴的5轴联动驱动,同时A、U、V和B轴的联动结果为X、Y、Z三轴直线插补(这里B轴做为一个已知的输入参与对U、V轴的逆解映射运算)?
情况2:在某些时间段要求轴A和轴C反向同步,则在运动程序中更改电机3的映射为:#3->-1000A,其他不变,送入线性运动指令如X=100 Y=200 Z=300 B=150 ,实现A、B、C、U、V轴的5轴联动驱动,其中A、C轴反向同步,A、B、U、V轴联动实现XYZ三轴直线插补效果。
以上构思是否可行?
3.2 做了逆解映射后,除了发X=100 Y=200 Z=300 B=150 外,在不解除逆解映射的情况下,是否还可以再直接发真实轴的指令,如A=100 U=200 V=300 B=150 ?
3.3 另外还想请问一下:通过逆解映射得到的A坐标运动,在某一时刻其具体值(位置)是多少能否读出(以便其他轴做同步时参考,如果用上位机做等效逆解的值恐怕与PMAC的逆解值有误差)?即通过上位机可否在任意时刻读取各坐标轴的实际位置(如果任意时刻不行,那么未做插补运算的时刻可否?)上位机能读到电机编码器的值吗?
谢谢!
看到了手册上264页反向运动学的例程,请问这段程序是否就是X、Y坐标逆解映射到机器人的两个旋转轴的逆解映射程序段?
Q7、Q8两个变量无需指定就已经默认地代表了X、Y轴?
P1、P2变量无需指定就就天然代表马达1和马达2的位置?算出了P1、P2的值就得到了机器人两个旋转轴的角位移值?
要使用逆解映射功能,是否是在运动程序开始部分就写下类似例程的代码,在其后的运动程序中是否只要有X100 Y200运动命令,就会自动将100、200的实时插补位置通过Q7、Q8两个变量送到逆向运动学缓冲区,计算出P1、P2两个变量驱动机器人的两个旋转轴?
; Setup for program
&1
#1->I ; Motor 1 assigned to inverse kinematic axis in CS 1
#2->I ; Motor 2 assigned to inverse kinematic axis in CS 1
M5182->Y:$00203F,22,1 ; CS 1 run-time error bit
; Pre-compute additional system constants
Q94=Q91*Q91+Q92*Q92 ; L1^2 + L2^2
Q95=2*Q91*Q92 ; 2*L1*L2
Q96=Q91*Q91-Q92*Q92 ; L1^2 – L2^2
; Inverse-kinematic algorithm to be executed repeatedly
&1 OPEN INVERSE ; Inverse kinematics for CS 1
CLEAR ; Erase existing contents
Q20=Q7*Q7+Q8*Q8 ; X^2+Y^2
Q21=(Q20-Q94)/Q95 ; cos(B)
IF (ABS(Q21)<0.9998) ; Valid solution w/ 1 deg margin?
Q22=ACOS(Q21) ; B (deg)
Q0=Q7 ; X into cos argument for ATAN2
Q23=ATAN2(Q8) ; A+C = ATAN2(Y,X)
Q24=ACOS((Q20+Q96)/(2*Q91*SQRT(Q20))) ; C (deg)
Q25=Q23-Q24 ; A (deg)
P1=Q25*Q93 ; Motor 1 = 1000A
P2=Q22*Q93 ; Motor 2 = 1000B
ELSE ; Not valid, halt operation
M5182=1 ; Set run-time error bit
ENDIF
CLOSE