Robot Workbench: Difference between revisions

From FreeCAD Documentation
(translate)
(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

Trajectories

Tools to creat and manipulate trajectories. There are two kinds, the parametric and non parametric ones.

non parametric

parametric

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

Arch Module
Macros