Robotique
| bravach |
Posté le 23 Août 2009 à 18:54
|
|
![]() Messages : 191 GCPoints : 18443 |
Salut tout le monde, Greg et moi avons décidé de vous présenter l'un de nos autres hobby au vu des résultats encourageants que nous avons eu cette semaine. J'ai nommé : La Robotique !! Quoi de mieux pour mélanger des compétences d'electricité/electronique/mécanique et de programmation ensemble ? Voici le résultat en images : http://www.alpha-arts.net/robot.php Pour les spécifications complètes : -Chassis Lynxmotion en Lexan avec pattes 2DOF - 8 servomoteurs Hitec Hss-422 -Carte mère Mini atom bot board -Processeur Atom 28 Alimentation : - 5V / 500 mA pour l'electronique - 6V / 3500 mA pour les servos (ca consomme ces petits machins) ![]() ![]() |
|
| Zoglu |
Posté le 23 Août 2009 à 19:03
|
|
![]() Messages : 366 GCPoints : 22183 |
Bravo, j'aime bien sa manière d'avancer, on dirait qu'il fait même des pompes au milieu de la 2ème vidéo |
|
| bravach |
Posté le 23 Août 2009 à 19:11
|
|
![]() Messages : 191 GCPoints : 18443 |
Oui, il fait des pompes, encore une idée tordue de Gregouar ! ![]() ![]() |
|
| Mod |
Posté le 23 Août 2009 à 19:19
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Waw, chapeau, c'est qu'il en a de la gueule, ce bestiau ! La façon dont a été pensé le robot pour avancer est assez amusante à voir, il se projette en avant, un peu comme le fond les gallinacées ^^. Et le coup des pompes : lol ! |
|
| Gregouar |
Posté le 23 Août 2009 à 19:28
|
|
![]() Messages : 989 GCPoints : 84732 |
A vrai dire, c'est le seul moyen que j'ai trouvé de pas trop compliqué pour le faire avancer et qu'il reste en équilibre. En fait, les pompes, c'est la première chose que je lui ait appris. Et le faire danser de gauche à droite aussi, mais je l'ai pas mis dans cette vidéo. Si ça vous intéresse, je peux aussi toujours poster mon code.
Holyspirit c'est :
85 Fichiers sources | 18 349 Lignes de codes 503 Fichiers ressources | 240 Mo 101 Dossiers | 2800 téléchargements |
|
| shûji |
Posté le 23 Août 2009 à 19:33
|
|
![]() Messages : 339 GCPoints : 80803 |
Mdr oué les pompes XD Super, on "l'adopterait" presque XD il est juste pas très démonstratif |
|
| Darktib |
Posté le 23 Août 2009 à 23:58
|
|
![]() Messages : 4017 GCPoints : 347288 |
Wow, énorme ! Ca doit etre géant de choisir les composants, puis de les assembler, et de programmer le tout après... |
|
| Scheindorf |
Posté le 24 Août 2009 à 09:20
|
|
![]() Messages : 77 GCPoints : 30404 |
tu utilises un réseau neuro ou un algorithme génétique pour lui apprendre les mouvements ou tu programmes tout en dur ? Visiblement la méthode d'apprentissage par l'echec marche bien avec ce genre de bidules, et permet des résultats assez surprenant comme la possibilité de se rattraper au cas ou il trébuche. J'ai une ami chercheur en robotique, on en parle parfois... J'aurai bien aimer tenter le coup moi aussi, mais pas vraiment les sous pour acheter du matos, surtout que ça coute chere ces conneries. Tu me diras pour ecrire les algorithmes j'en ai pas besoin.
Studios Corridor
--Participez a la constitution de la base de donnée Triathlon!-- http://triathlon.lecorridor.net/question.php |
|
| Gregouar |
Posté le 24 Août 2009 à 10:40
|
|
![]() Messages : 989 GCPoints : 84732 |
On commence par facile, donc je code tout en dur. De plus, on a que 16 ko de mémoire et aucun détecteur pour le moment, donc on va pas aller loin. Pour les sous, le notre à couté à peu près 350 de ce que je me souviens. Comme ça, ça peut vous donner une idée du budget. Voilà ce que donne mon code : Spoiler - Cliquez pour afficher Code : 'Declaration des variables serpos var word(8) continue var bit instructionEnCours var bit servoEnCours var Nib poseEnCours var Nib timer var word temps var word patteEnCours var Nib ' 0 = HOMEPOSE, 1 = AVANCER, 2 = TURNRIGHT, 3 = TURNLEFT instructions var Nib(32) nbrInstruction var Byte noInstruction var Byte 'Initialisation des variables continue = 1 servoEnCours = 1 poseEnCours = 0 timer = 0 temps = 1000 patteEnCours = 0 instructionEnCours = 0 nbrInstruction = 32 noInstruction = 0 'Liste des insrtructions à suivre, marche, tourner, etc instructions(0) = 0 instructions(1) = 1 instructions(2) = 1 instructions(3) = 1 instructions(4) = 1 instructions(5) = 3 instructions(6) = 3 instructions(7) = 3 instructions(8) = 3 instructions(9) = 3 instructions(10) = 3 instructions(11) = 1 instructions(12) = 1 instructions(13) = 1 instructions(14) = 1 instructions(15) = 1 instructions(16) = 1 instructions(17) = 2 instructions(18) = 2 instructions(19) = 2 instructions(20) = 2 instructions(21) = 2 instructions(22) = 2 instructions(23) = 1 instructions(24) = 1 instructions(25) = 1 instructions(26) = 1 instructions(27) = 1 instructions(28) = 4 instructions(29) = 4 instructions(30) = 4 instructions(31) = 4 'Initialisation de la position de départ gosub homepos main if continue = 1 then 'Déplacement des servomoteurs jusqu'à la position désirée, pendant le temps imparti for timer = 0 to temps step 1 gosub servoController next 'Gestion des instructions if instructions(noInstruction) = 0 then gosub homepos elseif instructions(noInstruction) = 1 gosub avancerRobot elseif instructions(noInstruction) = 2 gosub turnrightRobot elseif instructions(noInstruction) = 3 gosub turnleftRobot elseif instructions(noInstruction) = 4 gosub pompeRobot endif if instructionEnCours = 0 then noInstruction = noInstruction + 1 endif if noInstruction >= nbrInstruction then noInstruction = 0 endif endif goto main End 'Initialiseur de la position de départ homepos patteEnCours = 1 gosub milieuPatte gosub abaisserPatte patteEnCours = 3 gosub milieuPatte gosub abaisserPatte patteEnCours = 2 gosub reculerPatte gosub abaisserPatte patteEnCours = 4 gosub reculerPatte gosub abaisserPatte return 'Script de marche, c'est un peu dans tous les sens car j'ai du beaucoup chercher dans quel ordre lever les pattes pour ne pas qu'il perde l'équilibre. avancerRobot if instructionEnCours = 0 then poseEnCours = 0 instructionEnCours = 1 else if poseEnCours = 0 then patteEnCours = 4 gosub souleverPatte poseEnCours = 1 elseif poseEnCours = 1 patteEnCours = 4 gosub milieuPatte poseEnCours = 2 elseif poseEnCours = 2 patteEnCours = 4 gosub abaisserPatte poseEnCours = 9 elseif poseEnCours = 3 patteEnCours = 1 gosub souleverPatte 'On soulève la patte en plus pour faire contrepoids. patteEnCours = 4 gosub souleverPatte poseEnCours = 4 elseif poseEnCours = 4 patteEnCours = 1 gosub avancerPatte poseEnCours = 5 elseif poseEnCours = 5 patteEnCours = 1 gosub abaisserPatte patteEnCours = 4 gosub abaisserPatte poseEnCours = 12 elseif poseEnCours = 6 patteEnCours = 3 gosub souleverPatte patteEnCours = 2 gosub souleverPatte poseEnCours = 7 elseif poseEnCours = 7 patteEnCours = 2 gosub milieuPatte poseEnCours = 8 elseif poseEnCours = 8 patteEnCours = 2 gosub abaisserPatte patteEnCours = 3 gosub abaisserPatte poseEnCours = 3 elseif poseEnCours = 9 patteEnCours = 3 gosub souleverPatte patteEnCours = 2 gosub souleverPatte poseEnCours = 10 elseif poseEnCours = 10 patteEnCours = 3 gosub avancerPatte poseEnCours = 11 elseif poseEnCours = 11 patteEnCours = 2 gosub abaisserPatte poseEnCours = 6 elseif poseEnCours = 12 patteEnCours = 1 gosub milieuPatte patteEnCours = 3 gosub milieuPatte patteEnCours = 2 gosub reculerPatte patteEnCours = 4 gosub reculerPatte poseEnCours = 0 instructionEnCours = 0 endif endif return 'Script pour tourner à gauche turnleftRobot if instructionEnCours = 0 then poseEnCours = 0 instructionEnCours = 1 else if poseEnCours = 0 then patteEnCours = 1 gosub souleverPatte poseEnCours = 1 elseif poseEnCours = 1 patteEnCours = 1 gosub avancerPatte poseEnCours = 2 elseif poseEnCours = 2 patteEnCours = 1 gosub abaisserPatte poseEnCours = 3 elseif poseEnCours = 3 patteEnCours = 4 gosub souleverPatte poseEnCours = 4 elseif poseEnCours = 4 patteEnCours = 1 gosub milieuPatte patteEnCours = 3 gosub avancerPatte patteEnCours = 2 gosub reculerFortementPatte poseEnCours = 5 elseif poseEnCours = 5 patteEnCours = 4 gosub abaisserPatte poseEnCours = 6 elseif poseEnCours = 6 patteEnCours = 2 gosub souleverPatte poseEnCours = 7 elseif poseEnCours = 7 patteEnCours = 2 gosub reculerPatte poseEnCours = 9 elseif poseEnCours = 9 patteEnCours = 3 gosub souleverPatte patteEnCours = 2 gosub souleverPatte poseEnCours = 10 elseif poseEnCours = 10 patteEnCours = 3 gosub milieuPatte poseEnCours = 11 elseif poseEnCours = 11 patteEnCours = 3 gosub abaisserPatte patteEnCours = 2 gosub abaisserPatte poseEnCours = 0 instructionEnCours = 0 endif endif return 'Script pour tourner à droite turnrightRobot if instructionEnCours = 0 then poseEnCours = 0 instructionEnCours = 1 else if poseEnCours = 0 then patteEnCours = 3 gosub souleverPatte poseEnCours = 1 elseif poseEnCours = 1 patteEnCours = 3 gosub avancerPatte poseEnCours = 2 elseif poseEnCours = 2 patteEnCours = 3 gosub abaisserPatte poseEnCours = 3 elseif poseEnCours = 3 patteEnCours = 2 gosub souleverPatte poseEnCours = 4 elseif poseEnCours = 4 patteEnCours = 3 gosub milieuPatte patteEnCours = 1 gosub avancerPatte patteEnCours = 4 gosub reculerFortementPatte poseEnCours = 5 elseif poseEnCours = 5 patteEnCours = 2 gosub abaisserPatte poseEnCours = 6 elseif poseEnCours = 6 patteEnCours = 4 gosub souleverPatte poseEnCours = 7 elseif poseEnCours = 7 patteEnCours = 4 gosub reculerPatte poseEnCours = 9 elseif poseEnCours = 9 patteEnCours = 1 gosub souleverPatte patteEnCours = 4 gosub souleverPatte poseEnCours = 10 elseif poseEnCours = 10 patteEnCours = 1 gosub milieuPatte poseEnCours = 11 elseif poseEnCours = 11 patteEnCours = 1 gosub abaisserPatte patteEnCours = 4 gosub abaisserPatte poseEnCours = 0 instructionEnCours = 0 endif endif return 'Script pour faire des pompes pompeRobot if instructionEnCours = 0 then poseEnCours = 0 instructionEnCours = 1 else if poseEnCours = 0 then patteEnCours = 1 gosub souleverPatte patteEnCours = 2 gosub souleverPatte patteEnCours = 3 gosub souleverPatte patteEnCours = 4 gosub souleverPatte poseEnCours = 1 temps = 300 elseif poseEnCours = 1 patteEnCours = 1 gosub abaisserPatte patteEnCours = 2 gosub abaisserPatte patteEnCours = 3 gosub abaisserPatte patteEnCours = 4 gosub abaisserPatte poseEnCours = 2 temps = 100 elseif poseEnCours = 2 poseEnCours = 0 instructionEnCours = 0 endif endif return 'Différentes fonctions avec des valeurs prédéfinies pour déplacer les pattes. souleverPatte temps = 75 if patteEnCours = 1 then serpos(1) = 2000 elseif patteEnCours = 2 serpos(3) = 2000 elseif patteEnCours = 3 serpos(5) = 1000 elseif patteEnCours = 4 serpos(7) = 1000 endif return abaisserPatte temps = 50 if patteEnCours = 1 then serpos(1) = 1000 elseif patteEnCours = 2 serpos(3) = 1000 elseif patteEnCours = 3 serpos(5) = 2000 elseif patteEnCours = 4 serpos(7) = 2000 endif return avancerPatte temps = 50 if patteEnCours = 1 then serpos(0) = 2000 elseif patteEnCours = 2 serpos(2) = 2000 elseif patteEnCours = 3 serpos(4) = 1000 elseif patteEnCours = 4 serpos(6) = 1000 endif return avancerFortementPatte temps = 50 if patteEnCours = 1 then serpos(0) = 2500 elseif patteEnCours = 2 serpos(2) = 2500 elseif patteEnCours = 3 serpos(4) = 500 elseif patteEnCours = 4 serpos(6) = 500 endif return reculerPatte temps = 100 if patteEnCours = 1 then serpos(0) = 1000 elseif patteEnCours = 2 serpos(2) = 1000 elseif patteEnCours = 3 serpos(4) = 2000 elseif patteEnCours = 4 serpos(6) = 2000 endif return reculerFortementPatte temps = 100 if patteEnCours = 1 then serpos(0) = 750 elseif patteEnCours = 2 serpos(2) = 750 elseif patteEnCours = 3 serpos(4) = 22250 elseif patteEnCours = 4 serpos(6) = 2250 endif return milieuPatte temps = 50 if patteEnCours = 1 then serpos(0) = 1500 elseif patteEnCours = 2 serpos(2) = 1500 elseif patteEnCours = 3 serpos(4) = 1500 elseif patteEnCours = 4 serpos(6) = 1500 endif return 'Fonction qui envoi une pulse à chaque servo à son tour pour le déplacement de ceux-ci servoController if servoEnCours = 1 then low p0 pulsout p0,serpos(0) servoEnCours = 2 elseif servoEnCours = 2 low p1 pulsout p1,serpos(1) servoEnCours = 3 elseif servoEnCours = 3 low p2 pulsout p2,serpos(2) servoEnCours = 4 elseif servoEnCours = 4 low p3 pulsout p3,serpos(3) servoEnCours = 5 elseif servoEnCours = 5 low p4 pulsout p4,serpos(4) servoEnCours = 6 elseif servoEnCours = 6 low p5 pulsout p5,serpos(5) servoEnCours = 7 elseif servoEnCours = 7 low p6 pulsout p6,serpos(6) servoEnCours = 8 elseif servoEnCours = 8 low p7 pulsout p7,serpos(7) servoEnCours = 1 endif 'pause 5 return Citation :
J'avoue que c'est assez jouissif, c'est un peu comme créer la vie, voir sa création évoluer petit à petit.
Dernière édition le 24 Août 2009 à 10:41
Holyspirit c'est :
85 Fichiers sources | 18 349 Lignes de codes 503 Fichiers ressources | 240 Mo 101 Dossiers | 2800 téléchargements |
|
| bravach |
Posté le 24 Août 2009 à 11:05
|
|
![]() Messages : 191 GCPoints : 18443 |
La première fois qu'il s'est déplacé, on s'est écrié : "Il marche ! Il est vivant ! Mouahahahaaha ! ![]() ![]() |
|
| Devil'sCry |
Posté le 24 Août 2009 à 11:10
|
|
![]() Messages : 136 GCPoints : 47714 |
Ca va, c'est simpa. De futurs programmeurs informatique industrielles comme moi?
We are falling, The light is calling, Black night, Dark sky, The Devil's Cry.
|
|
| bravach |
Posté le 24 Août 2009 à 13:17
|
|
![]() Messages : 191 GCPoints : 18443 |
Citation :
Pas tout à fait mais presque ! Je fait des études d'ingénieur industrielles electromécanique/automatisation Et greg, et ben, il ne sait pas encore (soit game design, soit programmation, soit ... ou alors tout ensemble ![]() ![]() |
|
| Darktib |
Posté le 24 Août 2009 à 20:30
|
|
![]() Messages : 4017 GCPoints : 347288 |
J'adore le code^^ Est-ce du fortran ? | |
| bravach |
Posté le 25 Août 2009 à 09:43
|
|
![]() Messages : 191 GCPoints : 18443 |
Non, du Basic (comme la plupart des microcontrolleurs, mais on peut aussi les programmer en C, et puis en Java pour le JavelinStamp)
![]() ![]() |
|
| Xenon3K |
Posté le 25 Août 2009 à 10:22
|
|
![]() Messages : 17 GCPoints : 4601 |
J'ai monté un Robot (une partie chaque semaine chez le marchand de journeaux..) mais il n'a jamais fonctionné... :( Sinon j'aimerai bien avoir un Lego Mindstorm :) |
|
| bravach |
Posté le 25 Août 2009 à 12:36
|
|
![]() Messages : 191 GCPoints : 18443 |
Les mindstorm sont sympa et permettent déja beaucoup de chose ! (Si tu n'y connais rien, tu passes par l'interface normale où tout se "programme" sous forme de bloc, c'est vraiment intuitif et à la portée de monsieur tout le monde. Et si tu t'y connais, tu peux aussi le programmer en dur). Le prix peut paraitre prohibitif mais à y réfléchir, ce n'est pas grand chose et tu es sûr que ça fonctionne et que tu ne fera pas de connerie en le montant. Alors qu'un robot comme celui-ci, le moindre branchement à la portnawak et tu grilles toute l'electronique (et même une mauvaise programmation peut griller l'electronique, car c'est toi qui choisi dans quel circuit injecter quelle tension). J'ai d'ailleurs bien cru avoir démolli un ou deux servos ![]() ![]() |
|
| Darktib |
Posté le 25 Août 2009 à 17:37
|
|
![]() Messages : 4017 GCPoints : 347288 |
J'imagine la peur : tout marche bien, tu change deux lignes...puis... CLAC! *MEEEERDE les servos!* ... Ah non, tout fonctionne... ->[] |
|
| Gregouar |
Posté le 25 Août 2009 à 18:48
|
|
![]() Messages : 989 GCPoints : 84732 |
Ça me fait penser qu'un moment le robot claquait quand il bougeait une patte ... un écrou qui s'était dévissé.
Dernière édition le 26 Août 2009 à 10:56
Holyspirit c'est :
85 Fichiers sources | 18 349 Lignes de codes 503 Fichiers ressources | 240 Mo 101 Dossiers | 2800 téléchargements |
|
| Mod |
Posté le 25 Août 2009 à 20:58
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Juste par curiosité, servo = ?. Je n'y avais pas vraiment fait attention, mais vu qu'on en parle, et que le peu d'électronique que je connaisse ne va pas jusque là... ^^ | |
| Scheindorf |
Posté le 25 Août 2009 à 21:43
|
|
![]() Messages : 77 GCPoints : 30404 |
Bah, en gros c'est juste un moteur asservie a une valeur angulaire de référence et capable de la conservée. tu lui soumet une valeur angulaire, et hop il y va et y reste, et si y a déviation il reviens a sa place.
Studios Corridor
--Participez a la constitution de la base de donnée Triathlon!-- http://triathlon.lecorridor.net/question.php |
|









