Robot Workbench/fr: Difference between revisions

From FreeCAD Documentation
No edit summary
(Updating to match new version of source page)
Line 46: Line 46:


Voici un exemple montrant comment utiliser la classe de robot de base Robot6Axis qui représente un robot industriel à 6 axes. L'atelier Robot dépend de l'atelier [[Part Module/fr|Pièce]], mais pas des autres modules. Il fonctionne principalement avec les types de base Placement, Vecteur et Matrice. Nous n'avons donc besoin que de :
Voici un exemple montrant comment utiliser la classe de robot de base Robot6Axis qui représente un robot industriel à 6 axes. L'atelier Robot dépend de l'atelier [[Part Module/fr|Pièce]], mais pas des autres modules. Il fonctionne principalement avec les types de base Placement, Vecteur et Matrice. Nous n'avons donc besoin que de :
{{Code|code=
from Robot import *
from Part import *
from Robot import *
from FreeCAD import *
from Part import *
from FreeCAD import *
}}
=== Éléments de base robot ===
=== Éléments de base robot ===
Créer le robot. Si vous ne spécifiez pas une autre cinématique, il devient un Puma 560
Créer le robot. Si vous ne spécifiez pas une autre cinématique, il devient un Puma 560
{{Code|code=
rob = Robot6Axis()
rob = Robot6Axis()
print rob
print rob
}}
Accès à l'axe et au Tcp. Les axes vont de 1-6 et sont exprimés en degrés :
Accès à l'axe et au Tcp. Les axes vont de 1-6 et sont exprimés en degrés :
{{Code|code=
Start = rob.Tcp
print Start
Start = rob.Tcp
print rob.Axis1
print Start
print rob.Axis1
}}
Déplacer le premier axe du robot:
Déplacer le premier axe du robot:
{{Code|code=
rob.Axis1 = 5.0
rob.Axis1 = 5.0
}}
Le Tcp a changé (cinématique avant)
Le Tcp a changé (cinématique avant)
{{Code|code=
print rob.Tcp
print rob.Tcp
}}
Déplacer le robot à sa position de départ (cinématique inverse):
Déplacer le robot à sa position de départ (cinématique inverse):
{{Code|code=
rob.Tcp = Start
rob.Tcp = Start
print rob.Axis1
print rob.Axis1
}}
De même avec l'axe 2:
De même avec l'axe 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
}}
Points de passage :
Points de passage :
{{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
}}
En générer davantage. La trajectoire trouve toujours automatiquement un nom unique pour les points de passage
En générer davantage. La trajectoire trouve toujours automatiquement un nom unique pour les points de passage
{{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"))
}}
Créer une trajectoire
Créer une trajectoire
{{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"))
}}
Afficher une liste de tous les points de passage :
Afficher une liste de tous les points de passage :
{{Code|code=
print t.Waypoints
print t.Waypoints
del rob,Start,t,l,w
del rob,Start,t,l,w
}}
=== Travailler avec les objets du document ===
=== Travailler avec les objets du document ===


Travailler avec les objets du document robot : d'abord créer un robot dans le document courant
Travailler avec les objets du document robot : d'abord créer un robot dans le document courant
{{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")
}}
Définir la représentation visuelle et la définition cinématique (voir [[6-Axis Robot/fr|robot à 6 axes]] et [[VRML Preparation for Robot Simulation/fr|Préparation VRML pour simulation de robot]] pour plus de détails)
Définir la représentation visuelle et la définition cinématique (voir [[6-Axis Robot/fr|robot à 6 axes]] et [[VRML Preparation for Robot Simulation/fr|Préparation VRML pour simulation de robot]] pour plus de détails)
{{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"
}}
La positon de départ des axes (seulement celles qui diffèrent de 0)
La positon de départ des axes (seulement celles qui diffèrent de 0)
{{Code|code=
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
}}
Récupérer la position Tcp
Récupérer la position Tcp
{{Code|code=
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
}}
Déplacer le robot
Déplacer le robot
{{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
}}
Créer un objet de trajectoire vide dans le document courant
Créer un objet de trajectoire vide dans le document courant
{{Code|code=
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
}}
Obtenir la trajectoire
Obtenir la trajectoire
{{Code|code=
t = App.activeDocument().Trajectory.Trajectory
t = App.activeDocument().Trajectory.Trajectory
}}
Ajouter la position TCP actuelle du robot à la trajectoire
Ajouter la position TCP actuelle du robot à la trajectoire
{{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
}}
Insérer quelques points de passage supplémentaires et le point de départ à nouveau à la fin :
Insérer quelques points de passage supplémentaires et le point de départ à nouveau à la fin :
{{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 137: Line 177:
=== Exporter la trajectoire ===
=== Exporter la trajectoire ===
La trajectoire est exportée par Python. Cela veut dire que pour chaque type de contrôle cabinet, il y a un module post-processeur Python. Voici en détail la description du post-processeur Kuka :
La trajectoire est exportée par Python. Cela veut dire que pour chaque type de contrôle cabinet, il y a un module post-processeur Python. Voici en détail la description du post-processeur Kuka :
{{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')
}}
Et c'est ainsi que ça se fait :
Et c'est ainsi que ça se fait :
{{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/fr|6-Axis_Robot]]
* [[6-Axis_Robot/fr|6-Axis_Robot]]

Revision as of 21:57, 15 January 2015

L'atelier de simulation de robot permet de simuler les robots à 6 axes industriels, comme par exemple Kuka. Vous pouvez accomplir les tâches suivantes :

  • mettre en place un environnement de simulation avec un robot et des pièces de travail
  • créer et remplir des trajectoires
  • décomposer les fonctions d'une pièce CAO en une trajectoire
  • simuler le mouvement et l'accessibilité d'un robot
  • exporter la trajectoire vers un fichier programme de robot

Vous pouvez trouver des exemples ici : fichiers d'exemple ou essayez le tutoriel Robot.

Outils

Voici les principales commandes dont vous pouvez vous servir pour créer une configuration de robot.

Robots

Les outils pour créer et gérer les robots à 6 axes

Trajectoires

Les outils pour créer et manipuler les trajectoires. Il y en a deux sortes, paramétriques et non-paramétriques.

Non-paramétriques

Paramétriques

Scripting

Cette section est générée à partir de : https://github.com/FreeCAD/FreeCAD_sf_master/blob/master/src/Mod/Robot/RobotExample.py Vous pouvez utiliser ce fichier directement si vous le désirez.

Voici un exemple montrant comment utiliser la classe de robot de base Robot6Axis qui représente un robot industriel à 6 axes. L'atelier Robot dépend de l'atelier Pièce, mais pas des 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 *

Éléments de base robot

Créer le robot. Si vous ne spécifiez pas une autre cinématique, il devient un Puma 560

rob = Robot6Axis()
print rob

Accès à l'axe et au Tcp. Les axes vont de 1-6 et sont exprimés 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 à sa position de départ (cinématique inverse):

rob.Tcp = Start
print rob.Axis1

De même avec l'axe 2:

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

Points de passage :

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

En générer davantage. La trajectoire trouve toujours automatiquement un nom unique pour les points de passage

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

Afficher une liste de tous les points de passage :

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

Travailler avec les objets du document

Travailler avec les objets du document robot : d'abord créer un robot dans le document courant

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 simulation de robot pour plus de détails)

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"

La positon de départ des axes (seulement celles qui diffèrent de 0)

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

Récupérer 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 de trajectoire vide dans le document courant

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

Obtenir la trajectoire

t = App.activeDocument().Trajectory.Trajectory

Ajouter la position TCP actuelle du robot à la trajectoire

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

Insérer quelques points de passage supplémentaires et le point de départ à nouveau à 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

À compléter...

Exporter la trajectoire

La trajectoire est exportée par Python. Cela veut dire que pour chaque type de contrôle cabinet, il y a un module post-processeur Python. Voici en détail la description du post-processeur 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))

Tutorials