creating link between Robot axes

Robmaksan

Looking around for some CAD
Hi All,

I am trying to do a robot simulation. I want to import the step files of robot axes (ABB supports this), then link axes with each other. I had no problem importing parts, but I have no idea how to link them and simulate a point. Could you share some progress path, opinion, or example? I really appreciate any help you can provide.

Regards
Murat
 

DanB

CAD community veteran
I'm not exactly sure what you mean by "robot simulation" and "simulate a point"?

Assuming that you want to use Open Cascade for robot planning, or some form of digital twin - my experience is that Open Cascade is very capable. gp_Trsf class for joint transformation is easy and intuitive, and XDE allows you to load links from assemblies into separate controllable objects.

Are you aware of Forward/Inverse kinematics and Denavit-Hartenberg conventions?
 

Robmaksan

Looking around for some CAD
Hi DanB, Thank you for your answer.

Yes, you are right. I am trying to do Robot planning, and also I am aware of Forward and Inverse kinematic. But I don't know how to link (connect) axes to each other. I mean, when I rotate axes 3, axes 4,5,6 should move together. Could you share an example?
 

DanB

CAD community veteran
What you are asking for is forward kinematics. If all axis is set correctly by Denavit-Hartenberg, you could do something like this for FK:
baseTrsf.SetRotation(gp_Ax1(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)), 0);
link1Trsf.SetRotation(gp_Ax1(gp_Pnt(0, 10, 0), gp_Dir(0, 1, 0)), j1 );
link2Trsf.SetRotation(gp_Ax1(gp_Pnt(0, d1, 0), gp_Dir(0, 0, 1)), j2 + PI / 2.);
link3Trsf.SetRotation(gp_Ax1(gp_Pnt(0, d2, 0), gp_Dir(0, 0, 1)), j3 );
link4Trsf.SetRotation(gp_Ax1(gp_Pnt(0, d3, 0), gp_Dir(0, 0, 1)), j4 + PI / 2. );
link5Trsf.SetRotation(gp_Ax1(gp_Pnt(0, d3, a4), gp_Dir(0, 1, 0)), j5 );
link6Trsf.SetRotation(gp_Ax1(gp_Pnt(0, d4, a4), gp_Dir(0, 0, 1)), j6 );

gp_Trsf newLoc1 = link1Trsf;
gp_Trsf newLoc2 = link1Trsf * link2Trsf;
gp_Trsf newLoc3 = link1Trsf * link2Trsf * link3Trsf;
gp_Trsf newLoc4 = link1Trsf * link2Trsf * link3Trsf * link4Trsf;
gp_Trsf newLoc5 = link1Trsf * link2Trsf * link3Trsf * link4Trsf * link5Trsf;
gp_Trsf newLoc6 = link1Trsf * link2Trsf * link3Trsf * link4Trsf * link5Trsf * link6Trsf;
Note that this solution is really not an elegant way to solve it, and values are arbitrary. The purpose is to demonstrate the principle.
 

Robmaksan

Looking around for some CAD
Dear DanB, Thank you so much for your answer. You solved my problem. I tried it works well. I appreciated
 
Top