Robot API example/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "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 fon...")
No edit summary
 
(27 intermediate revisions by 3 users not shown)
Line 14: Line 14:
}}
}}


=== Basic robot stuff ===
=== Trucs de base robot ===
create the robot. If you do not specify another kinematic it becomes a Puma 560
créer le robot. Si tu ne spécifies pas une autre cinématique, il devient un Puma 560
{{Code|code=
{{Code|code=
rob = Robot6Axis()
rob = Robot6Axis()
Line 21: Line 21:
}}
}}


accéder à l'axe et au TCP. Les axes vont de 1 à 6 et sont en degrés :
accessing the axis and the Tcp. Axes go from 1-6 and are in degree:
{{Code|code=
{{Code|code=
Start = rob.Tcp
Start = rob.Tcp
Line 28: Line 28:
}}
}}


move the first axis of the robot:
déplacer le premier axe du robot :
{{Code|code=
{{Code|code=
rob.Axis1 = 5.0
rob.Axis1 = 5.0
}}
}}


le TCP a changé (cinématique avant)
the Tcp has changed (forward kinematic)
{{Code|code=
{{Code|code=
print rob.Tcp
print rob.Tcp
}}
}}


move the robot back to start position (reverse kinematic):
déplacer le robot en position de départ (cinématique inverse) :
{{Code|code=
{{Code|code=
rob.Tcp = Start
rob.Tcp = Start
Line 44: Line 44:
}}
}}


the same with axis 2:
de même pour l'axe 2 :
{{Code|code=
{{Code|code=
rob.Axis2 = 5.0
rob.Axis2 = 5.0
Line 52: Line 52:
}}
}}


Pointspassage :
Waypoints:
{{Code|code=
{{Code|code=
w = Waypoint(Placement(),name="Pt",type="LIN")
w = Waypoint(Placement(),name="Pt",type="LIN")
Line 58: Line 58:
}}
}}


générer plus. La trajectoire trouve toujours automatiquement un nom unique pour les pointspassage.
generate more. The trajectory always finds automatically a unique name for the waypoints
{{Code|code=
{{Code|code=
l = [w]
l = [w]
Line 65: Line 65:
}}
}}


créer une trajectoire
create a trajectory
{{Code|code=
{{Code|code=
t = Trajectory(l)
t = Trajectory(l)
Line 73: Line 73:
}}
}}


voir une liste de tous les pointspassage :
see a list of all waypoints:
{{Code|code=
{{Code|code=
print t.Waypoints
print t.Waypoints
Line 80: Line 80:
}}
}}


=== Working with the document objects ===
=== Travailler avec les objets du document ===


Working with the robot document objects:
Travailler avec les objets document robot:
first create a robot in the active document
créer en premier un robot dans le document actif
{{Code|code=
{{Code|code=
if(App.activeDocument() == None):App.newDocument()
if(App.activeDocument() == None):App.newDocument()
Line 90: Line 90:
}}
}}


Define the visual representation and the kinematic definition (see [[Robot_6-Axis|Robot 6-Axis]] and [[VRML Preparation for Robot Simulation|VRML Preparation for Robot Simulation]] for details about that)
Définir la représentation visuelle et la définition cinématique (voir [[Robot_6-Axis/fr|Robot 6-Axes]] et [[VRML Preparation for Robot Simulation/fr|Préparation VRML pour la simulation de robot]] pour plus de détails à ce sujet)
{{Code|code=
{{Code|code=
App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
Line 96: Line 96:
}}
}}


position de départ de l'axe (uniquement celle qui diffère de 0)
start positon of the Axis (only that which differ from 0)
{{Code|code=
{{Code|code=
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis2 = -90
Line 102: Line 102:
}}
}}


retrieve the Tcp position
récupère la position TCP
{{Code|code=
{{Code|code=
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
}}
}}


move the robot
déplacer le robot
{{Code|code=
{{Code|code=
pos.move(App.Vector(-10,0,0))
pos.move(App.Vector(-10,0,0))
Line 113: Line 113:
}}
}}


create an empty Trajectory object in the active document
créer un objet Trajectoire vide dans le document actif
{{Code|code=
{{Code|code=
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
}}
}}


obtenir la trajectoire
get the Trajectory
{{Code|code=
{{Code|code=
t = App.activeDocument().Trajectory.Trajectory
t = App.activeDocument().Trajectory.Trajectory
}}
}}


add the actual TCP position of the robot to the trajectory
ajouter la position TCP réelle du robot à la trajectoire
{{Code|code=
{{Code|code=
StartTcp = App.activeDocument().Robot.Tcp
StartTcp = App.activeDocument().Robot.Tcp
Line 131: Line 131:
}}
}}


insérer d'autres pointspassage et remettre le point de départ à la fin :
insert some more Waypoints and the start point at the end again:
{{Code|code=
{{Code|code=
for i in range(7):
for i in range(7):
Line 142: Line 142:


=== Simulation ===
=== Simulation ===
To be done.....
A faire.....
=== Exporting the trajectory ===
=== Exportation de la trajectoire ===
La trajectoire est exportée par Python. Cela veut dire que pour chaque type d'armoire de commande, il existe un post-processeur module Python. Voici en détail la description du post-processeur de Kuka
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
{{Code|code=
{{Code|code=
from KukaExporter import ExportCompactSub
from KukaExporter import ExportCompactSub
Line 153: Line 152:
}}
}}


et c'est ainsi que ça se fait :
and that's kind of how it's done:
{{Code|code=
{{Code|code=
for w in App.activeDocument().Trajectory.Trajectory.Waypoints:
for w in App.activeDocument().Trajectory.Trajectory.Waypoints:
Line 161: Line 160:
}}
}}


{{Robot Tools navi}}
{{Robot Tools navi{{#translation:}}}}
{{Userdocnavi}}
{{Userdocnavi{{#translation:}}}}
[[Category:Robot API{{#translation:}}]]
[[Category:API{{#translation:}}]]

Latest revision as of 08:23, 26 March 2022

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

insérer d'autres pointspassage et remettre le point de départ à la fin :

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

A faire.....

Exportation de la trajectoire

La trajectoire est exportée par Python. Cela veut dire que pour chaque type d'armoire de commande, il existe un post-processeur module Python. Voici en détail la description du post-processeur de Kuka

from KukaExporter import ExportCompactSub

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

et c'est ainsi que ça se fait :

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