Robot Workbench: Difference between revisions

From FreeCAD Documentation
Line 15: Line 15:


== Scripting ==
== Scripting ==

This is generated out of: http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/RobotExample.py?view=markup
You can use this file directly if you whant.


Example hwo to use the basic robot class Robot6Axis which represent a 6-Axis
Example hwo to use the basic robot class Robot6Axis which represent a 6-Axis

Revision as of 16:42, 13 December 2009

The robot workbench is tool to simulate industrial grade 6-Axis robots, like e.g. Kuka. Following features are planed and partial already implemented:

  • Visual representation of 6-Axis Robot (done)
  • Forward and inverse kinematic calculation of arbitrary robots (done)
  • RobotLib, dynamic readably robot types (work in progress)
  • Trajectory simulation (work in progress)
    • collision simulation
    • detection of configuration changes and singularities
    • time estimation
    • used volume (planed)
  • Post processor for Kuka robots (work in progress)
  • Process and work cell control (planed)
  • Movie making out of simulation (planed)

Scripting

This is generated out of: http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/RobotExample.py?view=markup You can use this file directly if you whant.

Example hwo to use the basic robot class Robot6Axis which represent a 6-Axis industrial robot. The Robot Module is not dependend on Part or an other Module. It works only with the basic types Placement, Vector and Matrix. So we need only:

from Robot import *
from FreeCAD import *

create the robot. If you not specify a other kinematic it becomes a Puma 560

rob = Robot6Axis()
print rob

accessing the axis and the Tcp. Axis go from 1-6 and are in degrees:

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

l = [w]
for i in range(5):
  l.append(Waypoint(Placement(Vector(0,0,i*100),0,Vector(1,0,0)),"LIN","Pt"))

create a trajectory

t = Trajectory(l)
print t


del rob,Start

Working with the robot document objects: first creat a robot in the active document

App.activeDocument().addObject("Robot::RobotObject","Robot")
App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90

retrive 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