joystick sur emc2

R

raboliot

Nouveau
salut à tous
j'ai emc2 sur ma machine et je voudrais pouvoir la piloter avec un joystick.
est-ce que quelqu’un aurait une documentation en français qui expliquerait comment faire ?
car j'ai trouvé quelques infos en anglais mais cela n'a jamais marcher .
merci d'avance pour les infos.
 
H

horsot

Compagnon
Salut à tous,

Je ne crois pas qu'il y ai une bonne âme qui l'ai fait.

Dis nous en plus.

Quelle version d'EMC2? Quelle documentation? Quel joystick? USB? Quel est ton fichier de configuration?

Xavier
 
M

Marc PELTIER

Compagnon
Bonjour Rabiolot,

Regarde mon post du 28 mai "Génialissime : télécommander sa CNC sans fil pour $20". Il s'agit d'interfacer sur EMC2 un accessoire de console PS3 SONY, sans fil.

Attention, les manettes qui se vendent sur ebay sont très souvent des clones, qui ont un hardware "bluetooth" particulier. Il faut une sixaxis pour PS3 originale, de SONY.
 
R

raboliot

Nouveau
salut marc.
j'ai bien vu ton post et j'ai bien une sixaxis pour PS3 originale, et j'ai télécharger le programme qtsixa-1.5.0
comment faire pour l'installer sur ubuntu 10.04 ?
et je pense qu'il faut faire des paramétrages dans emc2 (2.4.6) ?
merci d'avance pour les infos.
 
E

ewidance

Ouvrier
Bonjour,

J'ai fait cette manipulation avec un joystick Saitek Gamepad P2500 USB.

Pour l'installer sous EMC2 2.5, avec Ubuntu 10.04, j'ai utilisé la méthode décrite sur http://wiki.linuxcnc.org/emcinfo.pl?A_N ... _With_EMC2

Voici mes notes, qui j'espère t'aideront :

1- Brancher le Joystick et relever les id de vendor et de device avec la commande lsusb (dans un shell), ainsi que le nom exact du device qui nous servira plus tard
exemple : Bus 002 Device 004: ID 06a3:ff0c Saitek PLC Cyborg Force Rumble Pad

Ici, vendor = 06a3 et device = ff0c. Le nom exact du device est "Saitek PLC Cyborg Force Rumble Pad"

2 - Débrancher le Joystick

3 -Créer le fichier de config pour udev ( /etc/udev/rules.d/50-input-permissions.rules ), et y insérer les id de vendor et product relevés :

SYSFS{idProduct}=="ff0c", SYSFS{idVendor}=="06a3", MODE="0660", GROUP="plugdev"

4 - Installer la couche développement d'EMC2 (emc2-dev),
sudo apt-get install emc2-dev

5 - Télécharger et compiler le driver joyhandle pour emc2
cd emc2
wget http://wiki.linuxcnc.org/uploads/joyhandle.comp
sudo comp --install joyhandle.comp


6 - Rebooter et rebrancher le Joystick. Les nouvelles règles udev vont s'appliquer (celles mise en place dans le point 3)

7 - Modifier custom.hal et y ajouter les commandes de gestion du Joystick, avec l'exemple ci dessous.
Note importante : le 'loadusr -W hal_input -KRAL Saitek' charge le driver précédemment compilé et le lie à un Joystick dont le nom contient le mot SAITEK. A noter que pour toi, cela changera certainement, il faudra prendre l'un des mots relevés dans le nom exact du device au point 1 de cette procxédure.

# Inclure vos commandes HAL personnalisées ici
# Ce fichier ne sera pas écrasé si vous relancez Stepconf
# Hal configuration file to move a cnc machine using a joypad using joyhandle component
# Copyright 2008 Paul Willutzki <paul[at]willutzki[dot]de>
# Licence: GPL
# Version 3
# This Hal-File needs the joyhandle component.
# This uses the following formula for a non linear joypad movements:
# y = (scale * (a*x^power + b*x)) + offset
#
# The parameters a and b are adjusted in such a way, that the function starts at (deadband,offset) and ends at (1,scale+offset).
# Negative values will be treated point symetrically to origin. Values -deadband < x < +deadband will be set to zero.
# Values x > 1 and x < -1 will be skipped to +-scale+offset. Negative scale values invert the movement.
# With power one can adjust the nonlinearity (default = 2).
# Default for deadband is 0.
# Valid values are:
# power >= 1.0 (reasonable values are 1.x .. 4-5),
# 0 <= deadband < 0.99 (reasonable 0.1).
# If you use high deadbands (>0.5) you need higher power values to smoothly start at (deadband,offset).
# The additional offset component can be set in special cases (default = 0).
# All values can be adjusted for each instance (joypad axis) separately.

# Please take also a look at the manpages for johandle.

# Insert the following lines in the INI-File (section [HAL])
# HALUI = halui
# HALFILE = joypad_V3.hal

# Load the hal_input component that creates pins for axes and buttons
# See man hal_input for details and finding input devices
loadusr -W hal_input -KRAL Saitek

# load joyhandle component and attach to threads (in this case 3 instances)
loadrt joyhandle count=4
addf joyhandle.0 servo-thread # x
addf joyhandle.1 servo-thread # y
addf joyhandle.2 servo-thread # z
addf joyhandle.3 servo-thread # z


setp halui.jog-speed 1500 # desired maximum jog speed mm/min

# --Start-- These parameters ara used to set up joyhandle
setp halui.jog-deadband 0. # important: default value is 0.2, that would override joyhandle.deadband
setp joyhandle.0.power 4. # select nonlinearity to handele low jog values
setp joyhandle.1.power 4.
setp joyhandle.2.power 4. # in my case the z-axis is set up more sensitive
setp joyhandle.3.power 4.
setp joyhandle.0.deadband 0.2
setp joyhandle.1.deadband 0.2
setp joyhandle.2.deadband 0.2
setp joyhandle.3.deadband 0.2
setp joyhandle.0.scale -0.4
setp joyhandle.1.scale 0.4 # negative values invert jogging
setp joyhandle.2.scale 0.4 # in my case the z-axis is scaled to lower speed
setp joyhandle.3.scale 0.4
# --End--

# connect hal_input to halui via joyhandle (in case use your own axes-names)
net velX input.0.abs-x-position => joyhandle.0.in
net velXout joyhandle.0.out => halui.jog.0.analog
net velY input.0.abs-y-position => joyhandle.1.in
net velYout joyhandle.1.out => halui.jog.1.analog
net velZ input.0.abs-throttle-position => joyhandle.2.in
net velZout joyhandle.2.out => halui.jog.2.analog
net velA input.0.abs-rudder-position => joyhandle.3.in
net velAout joyhandle.3.out => halui.jog.3.analog


# Définition des boutons;
#Le faire en fonction du Joytick apres avoir relevé les noms exacts des signaux HAL
# dans "Fichier" / "Configuration de hal", déplié "halhui" puis "jog" et identifié les signaux et bouton associés
# grace aux les changements de valeurs dans la liste. Il faut appuyer sur le bouton et regarder la "value'
# qui change dans le transfigurateur pour identifier le signal.

# ensuite, il faut router ce signal sur la fonction de emc2. L'arrêt de broche sera par exemple 'halui.spindle.stop'
# Ci dessous, il sera routé sur le bouton de tir droit, alors que le démarrage de broche sera routé sur le tir gauche.
# Adapter ensuite sur vos besoins.
net spindleOff input.0.btn-base2 => halui.spindle.stop
net spindleOn input.0.btn-base => halui.spindle.start



8- Editer le fichier de configuration principal emc2 de ta machine (*.ini) et ajouter le HALUI.

[HAL]
HALUI = halui
HALFILE = tb6560.hal
HALFILE = custom.hal
POSTGUI_HALFILE = custom_postgui.hal

9 - tester....

10 - Ajouter des configs dans custom_poostgui, pour assigner à tous les boutons du joy...

Bon courage...
 
H

horsot

Compagnon
+1 je confirme que la méthode du wiki marche très bien avec ma manette (Saitec P90 de mémoire), je l'utilise depuis des mois maintenant (très pratique).

Merci Ewidance pour ce tuto.

Bonne soirée

Xavier
 
R

raboliot

Nouveau
salut Ewidance
et merci pour ce tuto
la manette que j'ai ,c'est une (thrusmaster dual analog 3)
je bug sur les fichiers custom.hal et custom_posgui.hal
pourrais tu s'il te plait me poster tes fichiers hal et ini pour pouvoir m'en inspirer
je pense que pour moi ce serai plus facile car je ne maitrise pas vraiment le sujet
merci encore pour tes conseilles.

Raboliot.
 
L

Laurent_CNC

Compagnon
Bonjour,

Je déterre car j'ai besoin d'un petit coup de main.

J'ai réussi en suivant ce fil à installer une manette usb achetée 5 euros :mrgreen:
Une fois installé, j'ai suivi les instructions de Xi sur un autre poste ou on parlait de joystick analogique et j'ai facilement pu calibrer les 2 sticks centraux avec :
jscal /dev/input/js0 -c
Puis, j'ai fais un test via : jstest /dev/input/js0
Ou on trouve le nom des boutons pour les paramétrer ensuite.

Mais j'ai buté sur la définition des boutons pendant un moment.
GRRRR, je ne comprend pas ça :
# Définition des boutons;
#Le faire en fonction du Joytick apres avoir relevé les noms exacts des signaux HAL
# dans "Fichier" / "Configuration de hal", déplié "halhui" puis "jog" et identifié les signaux et bouton associés
# grace aux les changements de valeurs dans la liste. Il faut appuyer sur le bouton et regarder la "value'
# qui change dans le transfigurateur pour identifier le signal.

A force de chercher, maintenant avec ces 2 lignes :
net programPause halui.program.pause <= input.0.btn-base3 # pause par le bouton n°9 de la manette
net programRestart halui.program.resume <= input.0.btn-base4 # redémarrage par le bouton n°10 de la manette
La pause et sortir de pause fonctionne impecc' avec mes boutons 9 et 10 (ceux du milieu de ma manette)

Il me faut maintenant trouver l'arrêt d'urgence et autres utiles, si vous savez ou trouver ça :?: :?: :?:

594c4c257783426.jpg

a33ee3257783582.jpg

Merci d'avance,
L@urent
 
L

Laurent_CNC

Compagnon
GRRRR, rien à faire, je bloque sur ça :

# Définition des boutons;
#Le faire en fonction du Joytick apres avoir relevé les noms exacts des signaux HAL
# dans "Fichier" / "Configuration de hal", déplié "halhui" puis "jog" et identifié les signaux et bouton associés
# grace aux les changements de valeurs dans la liste. Il faut appuyer sur le bouton et regarder la "value'
# qui change dans le transfigurateur pour identifier le signal.

Comprend pas ou je dois aller pour matter ça...

J'ais fait un test via : jstest /dev/input/js0
J'ai le nom des boutons mais je n'arrive pas à les intégrer dans ma ligne de commande...

exemple le bouton n°9 je le vois sous le nom de BaseBtn2 et c'est le bouton n° 8 sous jstest
alors je met :
net programPause input.0.BaseBtn2 => halui.program.pause # faire une pause avec le bouton 1
dans mon custom.hal... mais j'ai une erreur en chargant linuxcnc... mais je fais quoi de pas bien :mad: :mad: :mad:

Help please !
L@urent
 
L

Laurent_CNC

Compagnon
net programPause halui.program.pause <= input.0.btn-base3 # pause par le bouton n°9 de la manette
net programRestart halui.program.resume <= input.0.btn-base4 # redémarrage par le bouton n°10 de la manette

Ca ca fonctionne ! pause et sortir de pause avec mes boutons 9 et 10 (ceux du milieu de ma manette)

Il me faut maintenant trouver l'arrêt d'urgence par exemple

L@urent
 
L

Laurent_CNC

Compagnon
Merci Xi :-D

J'ai essayer de regarder par là déjà...
Je ne m'y connais pas en langage Linux... je ne fais que taper de la ligne de commande dans la majorité des cas...
par exemple : net programPause halui.program.pause <= input.0.btn-base3
Je pige que halui.program.pause c'est la fonction à lancer quand le bouton input.0btn-base3 est enclenché mais que signifie net programPause ?
Le net doit signifier l'ordre d'exécuter mais programPause ??? (je n'ai pas essayé de changer ça ...)

net programRun halui.program.run <= bouton qui va bien...
devrait lancer le program courant donc sur le bouton de mon choix
et le stopper par :
net programStop halui.program.stop <= bouton qui va bien...

Je vais aussi essayer la velocity via :
net programVitessediminue halui.max-velocity.decrease <= bouton qui va bien...
net programVitesseaugmente halui.max-velocity.increase <= bouton qui va bien...
Mais de combien en combien va t'elle augmenter ???

Pour finir, je vais essayer :
net programArreturgent halui.estop.activate <= bouton qui va bien...

Qu'en penses tu ?
Merci du coup de main,
L@urent
 
V

vax

Modérateur
:smt038 (il est où le smiley qui salue à genou ?)

UN POST-IT UN POST-IT !

Merci pour tout
 
G

gaston48

Compagnon
Bonsoir,

« net » veut dire que tu crées une connection

« programPause » est le nom que tu as donné à la variable qui va transiter dans la connection.

(Pour visualiser sa valeur, son nom va apparaître dans la fenêtre de halmeter par exemple ....)

Mais de combien en combien va t'elle augmenter ???

C’est dans la doc :wink: , avec : halui.max-velocity.scale
 
L

Laurent_CNC

Compagnon
Salut,

Promis, demain, j'apprend à lire...
Je cite :
La vitesse linéaire maximum peut être ajustée entre 0 et la valeur de la variable MAX_VELOCITY dans la section [TRAJ] du fichier ini.
(bit) halui.max-velocity.decrease (in) - pin pour diminuer la vitesse max
(bit) halui.max-velocity.increase (in) - pin pour augmenter la vitesse max
(float) halui.max-velocity.scale (in) - Valeur appliquée sur le nombre de fronts montants des pins increase ou decrease en unités machine par seconde.

J'ai viré ce qui ne m'intéressait pas directement mais en effet, Xi, l'info était devant mes yeux... (en fait j'avais lu mais rien piné... avant de relire tranquillement suite à ton message :oops: )

Bon, ce qui m'embête encore ce sont ces (in) entres parenthèses et ou mettre le halui.max-velocity.scale (10)
Je compte le mettre dans mon fichier .hal en dessous des 2 premiers et ainsi augmenter ou diminuer ma vitesse de 10 en 10...

Quand j'aurais tout réglé, je ferais un fichier propre et en français pour exemple à ceux qui voudront aussi essayer.

@+
L@urent
 
L

Laurent_CNC

Compagnon
ca marche pas :mad: :mad: :mad:

Je m'énerve depuis plus d'une heure et ça marche pas...

La définition des actions associés aux boutons, ça devrait aller. Mais le nom du bouton associé, ça marche pas !

J'ai un bouton appelé Trigger par exemple. Ben quand j'essaye d'y associer une action, ben il est pas reconnu...

Y a t il un moyen pour savoir exactement le nom à associer à chaque boutons ?

Parce que moi, mes boutons qui fonctionne ce nomme BaseBtn à BaseBtn 4 et je les note btn-baseX avec X leur n°... mais pour mon Trigger ou mon ThumbBtn ???

Merci d'avance,
L@urent
 
L

Laurent_CNC

Compagnon
Salut tout le monde,

Bon, j'arrive pas à paramétrer mes autres boutons... tant pis.
J'aurais aimé réussir un arrêt d'urgence sur les 4 boutons de droite...

Je fais mes déplacements rapide avec déjà, c'est vraiment mieux, et je surface mes plaques d'alu aussi en manuel.

Sinon, j'ai un autre soucis, plus embêtant. la machine bouge toute seule :!: :!: :!:
Enfin, je veux dire par là que si je laisse la bécane en fonctionnement pendant qq minutes, j'ai des mouvements intempestifs des moteurs.
Et ses mouvements sont "vus" par LinuxCNC car Axis me les signifie sur la visu (j'ai des mouvements de plusieurs mm...)

C'est dû à la manette ??? quelqu'un à une idée du soucis :?: :?: :?:

Merci d'avance,
Laurent qui n'a pas vu de soucis en cours d'usinage d'un gcode par compte...
 
X

xi

Apprenti
Pour tes problèmes de boutons, il faut fouiller sur le net (en anglais), voire poser la question sur la mailing list (toujours en anglais).

Pour ta machine qui bouge toute seule, ca peut venir de la manette (en tout cas moi ca venait de là avec mon joystick analogique). Il faut augmenter la zone morte où EMC² considère que la manette est en position centrale.
Si ma mémoire est bonne, ca se fait avec les "setp joyhandle.0.deadband 0.2" dans le fichier de config (une ligne par axe, et il faut augmenter le 0.2 ... toujours de mémoire, il me semble qu'il y avait 0.1 à l'origine et j'ai mis 0.2)
 
L

Laurent_CNC

Compagnon
Merci à toi :supz:

J'essaye tout de suite :smt002

et pour les boutons... ben, il va déjà falloir que je bosse mon anglais :smt003 :smt003
 
L

Laurent_CNC

Compagnon
bien bien bien...

J'essaye depuis tout à l'heure... mais à chaque fois que je crois avoir les bonnes valeurs... crac, la machine bouge... et visiblement c'est toujours mon axe X...

pour l'instant, j'ai ça :
# la premiere ligne permet de la progressivité avec les commandes proportionnelles :
setp halui.jog-deadband 0.01 # à 0.01 on a une grande progressivité, à 0.2, plus aucune...

setp joyhandle.0.power 4. # select nonlinearity to handele low jog values
setp joyhandle.1.power 4.
setp joyhandle.2.power 4. # in my case the z-axis is set up more sensitive

setp joyhandle.0.deadband 0.05 # 0.2 par defaut sur les 3 axes
setp joyhandle.1.deadband 0.05
setp joyhandle.2.deadband 0.05

setp joyhandle.0.scale 0.4
setp joyhandle.1.scale -0.4 # une valeur négative inverse le mouvement
setp joyhandle.2.scale -0.4

et ça vient de bouger... tjs l'axe X..
en deadband, j'ai essayé 0.5 0.4 0.3 0.2 0.1.... :smt011 rien ne change
Je continue de chercher... je vais changer la valeur du haut pour 0.1 mais je vais y perdre gros en progressivité et c'est très dommage...
 
L

Laurent_CNC

Compagnon
Bon,
j'ai mis ça :
setp halui.jog-deadband 0.01 # à 0.01 on a une grande progressivité, à 0.2, plus aucune...

setp joyhandle.0.power 4. # select nonlinearity to handele low jog values
setp joyhandle.1.power 4.
setp joyhandle.2.power 4. # in my case the z-axis is set up more sensitive

setp joyhandle.0.scale 1 # 0.4 à l'origine sur chaque axe
setp joyhandle.1.scale -1 # une valeur négative inverse le mouvement
setp joyhandle.2.scale -1

et pour le moment, je n'ai aucun mouvement intempestif. Mais j'ai aussi coupé l'action du stick en haut à gauche.
Il permettait des placements à pleine vitesse sans progressivité et est actionné par le bouton MODE au centre de la manette.
On dirait que c'est lui qui foutait le brin...

On va voir, je laisse tourner la bête.
Il ne ce passe rien depuis 20 minutes et...
:smt011 :smt011 :smt011
ben non, je viens encore d'avoir un mouvement de 0.629 mm sur le X sans rien demander...
 
L

Laurent_CNC

Compagnon
Bon, j'ai mis ça et depuis une bonne demi heure, je n'ai pas de mouvement non voulu... pourvu que ça dure :wink:
En jouant avec la valeur de power et de scale j'ai aussi augmenté fortement la progressivité sur la plage de mouvement de mon petit joystick.
J'arrive à démarrer à 7-8 mm/min jusque mes 300 max. C'est plus que convenable.

@+
Laurent

# VITESSE MAX ici 300 mm/min
# formule de calcul y = (scale * (a*x^power + b*x)) + offset

setp halui.jog-speed 500

# la premiere ligne permet de la progressivité avec les commandes proportionnelles :
setp halui.jog-deadband 0.01 # à 0.01 on a une grande progressivité, à 0.2 plus aucune et à 0.3 ça ne bouge même plus...

setp joyhandle.0.power 4 # select nonlinearity to handele low jog values
setp joyhandle.1.power 4
setp joyhandle.2.power 4 # in my case the z-axis is set up more sensitive

setp joyhandle.0.scale 0.8 # 0.4 à l'origine sur chaque axe
setp joyhandle.1.scale -0.8 # une valeur négative inverse le mouvement
setp joyhandle.2.scale -0.8
 
L

Laurent_CNC

Compagnon
Salut à tous,

Pour info, avec ma manette, je n'ai jamais réussi à éviter les mouvements intempestifs sur ce qui était mon X.
Même le Jstest "voyait" l'axe 0 de la manette bouger.

Alors j'ai inversé mes boutons. Le Z est à gauche et les X/Y sur la manette de droite.
Plus de soucis... L'axe foireux de ma manette ne sert plus à rien. Les autres sont nickels.

@ bientôt
Laurent
 

Sujets similaires

I
Réponses
18
Affichages
2 953
I
E
Réponses
45
Affichages
3 885
Lechattom
L
El Zorro
Réponses
12
Affichages
498
El Zorro
El Zorro
F
Réponses
62
Affichages
3 383
clara03
clara03
F
Réponses
7
Affichages
13 707
HenriIV
HenriIV
PL50
Réponses
25
Affichages
891
dh42
C
Réponses
12
Affichages
1 492
chabercha
chabercha
HellTom
Réponses
36
Affichages
1 557
Dodore
Y
Réponses
7
Affichages
1 265
laboureau
laboureau
Haut