Projet-2014-2015-RobAIR: Difference between revisions
(Redirected page to Project-2014-2015-CannonBall) |
|||
(102 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
=Présentation= |
|||
#REDIRECT [[Project-2014-2015-CannonBall]] |
|||
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 |
|||
** [http://www.st.com/web/en/catalog/tools/FM116/SC1248/PF261191 '''MEMES Inertial and Environmental -- Nucleo Expansion'''] |
|||
== Week 2 (January 19th - January 25th) == |
|||
[http://air.imag.fr/index.php/Projet-2014-2015-RobAIR/SRS '''Réflexion sur les Exigences :'''] |
|||
* Prise en main de la documentation de la carte [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF259997 '''STM32F030R8T6''']. |
|||
* Initialisation de la board par [https://github.com/RIOT-OS/RIOT/wiki '''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 |
|||
** [http://dl.btc.pl/kamami_wa/e18-d80nk-ds.pdf '''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 : [https://github.com/DavidLevayer/robAIR] |
|||
** Documentation des Ensimag : [http://fablab.ensimag.fr/index.php/PILBI-2014-Team4] |
|||
=== 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 : |
|||
** [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260002 '''STM32L152-Nucleo'''] et [http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF260004 '''STM3F334-Nucleo'''] |
|||
** [https://learn.sparkfun.com/tutorials/ardumoto-shield-hookup-guide '''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. [https://github.com/RIOT-OS/RIOT/wiki/Family%3A-native#dependencies '''explication'''] |
|||
| sudo apt-get install gcc-multilib |
|||
<br> |
|||
Dans un premier temps nous allons récupérer toute les librairie nécessaire pour commencer notre projet. |
|||
* Récupération des différentes board sur [https://github.com/RIOT-OS/RIOT '''GitHub'''] |
|||
* Récupération du compilateur [https://github.com/RIOT-OS/RIOT/wiki/Family:-ARM '''ARM'''] |
|||
* Récupération de [https://github.com/texane/stlink '''STLINK'''] pour flasher la carte (autre solution : OpenOCD) |
|||
| Download le ZIP |
|||
| Créer un nouveau dossier (par exemple LIBRAIRIE_EXT dans votre $HOME ) |
|||
| Placer l'archive dans ce dossier et l'extraire |
|||
<br> |
|||
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 |
|||
| 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 : [http://www.codeproject.com/Articles/840499/RIOT-Tutorial '''lien'''] <br> |
|||
| 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 [http://developer.mbed.org/users/donsez/code/NucleoF401_MonsterMotoShield/ '''code'''] de Didier Donsez sur mbed. |
|||
* Adaptation de ce [http://developer.mbed.org/users/Michel_Vivien/code/RobAir_2014_2015/'''code'''] pour qu'il fonctionne avec la carte Ardumoto branché à la STM32-NUCLEO avec le [https://developer.mbed.org/compiler/#nav:/; '''Compilateur Mbed''']. |
|||
* Pour tester le programme d'activation des moteurs, il suffit de glisser le fichier motor_NUCLEO_L152RE.bin[https://github.com/teiroy/Mbed] dans la carte STM32-NUCLEO |
|||
===Prise en main de ROS-INDIGO=== |
|||
Voici un très bon tutoriel pour prendre en main ROS[http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment] |
|||
* Installation de ROS-INDIGO[http://wiki.ros.org/indigo/Installation/UbuntuARM] |
|||
* Prise en main de CATKIN [http://wiki.ros.org/ROS/Tutorials/CreatingPackage] |
|||
<br> |
|||
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 <package_name> [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"[http://wiki.ros.org/hydro/Installation/Ubuntu]. Pour une utilisation avec ROS Indigo, il sera nécessaire de modifier quelques éléments pour obtenir la compatibilité. |
|||
== Week 5(February 09th - February 15th) == |
|||
== Export de projet via Mbed == |
|||
- Sur la page de projet personnel <br> |
|||
Exemple : http://developer.mbed.org/users/Nom/code/XXXX/ <br> |
|||
- A droite de la page cliquer sur <b> Export to desktop IDE </b> <br/> |
|||
- Choisir la carte sur laquelle vous souhaitez compiler <br> |
|||
- Choisir la toolChain avec laquelle vous souhaitez compiler <br> |
|||
- Une archive est téléchargée avec un Makefile pour compiler <br> |
|||
=== Utilisation de la carte MEMS=== |
|||
-Le tutoriel pour l'utilisation du programme de démo est à l'adresse suivante: <br> |
|||
http://developer.mbed.org/teams/ST-Americas-mbed-Team/wiki/Getting-Started-with-Nucleo-Sensors <br> |
|||
-Pour visualiser le résultat (Sous Windows): <br> |
|||
http://developer.mbed.org/teams/ST-Americas-mbed-Team/wiki/Creating-Console-Output <br> |
|||
-Sous Linux/Mac: <br> |
|||
http://developer.mbed.org/handbook/Terminals |
|||
-Installer screen: |
|||
sudo apt-get install screen |
|||
-Lancer screen pour visualiser le bon device: |
|||
screen /dev/<devicename> |
|||
<i>Le port par défaut pour la carte est actuellement ttyACM0 </i> |
|||
== Week 6 (February 16th - February 22th) == |
|||
Make |
|||
Firefox OS |
|||
Ajouter librairie mbed à riot |
|||
== Week 7 (February 23rd - March 01st) == |
|||
Firefox OS |
|||
ajout des librairies mbed dans RIOT OS |
|||
== Week 8 (March 02nd - March 08th) == |
|||
Commencer portage sur mbed |
|||
traducteur python -> c++ |
|||
lib mbed |
|||
== Week 9 (March 09th - March 15th) == |
|||
Carte non viable suite a l'installation d'Open OCD |
|||
== Week 10 (March 16th - March 22th) == |
|||
Carte non viable suite a l'installation d'Open OCD |
|||
== Week 11 (March 23th - March 29th) == |
|||
Recupération d'une nouvelle carte STM32L152RE |
|||
== Week 12 (March 30th - April 4th) == |
|||
=Références= |
|||
* [[RobAIR]] |
|||
* [http://fablab.ensimag.fr/index.php/PILBI-2014-Team4] |
|||
* https://launchpadlibrarian.net/186124315/release.txt |
|||
* [http://jmfriedt.free.fr/stm32.pdf '''EXEMPLE_LED'''] |
|||
* [https://developer.mbed.org/platforms/ST-Nucleo-L152RE/]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) |
Latest revision as of 17:13, 4 April 2015
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)
- 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
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.
- 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)
| 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
| 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 code 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[3] dans la carte STM32-NUCLEO
Prise en main de ROS-INDIGO
Voici un très bon tutoriel pour prendre en main ROS[4]
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 <package_name> [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"[7]. Pour une utilisation avec ROS Indigo, il sera nécessaire de modifier quelques éléments pour obtenir la compatibilité.
Week 5(February 09th - February 15th)
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/<devicename>
Le port par défaut pour la carte est actuellement ttyACM0
Week 6 (February 16th - February 22th)
Make
Firefox OS
Ajouter librairie mbed à riot
Week 7 (February 23rd - March 01st)
Firefox OS
ajout des librairies mbed dans RIOT OS
Week 8 (March 02nd - March 08th)
Commencer portage sur mbed
traducteur python -> c++
lib mbed
Week 9 (March 09th - March 15th)
Carte non viable suite a l'installation d'Open OCD
Week 10 (March 16th - March 22th)
Carte non viable suite a l'installation d'Open OCD
Week 11 (March 23th - March 29th)
Recupération d'une nouvelle carte STM32L152RE
Week 12 (March 30th - April 4th)
Références
- RobAIR
- [8]
- https://launchpadlibrarian.net/186124315/release.txt
- EXEMPLE_LED
- [9]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)