Systèmes de controle

  • Ce sujet contient 69 réponses, 9 participants et a été mis à jour pour la dernière fois par dede62, le 11 Nov. 2012, 18:27.
15 sujets de 1 à 15 (sur un total de 70)
  • Auteur
    Messages
  • #6074
    unitéR4
    Bloqué

      Ca fait longtemps que n’ai pas posté sur le forum, je vais essayer de me rattrapper. J’avais un peu progressé ces derniers temps sur la question des “strokes” (commandes multiples à partir de mouvements préenregistrés d’un joystick) j’ai enfin publié un article la-dessus sur mon blog.

      Voici le lien:http://www.toofiles.com/fr/oip/documents/ino/rc_strokes_frv2.html” class=”bbcode_url”>http://www.toofiles.com/fr/oip/documents/ino/rc_strokes_frv2.html

      EDIT XOFF : commentaire d’Olivier afin d’expliquer un peu moins techniquement les principes ici abordés :

      Excusez -nous de parler un peu trop “technique”, je vais essayer d’expliquer le principe simplement pour les curieux (et les autres). Le problème se pose lorsqu’on utilise une télécommande type modèles réduits pour piloter notre droÏde préféré. Ce qu’on appelle “sticks” (ou joysticks) ce sont les manches de commande de l’émetteur, en général il y en a 2, qui peuvent se déplacer dans les deux sens (vertical et horizontal). En général, on utilise un manche pour le déplacement du droïde, par exemple celui de droite, pousser=marche avant, tirer=marche arrière, à droite: tourner à droite (étonnant, non?), à gauche: tourner à…. gauche ! bravo, il y en a deux qui suivent…reste alors un manche disponible pour commander la rotation du dôme, l’ouverture des trappes, la commande des sons, les animations lumineuses, le périscope, etc….vous commencez à voir le problème ! C’est là qu’intervient l’idée de “stroke”, c’est-à-dire un “geste”, un déplacement suivant un parcours donné, qu’on applique sur le “stick”, et qui permettra de déclencher une action préprogrammée. Par exemple, en dessinant un “L” avec le joystick, on allume les lumières du dôme…C’est l’objet des montages à base d’arduino ou autres qui remplissent cette fonction: on n’est plus limité par le nombres de canaux ou de “voies” de la télécommande, la seule limite est la taille de la mémoire du controleur embarqué, les possibilités sont infinies puisque l’arduino peut commander des servos, des cartes sonss, des variateurs de vitesse pour moteurs, des logic displays,, etc…Il suffit d’enregistrer le geste adéquat, de programmer l’action à effectuer,…et de s’en souvenir !

      #16336
      Xoff
      Bloqué

        j’ai juste survolé ton article, ça à l’aire sensass, je me replongerai dans ton article sérieusement plus tard

        merci pour ce partage ;)

        #16337
        kethry
        Bloqué

          Merci pour ton partage, et ton article très bien détaillé !

          J’ai tout de même un gros point d’interrogation (mais n’ayant pas tout lu, j’ai peut être raté le principal) :

          j’ai l’impression que ton module implique qu’un des sticks de la radio soit dédié à la gestion des strokes.

          Sachant que le second stick est dédié aux mouvements du droide (avance, recule, droite, gauche), Ceci me mène à la question : comment comptes-tu commander le dôme ?

          Il faudrait peut être ajouter une gestion “by pass” en fonction de la position de ton inter afin que le stick dédié aux strokes puissent également servir à la rotation du dome quand tu n’es pas en mode de gestion des strokes.

          Du moins c’est comme cela que fonctionne ma gestion des strokes (mais j’ai peut être raté quelque chose dans tes explications ;) ).

          Concernant les soucis de performances de l’arduino, je n’avais pas constaté ce problème (j’ai pas mal optimisé la gestion du positionnement du stick), mais mon système est encore loin d’être complet, il faudra que je poursuive mes tests (je suis donc de près tes avancées).

          #16338
          Xoff
          Bloqué

            j’ai pas lu l’article en détail ni même expérimenté le jedi control mais à ce j’ai compris, il y a un bouton qui fait passé le système en mode strokes et recupere les mouvements du stick (qui fait habituellement le dome)

            une fois ce bouton activé, on est en mode stroke sinon on est en mode dome par exemple…

            #16339
            kethry
            Bloqué

              Oui mais si je comprend bien :

              La sortie est disponible sous forme binaire sur 5 bits, les 4 premiers bits représentant la position dans la grille, et le 5e bit la position de l’inter de la 3e voie.

              Le module est conçu pour s’enficher sur une platine Arduino Uno, les sorties correspondant aux entrées digitales 2 à 6 de l’Arduino.

              A priori cela ne permet donc pas de gérer autre chose que des strokes, à moins de programmer quelque chose du style :

              – si nous sommes hors mode stroke :

              – si valeur = 4 dome tourne à gauche

              – si valeur = 5 dome tourne à droite

              – si valeur = 6 dome repos

              Il n’y a dans ce cas pas de vitesse proportionnelle du dome en fonction de la position du stick.

              Des astuces sont bien entendu possibles par programmation, mais bon… je sais pas trop, moi j’aime bien que la vitesse du dome soit proportionnelle en fonction de la position du stick: c’est pour cela que je parle de bypass afin qu’en mode “hors strokes” le circuit donne à l’arduino des infos plus exploitables concernant la rotation du dome. Je pense que ce n’est pas très compliqué à implémenter dans le système d’olivier.

              Cela reste uniquement de la programmation : il suffit en mode hors strokes de ne gérer pas exemple que la voie horizontale du stick en retournant suffisamment de valeurs pour gérer une rotation proportionnelle (si nous restons sur les 4 bits, cela permet 16 valeurs, ce qui est déjà pas mal).

              Enfin, j’en sais rien, je n’ai pas plus regardé que cela, Oliiiiiiviiiieerrrrr, tu gères cela comment 😆

              #16340
              unitéR4
              Bloqué

                En fait, comme l’a dit Lolo80, le système ne “capte” les strokes que lorsque l’inter est basculé; en dehors de ça le système est “transparent” vis à vis du manche. Par contre, si une carte moteur est connectée en parallèle sur une des 2 voies utilisées, les mouvements du manche continueront de piloter le moteur pendant la saisie des strokes (j’espère me faire comprendre). Si on veut utiliser une des deux voies pour le dome, c’est possible mais il faut prévoir un système qui déconnecte la commande moteur pendant la saisie des strokes si on ne veut pas que le dome parte dans tous les sens pendant la saisie. On peut par exemple se servir de la sortie de validation (bit 5) pour commander l’arrêt moteur (il y a des cartes de commande moteur qui ont cette possibilité) ou par l’intermédiaire d’un relais …

                #16341
                kethry
                Bloqué

                  Par programmation comme je l’ai dit plus haut est beaucoup plus simple, pourquoi ne pas gérer le positionnement horizontal du stick en mode hors strokes sur ta carte afin de transmettre à l’arduino le positionnement horizontal du stick sur 4 digits comme pour les strokes ?

                  Après, piloter la syren 10 en fonction de ces valeurs est un jeu d’enfant (pour un autre contrôleur je pense que c’est idem)…

                  Ou alors proposer ce fonctionnement en option sur la V2 :) , je pense que ça pourrait être pas mal car évitant pas mal de bidouilles, non ?

                  #16342
                  unitéR4
                  Bloqué

                    En fait ce n’est pas le signal de commande qui pose problème (on peut très bien connecter un servo ou une interface quelconque en parallèle sur une des sorties récepteur), c’est de signaler au système de ne pas piloter le moteur du dôme pendant la saisie des strokes on ne peut pas commander la rotation et saisir un stroke en même temps !

                    De plus, je trouve que tu as raison: la commande proportionnelle est quand même plus agréable qu’une commande numérique, même avec plusieurs valeurs de vitesse de rotation. Qu’est-ce que tu utilises comme carte de commande pour le moteur du dôme ?

                    #16343
                    kethry
                    Bloqué

                      Si j’ai bien compris le Gridstick transmets un digit à l’arduino pour la position du switch de commande de stroke (à priori ton 5em bit).

                      La sortie est disponible sous forme binaire sur 5 bits, les 4 premiers bits représentant la position dans la grille, et le 5e bit la position de l’inter de la 3e voie.

                      Si l’arduino sait quand il est en mode strokes ou non, il n’y a aucun souci.

                      Côté programme Arduino :

                      * si signal stroke = 1 (mode strokes)

                      – stop du dome

                      – lecture valeur retour Gridstick -> gestion des strokes

                      * si signal stroke = 0 (mode hors strokes)

                      – lecture valeur retour Gridstick -> gestion de la rotation progressive du dome, par exemple (à tuner):

                      – si valeur < 8 rotation progressive à gauche en fonction de la valeur – si valeur > 8 rotation progressive à droite en fonction de la valeur

                      – si valeur = 8 , dome au repos

                      Côté programme gridstick :

                      * si mode stroke

                      – c’est déjà implémenté :)

                      * si signal stroke = 0

                      – la lecture du stick ne prend en compte que la position horizontale du stick afin de retourner une valeur entre 0 et 16 (enfin, quelque chose du style) à l’arduino.

                      Voilà, avec cela ton arduino est capable en mode hors stroke d’envoyer la commande qui va bien au contrôleur de moteur afin de faire tourner ton dome du bon côté et à la bonne vitesse.

                      Il faut bien entendu que le code prenne en compte tous les cas, par exemple un stroke qui ferait tourner le dome en même temps qu’un son est joué.

                      Tu pourrais par exemple interdire la commande manuelle du dome tant que le stroke courant n’est pas complété,… il y a quelques cas comme cela qu’il faut prévoir, mais rien d’insurmontable.

                      J’utilise une Syren 10 qui est très bien pour ça.

                      Il y a 4 modes de communication sur cette carte. Le mode série (donc qui peut être connecté à un port série de l’arduino, ou avec la librairie SoftSerial), qui a l’avantage d’être super simple à piloter mais ne possède pas de failsafe, je ne m’en sers pas à cause de cela.

                      J’utilise donc la Syren 10 en mode R/C connectée sur une pin “digital IO” et je lui balance des pulses via la fonction writeMicroseconds. Ce mode a une fonction failsafe intégré à la Syren, donc le moteur stoppe dès que l’arduino ne répond plus, je trouve cela sécurisant.

                      C’est plus long à expliquer qu’à programmer, il y a mon code sur astromech, je peux te le renvoyer si tu veux.

                      #16344
                      unitéR4
                      Bloqué

                        Ah OK en passant par l’Arduino pour commander le moteur du dôme aucun problème. Je n’ai pas encore implémenté le tout sur mon droïde car le dôme n’est pas encore installé, mais ta solution m’a l’air au poil.

                        Je pense piloter aussi une carte I2C pour commander 8 servos sur le même principe, ainsi que la carte son (MP3Trigger) et les Logic Displays

                        Vivement qu’on se voie à Facts pour expérimenter tout ça ! :)

                        #16345
                        kethry
                        Bloqué

                          😆 j’avais bien pensé que tu ne t’étais pas trop posé la question pour cause d’absence de dôme.

                          j’ai plein de questions aussi, donc quand j’en serai là c’est clair qu’on pourra échanger pas mal de choses ;)

                          #16346
                          unitéR4
                          Bloqué

                            :) Le problème est réglé: les pulses des 2 voies correspondant au joystick sont recopiées sur les sorties 9 et 10 de l” Arduino tant qu’on n’est pas en mode de saisie de strokes. Dès qu’on bascule l’inter de saisie, les valeurs des pulses restent fixes, une fois la routine du stroke exécutée, le manche reprend sa fonction normale: le système est donc transparent dans les deux sens.

                            J’ai testé avec un servo, mais avec une interface moteur ça doit être pareil.

                            Il faut juste que je prévoie un système de ‘fail safe’ qui fixe les valeurs au neutre en l’absence de signal (pour les cartes qui ne sont pas équipées de ce dispositif d’origine), ça ne devrait pas être trop compliqué.

                            Ci-joint programme RC_strokes mis à jour

                            PROBLEME: je ne peux pas mettre les fichiers ino en pièce jointe ?!

                            #16347
                            kethry
                            Bloqué

                              Pour le “bypass”, je pense que c’est la solution la plus polyvalente, tu laisses “l’utilisateur” libre de son implémentation, parfait !

                              Quand le filtre m’empêche de poster un fichier, je le compresse en .zip, ça devrait passer…

                              #16348
                              unitéR4
                              Bloqué

                                OK je ressaye:
                                [attachment=0]RC_Strokes_frV2.zip[/attachment]

                                #16349
                                Xoff
                                Bloqué

                                  pas le temps de tester actuellement ça mais ça semble super intéressant, je garde ça de coté dès que j’aurai du temps et que R2 sera disponible pour maintenance ;)

                                15 sujets de 1 à 15 (sur un total de 70)
                                • Vous devez être connecté pour répondre à ce sujet.