Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | Calendrier |
|
| | cartographie pour la robotique | |
| | Auteur | Message |
---|
gigi75
Nombre de messages : 101 Age : 51 Date d'inscription : 13/04/2013
| Sujet: cartographie pour la robotique Dim 5 Mai 2013 - 23:22 | |
| Bonsoir à tous, Je vous laisse ce petit programme: En résumer, il cartographie la pièce en dessinant des points qui sont reliés par des lignes. Il manque le moteur pas à pas et sa commande, mais le principe est ok, je tourne la platine de detection sur 360°, les murs apparaissent. je vous donne le programme qui fonctionne avec la carte, inutile de l'executer, un message d'erreur apparaitra sachant que la liaison avec la carte n'existe pas. - Code:
-
labels() constantes() variables() GUI() initialisations() end
sub labels() label timer1, connect end_sub
sub constantes() dim nom_dll$ : nom_dll$ = "wrapper_K8055d.dll" end_sub
sub variables() dim resultat%, Data1%, Data2%, n%, point% dim h%, CardAddr%, lio% dim i,a,x,y,x1,y1,angle,hypo, pas width 0,1370 : height 0,768 hypo = 10 pas =360 alpha 2 : top 2,8 : left 2,8 : width 2,10 : height 2,49 : caption 2,"Angle en degrée :" alpha 3 : top 3,8 : left 3,95 : width 3,109 : height 3,49 2d_fill_color 1,1,1 2d_circle 620,350,5 angle = 0 hypo = 0 y = 0 x = 0 end_sub
sub GUI() width 0,1370 : height 0,768 button 21 : caption 21,"Connect" : font_bold 21 top 21,20 : left 21,8 : width 21,80 : height 21,30 on_click 21,connect alpha 10 : caption 10," Radar V 1.0 Gilles" alpha 11 : caption 11, "Sortie 1 analogique :" : font_bold 11 : font_size 11,11 top 11,100 : Left 11,5
timer 31 : timer_off 31 : timer_interval 31,50 on_timer 31,timer1
alpha 41 : top 41,100 : left 41,150 : font_size 41,11 alpha 51 : top 51,120 : Left 51,150 : font_size 51,11
end_sub
sub initialisations() dll_on nom_dll$ n% = 1 end_sub return
timer1: timer_off 31 for i=1 to pas resultat% = dll_call1("K8055d_ResetCounter",2) resultat% = dll_call2("K8055d_ReadAllAnalog",adr(Data1%), adr(Data2%)) lio% = data1%*1.6 caption 41,str$(lio%) 2d_fill_color 1,1,254 2d_circle 620,350,5
angle = ((2*3.14116)/pas)+ angle caption 3,str$ (angle*I) pause 1 hypo = data1%*2 x = hypo*cos (angle) y = hypo*sin (angle) 2d_point 620+int (X),350+int(Y) if i>1 2d_line 620+int (X),350+int(Y),x1,y1 end_if If i>47 end end_if
x1 = 620+int (X) y1 = 350+int(Y)
next i
connect: h% = dll_call1("K8055d_OpenDevice",CardAddr%) timer_on 31 return
Par contre j'ai fait un programme plus simple où l'acquisition de la carte est remplacé par un RND pour que vous voyez. - Code:
-
dim i,a,x,y,x1,y1,angle,hypo, pas
width 0,1370 : height 0,768 hypo = 10 pas =120 alpha 2 : top 2,8 : left 2,8 : width 2,10 : height 2,49 : caption 2,"Angle en degrée :" alpha 3 : top 3,8 : left 3,95 : width 3,109 : height 3,49 2d_fill_color 1,1,1 2d_circle 620,350,5 angle = 0 hypo = 0 y = 0 x = 0
label debut
debut: 2d_fill_color 1,1,1 2d_circle 620,350,5 for i=1 to pas angle = ((2*3.14116)/pas)+ angle caption 3,str$ (angle*I) pause 300 hypo = rnd (50)+ 200 x = hypo*cos (angle) y = hypo*sin (angle) 2d_point 620+int (X),350+int(Y) if i>1 2d_line 620+int (X),350+int(Y),x1,y1 end_if
x1 = 620+int (X) y1 = 350+int(Y)
next i pause 2000
Voilà je débute, bonsoirs à tous gilles | |
| | | gigi75
Nombre de messages : 101 Age : 51 Date d'inscription : 13/04/2013
| Sujet: Re: cartographie pour la robotique Dim 5 Mai 2013 - 23:26 | |
| Juste pourquoi en 2D, au moins je trouve que cela est plus souple pour travailler après
Gilles
| |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: cartographie pour la robotique Lun 6 Mai 2013 - 12:22 | |
| Bonjour gille tu me donne envie,pour l instant je n ai que capteur optique qui porte a 20cm attention les difficutees arrivent. Maintenant il faut controler la position de ton robot par rapport au plan que tu as constitue en effet le robot n est pas un pixel et il a tendance a c ecarter de son chemin A suivre mindstorm | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: cartographie pour la robotique Mer 8 Mai 2013 - 18:08 | |
| Excellente application. Je vais réfléchir à investir | |
| | | gigi75
Nombre de messages : 101 Age : 51 Date d'inscription : 13/04/2013
| Sujet: me voilà Ven 10 Mai 2013 - 22:22 | |
| Bonsoir à tous, désolé du retard Alors voilà, j'ai fait un petit radar, la commande du moteur n'y est pas, mais le principe fonctionne. - Code:
-
labels() constantes() variables() GUI() initialisations() end
sub labels() label timer1, connect end_sub
sub constantes() dim nom_dll$ : nom_dll$ = "wrapper_K8055d.dll" end_sub
sub variables() dim resultat%, Data1%, Data2%, n%, point% dim h%, CardAddr%, lio% dim i,a,x,y,x1,y1,angle,hypo, pas width 0,1370 : height 0,768 hypo = 10 pas =360 alpha 2 : top 2,8 : left 2,8 : width 2,10 : height 2,49 : caption 2,"Angle en degrée :" alpha 3 : top 3,8 : left 3,95 : width 3,109 : height 3,49 2d_fill_color 1,1,1 2d_circle 620,350,5 angle = 0 hypo = 0 y = 0 x = 0 end_sub
sub GUI() width 0,1370 : height 0,768 button 21 : caption 21,"Connect" : font_bold 21 top 21,20 : left 21,8 : width 21,80 : height 21,30 on_click 21,connect alpha 10 : caption 10," Radar V 1.0 Gilles" alpha 11 : caption 11, "Sortie 1 analogique :" : font_bold 11 : font_size 11,11 top 11,100 : Left 11,5
timer 31 : timer_off 31 : timer_interval 31,50 on_timer 31,timer1
alpha 41 : top 41,100 : left 41,150 : font_size 41,11 alpha 51 : top 51,120 : Left 51,150 : font_size 51,11
end_sub
sub initialisations() dll_on nom_dll$ n% = 1 end_sub return
timer1: timer_off 31 for i=1 to pas resultat% = dll_call1("K8055d_ResetCounter",2) resultat% = dll_call2("K8055d_ReadAllAnalog",adr(Data1%), adr(Data2%)) lio% = data1%*1.6 caption 41,str$(lio%) 2d_fill_color 1,1,254 2d_circle 620,350,5
angle = ((2*3.14116)/pas)+ angle caption 3,str$ (angle*I) pause 1 hypo = data1%*2 x = hypo*cos (angle) y = hypo*sin (angle) 2d_point 620+int (X),350+int(Y) if i>1 2d_line 620+int (X),350+int(Y),x1,y1 end_if If i>(pas-1) end end_if
x1 = 620+int(X) y1 = 350+int(Y) next i
connect: h% = dll_call1("K8055d_OpenDevice",CardAddr%) timer_on 31 return En fait, le but est de faire tourner un capteur à ultrason ou laser, (moi je suis avec ultrason) et cela cartographie la pièce, attention les ultrason ne sont pas precis par la cause de l'echo. | |
| | | gigi75
Nombre de messages : 101 Age : 51 Date d'inscription : 13/04/2013
| Sujet: Re: cartographie pour la robotique Ven 10 Mai 2013 - 22:34 | |
| Oui le robot n'est pas un pixel, voila pourquoi il faut qu'il analyse sa position apres chaque déplacement.
Mais je but sur un problème, mais Klaus avait répondu, c'est de faire tourner deux ou trois executables avec des relations (une passerelle sur des variables par exemple, car la detection est la cartographie est un module à part entière, mais le reste?, comment le mettre en lien. Si on doit faire un programme entier, je crois que ce sera long. Bon pour l'instant, je vais fabriquer le plan en deux dimensions, afficher les obstacles. Par contre faire un autre module pour qu'il trouve la sortie d'une pièce sera plus tard, mais je vois pas comment le faire tourner sur un autre executable. Je pense qu'il faut créer la carte avec les obstacles, la sauvegarder (Sous forme de données ou autres), puis le recharger avec un autre executable pour l'exploiter. Qu'en pensez vous?
gilles | |
| | | Klaus
Nombre de messages : 12294 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: cartographie pour la robotique Ven 10 Mai 2013 - 22:58 | |
| Sincèrement, tu devrais abandonner l'idée de faire tourner certains traitements dans un processus à part. Tu n'as aucune chance de pouvoir synchroniser tout cela de façon satisfaisante.
Prévois plutôt une section de code à l'intérieur de ton programme principal pour analyser la position du robot et sont entourage, en reconstruisant son modèle interne. Et tu appelles ce module de deux manières: d'une part, après l'exécution d'un déplacement quelconque, et d'autre part, par déclenchement par un timer qui intervient à une fréquence ç déterminer.
Bien sûr, pour éviter les conflits, il est nécessaire, qu début de cette routine, de désactiver le timer et de mettre en pause le déplacement du robot. A la fin de la routine, on réactive le timer et on débloque éventuellement le déplacement en cours.
Et voilà - c'est ce qu'on appelle la programmation évènementielle, et Panoramic est justement conçu pour cela. Peu importe que ton programme fasse 100 lignes, 1000 lignes ou 50000 lignes - cela n'est rien par rapport aux capacités mémoire des ordinateurs actuels. Mais tu auras un fonctionnement souple, rapide et efficace. | |
| | | gigi75
Nombre de messages : 101 Age : 51 Date d'inscription : 13/04/2013
| Sujet: Re: cartographie pour la robotique Ven 10 Mai 2013 - 23:02 | |
| Merci Klaus pour ta réponse,
tu as raison, essayons, en fait je creer des label? (Sub end_sub)? | |
| | | Klaus
Nombre de messages : 12294 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: cartographie pour la robotique Ven 10 Mai 2013 - 23:23 | |
| S'il s'agissait seulement d'appeler ce module à la fin d'un traitement, tu pourrais le réaliser sous forme de procédure ou sous forms de subroutine, peu importe. Mais puisque je suggère de le déclencher également par un timer, cela ne peut être qu'une subroutine, qui commence donc par un label et se termine par un return. A moins que la subroutine appelée par le timer fasse appel à la procédure... Selon le modèle suivant: - Code:
-
label timer_pour_analyse dim deplacement_en_cours% : ' 0=pas de déplacement : ' 1=déplacement en cours : ' 2=déplacement suspendu
timer 17 : ' le numéro 17 est choisi de façon arbitraire timer_interval 17,1000 : ' déclencher chaque seconde timer_off : ' désactiver le timer au départ on_timer 1,timer_pour_analyse : ' lier le timer à sa routine évènement
' à faire lorsque le robot a terminé un déplacement executer_analyse() : ' on reconstruit l'environnement
' routine évènement du timer timer_pour_analyse: executer_analyse() : ' on reconstruit l'environnement return
' procédure pour reconstruire l'environnement sub executer_analyse() timer_off 17 : ' bloquer le timer if déplacement_en_cours%=1 then deplacement_en_cours% = 2 : ' suspendre ' ici faire toutes les analyses ... if deplacement_en_cours%=2 then deplacement_en_cours% = 1 : ' reprendre timer_on 17 : ' : ' libérer le timer end_sub
| |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: cartographie pour la robotique Sam 11 Mai 2013 - 8:47 | |
| Bonjour a tous gigi heureux de voir que tu avance regarde mon robot minipelle et essais de le faire sortir de son enclos cela te permetra de reflechir mindstorm | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: cartographie pour la robotique Sam 11 Mai 2013 - 13:12 | |
| bonjour a tous je poursuit apres reflexion il faut veiller a ne pas se perdre en details inutiles et se concentrer sur le but a atteindre la cartographie total et permanente est un but difficile a realiser avec nos moyens. souvent le robot agit dans un environnement connu et il suffit de le faire reagir convenablement aux evenements (connus du programmeur) qu il rencontrera. un aspirateur n'a pas besoin de connaitre le plan de la maison mais doit etre capable d'eviter les escaliers et la chute qui vas avec. les combats de robots se font dans des arenes calibrées aux difficultées definis! j'ai cree mon programme de robot pour permettre a chacun de reflechir et simuler avant d'investir dans un equipement reel. encore en cour d'evolution il est deja sur mon webdav mindstorm | |
| | | Contenu sponsorisé
| Sujet: Re: cartographie pour la robotique | |
| |
| | | | cartographie pour la robotique | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |