joystick sur emc2

R
raboliot
Nouveau
9 Août 2010
5
  • Auteur de la discussion
  • #1
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.
 
horsot
horsot
Compagnon
28 Mai 2009
768
Toulouse
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
 
Marc PELTIER
Marc PELTIER
Compagnon
1 Juin 2010
507
89500
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
9 Août 2010
5
  • Auteur de la discussion
  • #4
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.
 
ewidance
ewidance
Ouvrier
4 Octobre 2010
256
Montpellier
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...
 
horsot
horsot
Compagnon
28 Mai 2009
768
Toulouse
+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
9 Août 2010
5
  • Auteur de la discussion
  • #7
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.
 
Laurent_CNC
Laurent_CNC
Compagnon
26 Avril 2012
536
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 :?: :?: :?:





Merci d'avance,
L@urent
 
Laurent_CNC
Laurent_CNC
Compagnon
26 Avril 2012
536
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
 
Laurent_CNC
Laurent_CNC
Compagnon
26 Avril 2012
536
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
 
Laurent_CNC
Laurent_CNC
Compagnon
26 Avril 2012
536
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
 
G
gaston48
Compagnon
26 Février 2008
9 070
59000
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
 
Laurent_CNC
Laurent_CNC
Compagnon
26 Avril 2012
536
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
 
La dernière réponse à ce sujet date de plus de 6 mois
Haut