Aller au contenu


Photo

Naissance de mon quadripède


  • Veuillez vous connecter pour répondre
255 réponses à ce sujet

#101 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 28 juin 2023 - 08:54

je ne comprends pas trop ta remarque " carte i2C " / "carte PWM" ... 

De ce que je vois, ces cartes sont juste des cartes pour faciliter le câblage du pico avec des servo, mais ce sont directement les broches du pico qui pilotent les servo. Il n'y a pas de composants intermédiaire. 

Par contre la différence entre les deux c'est que c'est pas forcément les même broches qui sont utilisées dans les deux cartes ... 
 

J'avais compris que les 2 cartes avaient un protocole différent, l'une en i2c l'autre en PWM

 

je ne suis pas compétent en la matière

 

Ce qui est sûr c'est qu'il y a une grande différence de résultat entre les deux, alors qu'évidemment j'utilise les bonnes broches et les bouts de code données par le fabricant...

 

Pour Oracid, cette ligne de code permet d'étalonner les angles du servo, elle est le résultat d'une calibration entre le 0 et 180. Je n'ai pas trop touché à ces valeurs, cela pourrait expliquer que ça marche 20s et qu'après le comportement est bizarre ? et qu'il est nécessaire d'avoir un delay important après chaque instruction envoyé à un servo ? on parle évidemment des mêmes servos...



#102 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 28 juin 2023 - 09:02

La classe utilisée par la carte Kiktronik (celle qui fonctionne bien) est complexe (pour moi) et en tout cas beaucoup plus que l'autre dont la fonction est très simple.

 

Voici celle de la carte kiktronik:

 

import machine

import utime

 

class KitronikPicoRobotics:

    #Class variables - these should be the same for all instances of the class.

    # If you wanted to write some code that stepped through

    # the servos or motors then this is the Base and size to do that

    SRV_REG_BASE = 0x08

    MOT_REG_BASE = 0x28

    REG_OFFSET = 4

    PRESCALE_VAL = b'\x79'

 

    #setup the PCA chip for 50Hz and zero out registers.

    def initPCA(self):

        # Make sure we are in a known position

        # Soft reset of the I2C chip

        self.i2c.writeto(0,"\x06")

 

        # setup the prescale to have 20mS pulse repetition - this is dictated by the servos.

        # set PWM Frequency Pre Scale.  The prescale value is determined with the formunla:

        # presscale value = round(osc clock / (4096 * update rate))

        # Where update rate is the output modulation frequency required.

        # For example, the output frequency of 50Hz (20ms) for the servo, with the internal oscillator

        # clock frequency of 25 Mhz is as follows:

        # prescale value = round( 25MHZ / (4096 * 50Hz) ) - 1

        # prescale value = round (25000000 / (4096 * 50)) - 1

        # presscale value = 121 = 79h = 0x79

        self.i2c.writeto_mem(108,0xfe,self.PRESCALE_VAL)

 

        #block write outputs to off

        self.i2c.writeto_mem(108,0xfa,"\x00")

        self.i2c.writeto_mem(108,0xfb,"\x00")

        self.i2c.writeto_mem(108,0xfc,"\x00")

        self.i2c.writeto_mem(108,0xfd,"\x00")

       

        # come out of sleep

        self.i2c.writeto_mem(108,0x00,"\x01")

       

        # It takes 500uS max for the oscillator to be up and running once the SLEEP bit (bit 4) has

        # been set to logic 0.  Timings on outputs are not guranteed if the PWM control registers are

        # accessed within the 500uS window.

        utime.sleep_us(500)

   

    # Adjusts the servos.

    # This block should be used if the connected servo does not respond correctly to the 'servoWrite' command.

    # Try changing the value by small amounts and testing the servo until it correctly sets to the angle.

    def adjustServos(self, change):

        if change < -25:

            change = -25

        if change > 25:

            change = 25

        self.PRESCALE_VAL = (121 + change).to_bytes(1,"big")

        self.initPCA()

 

    # To get the PWM pulses to the correct size and zero

    # offset these are the default numbers.

    #Servo multiplier is calcualted as follows:

    # 4096 pulses ->20mS 1mS-> count of 204.8

    # 1mS is 90 degrees of travel, so each degree is a count of 204.8/90->2.2755

    # servo pulses always have  aminimum value - so there is guarentees to be a pulse.

    # in the servos Ive examined this is 0.5ms or a count of 102

    #to clauclate the count for the corect pulse is simply:

    # (degrees x count per degree )+ offset

 

    def servoWrite(self,servo, degrees):

        #check the degrees is a reasonable number. we expect 0-180, so cap at those values.

        if(degrees>180):

            degrees = 180

        elif (degrees<0):

            degrees = 0

        #check the servo number

        if((servo<1) or (servo>8)):

            raise Exception("INVALID SERVO NUMBER") #harsh, but at least you'll know

        calcServo = self.SRV_REG_BASE + ((servo - 1) * self.REG_OFFSET)

        PWMVal = int((degrees*2.2755)+102) # see comment above for maths

        lowByte = PWMVal & 0xFF

        highByte = (PWMVal>>8)&0x01 #cap high byte at 1 - shoud never be more than 2.5mS.

        self.i2c.writeto_mem(self.CHIP_ADDRESS, calcServo,bytes([lowByte]))

        self.i2c.writeto_mem(self.CHIP_ADDRESS, calcServo+1,bytes([highByte]))



#103 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 165 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 28 juin 2023 - 01:17

La classe utilisée par la carte Kiktronik (celle qui fonctionne bien) est complexe (pour moi) et en tout cas beaucoup plus que l'autre dont la fonction est très simple.

 

 

 

    #setup the PCA chip for 50Hz and zero out registers.

    def initPCA(self):

   

 

 

Ok tu as donc raison en effet, je n'avais pas vu le PCA sur la carte, mais si il apparaît dans le code c'est qu'il y est. Donc en effet tu as bien un protocole i2C. 
( Ta carte fait l'équivalent de celle ci : https://www.robot-ma...moteurs-32.html

Du coup dans ta carte avec le PCA, c'est le PCA qui gère le timing du signal des servo. 
Dans l'autre carte la question que je me pose : as tu un composant qui lui aussi va gérer le timing des signaux ou bien est ce ta pico qui gère elle même le timing des signaux ? Si c'est elle qui le gère tu as peut être dans ton code un truc qui perturbe le timing en question.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#104 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 28 juin 2023 - 02:05

 

 

Ok tu as donc raison en effet, je n'avais pas vu le PCA sur la carte, mais si il apparaît dans le code c'est qu'il y est. Donc en effet tu as bien un protocole i2C. 
( Ta carte fait l'équivalent de celle ci : https://www.robot-ma...moteurs-32.html

Du coup dans ta carte avec le PCA, c'est le PCA qui gère le timing du signal des servo. 
Dans l'autre carte la question que je me pose : as tu un composant qui lui aussi va gérer le timing des signaux ou bien est ce ta pico qui gère elle même le timing des signaux ? Si c'est elle qui le gère tu as peut être dans ton code un truc qui perturbe le timing en question.

contrairement à ala carte "I2c", l'autre fait appel à une bibliothèse interne à pico, du style

 

classmachine.PWM(dest*freqduty_u16duty_nsinvert)

 

Je n'ai pas du tout regardé les paramètres, j'ai juste vérifié que les angles étaient cohérents entre la commande et la réalité.



#105 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 28 juin 2023 - 08:23

Pour Oracid, cette ligne de code permet d'étalonner les angles du servo, elle est le résultat d'une calibration entre le 0 et 180.

Surprenant !

Cela manque de parenthèses.

 

Sur Pico, n'existe t-il pas une bibliothèque comme sur Arduino, où on donne un angle sur une sortie, et le servo s'y maintient tant qu'il n'a pas reçu un autre ordre.



#106 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 28 juin 2023 - 09:04

Surprenant !

Cela manque de parenthèses.

 

Sur Pico, n'existe t-il pas une bibliothèque comme sur Arduino, où on donne un angle sur une sortie, et le servo s'y maintient tant qu'il n'a pas reçu un autre ordre.

si, ça existe.

Je viens d'importer celle du bouquin de Dominique Meurice "raspberry Pi Pico et Pico W". J'obtiens exactement le même phénomène. Pendant 20 secondes ça fonctionne et ensuite ça bug. J'ai contrôlé la calibration , les angles sont ok. Peut-être un pb avec les servogeek ?

En fait la totalité des servos s'arrête toutes les 3s, ce qui fait baisser la tête du robot, et repartent immédiatement (sauf pendant les 20 premières secondes !)

 

ca semble fonctionner si je mets un delay de 100ms après la commande des 8 servos, ce qui fait marcher le quadrupède au ralenti !!!

 

Pas grave, j'aurais voulu comprendre, je remonte ma carte I2C.



#107 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 29 juin 2023 - 06:24

Pourrais-tu essayer de mettre un délai après 2 servos, c'est à dire après chaque patte ?



#108 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 29 juin 2023 - 07:28

J'ai trouvé cette page https://core-electro...pberry-pi-pico/ qui contient une vidéo et tout ce qu'il faut savoir pour coder un servo sur Pico.

Voici leur exemple de code, il me semble assez clair et ne présentant aucune difficulté.

A simple example that sweeps a Servo back-and-forth
Requires the micropython-servo library - https://pypi.org/project/micropython-servo/
"""
 
import time
from servo import Servo
 
# Create our Servo object, assigning the
# GPIO pin connected the PWM wire of the servo
my_servo = Servo(pin_id=16)
 
delay_ms = 25  # Amount of milliseconds to wait between servo movements
 
while True:
    for position in range(0, 180):  # Step the position forward from 0deg to 180deg
        print(position)  # Show the current position in the Shell/Plotter
        my_servo.write(position)  # Set the Servo to the current position
        time.sleep_ms(delay_ms)  # Wait for the servo to make the movement
    
    for position in reversed(range(0, 180)):  # Step the position reverse from 180deg to 0deg
        print(position)  # Show the current position in the Shell/Plotter
        my_servo.write(position)  # Set the Servo to the current position


#109 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 29 juin 2023 - 01:10

 

J'ai trouvé cette page https://core-electro...pberry-pi-pico/ qui contient une vidéo et tout ce qu'il faut savoir pour coder un servo sur Pico.

Voici leur exemple de code, il me semble assez clair et ne présentant aucune difficulté.

A simple example that sweeps a Servo back-and-forth
Requires the micropython-servo library - https://pypi.org/project/micropython-servo/
"""
 
import time
from servo import Servo
 
# Create our Servo object, assigning the
# GPIO pin connected the PWM wire of the servo
my_servo = Servo(pin_id=16)
 
delay_ms = 25  # Amount of milliseconds to wait between servo movements
 
while True:
    for position in range(0, 180):  # Step the position forward from 0deg to 180deg
        print(position)  # Show the current position in the Shell/Plotter
        my_servo.write(position)  # Set the Servo to the current position
        time.sleep_ms(delay_ms)  # Wait for the servo to make the movement
    
    for position in reversed(range(0, 180)):  # Step the position reverse from 180deg to 0deg
        print(position)  # Show the current position in the Shell/Plotter
        my_servo.write(position)  # Set the Servo to the current position

@Oracid, Merci pour tes recherches.

 

Ce code ne change strictement rien, il manque la bibliothèque servo qui est importée en début de code, mais je le connais et déjà essayé. Toujours le même problème. D'ailleurs le code en signal PWM est dans tous les cas très simple, contrairement à celui en I2C

 

Mon hypothèse est qu'il y a un problème sur la carte elle-même:

 

* Ca fonctionne pendant 20s et ensuite les servos s'arrêtent toutes les 3s. un pb de code selon moi ne peut pas expliquer cela

* Je ne suis vraiment pas compétent dans le domaine, mais ne peut-il pas y avoir un pb sur les composants de régulation de tension qui pourrait expliquer un fonctionnement pendant 20s et ensuite un micro arrêt des servos toutes les 3s ?

 

Je n'ai pas spécialement besoin ni envie d'en acheter une autre pour vérifier. J'ai remonté mon robot avec ma carte "I2C"



#110 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 165 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 29 juin 2023 - 01:20

Il est en effet possible, si ta carte intègre un convertisseur, que ce dernier soit plus faible sur ta carte "PWM" que celui sur la carte " i2c" et qu'il surchauffe au bout de 20s puis ensuite tu vois le problème en question ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#111 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 29 juin 2023 - 07:54

Ce code ne change strictement rien, il manque la bibliothèque servo qui est importée en début de code, mais je le connais et déjà essayé.

Je ne comprends pas ce que tu veux dire.

La bibliothèque servo est bien importée au début du code.

 

A mon avis, il est absolument impératif que tu réussisses à faire fonctionner tes 8 servos avec ce type de code.

Pour tester l'alimentation, commence avec un servo, puis deux, puis trois, etc.



#112 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 29 juin 2023 - 08:55

Je ne comprends pas ce que tu veux dire.

La bibliothèque servo est bien importée au début du code.

 

A mon avis, il est absolument impératif que tu réussisses à faire fonctionner tes 8 servos avec ce type de code.

Pour tester l'alimentation, commence avec un servo, puis deux, puis trois, etc.

servo n'est pas une bibliothèque intrinsèque au pico, contrairement à "machine" ou "time" par exemple

C'est une bibliothèque micropython développée spécifiquement.

Oui elle est bien importée au début du code, mais il faut l'avoir chargée dans le pico pour que le code que tu as mis fonctionne. (ce que j'ai fait sans succès)

 

from servo import Servo

 

est l'instruction qui récupère l'objet Servo dans un fichier servo.py (la bibliothèque)

 

Cela permet juste d'éviter d'avoir du code dans le programme principal.

 

Encore une fois le code qui utilise le signaux PWM pour commander les servos est très simple et ne pose pas de problème.

Le simple fait que le code fonctionne 20s et qu'après les servos ont des micros arrêts toutes les 3s montre que le code n'est pas en cause.



#113 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 04 juillet 2023 - 12:18

Bonjour !

 

Des nouvelles de Jag'Bot après un intermède technique sur les cartes, dont j'ai confié l'étude au SAV du fournisseur de la carte qui ne fonctionne pas, Waveshare, qui est réactif mais qui ne trouve toujours pas la solution, Pas grave je continue avec ma carte Kiktronic qui est top.

 

Voici mes dernières performances, après une semaine passée en essayant d'optimiser, je ne suis pas loin du max en termes de vitesse :

 

 

* Sur tapis:                        1.02 m/s  (9.8s/10m)

* Sur terrasse composite: 1.08 m/s  (9.3s/10m)

* Sur parquet vitrifié:         0.88 m/s  (11.3/10m)

 

J'ai progressé sur tapis et terrasse composite, en élargissant les pieds. Probablement que sur 10m de tapis je serais au top, mais je n'ai pas un tapis si grand pour tester, j'extrapole...

 

Je n'arrive pas à progresser sur parquet vitrifié.

 

J'ai beaucoup travaillé sur la matière des pieds qui me semble fondamentale. J'ai essayé des mousses de dureté différentes (bof), des caoutchoucs de dureté différente (très bof), des plastiques de dureté différente (re-bof). le meilleur revêtement sur les 3 surfaces reste la peau de phoque en mohair, même sur le parquet vitrifié où on constate un glissement. Dès que j'essaie de mettre un revêtement plus accrochant, c'est la cata. Il faudrait un revêtement en caoutchouc, lisse à l'aller , aggripant au retour, principe de la peau de phoque en plus adhérent... Je regarde le sujet.

 

J'ai aussi refait totalement mon code (faut pas oublier que je suis en formation python !), de façon à envoyer des paramètres (7) individuellement à chaque patte, alors qu'auparavant les changements de paramètres affectaient la totalité des pattes. C'est simple, mais ça me permet avec la même fonction, juste en changeant les paramètres de faire avancer, reculer, tourner, sauter Jag'Bot tout en pouvant jouer sur sa vitesse. Je peux aussi, et ça me sert bien, compenser des défauts de rectitude dans la trajectoire par des paramètres légèrement différents sur les pattes. 

 

J'attaque les capteurs. Pour l'instant je mets un accéléromètre/gyroscope, pour voir ce que je peux en faire, un capteur ultrason monté sur un servo pour gérer les obstacles, un capteur PIR pour gérer l'approche humaine ou animale de Jag'Bot, un capteur sonore pour une commande par la voix (?) et un capteur IR pour éventuellement une télécommande, mais l'idée c'est de le rendre totalement autonome.

 

Et pour ça j'ai fait mes premières soudures, la carte ne prévoyant des connecteurs que pour les servos. Un peu galère, je ne suis ni doué ni fan de ce type d'activité... :bad: 

 

A la prochaine fois pour une petite vidéo de Jag'Bot en liberté... c'est l'adolescence, normal... :ignat_02: 



#114 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 04 juillet 2023 - 01:21

J'ai beaucoup travaillé sur la matière des pieds . . .

Bienvenue, au club !

 

L'idée de la peau de phoque est excellente ! 

Le mieux que j'ai trouvé, et facile à mettre en œuvre et à retirer, c'est l'isolant de tube de cuivre.

Il en existe de plusieurs sortes. Patrick en utilise une assez molle et moi, une plus rigide.

Après quelques temps, il peut s'encrasser et être trop glissant.

Pour le sol, c'est encore plus compliqué. Par exemple, le carrelage de mon séjour qui est lisse, est parfait.

Alors que le carrelage de ma terrasse est antidérapant. Il a des petites bosses. Résultat, il est plus instable et plus glissant . . . Et dire que je l'ai payé plus cher qu'un carrelage normal.

Pour les parquets, cela peut dépendre du bois et du vernis.

A la TRR, c'est du béton ciré ! ! ! 

A mon avis, l'ABS Lego, c'est pas trop mal, à condition de nettoyer la saleté qui le rend plus lisse, de temps en temps. Les rayures sont les bienvenues.



#115 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 04 juillet 2023 - 02:23

A la TRR, c'est du béton ciré ! ! ! 

A priori ça me va bien, je pense que la granulométrie se rapproche de ma terrasse en composite. A voir, compliqué si je dois faire une piste en béton ciré chez moi... :laugh1:



#116 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 08 juillet 2023 - 04:37

Les nouvelles de la semaine :

 

* Jag'Bot est devenu autonome. tout n'est pas parfait, c'est un début, le patinage sur le parquet vitrifié reste un problème !

* Avec l'ajout des capteurs et autres connexions il a pris 140 g, 645g ça commence à faire !

* Sur tapis style jonc de mer il a atteint exactement  1.11 m/s soit 9s pour faire 10m avec les pieds revêtus de peau de phoque. La nature du sol est un paramètre fondamental. il reste du travail pour l'accroche sur piste lisse...

 



#117 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 08 juillet 2023 - 06:48

Excellent !

Il est vraiment sympa. J'adore sa tête.



#118 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 09 juillet 2023 - 09:36

Excellent !

Il est vraiment sympa. J'adore sa tête.

:ignat_02:

 

c'est bien mon drame, je fais des démos à ma famille et mes amis pour montrer mes progrès techniques et tout le monde s'émeut de la bouille de mon quadrupède et est attendri par le robot plutôt que de s'extasier devant sa technicité !!!!



#119 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 7 030 messages
  • Gender:Male

Posté 09 juillet 2023 - 01:25

plutôt que de s'extasier devant sa technicité !!!!

Ah, mais je trouve que tu l'as très bien programmer !

Bon ok, parfois je me demande si tu l'as fait volontairement. En tout cas , la démarche est très sympa.

 

Pour tourner, je ne vois pas très bien ce que tu fais.

En gros, le principe est le même que pour un roulant.

Si les pattes d'un coté vont moins vite que l'autre coté, il va tourner vers ce coté.

Si tu veux qu'il tourne sur place, les pattes d'un coté vont vers l'avant, et l'autre coté, vers l'arrière. Je pense que ce fonctionnement est le plus adapté pour ton quadrupède.

 

Quel servo utilises-tu pour la tête ?



#120 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 124 messages
  • Gender:Male

Posté 09 juillet 2023 - 03:41

Ah, mais je trouve que tu l'as très bien programmer !

Bon ok, parfois je me demande si tu l'as fait volontairement. En tout cas , la démarche est très sympa.

 

Pour tourner, je ne vois pas très bien ce que tu fais.

En gros, le principe est le même que pour un roulant.

Si les pattes d'un coté vont moins vite que l'autre coté, il va tourner vers ce coté.

Si tu veux qu'il tourne sur place, les pattes d'un coté vont vers l'avant, et l'autre coté, vers l'arrière. Je pense que ce fonctionnement est le plus adapté pour ton quadrupède.

 

Quel servo utilises-tu pour la tête ?

 

 

Pour le recul ou les rotations effectivement je joue sur la direction des pattes, vers l'avant d'un côté , vers l'arrière de l'autre, difficile à voir comme ça, la fréquence du mouvement étant élevée. J'ai mis comme paramètre un coeff par patte, qui suivant son signe modifie la direction.

 

Pour ce qui est du mouvement de la tête j'ai un peu galéré mais je ne me suis pas embêté. Les 8 canaux I2C étant pris par les servos des pattes, j'ai voulu programmer un servo  en PWM. Pas de problème ni sur le code , ni sur le fonctionnement, mais en charge (quadrupède en marche) cela provoquait une micro-interruption de la carte qui effondrait le quadrupède. J'ai essayé plusieurs modèle de servo, mais rien à faire. J'ai donc branché un moteur sur un port I2C (la carte a 8 ports I2C pour servo et 4 ports I2C pour moteur)  et là nickel. J'ai fait une butée mécanique pour le moteur et un frein en mousse pour essayer d'être le plus précis possible. Ce n'est pas top, pas hyper précis mais ça remplit la fonction. Je pourrais mettre un moteur pas à pas pour faire mieux, la carte peut supporter en I2C 2 moteurs pas à pas.

 

Bon, ça c'est pour le fun. Je vais explorer maintenant les allures. Pour l'instant je suis en trot sans déphasage, je dois pouvoir faire mieux au niveau de la vitesse.






1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users