Robotique

bravach Message lu Posté le 23 Août 2009 à 18:54 Bulle
Avatar de bravach
Membre Confirmé

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 !! :proud:

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)
Image

Image
Zoglu Message lu Posté le 23 Août 2009 à 19:03 Bulle
Avatar de Zoglu
Membre Avancé

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 :happy:
bravach Message lu Posté le 23 Août 2009 à 19:11 Bulle
Avatar de bravach
Membre Confirmé

Messages : 191
GCPoints : 18443
Oui, il fait des pompes, encore une idée tordue de Gregouar ! :lol:
Image

Image
Mod Message lu Posté le 23 Août 2009 à 19:19 Bulle
Avatar de Mod
Webmaster

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 Message lu Posté le 23 Août 2009 à 19:28 Bulle
Avatar de Gregouar
Membre Evolué

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. :smile:

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. :question:
Holyspirit c'est :
85 Fichiers sources | 18 349 Lignes de codes
503 Fichiers ressources | 240 Mo
101 Dossiers | 2800 téléchargements
shûji Message lu Posté le 23 Août 2009 à 19:33 Bulle
Avatar de shûji
Membre Confirmé

Messages : 339
GCPoints : 80803
Mdr oué les pompes XD
Super, on "l'adopterait" presque XD

il est juste pas très démonstratif :snigger:
Darktib Message lu Posté le 23 Août 2009 à 23:58 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 24 Août 2009 à 09:20 Bulle
Avatar de Scheindorf
Explorateur

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. :crazy:
Studios Corridor

--Participez a la constitution de la base de donnée Triathlon!--
http://triathlon.lecorridor.net/question.php
Gregouar Message lu Posté le 24 Août 2009 à 10:40 Bulle
Avatar de Gregouar
Membre Evolué

Messages : 989
GCPoints : 84732
On commence par facile, donc je code tout en dur. :proud:

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 :

Ca doit etre géant de choisir les composants, puis de les assembler, et de programmer le tout après...



J'avoue que c'est assez jouissif, c'est un peu comme créer la vie, voir sa création évoluer petit à petit. :grin:
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 Message lu Posté le 24 Août 2009 à 11:05 Bulle
Avatar de bravach
Membre Confirmé

Messages : 191
GCPoints : 18443
La première fois qu'il s'est déplacé, on s'est écrié : "Il marche ! Il est vivant ! Mouahahahaaha ! :twisted: "
Image

Image
Devil'sCry Message lu Posté le 24 Août 2009 à 11:10 Bulle
Avatar de Devil'sCry
Explorateur

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 Message lu Posté le 24 Août 2009 à 13:17 Bulle
Avatar de bravach
Membre Confirmé

Messages : 191
GCPoints : 18443

Citation :

De futurs programmeurs informatique industrielles comme moi?



Pas tout à fait mais presque ! Je fait des études d'ingénieur industrielles electromécanique/automatisation :love:

Et greg, et ben, il ne sait pas encore (soit game design, soit programmation, soit ... ou alors tout ensemble :absurd: )
Image

Image
Darktib Message lu Posté le 24 Août 2009 à 20:30 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
J'adore le code^^ Est-ce du fortran ?
bravach Message lu Posté le 25 Août 2009 à 09:43 Bulle
Avatar de bravach
Membre Confirmé

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)
Image

Image
Xenon3K Message lu Posté le 25 Août 2009 à 10:22 Bulle
Avatar de Xenon3K
Nouveau Membre

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 Message lu Posté le 25 Août 2009 à 12:36 Bulle
Avatar de bravach
Membre Confirmé

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 :cry: mais en fait, c'était simplement un manque de courant ! :lol:
Image

Image
Darktib Message lu Posté le 25 Août 2009 à 17:37 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 25 Août 2009 à 18:48 Bulle
Avatar de Gregouar
Membre Evolué

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é. :absurd:
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 Message lu Posté le 25 Août 2009 à 20:58 Bulle
Avatar de Mod
Webmaster

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 Message lu Posté le 25 Août 2009 à 21:43 Bulle
Avatar de Scheindorf
Explorateur

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
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0535 secondes