Robot Workbench: Difference between revisions
Renatorivo (talk | contribs) (translate) |
Renatorivo (talk | contribs) (Marked this version for translation) |
||
Line 1: | Line 1: | ||
<translate> |
<translate> |
||
<!--T:1--> |
|||
[[Image:KukaKR16FreeCAD.jpg|right|400px]] |
[[Image:KukaKR16FreeCAD.jpg|right|400px]] |
||
<!--T:2--> |
|||
The robot workbench is a tool to simulate industrial grade [[6-Axis Robot]]s, like e.g. [http://kuka.com/ Kuka]. |
The robot workbench is a tool to simulate industrial grade [[6-Axis Robot]]s, like e.g. [http://kuka.com/ Kuka]. |
||
You can do following tasks: |
You can do following tasks: |
||
Line 10: | Line 12: | ||
* export the trajectory to a robot program file |
* export the trajectory to a robot program file |
||
<!--T:3--> |
|||
An examples you can find here: |
An examples you can find here: |
||
[http://www.freecad-project.de/svn/ExampleData/Examples/RobotSimulation/ Example files] or try |
[http://www.freecad-project.de/svn/ExampleData/Examples/RobotSimulation/ Example files] or try |
||
the [[Robot tutorial]]. |
the [[Robot tutorial]]. |
||
== Tools == |
== Tools == <!--T:4--> |
||
Here the principal commands you can use to create a robot set-up. |
Here the principal commands you can use to create a robot set-up. |
||
=== Robots === |
=== Robots === <!--T:5--> |
||
The tools to create and manage the 6-Axis robots |
The tools to create and manage the 6-Axis robots |
||
<!--T:6--> |
|||
* [[Image:Robot_CreateRobot.png|30px]] [[Robot_CreateRobot|Create a robot]]: Insert a new robot into the scene |
* [[Image:Robot_CreateRobot.png|30px]] [[Robot_CreateRobot|Create a robot]]: Insert a new robot into the scene |
||
* [[Image:Robot_Simulate.png|30px]] [[Robot_Simulate|Simulate a trajectory]]: Opens the simulation dialog and let you simulate |
* [[Image:Robot_Simulate.png|30px]] [[Robot_Simulate|Simulate a trajectory]]: Opens the simulation dialog and let you simulate |
||
Line 26: | Line 30: | ||
* [[Image:Robot_RestoreHomePos.png|30px]] [[Robot_RestoreHomePos|Restore home positon]]: move the robot to its home position |
* [[Image:Robot_RestoreHomePos.png|30px]] [[Robot_RestoreHomePos|Restore home positon]]: move the robot to its home position |
||
=== Trajectories === |
=== Trajectories === <!--T:7--> |
||
Tools to creat and manipulate trajectories. There are two kinds, the parametric and non parametric ones. |
Tools to creat and manipulate trajectories. There are two kinds, the parametric and non parametric ones. |
||
==== non parametric ==== |
==== non parametric ==== <!--T:8--> |
||
* [[Image:Robot_CreateTrajectory.png|30px]] [[Robot_CreateTrajectory|Create a trajectory]]: Insert a new robot into the scene |
* [[Image:Robot_CreateTrajectory.png|30px]] [[Robot_CreateTrajectory|Create a trajectory]]: Insert a new robot into the scene |
||
* [[Image:Robot_SetDefaultOrientation.png|30px]] [[Robot_SetDefaultOrientation|Set the default orientation]]: Set the orientation way-points gets created by default |
* [[Image:Robot_SetDefaultOrientation.png|30px]] [[Robot_SetDefaultOrientation|Set the default orientation]]: Set the orientation way-points gets created by default |
||
Line 36: | Line 40: | ||
* [[Image:Robot_InsertWaypointPre.png|30px]] [[Robot_InsertWaypointPre|Insert a waypoint]]: Insert a way-point from the current mouse position into a trajectory |
* [[Image:Robot_InsertWaypointPre.png|30px]] [[Robot_InsertWaypointPre|Insert a waypoint]]: Insert a way-point from the current mouse position into a trajectory |
||
==== parametric ==== |
==== parametric ==== <!--T:9--> |
||
* [[Image:Robot_Edge2Trac.png|30px]] [[Robot_Edge2Trac|Create a trajectory out of edges]]: Insert a new object which decompose edges to a trajectory |
* [[Image:Robot_Edge2Trac.png|30px]] [[Robot_Edge2Trac|Create a trajectory out of edges]]: Insert a new object which decompose edges to a trajectory |
||
* [[Image:Robot_TrajectoryDressUp.png|30px]] [[Robot_TrajectoryDressUp|Dress-up a trajectory]]: Let you override one or more properties of a trajectory |
* [[Image:Robot_TrajectoryDressUp.png|30px]] [[Robot_TrajectoryDressUp|Dress-up a trajectory]]: Let you override one or more properties of a trajectory |
||
* [[Image:Robot_TrajectoryCompound.png|30px]] [[Robot_TrajectoryCompound|Trajectory compound]]: create a compound out of some single trajectories |
* [[Image:Robot_TrajectoryCompound.png|30px]] [[Robot_TrajectoryCompound|Trajectory compound]]: create a compound out of some single trajectories |
||
== Scripting == |
== Scripting == <!--T:10--> |
||
This section is generated out of: http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Mod/Robot/RobotExample.py |
This section is generated out of: http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Mod/Robot/RobotExample.py |
||
You can use this file directly if you want. |
You can use this file directly if you want. |
||
<!--T:11--> |
|||
Example how to use the basic robot class Robot6Axis which represents a 6-axis |
Example how to use the basic robot class Robot6Axis which represents a 6-axis |
||
industrial robot. The Robot module is dependent on Part but not on other modules. |
industrial robot. The Robot module is dependent on Part but not on other modules. |
||
Line 54: | Line 59: | ||
from FreeCAD import * |
from FreeCAD import * |
||
<translate> |
<translate> |
||
=== Basic robot stuff === |
=== Basic robot stuff === <!--T:12--> |
||
create the robot. If you do not specify another kinematic it becomes a Puma 560 |
create the robot. If you do not specify another kinematic it becomes a Puma 560 |
||
</translate> |
</translate> |
||
Line 60: | Line 65: | ||
print rob |
print rob |
||
<translate> |
<translate> |
||
<!--T:13--> |
|||
accessing the axis and the Tcp. Axes go from 1-6 and are in degree: |
accessing the axis and the Tcp. Axes go from 1-6 and are in degree: |
||
</translate> |
</translate> |
||
Line 66: | Line 72: | ||
print rob.Axis1 |
print rob.Axis1 |
||
<translate> |
<translate> |
||
<!--T:14--> |
|||
move the first axis of the robot: |
move the first axis of the robot: |
||
</translate> |
</translate> |
||
rob.Axis1 = 5.0 |
rob.Axis1 = 5.0 |
||
<translate> |
<translate> |
||
<!--T:15--> |
|||
the Tcp has changed (forward kinematic) |
the Tcp has changed (forward kinematic) |
||
</translate> |
</translate> |
||
print rob.Tcp |
print rob.Tcp |
||
<translate> |
<translate> |
||
<!--T:16--> |
|||
move the robot back to start position (reverse kinematic): |
move the robot back to start position (reverse kinematic): |
||
</translate> |
</translate> |
||
Line 79: | Line 88: | ||
print rob.Axis1 |
print rob.Axis1 |
||
<translate> |
<translate> |
||
<!--T:17--> |
|||
the same with axis 2: |
the same with axis 2: |
||
</translate> |
</translate> |
||
Line 86: | Line 96: | ||
print rob.Axis2 |
print rob.Axis2 |
||
<translate> |
<translate> |
||
<!--T:18--> |
|||
Waypoints: |
Waypoints: |
||
</translate> |
</translate> |
||
Line 91: | Line 102: | ||
print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool |
print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool |
||
<translate> |
<translate> |
||
<!--T:19--> |
|||
generate more. The trajectory always finds automatically a unique name for the waypoints |
generate more. The trajectory always finds automatically a unique name for the waypoints |
||
</translate> |
</translate> |
||
Line 97: | Line 109: | ||
l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt")) |
l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt")) |
||
<translate> |
<translate> |
||
<!--T:20--> |
|||
create a trajectory |
create a trajectory |
||
</translate> |
</translate> |
||
Line 104: | Line 117: | ||
t.insertWaypoints(Waypoint(Placement(Vector(0,0,i*100+500),Vector(1,0,0),0),"LIN","Pt")) |
t.insertWaypoints(Waypoint(Placement(Vector(0,0,i*100+500),Vector(1,0,0),0),"LIN","Pt")) |
||
<translate> |
<translate> |
||
<!--T:21--> |
|||
see a list of all waypoints: |
see a list of all waypoints: |
||
</translate> |
</translate> |
||
Line 110: | Line 124: | ||
del rob,Start,t,l,w |
del rob,Start,t,l,w |
||
<translate> |
<translate> |
||
=== working with the document === |
=== working with the document === <!--T:22--> |
||
<!--T:23--> |
|||
Working with the robot document objects: |
Working with the robot document objects: |
||
first create a robot in the active document |
first create a robot in the active document |
||
Line 119: | Line 134: | ||
App.activeDocument().addObject("Robot::RobotObject","Robot") |
App.activeDocument().addObject("Robot::RobotObject","Robot") |
||
<translate> |
<translate> |
||
<!--T:24--> |
|||
Define the visual representation and the kinematic definition (see [[6-Axis Robot]] and [[VRML Preparation for Robot Simulation]] for details about that) |
Define the visual representation and the kinematic definition (see [[6-Axis Robot]] and [[VRML Preparation for Robot Simulation]] for details about that) |
||
</translate> |
</translate> |
||
Line 124: | Line 140: | ||
App.activeDocument().Robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv" |
App.activeDocument().Robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv" |
||
<translate> |
<translate> |
||
<!--T:25--> |
|||
start positon of the Axis (only that which differ from 0) |
start positon of the Axis (only that which differ from 0) |
||
</translate> |
</translate> |
||
Line 129: | Line 146: | ||
App.activeDocument().Robot.Axis3 = 90 |
App.activeDocument().Robot.Axis3 = 90 |
||
<translate> |
<translate> |
||
<!--T:26--> |
|||
retrieve the Tcp position |
retrieve the Tcp position |
||
</translate> |
</translate> |
||
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp |
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp |
||
<translate> |
<translate> |
||
<!--T:27--> |
|||
move the robot |
move the robot |
||
</translate> |
</translate> |
||
Line 138: | Line 157: | ||
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos |
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos |
||
<translate> |
<translate> |
||
<!--T:28--> |
|||
create an empty Trajectory object in the active document |
create an empty Trajectory object in the active document |
||
</translate> |
</translate> |
||
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory") |
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory") |
||
<translate> |
<translate> |
||
<!--T:29--> |
|||
get the Trajectory |
get the Trajectory |
||
</translate> |
</translate> |
||
t = App.activeDocument().Trajectory.Trajectory |
t = App.activeDocument().Trajectory.Trajectory |
||
<translate> |
<translate> |
||
<!--T:30--> |
|||
add the actual TCP position of the robot to the trajectory |
add the actual TCP position of the robot to the trajectory |
||
</translate> |
</translate> |
||
Line 153: | Line 175: | ||
print App.activeDocument().Trajectory.Trajectory |
print App.activeDocument().Trajectory.Trajectory |
||
<translate> |
<translate> |
||
<!--T:31--> |
|||
insert some more Waypoints and the start point at the end again: |
insert some more Waypoints and the start point at the end again: |
||
</translate> |
</translate> |
||
Line 162: | Line 185: | ||
print App.activeDocument().Trajectory.Trajectory |
print App.activeDocument().Trajectory.Trajectory |
||
<translate> |
<translate> |
||
=== Simulation === |
=== Simulation === <!--T:32--> |
||
To be done..... ;-) |
To be done..... ;-) |
||
Line 173: | Line 196: | ||
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src') |
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src') |
||
<translate> |
<translate> |
||
<!--T:33--> |
|||
and that's kind of how it's done: |
and that's kind of how it's done: |
||
</translate> |
</translate> |
||
Line 180: | Line 204: | ||
<translate> |
<translate> |
||
== Tutorials == |
== Tutorials == <!--T:34--> |
||
* [[6-Axis_Robot|6-Axis_Robot]] |
* [[6-Axis_Robot|6-Axis_Robot]] |
||
* [[VRML Preparation for Robot Simulation|VRML Preparation for Robot Simulation]] |
* [[VRML Preparation for Robot Simulation|VRML Preparation for Robot Simulation]] |
Revision as of 17:10, 24 July 2014
The robot workbench is a tool to simulate industrial grade 6-Axis Robots, like e.g. Kuka. You can do following tasks:
- set up a simulation environment with a robot and work pieces
- create and fill up trajectories
- decompose features of an CAD part to a trajectory
- simulate the robot movement and reachability
- export the trajectory to a robot program file
An examples you can find here: Example files or try the Robot tutorial.
Tools
Here the principal commands you can use to create a robot set-up.
Robots
The tools to create and manage the 6-Axis robots
- Create a robot: Insert a new robot into the scene
- Simulate a trajectory: Opens the simulation dialog and let you simulate
- Export a trajectory: Export a robot program file
- Set home positon: Set the home position of an robot
- Restore home positon: move the robot to its home position
Trajectories
Tools to creat and manipulate trajectories. There are two kinds, the parametric and non parametric ones.
non parametric
- Create a trajectory: Insert a new robot into the scene
- Set the default orientation: Set the orientation way-points gets created by default
- Set the default speed parameter: set the defaults for way-point creation
- Insert a waypoint: Insert a way-point from the current robot position into a trajectory
- Insert a waypoint: Insert a way-point from the current mouse position into a trajectory
parametric
- Create a trajectory out of edges: Insert a new object which decompose edges to a trajectory
- Dress-up a trajectory: Let you override one or more properties of a trajectory
- Trajectory compound: create a compound out of some single trajectories
Scripting
This section is generated out of: http://sourceforge.net/p/free-cad/code/ci/master/tree/src/Mod/Robot/RobotExample.py You can use this file directly if you want.
Example how to use the basic robot class Robot6Axis which represents a 6-axis industrial robot. The Robot module is dependent on Part but not on other modules. It works mostly with the basic types Placement, Vector and Matrix. So we need only:
from Robot import * from Part import * from FreeCAD import *
Basic robot stuff
create the robot. If you do not specify another kinematic it becomes a Puma 560
rob = Robot6Axis() print rob
accessing the axis and the Tcp. Axes go from 1-6 and are in degree:
Start = rob.Tcp print Start print rob.Axis1
move the first axis of the robot:
rob.Axis1 = 5.0
the Tcp has changed (forward kinematic)
print rob.Tcp
move the robot back to start position (reverse kinematic):
rob.Tcp = Start print rob.Axis1
the same with axis 2:
rob.Axis2 = 5.0 print rob.Tcp rob.Tcp = Start print rob.Axis2
Waypoints:
w = Waypoint(Placement(),name="Pt",type="LIN") print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool
generate more. The trajectory always finds automatically a unique name for the waypoints
l = [w] for i in range(5): l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt"))
create a trajectory
t = Trajectory(l) print t for i in range(7): t.insertWaypoints(Waypoint(Placement(Vector(0,0,i*100+500),Vector(1,0,0),0),"LIN","Pt"))
see a list of all waypoints:
print t.Waypoints del rob,Start,t,l,w
working with the document
Working with the robot document objects: first create a robot in the active document
if(App.activeDocument() == None):App.newDocument() App.activeDocument().addObject("Robot::RobotObject","Robot")
Define the visual representation and the kinematic definition (see 6-Axis Robot and VRML Preparation for Robot Simulation for details about that)
App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl" App.activeDocument().Robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv"
start positon of the Axis (only that which differ from 0)
App.activeDocument().Robot.Axis2 = -90 App.activeDocument().Robot.Axis3 = 90
retrieve the Tcp position
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
move the robot
pos.move(App.Vector(-10,0,0)) FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos
create an empty Trajectory object in the active document
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
get the Trajectory
t = App.activeDocument().Trajectory.Trajectory
add the actual TCP position of the robot to the trajectory
StartTcp = App.activeDocument().Robot.Tcp t.insertWaypoints(StartTcp) App.activeDocument().Trajectory.Trajectory = t print App.activeDocument().Trajectory.Trajectory
insert some more Waypoints and the start point at the end again:
for i in range(7): t.insertWaypoints(Waypoint(Placement(Vector(0,1000,i*100+500),Vector(1,0,0),i),"LIN","Pt")) t.insertWaypoints(StartTcp) # end point of the trajectory App.activeDocument().Trajectory.Trajectory = t print App.activeDocument().Trajectory.Trajectory
Simulation
To be done..... ;-)
Exporting the trajectory
The trajectory is exported by Python. That means for every control cabinet type there is a post-processor Python module. Here is in detail the Kuka post-processor described
from KukaExporter import ExportCompactSub ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
and that's kind of how it's done:
for w in App.activeDocument().Trajectory.Trajectory.Waypoints: (A,B,C) = (w.Pos.Rotation.toEuler()) print ("LIN {X %.3f,Y %.3f,Z %.3f,A %.3f,B %.3f,C %.3f} ; %s"%(w.Pos.Base.x,w.Pos.Base.y,w.Pos.Base.z,A,B,C,w.Name))
Tutorials