Robot API exemple

From FreeCAD Documentation
Revision as of 09:37, 16 July 2021 by Maker (talk | contribs) (Created page with "ajouter la position TCP réelle du robot à la trajectoire")

Introduction

Cet exemple est basé sur l'exemple RobotExample.py.

Tu peux utiliser ce fichier directement si tu veux.

Exemple d'utilisation de la classe de robot de base Robot6Axis qui représente un robot industriel à 6 axes. Le module Robot dépend de Part mais pas d'autres modules. Il fonctionne principalement avec les types de base Placement, Vecteur et Matrice. Nous n'avons donc besoin que de :

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

Trucs de base robot

créer le robot. Si tu ne spécifies pas une autre cinématique, il devient un Puma 560

rob = Robot6Axis()
print rob

accéder à l'axe et au TCP. Les axes vont de 1 à 6 et sont en degrés :

Start = rob.Tcp
print Start
print rob.Axis1

déplacer le premier axe du robot :

rob.Axis1 = 5.0

le TCP a changé (cinématique avant)

print rob.Tcp

déplacer le robot en position de départ (cinématique inverse) :

rob.Tcp = Start
print rob.Axis1

de même pour l'axe 2 :

rob.Axis2 = 5.0
print rob.Tcp
rob.Tcp = Start
print rob.Axis2

Pointspassage :

w = Waypoint(Placement(),name="Pt",type="LIN")
print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool

générer plus. La trajectoire trouve toujours automatiquement un nom unique pour les pointspassage.

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

créer une trajectoire

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

voir une liste de tous les pointspassage :

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

Travailler avec les objets du document

Travailler avec les objets document robot: créer en premier un robot dans le document actif

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

Définir la représentation visuelle et la définition cinématique (voir Robot 6-Axes et Préparation VRML pour la simulation de robot pour plus de détails à ce sujet)

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"

position de départ de l'axe (uniquement celle qui diffère de 0)

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

récupère la position TCP

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

déplacer le robot

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

créer un objet Trajectoire vide dans le document actif

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

obtenir la trajectoire

t = App.activeDocument().Trajectory.Trajectory

ajouter la position TCP réelle du robot à la trajectoire

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 there is a post-processor Python module. Here is in detail the Kuka post-processor described

from KukaExporter import ExportCompactSub

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

and that's kind of how it's 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))