
git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5000 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
107 lines
3.7 KiB
Python
107 lines
3.7 KiB
Python
# Example how to use the basic robot class Robot6Axis which represent a 6-Axis
|
|
# industrial robot. The Robot Module is dependend on Part but nor 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 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. The Trajectory find allways outomatically 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 creat 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]] 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
|
|
|
|
# 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
|
|
|
|
# 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 is a Post processor
|
|
# python module. Here is in detail the Kuka Postprocessor descriped
|
|
from KukaExporter import ExportCompactSub
|
|
|
|
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
|
|
|
|
# and thats kind of how its 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))
|
|
|