Robot Workbench/sv: Difference between revisions

From FreeCAD Documentation
No edit summary
(Updating to match new version of source page)
Line 48: Line 48:
Den arbetar mest med enkla typer som Placering, Vektor och Matris. Så vi behöver
Den arbetar mest med enkla typer som Placering, Vektor och Matris. Så vi behöver
bara:
bara:
{{Code|code=
from Robot import *
from Part import *
from Robot import *
from FreeCAD import *
from Part import *
from FreeCAD import *
}}
=== Grundläggande robotsaker ===
=== Grundläggande robotsaker ===
Skapa roboten. Om du inte specificerar någon annan kinematik så blir det en Puma 560
Skapa roboten. Om du inte specificerar någon annan kinematik så blir det en Puma 560
{{Code|code=
rob = Robot6Axis()
rob = Robot6Axis()
print rob
print rob
}}
komma åt axlarna och tcp (verktygets centrumpunkt). Axlarna är 1-6 och värdena uttrycks i grader:
komma åt axlarna och tcp (verktygets centrumpunkt). Axlarna är 1-6 och värdena uttrycks i grader:
{{Code|code=
Start = rob.Tcp
print Start
Start = rob.Tcp
print rob.Axis1
print Start
print rob.Axis1
}}
flytta robotens första axel:
flytta robotens första axel:
{{Code|code=
rob.Axis1 = 5.0
rob.Axis1 = 5.0
}}
Tcp har ändrats (framåtgående kinematik)
Tcp har ändrats (framåtgående kinematik)
{{Code|code=
print rob.Tcp
print rob.Tcp
}}
flytta tillbaka roboten till startpositionen (bakåtgående kinematik):
flytta tillbaka roboten till startpositionen (bakåtgående kinematik):
{{Code|code=
rob.Tcp = Start
rob.Tcp = Start
print rob.Axis1
print rob.Axis1
}}
samma med axel 2:
samma med axel 2:
{{Code|code=
rob.Axis2 = 5.0
rob.Axis2 = 5.0
print rob.Tcp
rob.Tcp = Start
print rob.Tcp
rob.Tcp = Start
print rob.Axis2
print rob.Axis2
}}
Banpunkter:
Banpunkter:
{{Code|code=
w = Waypoint(Placement(),name="Pt",type="LIN")
w = Waypoint(Placement(),name="Pt",type="LIN")
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
}}
generera mer. Banan hittar alltid automatiskt på ett unikt namn för banpunkterna
generera mer. Banan hittar alltid automatiskt på ett unikt namn för banpunkterna
{{Code|code=
l = [w]
l = [w]
for i in range(5):
for i in range(5):
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"))
}}
Skapa en bana
Skapa en bana
{{Code|code=
t = Trajectory(l)
t = Trajectory(l)
print t
print t
for i in range(7):
for i in range(7):
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"))
}}
se en lista på alla banpunkter:
se en lista på alla banpunkter:
{{Code|code=
print t.Waypoints
print t.Waypoints
del rob,Start,t,l,w
del rob,Start,t,l,w
}}
=== Working with the document objects ===
=== Working with the document objects ===
Line 101: Line 123:
Arbeta med robotdokument objekten:
Arbeta med robotdokument objekten:
skapa först en robot i det aktiva dokumentet
skapa först en robot i det aktiva dokumentet
{{Code|code=
if(App.activeDocument() == None):App.newDocument()
if(App.activeDocument() == None):App.newDocument()
App.activeDocument().addObject("Robot::RobotObject","Robot")
App.activeDocument().addObject("Robot::RobotObject","Robot")
}}
Definiera den visuella representationen och den kinematiska definitionen (se [[6-Axis Robot/sv]] för detaljer om det)
Definiera den visuella representationen och den kinematiska definitionen (se [[6-Axis Robot/sv]] för detaljer om det)
{{Code|code=
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"
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)
Axelns startpositon (endast om det skiljer sig från 0)
{{Code|code=
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
}}
hämta Tcp positionen
hämta Tcp positionen
{{Code|code=
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
}}
flytta roboten
flytta roboten
{{Code|code=
pos.move(App.Vector(-10,0,0))
pos.move(App.Vector(-10,0,0))
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos
}}
skapa ett tomt banobjekt i det aktiva dokumentet
skapa ett tomt banobjekt i det aktiva dokumentet
{{Code|code=
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
}}
hämta banan
hämta banan
{{Code|code=
t = App.activeDocument().Trajectory.Trajectory
t = App.activeDocument().Trajectory.Trajectory
}}
lägg till robotens aktuella TCP position till banan
lägg till robotens aktuella TCP position till banan
{{Code|code=
StartTcp = App.activeDocument().Robot.Tcp
StartTcp = App.activeDocument().Robot.Tcp
t.insertWaypoints(StartTcp)
t.insertWaypoints(StartTcp)
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
}}
sätt in några fler banpunkter och startpunkten i slutet igen:
sätt in några fler banpunkter och startpunkten i slutet igen:
{{Code|code=
for i in range(7):
for i in range(7):
t.insertWaypoints(Waypoint(Placement(Vector(0,1000,i*100+500),Vector(1,0,0),i),"LIN","Pt"))
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
t.insertWaypoints(StartTcp) # end point of the trajectory
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
}}


=== Simulation ===
=== Simulation ===
Line 141: Line 181:
Banan exporteras av Python. Det innebär att för varje robotkontroll typ så finns det en post-processor
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
Python modul. Här är Kuka post-processorn beskriven i detalj
{{Code|code=
from KukaExporter import ExportCompactSub
from KukaExporter import ExportCompactSub

ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
}}
och det är ungefär så här det görs:
och det är ungefär så här det görs:
{{Code|code=
for w in App.activeDocument().Trajectory.Trajectory.Waypoints:
for w in App.activeDocument().Trajectory.Trajectory.Waypoints:
(A,B,C) = (w.Pos.Rotation.toEuler())
(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))
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 ==
== Tutorials ==
* [[6-Axis_Robot/sv|6-Axis_Robot]]
* [[6-Axis_Robot/sv|6-Axis_Robot]]

Revision as of 21:57, 15 January 2015

Robot arbetsbänken är ett verktyg för simulering av 6-axliga industrirobotar, som t.ex. Kuka. 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. 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

Du kan hitta ett exempel här: 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

Skript

Detta avsnitt är genererat från: https://github.com/FreeCAD/FreeCAD_sf_master/blob/master/src/Mod/Robot/RobotExample.py 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

Working with the document objects

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/sv 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))

Tutorials

Draft Module/sv
Macros/sv