servoj(q, t=0.010, lookahead_time=0.1, gain=300)
The instruction is to real timely control the movement of robot arm. After recieving joint position value every sampling time length in look ahead time window, robot system process this data with mean filter and spline fitting, then get the target joint position data.
Parameter decription:
q: joint type data
t: sampling time
lookahead_time: look ahead time
lookahead/t= data queue length. This parameter is to make the robot run smoothly.
gain: make no sense for now.
If users want to real timley move the robot in a circle , maybe they could program as below:
The script is as below:
def checkPos(p,delta):
# Check the devation between actual current position and expected position, if the deviation in xyz is smaller than delta, return true
p_curr = get_actual_tcp_pose()
if (abs(p_curr[0]-p[0])<delta) and (abs(p_curr[1]-p[1])<delta) and (abs(p_curr[2]-p[2])<delta):
return True
else:
return False
def servojTest(pStart,r):
movel(pStart) #Move to the starting point, which is the on the target circle
pStart[2] = pStart[2] - r # Recorrect the center of circle as the reference point
ptmp = pStart.copy()
sample_t = 0.01 # Sampling time, the speed is related to the sampling time and the variation between every two points
lookahead = 0.1 #lookahead/sampling time = queue length 10
for i in range(0,360):
ptmp[1] = pStart[1]+r*sin(d2r(i))
ptmp[2] = pStart[2]+r*cos(d2r(i))
jtmp = get_inverse_kin(ptmp) #inverse kinematic
servoj(jtmp,sample_t,lookahead) # the time length to execute is sample_t
while not checkPos(ptmp,2):
# if the variation of position data between right now and final one is bigger than 2mm, only the final position data will be sent
servoj(jtmp,sample_t,lookahead)
stopj(3) # the stopping deceleration is 3rad/s2
return True