Definition
alter_motion(pos)
Features
This function applies altering amount of motion trajectory when the alter function is activated. The meaning of the input values is defined in the description of enable_alter_motion().
Caution
-
alter_motion() can be executed only in user thread.
-
alter_motion() sets the orientation type of posx to DR_FIX_XYZ if it is None.
Note
-
alter_motion() can be executed only in user thread.
-
Alter motion can be adjusted through setting value limit_dPOS or limit_dPOS_per in enable_alter_motion function.
-
Starting from SW version V3.4, alter_motion() supports various orientation types when pos is entered as posx(). If pos is entered in the format of list(float[6]), it operates as Fixed XYZ.
Parameters
|
Parameter Name |
Data Type |
Default Value |
Description |
|---|---|---|---|
|
pos |
list (float[6]) posx |
- |
position list posx (if ori_type is None, then ori_type is DR_FIX_XYZ) |
Exception
|
Exception |
Description |
|---|---|
|
DR_Error (DR_ERROR_TYPE) |
Parameter data type error occurred |
|
DR_Error (DR_ERROR_VALUE) |
Parameter value is invalid |
|
DR_Error (DR_ERROR_RUNTIME) |
C extension module error occurred |
|
DR_Error (DR_ERROR_STOP) |
Program terminated forcefully |
Example
def alter_thread():
global dir_a, wait_time
alter_motion(dX) #dX : amount of alter motion
if dX[0] > 9.9:
dir_a = -10
elif dX[0] < -9.9:
dir_a = 10
dX[0] = dX[0] + dir_a
dX[3] = dX[3] + dir_a
wait(wait_time)
dX = [10,0,0,10,0,0]
# Starting from V3.4, various orientation types are supported depending on the ori_type setting in posx():
# dX = posx([10, 0, 0, 0, 0, 10], ori_type=DR_ELR_ZYZ, sol=None, turn=None)
J00 = posj(30,45,45,0,90,0)
movej(J00,vel=100,acc=100)
X1,sol = get_current_posx(DR_BASE)
J01 = posj(-30,45, 45,0,90,0)
movej(J01,vel=100,acc=100)
X2,sol = get_current_posx(DR_BASE)
# Alter motion is executed during the cycle time
cycle_time = 0.6
n_period = int(cycle_time * 1000 / 50)
wait_time = cycle_time
# cycle time:(n_period * 10)msec, mode:accumulate, reference coordination:base coordination
# Lmitation of accumulation amount :50mm, 90deg
# Limitation of increment amount :60mm, 60deg
# Limit Alarm can occur if the cycle time is too short compare to the amount of alter motion
enable_alter_motion(n=n_period,mode=DR_DPOS, ref=DR_BASE, limit_dPOS=[50,90], limit_dPOS_per=[60,60])
th_id = thread_run(alter_thread, loop=True)
movel(pos=X1,vel=10,acc=100)
movel(pos=X2,vel=10,acc=100)
thread_stop(th_id)
disable_alter_motion() # deactivates alter motion