{"id":1262,"date":"2014-02-26T19:57:18","date_gmt":"2014-02-26T17:57:18","guid":{"rendered":"http:\/\/ubik75.com\/?p=1262"},"modified":"2019-03-24T11:01:38","modified_gmt":"2019-03-24T09:01:38","slug":"robot-pilotable-avec-camera","status":"publish","type":"post","link":"https:\/\/ubik75.com\/?p=1262","title":{"rendered":"Robot pilotable avec cam\u00e9ra"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans la continuit\u00e9 du pr\u00e9c\u00e9dent article, je vais vous pr\u00e9senter mon premier robot programm\u00e9 en python avec une cam\u00e9ra. Il est \u00e9quip\u00e9 de deux moteurs, un capteur ultrason \u00e0 l&rsquo;avant, de deux capteurs de contact \u00e0 l&rsquo;arri\u00e8re et d&rsquo;une cam\u00e9ra.<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">Gestion du robot: Il est pilotable directement par le clavier, marche avant arri\u00e8re et gauche droite. A l&rsquo;aide de la cam\u00e9ra, je sais o\u00f9 il se trouve et les capteurs install\u00e9s permettent d&rsquo;\u00e9viter les obstacles.<\/p>\n<p style=\"text-align: justify;\">Lors de mes d\u00e9buts de programmation avec la BrickPi et python, j&rsquo;ai \u00e9t\u00e9 confront\u00e9 \u00e0 un petit probl\u00e8me avec le capteur ultrason. Les informations donn\u00e9es par le capteur ultrason variaient \u00e9norm\u00e9ment (49, 49 ,49,177, 177, 49 ,49, 49). Ph\u00e9nom\u00e8ne \u00a0g\u00eanant pour \u00a0la d\u00e9tection d&rsquo;un obstacle, apr\u00e8s avoir test\u00e9 le capteur ultrason avec la brique NXT, ouf ce n&rsquo;est que le capteur qui est HS.J&rsquo;ai r\u00e9solu le probl\u00e8me par la programmation, une petit parade et hop c&rsquo;est OK. Mais cette variation de valeurs me g\u00eanait et je suis all\u00e9 sur le forum BrickPi afin de trouver une solution. Apr\u00e8s plusieurs discussions, le probl\u00e8me \u00e9tait r\u00e9solu (voir le post: <a href=\"http:\/\/www.dexterindustries.com\/forum\/?topic=problem-ultrasonic-sensor\" target=\"_blank\" rel=\"noopener noreferrer\">Problem Ultrasonic sensor<\/a>).<\/p>\n<p>Mise en place de la cam\u00e9ra:<\/p>\n<p style=\"text-align: justify;\">J&rsquo;ai choisi la cam\u00e9ra pour Raspberry Pi, petite est facile \u00e0 mettre en place. Mettre \u00e0 jour sa distribution Raspbian:\u00a0<em>sudo apt-get update &amp;&amp; sudo apt-get ugrade,<\/em>\u00a0puis on lance l&rsquo;utilitaire:<em> sudo raspi-config<\/em>, on active la cam\u00e9ra, un reboot et c&rsquo;est OK. Il suffit d&rsquo;utiliser les commandes <em>raspistill<\/em> ou<em> raspivid<\/em> pour tester si tout va bien, je vous donne deux liens avec toutes les options li\u00e9es aux commandes: <a href=\"https:\/\/www.modmypi.com\/blog\/raspberry-pi-camera-board-raspivid-command-list\" target=\"_blank\" rel=\"noopener noreferrer\">RaspiVid<\/a>\u00a0et\u00a0<a href=\"https:\/\/www.modmypi.com\/blog\/raspberry-pi-camera-board-raspistill-command-list\" target=\"_blank\" rel=\"noopener noreferrer\">RaspiStill<\/a>.<\/p>\n<p>Maintenant il reste \u00e0 mettre en place la vid\u00e9o:<\/p>\n<p style=\"text-align: justify;\">Apr\u00e8s plusieurs essais, je m\u2019aper\u00e7ois que filmer, r\u00e9cup\u00e9rer la vid\u00e9o sur le PC avec VLC et piloter le robot g\u00e9n\u00e8rent des latences dans les commandes envoy\u00e9es au robot et la r\u00e9ception de la vid\u00e9o, ph\u00e9nom\u00e8ne normal car le robot est en liaison wifi. Apr\u00e8s une recherche sur le web, j&rsquo;ai trouv\u00e9 la solution sur ce <a href=\"http:\/\/blog.miguelgrinberg.com\/post\/how-to-build-and-run-mjpg-streamer-on-the-raspberry-pi\" target=\"_blank\" rel=\"noopener noreferrer\">site<\/a>. La cam\u00e9ra prend une photo toute les 100ms et je r\u00e9cup\u00e8re la vid\u00e9o qui est une succession d&rsquo;images sur le navigateur \u00e0 l&rsquo;adresse: http:\/\/ IP_raspberry:8080.<\/p>\n<p>je lance dans le terminal la commande pour prendre les photos :\u00a0<em>raspistill -w 640 -h 480 -q 15 -o \/tmp\/stream\/pic.jpg -tl 80 -t 9999999 -th 0:0:0<\/em><\/p>\n<p>puis la commande pour MJPG-Streamer :\u00a0\u00a0<em>LD_LIBRARY_PATH=\/usr\/local\/lib mjpg_streamer -i \u00ab\u00a0input_file.so -f \/tmp\/stream -n pic.jpg\u00a0\u00bb -o \u00ab\u00a0output_http.so -w \/usr\/local\/www\u00a0\u00bb<\/em><\/p>\n<p>et le programme de pilotage du robot qui se trouve:\u00a0<a href=\"https:\/\/dl.dropboxusercontent.com\/u\/27036809\/pygame_testV6.py\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a><\/p>\n<div class=\"jetpack-video-wrapper\"><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"840\" height=\"473\" src=\"https:\/\/www.youtube.com\/embed\/QWYke1y0mx8?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span><\/div>\n<p style=\"text-align: justify;\">La vid\u00e9o reste saccad\u00e9e mais j&rsquo;arrive \u00e0 diriger le robot et le faire aller o\u00f9 je veux. J&rsquo;ai effectu\u00e9 des recherches pour essayer d\u2019am\u00e9liorer la vid\u00e9o, d&rsquo;obtenir quelque chose de plus fluide. J&rsquo;ai trouv\u00e9 sur ce\u00a0<a href=\"http:\/\/www.miguelmota.com\/blog\/raspberry-pi-camera-board-video-streaming\/\">site<\/a>\u00a0une mise \u00e0 jour (voir en bas du site \u00ab\u00a0<em>Update: 19jan 2014&Prime;).<\/em> J&rsquo;ai effectu\u00e9 la mise \u00e0 jour et voici le r\u00e9sultat en vid\u00e9o.<\/p>\n<div class=\"jetpack-video-wrapper\"><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"840\" height=\"473\" src=\"https:\/\/www.youtube.com\/embed\/o1C7ZkeTUGo?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span><\/div>\n<p style=\"text-align: justify;\">Conclusion: La carte BrickPi plus le Raspberry associ\u00e9s aux capteurs et moteurs NXT apportent un plus, on peut y installer une cam\u00e9ra comme ci dessus, la programmation reste simple et facile en utilisant python avec la distribution Raspbian. Il reste \u00e0 pouvoir se connecter au robot depuis l&rsquo;ext\u00e9rieur sur le net&#8230;<\/p>\n<p style=\"text-align: justify;\">\n","protected":false},"excerpt":{"rendered":"<img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/ubik75.com\/wp-content\/plugins\/thumbnail-for-excerpts\/tfe_no_thumb.png\" class=\"alignleft wp-post-image tfe\" alt=\"\" title=\"\" \/><p>Dans la continuit\u00e9 du pr\u00e9c\u00e9dent article, je vais vous pr\u00e9senter mon premier robot programm\u00e9 en python avec une cam\u00e9ra. Il est \u00e9quip\u00e9 de deux moteurs, un capteur ultrason \u00e0 l&rsquo;avant, de deux capteurs de contact \u00e0 l&rsquo;arri\u00e8re et d&rsquo;une cam\u00e9ra.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[118,11],"tags":[117,119,108],"class_list":["post-1262","post","type-post","status-publish","format-standard","hentry","category-brickpi-2","category-robot","tag-brickpi","tag-camera-pi","tag-raspberry"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2eCSX-km","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts\/1262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1262"}],"version-history":[{"count":42,"href":"https:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts\/1262\/revisions"}],"predecessor-version":[{"id":1704,"href":"https:\/\/ubik75.com\/index.php?rest_route=\/wp\/v2\/posts\/1262\/revisions\/1704"}],"wp:attachment":[{"href":"https:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ubik75.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}