If you have not read the information explaining the custom feature, then please refer to this page before reading onwards: Customize the Robot's Path
This page gives a short overview of the variable MovePerformed
; and then a more in depth look at how the variable can be used in Pally:
In Short: MovePerformed
MovePerformedA boolean value that Pally uses to check if it should move the robot with the path created by Pally. This value must be set to Possible values
ExampleIf a
The |
In Detail: MovePerformed
The MovePerformed
variable is only of importance when the custom path feature is in use. If this boolean variable is set to True
, then Pally will skip its planned movements of the robot from the pickup position to the target position (and back again).
In the Pally code, the logic looks like this:
global MovePerformed = False # USERCALLBACK usercallback_afterGrab() if (not MovePerformed): MoveToTarget(path) end
If MovePerformed
is set to True
in the afterGrab-callback, then Pally will not call on the function to move the robot to the target position
global MovePerformed = False # USERCALLBACK usercallback_afterRelease() if (not MovePerformed): MoveFromTarget(path) end
If MovePerformed
is set to True
in the afterRelease-callback, then Pally will not call on the function to move the robot back from the target position
The following example of a customPath.script
shows how the MovePerformed
variable is set to True
at the end of the customized move functions, on lines 80 and 94:
p_boxfree = p[0,0,0,0,0,0] p_boxfree2= p[0,0,0,0,0,0] p_boxfree3= p[0,0,0,0,0,0] p_exit= p[0,0,0,0,0,0] j_exit = [0,0,0,0,0,0] p_approach = p[0,0,0,0,0,0] p_waypoint = p[0,0,0,0,0,0] rf_custom_path = True def MoveToTarget(): if (rf_custom_path): # move up p_boxfree = pose_trans(get_actual_tcp_pose(), p[0,0,-rf_box_free,0,0,0]) # move closer to the robot p_boxfree2= p_boxfree d = sqrt(rf_camera[0] * rf_camera[0] + rf_camera[1] * rf_camera[1]) / sqrt(p_boxfree2[0] * p_boxfree2[0] + p_boxfree2[1] * p_boxfree2[1]) p_boxfree2[0] = p_boxfree2[0] * d p_boxfree2[1] = p_boxfree2[1] * d # move up p_boxfree3= p_boxfree2 if (MoveTarget[2] + ProductHeight > p_boxfree3[2]): p_boxfree3[2] = MoveTarget[2] + ProductHeight end # move away from the conveyor and rotate if (PalletNr == 1): p_exit = pose_trans(p[-0.35, 0, 0, 0, 0, 0], p_boxfree3) else: p_exit = pose_trans(p[0.35, 0, 0, 0, 0, 0], p_boxfree3) end p_exit[3] = MoveTarget[3] p_exit[4] = MoveTarget[4] p_exit[5] = MoveTarget[5] # approach the pallet if (PalletNr == 1): p_approach = pose_trans(p[0.05, -0.05, 0.05, 0, 0, 0], MoveTarget) else: p_approach = pose_trans(p[-0.05, -0.05, 0.05, 0, 0, 0], MoveTarget) end # this may be actual for the top layer: # the approach should be closer than usual to have enough reach if (not is_within_safety_limits(p_approach)): # should not use normally p_approach = MoveTarget end # a waypoint before approach p_waypoint = p_approach if (p_waypoint[2] < p_boxfree[2]): p_waypoint[2] = p_boxfree[2] end if (p_waypoint[2] < MoveTarget[2] + ProductHeight + rf_approach[2]): p_waypoint[2] = MoveTarget[2] + ProductHeight + rf_approach[2] end movel(p_boxfree, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_boxfree, p_boxfree2)) movel(p_boxfree2, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_boxfree2, p_boxfree3)) movel(p_boxfree3, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_boxfree3, p_exit)) movel(p_exit, a=rf_max_acceleration, v=rf_speed, r=0.01) j_exit = get_actual_joint_positions() if (is_within_safety_limits(p_waypoint)): movej(p_waypoint, a=rf_max_acceleration, v=rf_speed, r=0.01) movel(p_approach, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_approach, MoveTarget)) else: movej(p_approach, a=rf_max_acceleration, v=rf_speed, r=0.01) end movel(MoveTarget, a=rf_precise_acceleration, v=rf_precise_speed, r=0) MovePerformed=True end end def MoveBack(): if (rf_custom_path): if (is_within_safety_limits(p_waypoint)): movel(p_waypoint, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_waypoint, p_exit)) else: movel(p_approach, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_approach, p_exit)) end movej(j_exit, a=rf_max_acceleration, v=rf_speed, r=0.01) movel(p_boxfree3, a=rf_max_acceleration, v=rf_speed, r=GetBlend(p_boxfree3, p_boxfree2)) movel(p_boxfree2, a=rf_max_acceleration, v=rf_speed, r=0) MovePerformed=True end end
An example of a customPath.script
, notice the use of MovePerformed
at lines 80 and 94
To review how to use the custom path feature, refer to Customize the Robot's Path .