05-14-2019, 06:25 AM

Hello,

I have been trying to understand how RoboDK creates targets from gcode. For example, how is a sample Gcode line: G1 X123.45 Y67.89 Z0.15 F1200 converted to a robotarget in MOVEL instruction for a ABB robot?

I know robot machining project and 3d printing projects do this automatically, but I want to embed some digital input-output signals and speed information during specific movements and hence need a little more flexibility.

I have looked into some of the functions in the RoboDK.cs file in the C# API example (also the python version). Keeping the discussion specific to ABB IRC5 MoveL command and as per my understanding, the workflow for creating a MoveL robotarget is as follows:

1. Create a pose matrix using position and Euler angles [xyzrpw]: Use function

in C# API (Same as Transl(x,y,z)*rotz(w)*roty(p)*rotx®)

2. Get orientation information from pose matrix (ABB uses quaternions) [q1 q2 q3 q4]: Use function

3. Compute joint angles required for the pose (using inverse kinematics?)

4. get configuration vector [cf1 cf4 cf6 cfx] from joint angles

Questions:

How does RoboDK compute [xyzwpr] (more importantly "wpr" Euler angles) from a gcode line G1 X123.45 Y67.89 Z0.15 F1200? I know this has to do with the relationship between TCP frame and the XYZ coordinates w.r.t userframe (work object frame) but can't wrap my head around it.

Does RoboDK use inverse kinematics to compute joint values for a given pose? Are there any functions available in C# API?

Any help will be appreciated!

Thanks

Rock

I have been trying to understand how RoboDK creates targets from gcode. For example, how is a sample Gcode line: G1 X123.45 Y67.89 Z0.15 F1200 converted to a robotarget in MOVEL instruction for a ABB robot?

I know robot machining project and 3d printing projects do this automatically, but I want to embed some digital input-output signals and speed information during specific movements and hence need a little more flexibility.

I have looked into some of the functions in the RoboDK.cs file in the C# API example (also the python version). Keeping the discussion specific to ABB IRC5 MoveL command and as per my understanding, the workflow for creating a MoveL robotarget is as follows:

1. Create a pose matrix using position and Euler angles [xyzrpw]: Use function

Code:

`static public Mat FromXYZRPW(double x, double y, double z, double w, double p, double r)`

2. Get orientation information from pose matrix (ABB uses quaternions) [q1 q2 q3 q4]: Use function

Code:

`static double[] ToQuaternion(Mat Ti)`

3. Compute joint angles required for the pose (using inverse kinematics?)

4. get configuration vector [cf1 cf4 cf6 cfx] from joint angles

Questions:

How does RoboDK compute [xyzwpr] (more importantly "wpr" Euler angles) from a gcode line G1 X123.45 Y67.89 Z0.15 F1200? I know this has to do with the relationship between TCP frame and the XYZ coordinates w.r.t userframe (work object frame) but can't wrap my head around it.

Does RoboDK use inverse kinematics to compute joint values for a given pose? Are there any functions available in C# API?

Any help will be appreciated!

Thanks

Rock