Robot Raspberry Zumo

Présentation

Ce petit robot a été réalisé à l’aide d’une carte « Raspberry PI », d’un châssis à chenille de chez « Pololu », et d’une webcam.

a connexion Wifi lui permet de diffuser les flux vidéo sur le réseau et d’être commandé à distance de façon  très simple, depuis un ordinateur ou éventuellement un smartphone type Iphone ou Andoid.

Je vous propose de décrire, en quelques lignes, les différentes étapes de cette réalisation ;  les aspects mécaniques, électroniques et informatiques.

Robot Raspberry Zumo Robot Raspberry Zumo Robot Raspberry Zumo

–> Galerie Photo

Liste des pièces mécaniques et électroniques

Voici la liste des pièces utilisées lors de la réalisation du robot :

image005

image007

image008

  • Une carte SD de 8Go

image009

  • Un module USB WIFI

image010

image011

image012

  • Un Circuit pont en H 1A SN754410

image013

… et aussi :

  • Un buzzer
  • Une LED tricolore
  • Un circuit imprimé type plaque pastille au pas 2,54mm
  • Quelques fils de connexion à connecteur femelle
  • Quelques entretoises, vis et écrous M3

 

 Présentation rapide de carte Raspberry PI

La carte « Raspberry PI » est un nano-ordinateur de la taille d’une carte de crédit (ou presque : 86x54cm) équipé d’un processeur ARM à 700Mhz.

Elle dispose, dans ca dernière version, de 512Mo de Ram, d’une interface Ethernet 10/100, de 2 interfaces USB, d’une sortie audio 5.1 de type jack 3,5mm et  de deux sorties vidéo (HDMI et composite).

Son processeur graphique embarqué permet un encodage/décodage de flux vidéo au format h264/Mpeg4.

Son support de carte SD lui permet d’accueillir l’élément de stockage principal où est installé le système d’exploitation.

Un connecteur de 2×13 broches fournit :

  • 8 ports GPIO (entrée/sortie)
  • 1 UART Rs232
  • 2 bus SPI
  • 1 bus I2C
  • Une alimentation 5V
  • Une alimentation 3,3V

La carte Raspberry PI est alimentée en 5V via son connecteur micro USB

image014

Configuration de la Raspberry

Installation de la distribution

Même si 4 Go peuvent suffire, j’utilise une carte SD de 8 Go pour héberger le système d’exploitation, ce qui permet d’avoir une souplesse de stockage à des fins expérimental. Il est de plus intéressant d’opter pour une carte performante en termes de débit (30Mb/s par exemple).

Diverses distributions Linux ont été compilées pour le processeur ARM de la image015Raspberry. J’utilise « Raspbian », recommandé par la fondation Raspberry PI, qui est tout simplement une adaptation de la distribution Debian « wheezy ».

 

Il existe plusieurs méthodes pour installer le système, « Win32DiskImage » sous Windows,  « dd » sous linux ou mac …

La toute dernière méthode proposée par la fondation Raspberry PI et fonctionnant sous Windows ou Mac est encore plus simple !!! :

Exemple d’installation de l’OS sous Windows :

image016

  • Extraire le Zip et Copier l’intégralité des fichiers directement sur car SD

image017

  • Installer la carte SD dans le slot de carte Raspberry PI
  • Démarrer la carte Raspberry en connectant écran, clavier, souris, interface réseau et alimentation
  • Le mode « Recovery »  de la raspberry  fait le reste … !!!

 

Configuration système

Lors du premier démarrage, sélectionner l’installation de la distribution « Raspbian ».

Après quelques minutes d’installation et un premier reboot, l’utilitaire « raspi-config » se lance automatiquement. Il permet de définir :

  • le mot de passe
  • les locales  (par exemple : fr_FR ISO-8859-1 et fr_FR.UTF-8 UTF-8)
  • le fuseau horaire
  • le type de clavier
  • le nom de host

Première connexion avec le nom d’utilisateur « pi », et mise à jour du système :

Puis :

Et pour le fun, un peu de couleur dans vi :

 Installation des packages nécessaire

Dans cette distribution, les environnements de développement (Python, C, …) ainsi que  le module GPIO « python3-rpi.gpio » sont déjà installés, Il ne reste que peu de chose à installer.

La librairie « RPIO » sera nécessaire ; Elle permet de générer des signaux de type PWM.

D’autres packages seront également utile,  pour le wifi, la webcam …   ils sont traités plus bas

Configuration du wifi

Dans sa configuration actuelle, le robot se connecte directement à la borne Wifi de mon domicile. Ce qui lui permet un accès complet aux diverses ressources du réseau local, et un accès à Internet.

Une autre solution (une évolution possible) pourrait être de configurer la carte Raspberry en Acces-Point Wifi (en « hotspot »), ce qui la rendrait entièrement autonome.

L’ajout de l’adaptateur Usb Wifi crée une interface réseau nommée « wlan0 »,  il suffit d’éditer le fichier  /etc/network/interfaces pour configurer une adresse IP, le SSID et mot de passe wifi.

 

 

Gestion de la webcam et du flux video

L’objectif est de diffuser le simplement possible, le flux vidéo de la webcam sur le réseau local.

Après plusieurs tentatives avec diverses solutions tel que Motion, ffmpeg, vlc  ou autres,  j’ai fini par adopter « MJPG-Streamer » qui pour avantages d’être peu consommateur en ressources, d’embarquer son propre serveur web pour la diffusion, et le tout avec une faible latence !

MJPG-Streamer n’est pas packagé pour Raspbian, il faut donc le compiler pour le processeur ARM de la Raspberry.

Les sources sont disponibles sur sourceforge : http://sourceforge.net/projects/mjpg-streamer/

Installation de MJPG-Streamer

Lancement  du processus  MJPG-Streamer

Reste à vérifier :         http://Mon_Adresse_IP:8080

image018

 

Schémas électroniques

Connecteur GPIO

Voici le détail du connecteur de 2×13 broches de Raspberry.

Les broches sont numérotées de 1 à 26 sont également identifiées par une référence GPIO qui est plus simple à utiliser lors de la programmation. Elles peuvent être configurées en entrée ou en sortie.

image019

 

Le Robot « Raspberry Zumo » utilise (dans sa version actuelle) 8 sorties GPIO :

  • GPIO 25       –>    Moteur Droite, marche avant
  • GPIO 24       –>    Moteur Droite, marche arrière
  • GPIO 23       –>    Moteur Gauche, marche avant
  • GPIO 18       –>    Moteur Gauche, marche arrière
  • GPIO 22       –>    LED tricolore, rouge
  • GPIO 27       –>    LED tricolore, vert
  • GPIO 17       –>    LED tricolore, bleu
  • GPIO 04       –>   Buzzer

Précision sur l’alimentation

Le robot utilise deux sources d’énergie.

  • La batterie ANKER de 3000mAh fournit 5volt à la Rasberry et ces interfaces USB, comprenant le module Wifi et la Webcam. Elle alimente également la LED externe et le circuit SN754410
  • Quatre piles rechargeables placées dans le châssis à chenille fournissent environ 6Volt aux deux moteurs

Schéma du robot « Raspberry Zumo »

Les sorties GPIO fournissent 3.3Volt pour un courant maximum de 100mA. Il est donc très simple d’alimenter une LED ou un Buzzer.

En revanche pour commander les 2 moteurs 6volt à courant continu, et qui plus est, pour gérer leur sens de rotation, il est nécessaire d’utiliser un « circuit pont en H ». J’utilise un SN754410 (équivalant au L293D) qui permet de piloter deux moteurs CC de 4,5V à 36V provenant d’une source d’alimentation dédiée, pour un prix très économique.

image020

 

Programmation

Descriptif des fonctions

L’objectif est de développer un petit programme permettant de piloter les deux moteurs, d’allumer la LED tricolor en mode « tout-ou-rien » pour chaque couleurs et d’envoyer un signal de type PWM au buzzer.

Pour faciliter l’envoie de commandes via le réseau et permettre de futurs évolutions, j’ai souhaité mettre en place une solution client/serveur. Le robot héberge un serveur IP qui crée un socket TCP sur le port 12345. Cela a comme principal avantage d’être complètement indépendant de la plate-forme cliente (Linux, MacOs, Windows, Smartphone..) et du langage utilisé (Java, C… ou autre). Telnet, peut par exemple, et dans un premier temps, être très bon client !

Les différentes librairies et exemples sont disponibles pour la Raspberry en langage Python. De plus l’environnement de développement est déjà préinstallé dans la distribution Raspbian Wheezy. Le serveur est donc développé en Python. Les principales commandes (marche avant, marche arrière, tourner à droite ou à gauche ….etc) ont été implémenté ainsi qu’un petit menu à la connexion.

 Le code

Le fichier « robot-srv.py » est créé dans le répertoire /home/pi,  l’attribut d’exécution doit être positionné sur ce fichier (chmod +x)

 Tests

Et voilà !!!  Il ne reste plus qu’à tester !

Donc sur la raspberry PI,  heu … NON !!! à SUR LE ROBOT « Raspberry ZUMO », on lance la Webcam & le serveur :

Et on test, depuis un poste Windows par exemple :

image021