假设机器人当前TCP和base关系如下左图,希望能让当前tcp的Z方向快速垂直于base的xy平面,则可以运行如下align_tcp.jbi(将程序中的第一行设为SET B000 0)程序实现(无需加载对应lua程序)


NOP
SET B000 0
// B000为0, 当前TCP的Z就近垂直对准base坐标系的xy/yz/xz平面
// B000为1, 当前TCP的Z就近垂直对准当前user坐标系的xy/yz/xz平面
// 要使用对准user坐标系,需要先加载对应align_tcp.lua
GETPOS P000
JOINTTOPOSE P000 V000
IF B000 = 0 THEN
CCOOD CART
SET V000(4) 0
IF V000(3) >-0.785398163 & V000(3) <0.785398163 THEN
SET V000(3) 0
ELSEIF V000(3) >0.785398163 & V000(3) <2.35619449 THEN
SET V000(3) 1.570796327
ELSEIF V000(3) >2.35619449 THEN
SET V000(3) 3.141592654
ELSEIF V000(3) <-0.785398163 & V000(3) >-2.35619449 THEN
SET V000(3) -1.570796327
ELSE
SET V000(3) -3.141592654
ENDIF
POSETOJOINT V000 P000
MOVL P000 V=10.0MM/S PL=0
CCOOD JOINT
ELSE
WAIT B000 = 0
POSETOJOINT V000 P000
MOVL P000 V=10.0MM/S PL=0
CCOOD JOINT
ENDIF
END若机器人当前tcp姿态如下左图,则使用以上对准程序后,tcp的z会和xy平面




若使用user坐标系,机器人当前姿态如上左图,则使用align.jbi(将第一行修改为SET B000 1并且需要将对应align.lua导入机器人并运行起来),机器人的TCP会就近垂直对准当前使用的user的平面(就近原则,也可能如对准Base中的第二种情况,TCP与user平行)
对应lua代码如下:
set_global_variable('B000',0)
sleep(0.1)
while true do
B000 = get_global_variable("B0")
if B000 == 1 then
local V000 = get_tcp_pose_inuser()
local userno = get_user_no()
local user = get_user_frame(userno)
V000[5] = 0
if V000[4] > -0.785398163 and V000[4] < 0.785398163 then
V000[4] = 0
elseif V000[4] > 0.785398163 and V000[4] < 2.35619449 then
V000[4] = 1.570796327
elseif V000[4] > 2.35619449 then
V000[4] = 3.141592654
elseif V000[4] < -0.785398163 and V000[4] > -2.35619449 then
V000[4] = -1.570796327
else
V000[4] = -3.141592654
end
local v_inBase = pose_mul(user, V000)
set_global_variable("V000", v_inBase[1], v_inBase[2], v_inBase[3], v_inBase[4], v_inBase[5], v_inBase[6])
set_global_variable('B000',0)
end
sleep(0.5)
end