Hello
I am trying to make use of the Arc and Circle functions in the python TCP/IP API as described below:
4.9 Arc
Function: Move from the current position to the target position in the Cartesian coordinate system by circular interpolation.
This instruction needs to be combined with other motion instructions to determine the starting point of the arc.
Format: Arc(X1,Y1,Z1,Rx1,Ry1,Rz1,X2,Y2,Z2,Rx2,Ry2,Rz2)
Number of parameters: 12
Support port: 30003
Detailed parameters: 12
parameter name type meaning
X1 double Indicates the position of the X1 axis of the intermediate point of the arc, unit: mm
Y1 double Indicates the Y1 axis position of the middle point of the arc, unit: mm
Z1 double Indicates the position of the Z1 axis of the intermediate point of the arc, unit: mm
Rx1 double Indicates the Rx1 axis position of the intermediate point of the arc, unit: degree
Ry1 double Indicates the Ry1 axis position of the intermediate point of the arc, unit: degree
Rz1 double Indicates the Rz1 axis position of the intermediate point of the arc, unit: degree
X2 double Indicates the X2 axis position of the arc end point, unit: mm
Y2 double Indicates the Y2 axis position of the end point of the arc, unit: mm
Z2 double Indicates the Z2 axis position of the arc end point, unit: mm
Rx2 double Indicates the Rx2 axis position of the arc end point, unit: degree
Ry2 double Indicates the Ry2 axis position of the arc end point, unit: degree
Rz2 double Indicates the Rz2 axis position of the arc end point, unit: degree
Example:
4.10 Circle
Function: Full circle movement, which needs to be combined with other motion instructions to complete the full circle movement.
Format: Circle(count,X1,Y1,Z1,Rx1,Ry1,Rz1,X2,Y2,Z2,Rx2,Ry2,Rz2)
Number of parameters: 13
Support port: 30003
Detailed parameter explanation: 13
parameter name type meaning
count int Number of whole circles
X1 double X1 axis position, unit: mm
Y1 double Y1 axis position, unit: mm
Z1 double Z1 axis position, unit: mm
Rx1 double Rx1 axis position, unit: degree
Ry1 double Ry1 axis position, unit: degree
Rz1 double Rz1 axis position, unit: degree
X2 double X2 axis position, unit: mm
Y2 double Y2 axis position, unit: mm
Z2 double Z2 axis position, unit: mm
Rx2 double Rx2 axis position, unit: degree
Ry2 double Ry2 axis position, unit: degree
Rz2 double Rz2 axis position, unit: degree
Example:
To replicate my test setup:
I am using a MG400 and the TCP-IP-Python API
In my coordinate system I am trying to do a half circle from 287, 56, 40XYZ with R being 0.
My middle point is 307, 76, 40XYZ with R being -90
My endpoint is 327, 56, 40XYZ with R being 180 or -180
As mentioned in Arc, it needs to be combined with a movement function to set the starting point of the arc so I start out by calling:
MovJ(287, 56, 40, 0, 0, 0)
Then run the Arc function with the given information:
Arc(307, 76, 40, -90, 0, 0, 327, 56, 40, -180, 0, 0)
As soon as the Arc command is sent to the controller, it goes into emergency mode followed by my DisableRobot command after five seconds.
I am not sure if this is an error, but according to the API and what I know about the coordinate system, it should be possible for the robot to perform this action.
Update: I can confirm that it works within DobotStudio2020 with the following LUA Script:
P={coordinate = {287,56,40,0}}
MovJ§
P1={coordinate = {307,76,40,-90}}
P2={coordinate = {327,56,40,-180}}
Arc(P1, P2)
I can also see that in DobotStudio2020 I get the error:
Inverse kinematics error with result outside of working area
Maybe there is something in the Rx, Ry, Rz conversion that goes wrong?