Aller au contenu


Photo
- - - - -

PPE résolveur de Rubik's Cube


18 réponses à ce sujet

#1 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 25 mai 2012 - 10:33

Bonsoir, :blush:

Je suis actuellement en 1e S SI. Cependant, nos professeurs nous ont pressé de discuter et de se renseigner/réfléchir sur les PPE de l'an prochain (les TPE étant passés). Notre groupe a retenu l'idée d'un robot résolveur de Rubik's Cube. On cherche à s'investir dès maintenant. D'un point de vue logique algorithmique/mécanique, on a tracé les grandes lignes et idées, qui sont réalisables.

Il fonctionnera avec 4 pinces rotatives à ouverture et fermeture avec, on pense, servos. Une caméra filmera pour l'analyse. Cependant on se pose des questions auxquelles vous devriez pouvoir répondre, avant de soumettre le projet pour vérifier la 'faisabilité'. Notre gros "soucis" se pose à la laison logicielle-mécanique et l'interaction des gestionneurs électroniques.

=> Peut-on, déjà, connecter un ordinateur avec une carte, où un programme tournerait en arrière-plan (programmé en C ou Basic de préférence), capable de détecter les entrées dans la carte (venant des capteurs) et d'envoyer des sorties ? (en gros, est-ce qu'on peut récupérer les valeurs prises "par des fils" sur un PC avec un programme ?)

=> Peut-on analyser un flux vidéo venant d'une caméra sur un ordinateur en récupérant les valeurs de pixels déterminés (en donnant une marge de valeurs possibles pour la couleur détectée), depuis un programme indépendant (voire intégré au premier) ?

=> Les servos sont-ils une bonne solution pour la rotation et l'ouverture/fermeture des pinces, et peut-on grâce aux sorties de la carte les activer par deux entrées différentes ? (genre un servo à 3 fils, une masse, et deux entrées pour les deux états en fonction de la carte ?)

On a pas vraiment traité de ce genre de choses cette année, alors si vous pouviez me donner des liens utiles/des conseils (et non, on abandonnera pas ;) ), ça serait sympathique. :)

#2 rbot99

rbot99

    Membre passionné

  • Membres
  • PipPipPip
  • 514 messages
  • Gender:Male

Posté 26 mai 2012 - 01:59

comment compte tu faire pour détecter que tu a une case rouge a coté du case verte et une case bleu a coté d'une case noire?tu compte mettre des micro vraiment micro capteurs dans les case?ou lui mettre un trés gros rubik cube?
cordialement
rbot99
N'entretiens pas l'espoir de ce qui ne peut être espéré , Pythagore

#3 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 26 mai 2012 - 09:34

Ouh l'erreur !
J'ai écrit "flux audio au lieu de vidéo" :blush:
Je vais voir si je peux éditer.
Sinon pour détecter, comme la caméra est fixe, on a juste à trouver le moyen, dans un programme, d'appeler une fonction (imaginons) getPixel(coord1, coord2, fluxvideo1); et de regarder s'il se situe dans une des six plages de couleur. Si non, il décale plusieurs fois de pixel pour vérifier que c'est pas juste une poussière, et s'il ne trouve pas dans la plage ou devrait être la face, eh bien message d'erreur et arrêt du programme.

#4 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 26 mai 2012 - 10:57

Je double poste pour demander quelles sont les capacités d'un PIC ?
Peut-on écrire autant de lignes de code que l'on souhaite ? Autant de variables internes ?

#5 Esprit

Esprit

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 26 mai 2012 - 12:46

Tes questions ne veulent rien dire. C'est quoi la capacité d'un PIC ?
Quoi comme PIC ? Parce qu'il y en a quelques uns... Et entre un PIC17F887 et un dsPIC30Fxxxx, il y a une fameuse différence.

Et puis, autant de lignes de code qu'on veut ? Non. Mais dans un PC ou un supercalculateur non plus.

Bref, première chose à faire : te documenter ! Et regarder ce qui a déjà été fait.

Une fois que tu auras défini ton projet un peu plus clairement (avec un cahier des charges un minimum complet), on pourra discuter plus précisément et te filer un coup de main. Mais avant toute chose, sais-tu résoudre le rubik's cube ? :lol:

Esprit
*Rêve d'en caser un dans un robot*


#6 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 26 mai 2012 - 08:05

Oui je sais le résoudre ^^
Mais avant de créer ce cahier des charges, des diagrammes et des organigrammes, on a besoin de savoir si un programme en C peut, par exemple avec une librairie, récupérer l'état des entrées d'une carte (qui n'a que la fonction de recevoir et d'envoyer des signaux sur des entrées.

Mais voilà la principe de base :
Un programme (comme n'importe quel programme) est écrit en C (langage que 2 de notree groupe dont moi maîtrisons), et qui possèderait 2 librairies :
- Une qui récupère le flux vidéo pris par une caméra et contient des fonctions d'analyse simples (du genre getPixelColor())
- Une qui permet la connexion à une carte (par de l'USB de préférence), et qui peut récupérer des états d'entrées, et dont on peut aussi envoyer des entrées (où la carte "maintient" ses états tant qu'on donne pas une information contraire). Voici un exemple de ce qu'on pourrait avoir :
*Le PC envoie la valeur 1 à la sortie 2 de la carte => La carte met sous tension la sortie 2 (donc elle passe à 1 en gros ^^) et donc alimente par exemple le moteur de rotation de la pince
*Un contact qui détecte le quart de tour laisse passer le courant dans un fil qui mène à l'entrée 2
*Le PC analyse la carte et trouve un 2 => La sortie 2 passe à 0 et le moteur s'arrête à un quart de tour
NB: Si un servo tout fait s'arrête à un quart de tour en envoyant qu'il l'a réalisé ça serait plus précis et efficace, mais je sais pas si ça existe.

Vous avez l'idée. Ca existe ?

EDIT: Pour la vidéo, j'ai trouvé, on peut utiliser OpenCV : http://fr.wikipedia.org/wiki/OpenCV

#7 Esprit

Esprit

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 26 mai 2012 - 09:43

Alors...

Oui, c'est faisable avec une carte arduino. Sans problèmes. C'est juste une liaison série à mettre en place, rien d'extrèmement sorcier en soi. Surtout si vous maitrisez le C. Il y a bien d'autres cartes qui peuvent gérer ça et vous pouvez également en faire une vous même. Je ne veux pas vous obliger à prendre une arduino. Disons que c'est la solution "facile".

Ensuite, le traitement d'image avec OpenCV est bien sûr faisable également. C'est très puissant comme bibliothèque. Mais ça s'improvise pas. Ça m'intéresse de voir ce que vous allez pouvoir en faire parce que je compte bien m'y mettre cet été.

Et pour les servomoteurs, les servomoteurs "basiques" se contentent d'aller à la position qu'on leur indique. (généralement entre 0 et 180°)
Il y a moyen de les bidouiller pour rajouter un fil sur le potentiomètre du servomoteur et du coup connaitre leur position. Mais il existe aussi des servomoteurs avec retour d'information (comme les AX12 de chez Robotis) Mais ils sont plus chers et pas toujours facile à utiliser. AX12 et arduino, ça se fait mais c'est plus complexe que pour un simple servomoteur.

Bon courage en tout cas ! ;)

Esprit
*Rêve d'en caser un dans un robot*


#8 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 26 mai 2012 - 09:54

OK, merci pour le nom. Je vais faire des recherches. Mais quand tu dis "liaison série à mettre en place", tu veux dire qu'on doit nous-même établir un protocole de transfert de données, où une librairie intégrable communique "toute seule" avec la carte par envoi de valeurs simples ?

Pour OpenCV, je ne m'y connais pas du tout, mais je vais découvrir, et comme on ne risque que de n'utiliser des fonctions de base de la librairie on ne cherchera pas dans un premier temps à creuser toutes les fonctions.

Egalement, il faut savoir que jamais nous n'avons fait ce genre de choses. Je suis en exploration totale. Mais avoir le pouvoir de réaliser ce genre de chose est vraiment sympa.
Et un servo "basique" comme tu dis, qui ne va que de 0 à 180°, c'est sur un tour complet ? Ou un demi-tour ? (quoique peut important pour le moment)

#9 Esprit

Esprit

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 26 mai 2012 - 10:19

OK, merci pour le nom. Je vais faire des recherches. Mais quand tu dis "liaison série à mettre en place", tu veux dire qu'on doit nous-même établir un protocole de transfert de données, où une librairie intégrable communique "toute seule" avec la carte par envoi de valeurs simples ?


Oui, il faut implémenter un protocole. Donc à toi de définir ton protocole. En disant par exemple dans le programme de l'arduino que si elle reçoit "s1:90" ça veut dire que le servomoteur 1 doit aller à l'angle 90°.

Egalement, il faut savoir que jamais nous n'avons fait ce genre de choses. Je suis en exploration totale. Mais avoir le pouvoir de réaliser ce genre de chose est vraiment sympa.
Et un servo "basique" comme tu dis, qui ne va que de 0 à 180°, c'est sur un tour complet ? Ou un demi-tour ? (quoique peut important pour le moment)


Il ne peut pas faire un tour complet, juste 180°. Il y a également des servomoteurs qui font 300° (AX12,encore..) voir même des tours complets.
Il est aussi possible d'utiliser des moteurs pas à pas ou des moteurs à courant continu. (Mais plus complexes à gérer qu'un servomoteur).

Esprit
*Rêve d'en caser un dans un robot*


#10 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 26 mai 2012 - 11:52

Oui ça je me doutais que l'Arduino avait un programme interne à définir. Mais est-ce que cette carte peut dialoguer grâce à une librairie fournie oú l'on enverrais le code "s1:90" en chaine en argument de fonction, ou il faut trouver le flux entrant d'un port PC et lexploiter directement ?

#11 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 192 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é 27 mai 2012 - 02:00

Bon je vais ajouter mon grain de sel sur l'édifice ;)

alors déjà, tu te lance dans un projet long et complexe;) mais si tu es motivé tu vas y arriver à condition de faire les choses bien ! ;)

Je te propose déjà de commencer à faire un cahier des charges simple qui te servira une fois complet de carnet de bord pour ton projet.

Tu as un petit tuto ( pas encore complètement fini mais l'essentiel est là ) dispo ici http://www.robot-maker.com/forum/topic/6497-projet-barobot-mobot-home-made/page__view__findpost__p__43479 ( tuto(6)pdf )

tu pourras ainsi dégager le différentes fonctions tel que :

effectuer les mouvement du rubikcs
être adapté à la taille du rubicks
élaborer la commande de mouvement en fonction des couleurs
connaitre la position des différentes couleurs

tu verras que l'usage d'une caméra n'est pas forcément nécessaire ;)

et puisqu'il faudra ensuite commencer par quelque chose je te conseil de commencer par la base mécanique ;)
je vois bien moi aussi un système de 3 pinces ;) je te conseil de faire des dessins avec ton rubicks dans les mains afin de voir quel serait la façon la plus simple de faire ;)

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  

 

 

 


#12 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 192 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é 27 mai 2012 - 02:04

juste un petit lien pour illustrer comment faire sans utiliser de caméra ;) http://wrongway.org/cube/solve.html

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  

 

 

 


#13 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 27 mai 2012 - 08:32

Niveau mécanique, l'idée est claire. Je vais voir avec mon équipe à l'élaboration de ce cahier des charges. Mais pour répondre à tes remarques (qui sont justes, par ailleurs) :
"effectuer les mouvement du rubikcs => Les pices + servos (si un servo va de 0 à 180° y'a un réducteur donc on peut avoir un tour complet (tu vois l'idée je suppose)) + maintient des pinces "perpendiculaires" qui le gardent en place (en fait en théorie avec 2 pinces on en a assez, mais 4 c'est plus rapide et facile pour la résolution et la programmation)
être adapté à la taille du rubicks => Les gens (2) chargés de cette partie concevront les pièces pour la taille d'un Rubik's Cube, qui en fait n'existe que dans une seule version
élaborer la commande de mouvement en fonction des couleurs => Algorithme que je vais mettre en place avec un autre membre
connaitre la position des différentes couleurs " => Il suffit de connaître la position de départ, et quand on bouge les couleurs se retrouvent logiquement à la place des suites des mouvements. De toute façon soit on fera un algorithme pas à pas (càd on a besoin d'une actualisation des positions virtuellement), soit une liste de mouvements à effectuer qui se fera directement)

#14 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 27 mai 2012 - 09:21

J'ai effectué de brèves recherches et juste une petite question à laquelle vous allez pouvoir répondre : on utiliser la librairie Serial pour communiquer entre le PC et la carte arduino en USB. Jusque là, d'accord. Mais tout à l'heure on a dit que l'arduino avait un programme interne. Alors il y a deux IDE ou d'un côté on envoie sur la carte et de l'autre c'est le PC qui lance le programme ?

#15 Esprit

Esprit

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 27 mai 2012 - 09:37

Pour programmer l'arduino, tu utilises un IDE. Cet IDE est gratuit et fourni sur le site d'arduino. Avec ce programme (qui tourne sur l'ordinateur donc), tu codes le programmes à envoyer sur l'arduino.

Et pour communiquer, tu as un "moniteur sériel" dans le logiciel arduino.
Et tu dois prévoir la communication dans ton programme sur la carte.

Esprit
*Rêve d'en caser un dans un robot*


#16 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 27 mai 2012 - 10:02

Je vois ce que tu veux dire. Je vois comment on fait pour envoyer le programme sur la carte (avec l'IDE) qui réagit en fonction de l'entrée de la liaison série sur cette dernière. Mais pour communiquer avec l'ordinateur, il faut bien un autre programme 'programmé' qui lui tourne sur PC, non ?

#17 robin25

robin25

    Nouveau membre

  • Membres
  • 2 messages

Posté 28 mai 2012 - 06:47

Pour envoyer des ordres a l'arduino tu peu soit utilisé l'interface serie de l'IDE arduino qui permet de lire et d'ecrire des donnes sur le port serie de l'arduino sinon tu peux utiliser ton arduino avec a peu pres n'importe quelle autre langage de programmation comme le VB.net ou le python ...

#18 Esprit

Esprit

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 28 mai 2012 - 07:01

Je vois ce que tu veux dire. Je vois comment on fait pour envoyer le programme sur la carte (avec l'IDE) qui réagit en fonction de l'entrée de la liaison série sur cette dernière. Mais pour communiquer avec l'ordinateur, il faut bien un autre programme 'programmé' qui lui tourne sur PC, non ?


Ben ce "programme programmé" ( :lol: ), c'est l'IDE arduino. Mais comme le dit Robin, tu peux également utiliser un autre langage et coder toi-même ton moniteur sériel. (Je l'ai fais avec un programme en VB.Net mais tu peux le faire en n'importe quel langage.)

Esprit
*Rêve d'en caser un dans un robot*


#19 OrangeKenny

OrangeKenny

    Nouveau membre

  • Membres
  • 20 messages

Posté 28 mai 2012 - 08:44

Ben ce "programme programmé" ( :lol: ), c'est l'IDE arduino. Mais comme le dit Robin, tu peux également utiliser un autre langage et coder toi-même ton moniteur sériel. (Je l'ai fais avec un programme en VB.Net mais tu peux le faire en n'importe quel langage.)

J'ai justement commencé à programmer en C les débuts de l'algorithme de résolution (comme les transformations des positions de couleurs en fonction des mouvements). Mais ce qui va me poser le plus de problèmes je pense, c'est la liaison série avec l'arduino. Je pense que je vais faire simple, avec non pas l'envoi de chaînes mais de valeurs numériques correspondant à l'ASCII (codé sur un byte), qui correspondent chacune à un ordre (exemple totalemenent pris au hasard, mais sur PC j'envoie un D au port COM2 et l'arduino lui fait genre Seriel.read() et exécute l'action : ouvrir les pinces 2 et 4). Encore faut-il savoir comment on fait. :lol:

EDIT : j'aurais de toute manière eu besoin d'un côté d'un PC qui fait tourner l'algo et de l'autre l'arduino... alors liaison série obligée et le moniteur intégré à l'IDE ne me servirait à rien.



Répondre à ce sujet



  


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

0 members, 1 guests, 0 anonymous users