Atelierul Robotică

From FreeCAD Documentation
Revision as of 06:10, 9 August 2018 by Luc (talk | contribs)

Atelierul robotică este o unealtă pentru a simula un robot industrial cu 6 axe de libertate Robot 6-Axis, cum ar fi de ex. Kuka. Puteți efectua următoarele activități:

  • configurați un mediu de simulare cu un robot și piese de lucru
  • creați și urmați traiectoriile
  • descompune caracteristicile unei piese CAD într-o traiectorie
  • Simulați mișcarea și accesibilitatea robotului
  • exportați traiectoria într-un fișier de program de robot

Puteți găsi un exemplu aici: Example files sau încercați Robot tutorial.

Scule și Instrumente

Aici sunt comenzile principale pe care le puteți utiliza pentru a seta un robot.

Roboți

Instrumentele pentru crearea și gestionarea roboților cu 6 axe

Traiectorii

Instrumente pentru crearea și manipularea traiectoriilor. Există două tipuri, cele parametrice și cele neparametrice.

traiectoriile non parametrice

traiectorii parametrice

Script

Această secțiune este generată prin: https://github.com/FreeCAD/FreeCAD_sf_master/blob/master/src/Mod/Robot/RobotExample.py Puteți folosi acest fișier direct dacă doriți.

Exemplu de utilizare a clasei de roboți de bază Robot6Axis care reprezintă un robot industrial cu 6 axe. Modulul Robot depinde de Atelierul Piese, dar nu și de alte module. Funcționează mai ales cu tipurile de bază Plasament, Vector și Matrix. Deci avem nevoie numai:

from Robot import *
from Part import *
from FreeCAD import *

Chestii de bază în robotică

creați robotul. Dacă nu specificați altă cinematică, acesta devine un Puma 560

rob = Robot6Axis()
print rob

accesând axa și Tcp. Axele merg de la 1-6 și sunt se mișcă în grade:

Start = rob.Tcp
print Start
print rob.Axis1

mișcați prima axă a robotului:

rob.Axis1 = 5.0

TCP sa schimbat (urmariți cinematica mecanismului)

print rob.Tcp

mișcați robotul înapoi în poziția inițială (kinematic invers):

rob.Tcp = Start
print rob.Axis1

la fel cu axa 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

generați mai mult. Traiectoria întotdeauna găsește automat un nume unic pentru punctele de trecere

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

creați o traiectorie

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"))

uite o listă a tuturor punctelor de trecere:

print t.Waypoints
 
del rob,Start,t,l,w

Lucrul cu obiectele documentului

Pentru a lucra cu obiectele documentului robot: creați mai întâi un robot în documentul activ

if(App.activeDocument() == None):App.newDocument()
 
App.activeDocument().addObject("Robot::RobotObject","Robot")

Definiți reprezentarea vizuală și definiția cinematică (see Robot 6-Axis 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"

poziția inițială a Axei (numai dacă diferă de 0)

App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90

extrageți poziția Tcp

pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp

motați robotul

pos.move(App.Vector(-10,0,0))
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos

creați o traiectorie vidă în documentul activ

App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")

obțineți Traiectoria

t = App.activeDocument().Trajectory.Trajectory

adăugați poziția TCP reală a robotului în traiectorie

StartTcp = App.activeDocument().Robot.Tcp
t.insertWaypoints(StartTcp)
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory

introduceți mai multe puncte de traseu și punctul de pornire la sfârșitul din nou:

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

Simularea

Care trebuie dăcută.....

Exportând traiectorie

Traiectoria este exportată by Python. Asta înseamnă că pentru fiecare tip de dulap de comandă există un postprocesor Modul Python. Aici este detaliat post-procesorul Kuka descris

from KukaExporter import ExportCompactSub

ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')

și asta este felul cum se face:

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

Tutoriale


Arch Module/ro
Macros/ro