{"id":3794,"date":"2018-06-26T12:56:22","date_gmt":"2018-06-26T11:56:22","guid":{"rendered":"https:\/\/telefab.fr\/?p=3794"},"modified":"2026-04-30T17:33:59","modified_gmt":"2026-04-30T15:33:59","slug":"projet-developpement-robot-suiveur-dutilisateur","status":"publish","type":"projet","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/projet\/projet-developpement-robot-suiveur-dutilisateur\/","title":{"rendered":"Projet D\u00e9veloppement : Robot suiveur d\u2019utilisateur"},"content":{"rendered":"<h4>Equipe :<\/h4>\n<p>Paul PAQUIN, \u00e9tudiant en 1\u00e8re ann\u00e9e \u00e0 IMT Atlantique<br \/>\nGr\u00e9goire PICHEREAU, \u00e9tudiant en 1\u00e8re ann\u00e9e \u00e0 IMT Atlantique<br \/>\nBaptiste SCHMITT, \u00e9tudiant en 1\u00e8re ann\u00e9e \u00e0 IMT Atlantique<br \/>\nRuyi ZHENG, \u00e9tudiant en 1\u00e8re ann\u00e9e \u00e0 IMT Atlantique<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image13.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3812\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image13-1024x557.jpg\" alt=\"\" width=\"1024\" height=\"557\" \/><\/a><\/p>\n<h2>I &#8211; Contexte<\/h2>\n<p>Durant le cursus Ing\u00e9nieur g\u00e9n\u00e9raliste de l\u2019IMT Atlantique, les \u00e9l\u00e8ves doivent r\u00e9aliser un projet D\u00e9veloppement. C\u2019est dans ce cadre que nous avons propos\u00e9 notre propre projet : Construire un robot capable de suivre de lui m\u00eame un humain et de porter une charge. L\u2019id\u00e9e derri\u00e8re ce projet est de d\u00e9velopper une solution pour les personnes \u00e0 handicap moteur. En effet, ceux ci peuvent se retrouver en difficult\u00e9 dans beaucoup de situations de la vie courante.<\/p>\n<p>Ainsi, nous avons r\u00e9alis\u00e9 un prototype qui gr\u00e2ce \u00e0 des modules de magn\u00e9tom\u00e9trie et de GPS est capable de se localiser. Nous avons ensuite d\u00e9velopp\u00e9 une application Android capable de se connecter au robot et de donner sa position. Gr\u00e2ce \u00e0 \u00e7a, le robot peut alors suivre l\u2019utilisateur.<\/p>\n<h2>II &#8211; R\u00e9alisation<\/h2>\n<p>&#8211; une plaque de contreplaqu\u00e9 de 2 centim\u00e8tres\u00a0 d\u2019\u00e9paisseur pour servir de support<br \/>\n&#8211; deux planches de bois 20\u00d75\u00d75 cm<br \/>\n&#8211; deux planches de bois 10\u00d75\u00d75 cm<br \/>\n&#8211; quatre planches de bois 25\u00d77\u00d71 cm<br \/>\n&#8211; deux moteurs de la gamme Maxon Motor A-max Program de 12 V<br \/>\n&#8211; deux roues de 10 cm de haut<br \/>\n&#8211; une roue non motrice qui se met sous le ch\u00e2ssis<br \/>\n&#8211; deux adaptateurs moteur-ch\u00e2ssis cr\u00e9\u00e9s \u00e0 l\u2019aide d\u2019une imprimante 3D<br \/>\n&#8211; deux adaptateurs moteur-roue cr\u00e9\u00e9s \u00e0 l\u2019aide d\u2019une imprimante 3D<br \/>\n&#8211; une batterie lithium-polym\u00e8re TURNIGY 1000mAh trois cellules de 11.1 v<br \/>\n&#8211; une carte Arduino Uno<br \/>\n&#8211; une breadboard<br \/>\n&#8211; un magn\u00e9tom\u00e8tre Adafruit HMC5833l<br \/>\n&#8211; un module Parallax PAM-7Q pour le GPS<br \/>\n&#8211; un module Bluetooth HC-05<br \/>\n&#8211; une carte L298N<br \/>\n&#8211; un smartphone Android<br \/>\n&#8211; des vis et des c\u00e2bles<\/p>\n<h3>2 ) Plateforme<\/h3>\n<p>Nous avons d\u00e9cid\u00e9 de concevoir un ch\u00e2ssis en bois \u00e0 deux \u00e9tages. Le premier \u00e9tage servant au transport du syst\u00e8me de positionnement embarqu\u00e9 ainsi qu\u2019\u00e0 celui des batteries, le second couvrant le premier, ayant lui pour but de servir de support o\u00f9 l\u2019on pourrait d\u00e9poser la charge.<\/p>\n<p>Pour soutenir le ch\u00e2ssis et pour le mettre en mouvement nous avons convenu de fixer sur les c\u00f4t\u00e9s avant deux moteurs de la gamme Maxon Motor A-max Program de 12 V chacun reli\u00e9s \u00e0 des roues de 10 cm de haut, fixe sur axe ainsi qu\u2019en polyprop\u00e8ne et en caoutchouc. Enfin nous avons d\u00e9cid\u00e9 de placer une derni\u00e8re roue non motrice, une roulette pivotante en caoutchouc \u00e0 l\u2019arri\u00e8re du v\u00e9hicule.<\/p>\n<p>Pour faciliter la suspension des moteurs au bas du ch\u00e2ssis nous avons convenu de mod\u00e9liser des supports pour moteurs. De m\u00eame, nous avons choisi de concevoir des adaptateurs entre les moteurs et les roues pour am\u00e9liorer la transmission. La r\u00e9alisation de ces parties s\u2019est faite sous SolidWorks. Nous avons aussi pu retravaill\u00e9 certaines pi\u00e8ces d\u00e9j\u00e0 \u00e0 disposition sur des sites d\u00e9di\u00e9s comme Thingiverse tant les moteurs et les roues que nous avions choisi semblent \u00eatre des standards dans le milieu de la conception robotique amateur.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3813\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image-300x231.png\" alt=\"\" width=\"300\" height=\"231\" \/><\/a><\/p>\n<p>Une fois r\u00e9alis\u00e9es, les pi\u00e8ces sont alors converties en fichier .stl, format lisible par l\u2019imprimante 3D que nous utilisons, une Ultimaker 2+. Le traitement de ses fichiers s\u2019est fait par le logiciel d\u00e9di\u00e9 Ultimaker Cura permettant de visualiser la future impression 3D et ainsi de repositionner la pi\u00e8ce si sa disposition n\u2019est pas optimale, d\u2019ajouter un support pour stabiliser l\u2019impression mais surtout de voir si il est possible ou non de r\u00e9aliser une impression sans probl\u00e8mes (les morceaux de la pi\u00e8ce ne pouvant \u00eatre imprim\u00e9s s\u2019affichant en rouge dans le logiciel).<\/p>\n<p>On place ensuite les moteurs \u00e0 courant continus dans les supports en plastique d\u00e9di\u00e9s imprim\u00e9s par l\u2019imprimante 3D, pour bien fixer les moteurs il est possible de visser les supports pour resserrer le tout. On ajoute alors les adaptateurs entre les moteurs et les roues, eux aussi imprim\u00e9s en 3D, qu\u2019on visse alors dans les adaptateurs de hub et dans les roues en plastique.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3814\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image2-300x219.png\" alt=\"\" width=\"300\" height=\"219\" \/><\/a><\/p>\n<p>On\u00a0 a alors le premier \u00e9tage de la maquette qui contiendra tout le mat\u00e9riel n\u00e9cessaire pour la d\u00e9tection de l\u2019utilisateur et la commande des moteurs. On r\u00e9alise alors un second \u00e9tage pour pouvoir disposer la charge. Afin d\u2019observer les composants et de v\u00e9rifier leur bon fonctionnement durant un essai on opte pour une plaque de plastique en tant que capot pour le premier \u00e9tage. Une fois install\u00e9e et viss\u00e9e on rajoute des plaques de bois tout autour de la plateforme pour servir de rebord de mani\u00e8re \u00e0 ce que la charge ne puisse pas tomber.<\/p>\n<h3>3 ) Code Arduino<\/h3>\n<p>Comme le projet contient de nombreuses fonctionnalit\u00e9s, et que beaucoup de composants fonctionnent diff\u00e9remment, nous avons choisi de programmer le code, qui sera t\u00e9l\u00e9vers\u00e9 dans le robot, par classe. En effet, cela permet de tester s\u00e9par\u00e9ment chaque fonctionnalit\u00e9 avant de les mettre ensemble. Ainsi, le code est facilement debuggable et on peut s\u2019y retrouver bien plus facilement.<\/p>\n<p>Pour ce faire, nous avons \u00e9crit des classes en langage C++, que l\u2019on a ensuite plac\u00e9es dans le r\u00e9pertoire Librairie du dossier Arduino.<\/p>\n<p>Enfin, un code Arduino va importer les classes n\u00e9cessaires et va les appeler selon ses besoins.<\/p>\n<p>Le code est pr\u00e9sent sur le GitHub <a href=\"https:\/\/github.com\/paulpaq98\/RobotSuiveur\" target=\"_blank\" rel=\"noopener\">ici<\/a>.<\/p>\n<h3>4 ) Electronique<\/h3>\n<h4>a . Module L298N<\/h4>\n<p>Le prototype se d\u00e9place \u00e0 l\u2019aide de 3 roues: 1 roue pivotante et 2 roues motrices. Les moteurs sont aliment\u00e9s par une batterie lithium-polym\u00e8re TURNIGY 1000mAh trois cellules de 11.1 v. Etant donn\u00e9 la taille de notre prototype,\u00a0 nous avons d\u00e9cid\u00e9 d\u2019utiliser un module \u00ab\u00a0Double Pont-H\u00a0\u00bb de type L298N destin\u00e9 au contr\u00f4le des moteurs continus\u00a0(des Maxon A-motor DC)\u00a0 pour sa facilit\u00e9 d\u2019utilisation et sa compatibilit\u00e9 avec la carte Arduino Uno que nous utilisons.<\/p>\n<p>Cette carte est compos\u00e9e de 3 pins par moteur : 2 pins contr\u00f4lent le passage du courant dans les deux fils reliant la carte L298N au moteur et 1 pin PWM qui est utilis\u00e9e pour contr\u00f4ler la vitesse du moteur.<\/p>\n<p>Les pins IN1, IN2, ENA sont reli\u00e9s aux pin de l\u2019arduino 7, 8 et 5; et g\u00e8rent le moteur A.<\/p>\n<p>De m\u00eame, les pins IN3, IN4, ENB sont reli\u00e9s aux pin de l\u2019arduino 12, 4 et 9; et g\u00e8rent le moteur B.<\/p>\n<p>Pour contr\u00f4ler les moteurs, puis la plateforme, nous avons cr\u00e9\u00e9 des biblioth\u00e8ques Arduino sp\u00e9cifique. Nous disposons ainsi d\u2019une classe Moteur qui permet de contr\u00f4ler facilement les moteurs \u00e0 partir d\u2019un nouveau sketch Arduino, et d\u2019une classe Plateforme qui permet de contr\u00f4ler ais\u00e9ment l\u2019interaction entre les deux roues.<\/p>\n<p>A noter que cette Plateforme est la classe m\u00e8re de PlateformeIntelligente qui permet aussi de rejoindre un point dont on conna\u00eet la distance et l\u2019angle entre le vecteur robot-point et la m\u00e9diatrice du segment joignant les deux roues du robot.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3815\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image3.png\" alt=\"\" width=\"239\" height=\"202\" \/><\/a><\/p>\n<h4>b . Module Adafruit HMC5833l (magn\u00e9tom\u00e8tre)<\/h4>\n<p>Pour calculer l\u2019angle entre la m\u00e9diatrice du segment joignant les deux roues arri\u00e8res du robot et l\u2019utilisateur, nous utilisons un interm\u00e9diaire, le p\u00f4le nord, dont la mesure est plus pr\u00e9cise gr\u00e2ce \u00e0 l\u2019utilisation du champ magn\u00e9tique terrestre. Pour ce faire, nous utilisons donc un magn\u00e9tom\u00e8tre (module Adafruit HMC5833l).<\/p>\n<p>Ce magn\u00e9tom\u00e8tre est pos\u00e9 \u00e0 l\u2019horizontal au m\u00eame endroit que l\u2019arduino. Nous avons d\u00fb le tester et changer son orientation pour que le magn\u00e9tom\u00e8tre donne des mesures coh\u00e9rentes avec nos calculs. C\u2019est \u00e0 dire que nous avons plac\u00e9 le magn\u00e9tom\u00e8tre de sorte que lorsque le robot soit dirig\u00e9 vers le pole nord, l\u2019angle mesur\u00e9 soit \u00e9gal \u00e0 0. Le magn\u00e9tom\u00e8tre a ensuite \u00e9t\u00e9 fix\u00e9 pour conserver cette coh\u00e9rence. En effet, toute erreur sur l\u2019orientation de r\u00e9f\u00e9rence de celui-ci entra\u00eene une erreur sur la mesure.<\/p>\n<p>Le magn\u00e9tom\u00e8tre est reli\u00e9 aux pins analogiques A4 et A5 de l\u2019arduino par ses pins SCL et SDA. Pour r\u00e9cup\u00e9rer les mesures du magn\u00e9tom\u00e8tre, nous avons cr\u00e9\u00e9 une classe, MagneticRead, qui renvoie la valeur en degr\u00e9 ou en radian selon la m\u00e9thode appel\u00e9e du heading (le heading \u00e9tant la direction selon laquelle le v\u00e9hicule est dirig\u00e9)<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3816\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image4.png\" alt=\"\" width=\"235\" height=\"171\" \/><\/a><\/p>\n<h4>c . Module Parallax PAM-7Q pour le GPS<\/h4>\n<p>Le module GPS que nous utilisons pour le projet est le module Parallax PAM-7Q. Il se situe sur la m\u00eame breadboard que le magn\u00e9tom\u00e8tre.<\/p>\n<p>Le gps utilise la pin digital num\u00e9ro 6 de l\u2019arduino reli\u00e9 \u00e0 la pin TX du module.<\/p>\n<p>Les mesures du gps sont elles aussi r\u00e9cup\u00e9r\u00e9es \u00e0 l\u2019aide d\u2019une classe que nous avons cr\u00e9\u00e9e. Au d\u00e9part, nous comptions utiliser une classe d\u00e9j\u00e0 d\u00e9velopp\u00e9e pour ces besoins, nomm\u00e9 TinyGPS.<\/p>\n<p>Malheureusement, nous n\u2019avons pas r\u00e9ussi \u00e0 la faire fonctionner, nous avons donc utilis\u00e9 la biblioth\u00e8que SoftwareSerial pour r\u00e9cup\u00e9rer les donn\u00e9es gps brutes et les traiter dans notre classe GPS (c\u2019est \u00e0 dire r\u00e9cup\u00e9rer les informations utiles).<\/p>\n<p>Nous avons aussi test\u00e9 les conditions de fonctionnement du gps. Nous nous sommes vite rendus compte que le gps ne fonctionne qu\u2019en ext\u00e9rieur. Celui-ci semble de plus continuer de fonctionner en cas de pluie l\u00e9g\u00e8re et de temps nuageux.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3817\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image5.png\" alt=\"\" width=\"248\" height=\"205\" \/><\/a><\/p>\n<h4>d . Module Bluetooth HC-05<\/h4>\n<p>Gr\u00e2ce \u00e0 la technologie Bluetooth, de nombreuses informations peuvent transiter entre le smartphone de l\u2019utilisateur et le robot.<\/p>\n<p>La pin RX du module est connect\u00e9e \u00e0 la pin 11 de l\u2019arduino tandis que la pin TX du module est connect\u00e9e \u00e0 la pin 10 de l\u2019arduino.<\/p>\n<p>Une biblioth\u00e8que, CommunicationManager, a \u00e9t\u00e9 d\u00e9velopp\u00e9 pour r\u00e9cup\u00e9rer les informations en provenance du Bluetooth et les interpr\u00e8te selon un protocole de communication.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3818\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image6-300x300.png\" alt=\"\" width=\"300\" height=\"300\" \/><\/a><\/p>\n<h4>e . Capteur ultrason HC-Sr04<\/h4>\n<p>Nous avons ajout\u00e9 des capteurs ultrasons HC-Sr04 au robot qui mesurent la distance entre le robot et l\u2019obstacle. Les bornes de \u00ab trigger \u00bb et d\u2019\u00ab \u00e9cho \u00bb sont reli\u00e9es \u00e0 la pin digital 13.<\/p>\n<p>Pour contr\u00f4ler ces capteurs et r\u00e9cup\u00e9rer les mesures r\u00e9alis\u00e9es, nous avons utilis\u00e9 la classe Capteur pr\u00e9sente de base dans la biblioth\u00e8que arduino. Les diff\u00e9rentes r\u00e9actions du robot en fonction de la distance avec l\u2019obstacle sont pr\u00e9sentes dans la classe plateforme.<\/p>\n<p>Ainsi, toute cette partie n\u2019est pas visible dans le sketch final, mais est pr\u00e9sente dans la classe PlateformeIntelligente. C\u2019est d\u2019ailleurs ce fait qui justifie l\u2019\u00e9criture de cette classe h\u00e9rit\u00e9e : le comportement de cette classe, qui arr\u00eate le robot d\u00e8s qu\u2019un obstacle est d\u00e9tect\u00e9 \u00e9tait nuisible pour notre phase de test. Le robot s\u2019arr\u00eate ainsi en cas d\u2019obstacle pr\u00e9sent \u00e0 une distance inf\u00e9rieure \u00e0 30 centim\u00e8tres, fait tourner ses capteurs pour d\u00e9tecter une voie o\u00f9 il n\u2019y a pas d\u2019obstacle et se d\u00e9place dans cette direction.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3819\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image7.png\" alt=\"\" width=\"200\" height=\"222\" \/><\/a><\/p>\n<h4>f . Sch\u00e9ma des branchements<\/h4>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image12.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3822\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image12-300x151.jpg\" alt=\"\" width=\"600\" height=\"300\" \/><\/a><\/p>\n<h3>5 ) Interface Android<\/h3>\n<p>Afin de permettre au robot de suivre automatiquement les mouvements de l\u2019utilisateur, nous avons besoin d\u2019un appareil mobile capable d\u2019envoyer des informations de localisation. Nous avons donc cr\u00e9\u00e9 une application pour smartphones Android avec Android Studio. Application et robot communiquent via Bluetooth, l\u2019application obtient l\u2019information de la position via GPS, et la direction (heading) de l\u2019utilisateur via la boussole interne du mobile (compass).<\/p>\n<p>Ensuite, l\u2019application envoie les informations au robot via le canal Bluetooth, en m\u00eame temps le t\u00e9l\u00e9phone mobile re\u00e7oit \u00e9galement des informations envoy\u00e9es par le robot. L\u2019application peut analyser le message et afficher la distance et la puissance sur l\u2019interface Andro\u00efde. Afin de s&rsquo;assurer que chaque fonction peut \u00eatre r\u00e9alis\u00e9e, nous allons faire une application distincte pour chaque fonction, y compris la communication Bluetooth, GPS, Boussole.<\/p>\n<p>Ayant rencontr\u00e9 des difficult\u00e9s pour \u00e9crire une application Bluetooth, nous avons d\u00e9cid\u00e9 de ne pas rechercher la totalit\u00e9 des appareils Bluetooth \u00e0 proximit\u00e9. Cependant, la recherche d\u2019autres appareils utilisant Bluetooth effectu\u00e9e par le t\u00e9l\u00e9phone portable permet de trouver le module Bluetooth (HC-05) de la plateforme. Apr\u00e8s recherche, nous avons r\u00e9solu le probl\u00e8me.<\/p>\n<p>Depuis, l\u2019application peut rechercher, se connecter et cr\u00e9er un canal Bluetooth pour \u00e9changer des informations.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/test.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3824\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/test.png\" alt=\"\" width=\"181\" height=\"192\" \/><\/a><\/p>\n<p>La plupart des smartphones modernes sont \u00e9quip\u00e9s d\u2019un GPS qui fonctionne avec deux modes, le mode r\u00e9seau et le mode satellite : le mode r\u00e9seau utilise des m\u00e9thodes de ciblage et est utilis\u00e9 en int\u00e9rieur, car le signal satellite est faible, ce qui impacte la pr\u00e9cision de localisation. Or, les m\u00e9thodes impl\u00e9ment\u00e9es dans ce mode ont une efficacit\u00e9 ind\u00e9pendante \u00e0 la qualit\u00e9 de r\u00e9ception. Il est cependant impossible d&rsquo;obtenir les informations relatives \u00e0 la direction. Quand il est \u00e0 l&rsquo;ext\u00e9rieur, le positionnement par satellite est utilis\u00e9. En raison de son positionnement rapide et sa grande pr\u00e9cision, des informations importantes telles que la direction et la vitesse peuvent \u00eatre obtenues.<\/p>\n<p>Comme pr\u00e9c\u00e9demment mentionn\u00e9, le GPS ne peut pas obtenir d&rsquo;informations de direction dans le contexte de positionnement par r\u00e9seau, d&rsquo;autres m\u00e9thodes sont donc n\u00e9cessaires pour obtenir la direction. Heureusement, la plupart des t\u00e9l\u00e9phones mobiles ont une fonction de boussole, et nous pouvons donc obtenir cette information capitale.<\/p>\n<p>Dans le processus de communication Bluetooth, deux canaux (des threads) sont demand\u00e9s : le premier est utilis\u00e9 pour envoyer les informations de localisation toutes les trois secondes, le second re\u00e7oit les informations envoy\u00e9es par le robot et affiche l&rsquo;interface apr\u00e8s le traitement. Cela n\u00e9cessite des capacit\u00e9s de multithreading, malheureusement nous ne disposions pas des connaissances relatives \u00e0 impl\u00e9mentation de cette technique. Cependant, nous avons trouv\u00e9 une biblioth\u00e8que traitant sp\u00e9cifiquement le multithreading ce qui nous a permis de mettre en place cette fonction.<\/p>\n<p>Afin d&rsquo;\u00e9changer des informations sans probl\u00e8mes avec le robot, nous avons con\u00e7u un protocole de communication pour r\u00e9guler la structure de l&rsquo;information.<\/p>\n<p>La plupart de nos fonctions ont \u00e9t\u00e9 impl\u00e9ment\u00e9e et deux affichages ont \u00e9t\u00e9 d\u00e9velopp\u00e9s selon que le robot est en mode suivi ou en mode contr\u00f4l\u00e9 par l\u2019utilisateur.<\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image10.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3821\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image10-152x300.png\" alt=\"\" width=\"152\" height=\"300\" \/><\/a> <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image9.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3820\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2018\/06\/image9-162x300.png\" alt=\"\" width=\"162\" height=\"300\" \/><\/a><\/p>\n<h3>6 ) Protocole de communication<\/h3>\n<p>Gr\u00e2ce \u00e0 la technologie Bluetooth, de nombreuses informations peuvent transiter entre le smartphone de l\u2019utilisateur et le robot. Ces informations ainsi que leurs impacts sur le fonctionnement du robot et de l\u2019application sont tr\u00e8s vari\u00e9s. Cela impose que chaque type d\u2019information ait un format reconnaissable parmi les autres.<\/p>\n<p>Cependant, comme les \u00e9quipes charg\u00e9es de d\u00e9velopper la partie application Android et la partie code Arduino ne sont pas les m\u00eames, il convient de r\u00e9diger un unique protocole de communication respect\u00e9 par toutes les \u00e9quipes. Un tel protocole garantit non seulement que les formats d\u2019une information donn\u00e9e soit les m\u00eames pour l\u2019\u00e9metteur et le r\u00e9cepteur mais il a aussi la capacit\u00e9 d\u2019\u00e9voluer si de nouvelles fonctionnalit\u00e9s venaient \u00e0 \u00eatre impl\u00e9ment\u00e9es sur le robot.<\/p>\n<p>La sp\u00e9cification du protocole choisie ne retransmet aucun message perdu ou erron\u00e9 durant son trajet. En effet, un m\u00e9canisme de retransmission pourrait rendre le robot beaucoup moins r\u00e9actif.<\/p>\n<p>Toutes les informations suivent le format suivant : \u2018#\u2019 + type + \u2019\\\u2019 + Donn\u00e9es + \u2018$\u2019<\/p>\n<p>Les champs \u2018type\u2019 et \u2018donn\u00e9es\u2019 varient selon le type de donn\u00e9e envoy\u00e9e tandis que \u2018#\u2019 et \u2018$\u2019 indiquent respectivement le d\u00e9but et la fin du message. Le r\u00e9cepteur sait alors si le message qu\u2019il a re\u00e7u est complet ou non. De plus si le champ \u2018donn\u00e9es\u2019 contient plus qu\u2019une seul donn\u00e9e alors celles-ci sont s\u00e9par\u00e9es par un symbole \u2018\\\u2019 pour bien faire la distinction.<\/p>\n<p>Le d\u00e9tail du protocole est pr\u00e9sent sur le GitHub <a href=\"https:\/\/github.com\/paulpaq98\/RobotSuiveur\" target=\"_blank\" rel=\"noopener\">ici<\/a>.<\/p>\n<h2>III &#8211; R\u00e9sultats<\/h2>\n<p>Notre projet de r\u00e9alisation d\u2019un robot suiveur d\u2019utilisateur assist\u00e9 de son application compagnon s\u2019est sold\u00e9 par la mise en place de syst\u00e8mes embarqu\u00e9s plac\u00e9s dans une plateforme construite en bois et en plastique et dont les composants sont appair\u00e9s au smartphone de l\u2019utilisateur.<\/p>\n<p>Un des crit\u00e8res de fonctionnement du robot qui fait d\u00e9faut au prototype est sa pr\u00e9cision, notamment du \u00e0 l\u2019approximation de l\u2019ordre du m\u00e8tre des GPS modernes.<\/p>\n<p>En effet la solution technique utilis\u00e9e semble am\u00e9liorer la pr\u00e9cision de la course du robot cependant on peut rester mitig\u00e9 sur les d\u00e9placements en int\u00e9rieur tant le GPS voit son efficacit\u00e9 diminu\u00e9e dans la majorit\u00e9 des b\u00e2timents.<\/p>\n<p>Finalement, il semble que le projet puisse \u00eatre am\u00e9lior\u00e9 en int\u00e9grant une alternative au GPS en int\u00e9rieur et en prenant une Arduino Mega parce qu\u2019elle permet de mettre plus de composants n\u00e9cessitant des protocoles de communication.<\/p>\n\n<p>\u00a0<\/p>\n","protected":false},"author":1,"featured_media":3812,"parent":0,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"categories":[15,20],"type_projet":[],"class_list":["post-3794","projet","type-projet","status-publish","has-post-thumbnail","hentry","category-formation","category-projets"],"acf":{"objectifs":"","categorie":false,"fichiers_associes":null},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/3794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/projet"}],"author":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":1,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/3794\/revisions"}],"predecessor-version":[{"id":10488,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/3794\/revisions\/10488"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=3794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=3794"},{"taxonomy":"type_projet","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/type_projet?post=3794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}