Attention: this wiki is deactivated
The new wiki is up and running at http://www.freecadweb.org/wiki
Important: Do not edit this wiki anymore, it will be deleted soon. If you have edit rights here, please read this article to know how to regain your edit rights on the new wiki.
Robot Workbench/se
From free-cad
Robot arbetsbänken är ett verktyg för simulering av 6-axliga industrirobotar, som t.ex. Kuka.
Contents |
Allmänt bruk
Denna arbetsbänk är ett pågående arbete för att implementera ett off-line programmeringsverktyg för 6-Axis Robot industrirobotar i FreeCAD.
Du kan hitta ett exempel här:
http://www.freecad-project.de/svn/ExampleData/Examples/RobotSimulation/
Verktyg
Skript
Detta avsnitt är genererat från: http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/RobotExample.py?view=markup Du kan använda den filen direkt, om du vill.
Exempel på hur man använder klassen Robot6Axis, vilken representerar en 6-axlig industrirobot. Robot modulen beror på Delmodulen, men inte på andra modulen. Den arbetar mest med enkla typer som Placering, Vektor och Matris. Så vi behöver bara:
from Robot import * from Part import * from FreeCAD import *
Grundläggande robotsaker
Skapa roboten. Om du inte specificerar någon annan kinematik så blir det en Puma 560
rob = Robot6Axis() print rob
komma åt axlarna och tcp (verktygets centrumpunkt). Axlarna är 1-6 och värdena uttrycks i grader:
Start = rob.Tcp print Start print rob.Axis1
flytta robotens första axel:
rob.Axis1 = 5.0
Tcp har ändrats (framåtgående kinematik)
print rob.Tcp
flytta tillbaka roboten till startpositionen (bakåtgående kinematik):
rob.Tcp = Start print rob.Axis1
samma med axel 2:
rob.Axis2 = 5.0 print rob.Tcp rob.Tcp = Start print rob.Axis2
Banpunkter:
w = Waypoint(Placement(),name="Pt",type="LIN") print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool
generera mer. Banan hittar alltid automatiskt på ett unikt namn för banpunkterna
l = [w] for i in range(5): l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt"))
Skapa en bana
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"))
se en lista på alla banpunkter:
print t.Waypoints del rob,Start,t,l,w
arbeta med dokumentet
Arbeta med robotdokument objekten: skapa först en robot i det aktiva dokumentet
if(App.activeDocument() == None):App.newDocument()
App.activeDocument().addObject("Robot::RobotObject","Robot")
Definiera den visuella representationen och den kinematiska definitionen (se 6-Axis Robot/se för detaljer om det)
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"
Axelns startpositon (endast om det skiljer sig från 0)
App.activeDocument().Robot.Axis2 = -90 App.activeDocument().Robot.Axis3 = 90
hämta Tcp positionen
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
flytta roboten
pos.move(App.Vector(-10,0,0))
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos
skapa ett tomt banobjekt i det aktiva dokumentet
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
hämta banan
t = App.activeDocument().Trajectory.Trajectory
lägg till robotens aktuella TCP position till banan
StartTcp = App.activeDocument().Robot.Tcp t.insertWaypoints(StartTcp) App.activeDocument().Trajectory.Trajectory = t print App.activeDocument().Trajectory.Trajectory
sätt in några fler banpunkter och startpunkten i slutet igen:
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
ska göras..... ;-)
Exportera banan
Banan exporteras av Python. Det innebär att för varje robotkontroll typ så finns det en post-processor Python modul. Här är Kuka post-processorn beskriven i detalj
from KukaExporter import ExportCompactSub ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
och det är ungefär så här det görs:
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))
