Projet-2014-2015-RobAIR

=Présentation= RobAIR est une plate forme de télé-présence. Sa principale fonction est d'agir à la place de son utilisateur, lorsque ce dernier ne peut être physiquement présent dans un lieu. Ses domaines d'application sont variés, on peut notamment citer le cas des conférenciers ne pouvant pas se permettre un déplacement, ou bien pour qu'un élève continue d'assister à ses cours lors d'une hospitalisation. Il s'agit d'un projet qui a débuté il y a quelques années, sur lequel nous travaillons en parallèle avec la filière 3I. Nous reprenons aussi le travail effectué précédemment par des élèves de l'ENSIMAG. Notre objectif est le portage sur une nouvelle gamme utilisant le micro-contrôleur STM32 au lieu d'Arduino. Ainsi que l'ajout d'une carte MEMS intégrant divers capteurs, et communiquant avec une tablette via Bluetooth low consomation. Nous prendrons aussi en compte l'implémentation d'une interface sous FirefoxOS pour le téléguidage.

=Équipe=

Encadrant/Client

 * Olivier Richard(olivier.richard@imag.fr)
 * Didier Donsez(didier.donsez@imag.fr)

Étudiants

 * KLIPFFEL Tararaina (tararaina.klipffel@e.ujf-grenoble.fr) <-- Chef de projet
 * MICHEL Vivien (vivien.michel@e.ujf-grenoble.fr)
 * HAMMERER Jeremy (jeremy.hamerer@e.ujf-grenoble.fr)
 * VIALLET Etienne (etienne.viallet@e.ujf-grenoble.fr)

= Gestion de projet = The project started January 14th, 2015. = Progression du projet =

Week 1 (January 13th - January 18th)
Découverte de la Fab Lab et du robot "RobAIR"
 * Rencontre avec les étudiants de l'ENSIMAG travaillant sur le sujet
 * Récupération du matériel hardware et prise en main de la documentation :
 * STM32F030R8T6 Nucleo
 * MEMES Inertial and Environmental -- Nucleo Expansion

Week 2 (January 19th - January 25th)
Réflexion sur les Exigences :
 * Prise en main de la documentation de la carte STM32F030R8T6.
 * Initialisation de la board par GitHub :
 * Lancement d'un programme de test des leds de la carte

Problèmes rencontrés
Après avoir installé les fichiers de configurations, nous n'arrivons pas à compiler le programme d'exemple "hello-world". En effet la board STM32F030R8T6 n'a pas encore était implémentée (board inexistante). Il est ainsi pour le moment impossible de flasher celle ci.

Week 3 (January 26th - February 01st)

 * Récupération du matériel hardware :
 * STM32F407VGT6 Discovery
 * 18-D80NK Adjustable Infrared Obstacle Avoidance Detection Sensor Switch Detect 3-80cm for Arduino
 * Ultrasson Sensor


 * Récupération des ressources software :
 * Code git des Ensimag :
 * Documentation des Ensimag :

Problèmes rencontrés
Après avoir installé les fichiers de configurations, nous avons réussi à flasher le programme d'exemple "hello-world" sur la board STM32F407VGT6 Discovery. Cependant, notre objectif premier est de faire le portage d'une carte Arduino à une STM32f-NUCLEO et non une STM32f-DISCOVERY. En effet, les cartes NUCLEO sont nettement plus performantes et compatibles avec les cartes MEMS et les cartes ARDUMOTO. Pour l'instant nous prenons connaissance de l'utilisation de la carte.

Week 4 (February 02nd - February 08th)

 * Récupération du matériel hardware :
 * STM32L152-Nucleo et STM3F334-Nucleo
 * SparkFun Ardumoto Shield
 * DC geared Motor x2
 * Téléphone ZTE avec FirefoxOs pré-installé

Tutorial d'initialisation du projet
ATTENTION --- Si vous tournez sur une machine de 64 bit, vous devez installer le paquet gcc-multilib, pour pouvoir compiler avec succés sur RiotOS. explication | sudo apt-get install gcc-multilib Dans un premier temps nous allons récupérer toute les librairie nécessaire pour commencer notre projet. | Download le ZIP | Créer un nouveau dossier (par exemple LIBRAIRIE_EXT dans votre $HOME ) | Placer l'archive dans ce dossier et l'extraire ATTENTION --- pour STLINK vous devez faire quelques manipulations supplémentaires. | Rentrer dans le dossier stlink-master et executer les lignes suivantes. | # ./autogen | # ./configure | # make | | PS : Si vous obtenez la ligne d'erreur suivante " configure: error: *** Required libusb-1.0 >= 1.0.0 not installed ***" | Pas de panique! Il vous manque seulement une librairie. | sudo apt-get install libusb-1.0
 * Récupération des différentes board sur GitHub
 * Récupération du compilateur ARM
 * Récupération de STLINK pour flasher la carte (autre solution : OpenOCD)

| N'oubliez pas de rajouter le chemin des dossiers extraits dans votre $PATH. | # export PATH=$PATH:$HOME/LIBRAIRIE_EXT/Dossier_a_ajouter Pour éviter de taper cette commande à chaque initialisation de terminal, vous pouvez la placer dans votre fichier ".bashrc". Ci dessous, voici les lignes de code ajouté à mon ".bashrc". Noté que vous devez remplacer les variables $HOME par votre propre chemin! |# LIGNE STLINK pour flash une carte |export PATH=$PATH:$HOME/LIBRAIRIE_EXT/stlink-master | |# LIGNES AJOUTEES POUR RIOT_OS compilateur ARM |export PATH=$PATH:$HOME/LIBRAIRIE_EXT/arm-2014.05/arm-none-eabi/bin |export PATH=$PATH:$HOME/LIBRAIRIE_EXT/arm-2014.05/bin

Votre projet est maintenant initialisé, nous pouvons commencer la partie sérieuse.

Tutoriel d'utilisation de RiotOS
Voici un très bon tutoriel de RiotOS : lien

| Ce placer dans un dossier d'exemple "hello-world" | # cd $HOME/LIBRAIRIE_EXT/RIOT-master/examples/hello-world/ | Compiler le programme en fonction de la BOARD utilisée | make BOARD=nucleo-l1 | Ce mettre en super utilisateur, puis flasher le programme sur la carte | # sudo -s | # st-flash write bin/nucleo-l1/hello-world.hex 0x8000000

Si votre programme renvoie une réponse, vous pouvez y accédez à l'aide de ces commandes : | # cd RIOT-master/dist/tools/pyterm/ | # ./pyterm -p /dev/ttyACM0

Prise en main de Mbed

 * Récupération du code de Didier Donsez sur mbed.
 * Adaptation de ce pour qu'il fonctionne avec la carte Ardumoto branché à la STM32-NUCLEO avec le Compilateur Mbed.
 * Pour tester le programme d'activation des moteurs, il suffit de glisser le fichier motor_NUCLEO_L152RE.bin dans la carte STM32-NUCLEO

Prise en main de ROS-INDIGO
Voici un très bon tutoriel pour prendre en main ROS
 * Installation de ROS-INDIGO
 * Prise en main de CATKIN

Initialisation au début du projet | Set your Locale | # sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX | Setup your sources.list | # sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list' | Set up your keys | # wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add - Création Pakage Workspace | You should have created this in the Creating a Workspace Tutorial | # cd ~/catkin_ws/src | # catkin_create_pkg  [depend1] [depend2] [depend3] Concept de Node | roscore --> Programme master principal | | rosnode list | | rosrun [package_name] [node_name] --> Lancer un programmme | rosrun rqt_graph rqt_graph--> Graphique de dépendance | | rostopic echo [topic] --> Recupéré des informations d'un topic | | rostopic type [topic] | rosmsg show geometry_msgs/Twist | | rostopic pub [topic] [msg_type] [args]

Problème rencontrés
Le projet des Ensimag fonctionne avec la version Hydro de ROS. Cependant "ROS Hydro ONLY supports Precise, Quantal, and Raring for debian packages". Pour une utilisation avec ROS Indigo, il sera nécessaire de modifier quelques éléments pour obtenir la compatibilité.

Export de projet via Mbed
- Sur la page de projet personnel Exemple : http://developer.mbed.org/users/Nom/code/XXXX/ - A droite de la page cliquer sur  Export to desktop IDE  - Choisir la carte sur laquelle vous souhaitez compiler - Choisir la toolChain avec laquelle vous souhaitez compiler - Une archive est téléchargée avec un Makefile pour compiler

Utilisation de la carte MEMS
-Le tutoriel pour l'utilisation du programme de démo est à l'adresse suivante: http://developer.mbed.org/teams/ST-Americas-mbed-Team/wiki/Getting-Started-with-Nucleo-Sensors -Pour visualiser le résultat (Sous Windows): http://developer.mbed.org/teams/ST-Americas-mbed-Team/wiki/Creating-Console-Output -Sous Linux/Mac: http://developer.mbed.org/handbook/Terminals -Installer screen: sudo apt-get install screen -Lancer screen pour visualiser le bon device: screen /dev/

Le port par défaut pour la carte est actuellement ttyACM0 

Week 7 (February 23rd - march 01st)
=Références=
 * RobAIR
 * 
 * https://launchpadlibrarian.net/186124315/release.txt
 * EXEMPLE_LED
 * STM32L1
 * http://air.imag.fr/index.php/Int%C3%A9gration_d%27Espruino_%C3%A0_RIOT_OS
 * http://www.ros.org/
 * http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 (c++)
 * http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28python%29 (python)