ODROID ou RASPBERRY avec Poppy Torso?

français
documentation
Tags: #<Tag:0x00007fae8b682158> #<Tag:0x00007fae8b681ed8>

#1

Les élèves du Bachelor de l’ENSAM de TALENCE vont aborder la phase d’installation des cartes ODROID/RASPBERRY pour 4 Poppy Torso munis des dispositifs préhenseurs à la place des mains, qu’ils ont conçus et fabriqués : ils ont le choix entre cartes ODROID ou RASPBERRY2 disponibles dans l’établissement… est-ce que le script d’installation “poppy_setup.sh” disponible pour ODROID fonctionne aussi sur RASPBERRY2 ?


Odroid xu4 vs Raspberry
#2

Non :slight_smile:

Pour raspberry il y a l’installer suivant mais qui ne fonctionne pas encore pour le torso :


#3

C’est compliqué ce qu’il reste à faire pour que ça marche pour un torso ?


#4

Le plus simple est d’utiliser la procédure pour installer un ergo-jr présentée ici :

Ensuite se connecter sur la raspberry en tant que poppy (mdp poppy) :

ssh poppy@poppy.local

et d’exécuter les lignes suivantes (connection internet nécessaire) :

pip install poppy-torso
cd ~/dev/puppet-master
python bootstrap.py poppy poppy-torso

après redémarrage cela devrait marcher.

Bon courage !


Installation de Raspbian sur "Rapsberry Pi 3 B+" pour Poppy-Torso
#5

Merci, je vais essayer cela…


#6

Bon, ça installe sans erreurs… J’ai fait cela chez moi avec le raspberrypi connecté en RJ45 sur un switch pour l’accès internet. Du coup après le dernier reboot du raspberrypi en suivant ta procédure, je peux me connecter sur http://adresseIPduRaspberry avec mon portable bracnché sur le swicth => j’obtiens bien la page d’accueil :

je continuerai la suite lundi avec un poppy torso connecté au raspberry…

Par contre, le WIFI n’est pas configuré sur le raspberry pour accepter les connexions… Y a-t-il un script qui fait ça en un tour de main ?


#7

Pas encore malheureusement. N’hésite pas à partager si tu as quelque chose !


#8

Oui, je vais voir si je trouve quelquehose… dans ce cas je le partagerai bien sûr, si je trouve avant jeudi (dead line pour les élèves du Bachelors)… Sinon je resterai sur carte ODROID !


#9

Pour l’instant on le fait en ligne de commande avec wpa-supplicant. Regarde le “tuto” sur le site de Raspberry Pi.


#10

Ouf, la configuration WiFi des cartes Raspberry pi 2 a réusssi, et le concours des 4 Poppy torso modifiés par les élèves du Bachelor ENSAM a pu se faire vendredi 10 juin :slight_smile:
Comme promis, voici le récapitulatif des étapes que j’ai suivies depuis le départ pour faire la config des cartes SD des Raspberry pi 2 avec WiFi hotspot.

1/ Installation de l’image Linux sur la carte microSD

Les paragraches Start and connect the robot et Startup with a Poppy robot des Poppy-docs donnent toutes les indications pour flasher la carte microSD : en suivant les indications j’ai donc flashé une carte microSD avec l’image 2016-03-18-raspbian-jessie-lite.img (téléchargée il y quelques temps déjà sur le site raspberry).
Test : après insertion de la carte microSD flashée dans le slot de la Raspberry pi 2, celle-ci démarre du 1er coup. Pour voir les logs du démarrage et la bannière de login en mode caractères, il faut avoir branché un écran HDMI (téléviseur, projecteur-vidéo… Les convertisseurs HDMI->VGA ne fonctionnent pas au premier démarrage => il faut modifier le fichier config.txt si l’on veut voir le boot sur un écran VGA).

2/ Première utilisation : clavier / écran HDMI / Internet par RJ45

Pour simplifier la première utilisation et le téléchargement des paquets debians sur Internet, j’ai branché un clavler USB, un écran HDMI (téléviseur) et j’ai utilisé un câble RJ45 pour connecter la carte raspberry sur Internet.
=> L’avantage de la connexion Internet par câble RJ45 c’est qu’il n’y a rien à configurer de spécial : les fichiers de configuration du GNU/Linux raspbian sont déjà prêts pour la connexion RJ45, ou pour le partage de connexion avec un smartphone en liaision USB.
Attention : la distribution raspbian est configurée en anglais (clavier QWERTY !!) => pour taper le mot de passe raspberry du login pi il faut taper rqspberry (avec un Q à la place du A) : on obtient alors un shell avec aux commandes administrateur en les préfixant par sudo.
Configuration en tapant sudo raspi-config on obtient un menu de configuration (en mode caractères) qui permet de configurer :

  • Internationalisation Options
    • Change Locale => décocher l’anglais (la barre espace permet de ocher/décoher) et cocher fr_FR.UTF-8, fr_FR ISO 8859-1 et fr_FR@EURO
  • Change Keyboard Layout => le clavier français standard
  • Expand Filesystem => redimensionner la carte SD pour avoir une partition de taille égale à la capacité de la carte microSD.

Un reboot après tout cela puis login pi avec le mot de passe raspberry (en français ça va mieux ! ).
Reste juste à faire la mise à jour classique des paquets debian :slight_smile:

sudo apt-get update
sudo apt-get upgrade

on répond yes à tout… Un peu plus tard un petit sudo reboot suivi d’un login pi avec le mot de passe raspberry, et on est prêt pour la prochaine étape : la rasppoppyfication !!

3/ Raspoppyfication

Connecté sur la carte raspberry pi 2 avec le login pi, je vais suivre la réponse de Pierre ci-dessus. Je télécharge et j’exécute le script shell raspoppyfication.sh avec la commande :

curl -L https://raw.githubusercontent.com/poppy-project/raspoppy/master/raspoppyfication.sh | bash -s “poppy-ergo-jr”

Et ça, ça fait un sacré boulot… (merci l’équipe Flowers !!!)
Reste plus qu’à se reconnecter avec le login poppy, mot de passe poppy : ça marche !
Maintenant, je tape les autres lignes de la réponse de Pierre pour installer la configuration Poppy torso au lieu du Poppy-ergo-jr :

pip install poppy-torso
cd ~/dev/puppet-master
python bootstrap.py poppy poppy-torso

4/ Configuration réseau

Pour faire simple j’ai juste modifié le fichier de config réseau avec la commande
$ sudo nano /etc/network/interfaces
pour démarrer la carte WiFi (interface wlan0) avec une adresse fixe 10.0.0.25 dans le réseau 10.0.0.0.
Après modification le fichier ressemble à celà :

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet static
    address 10.0.0.25
    netmask 255.0.0.0

Les lignes importantes sont celles concernant l’interface wlan0, qui correspond au WiFi :

  • adresse IP statique : 10.0.0.25,
  • masque réseau : 255.0.0.0.

Pour relancer le réseau avec cette nouvelle configuration :

sudo ifdown wlan0
sudo ifup wlan0

Vérification : la commande ifconfig -a permet de voir la configuration des interfaces :

 eth0      Link encap:Ethernet  HWaddr b8:27:eb:1c:d0:42  
           inet adr:192.168.1.100  Bcast:192.168.1.255  Masque:255.255.255.0
           adr inet6: fe80::4e47:e83c:65b5:cda/64 Scope:Lien
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           ...
 lo        Link encap:Boucle locale  
           inet adr:127.0.0.1  Masque:255.0.0.0
           adr inet6: ::1/128 Scope:Hôte
           UP LOOPBACK RUNNING  MTU:65536  Metric:1
           ...
wlan0      Link encap:Ethernet  HWaddr 74:da:38:7e:9e:1e  
           inet adr:10.0.0.25  Bcast:10.255.255.255  Masque:255.0.0.0
           adr inet6: fe80::63d0:359e:25e:322d/64 Scope:Lien
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           ...

5/ Configuration du serveur DHCP

Par habitude, j’utilise un serveur DHCP pour attribuer automatiquement des adresse IP sur le réseau. Il suffit d’éditer le fichier de configuration avec la commande sudo nano /etc/dhcp/dhcpd.conf conformément à ce qui suit :

# pas de gestion DDNS
ddns-update-style none;
# adresse donnée pour 3600s
default-lease-time 3600;
# maximum de temps accepté
max-lease-time 7200;
# c'est moi le chef
authoritative;
# les messages sont dan sle journal sys
log-facility local7;
# voici mon réseau
subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.0.0.26 10.0.0.30;
  option broadcast-address 10.255.255.255;
  option routers 10.0.0.25;
  option domain-name "local";
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Dans cet exemple :

  • le serveur DHCP sert le réseau 10.0.0.0,
  • les machines qui se connecteront par WiFi sur la carte raspberry obtiendront des adresses IP dans la plage [10.0.0.26, 10.0.0.30]. Vous pouvez bien sûr adapter ces valeurs à vos besoins.

Une fois le fichier /etc/dhcp/dhcpd.conf, on redémarre le service DHCP :

sudo service isc-dhcp-server stop
sudo service isc-dhcp-server start
sudo service isc-dhcp-server status

La sortie écran de status montre que le lancement de dhcpd a réussi :

● isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server)
Active: active (running) since jeu. 2016-06-02 22:01:55 UTC; 1 weeks 3 days ago
CGroup: /system.slice/isc-dhcp-server.service
└─780 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid wlan0

6/ Configuration WiFi hotspot : paquet debian hostapd

Bon c’est là où c’est le plus technique : le dongle WiFi que j’ai acheté est un EDIMAX EW-7811UN (petit nom : N150), qui est bien compatible Linux. Le dongle utilise un chipset Realtek RTL8188CUS, comme le montre la commande lsub :

$ lsusb
Bus 001 Device 004: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]

Le PB à régler est de configurer le WiFi de la carte raspberry en mode hotspot, pour qu’elle se comporte comme un Point d’Accès (une borne WiFi). Avec GNU/Linux, on utilise pour cela le paquet hostapd qui permet de créer un point d’accès WiFI. Jusque là tout va bien… mais le hic, c’est que le fichier exécutable /usr/sbin/hostapd livré avec le paquet debian hostapd de la distribution raspbian ne supporte pas le chipset RTL8188CUS utilisé par ce dongle => deux solutions :

  1. Télécharger un binaire qui va bien (croiser les doitgs !),
  2. Télécharger les sources, les compiler et installer l’exécutable (plus long mais plus sûr !)

Un peu frileux pour trouver un binaire hostapd digne de confiance dans la jungle des binaires disponibles, je chosisis la solution 2/ en allant chercher les sources sur site sûr comme REALTEK (RTL8188CUS pour Linux) ou fichiers.touslesdrivers.com.

La démarche présentée ci-dessous est adaptée de la page Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB EW-7811Un (RTL8188CUS chipset) :

  1. Connecté sous le login pi, passer en mode admimistrateur :

sudo -s

  1. Installer les paquets hostap et isc-dhcp-server

apt-get install hostap isc-dhcp-server

  1. Télécharger l’archive zip des sources puis dézipper :

wget http://fichiers.touslesdrivers.com/39144/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip

  1. Aller dans le bon répertoire (ça se mérite !!) :

cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd

  1. Désarchiver l’archie tar et compiler avec make :

tar xvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd
make

  1. Au bout d’un certain temps (compilation et édition des liens) on obtient l’exécutable hostapd que l’on va pouvoir ranger à sa place en lui donnant les bons attributs :

mv /usr/sbin/hostapd /usr/sbin/hostapd.orig
mv hostapd /usr/sbin/hostapd
chown root.root /usr/sbin/hostapd
chmod 755 /usr/sbin/hostapd

  1. Reste à créer un ficher /etc/hostapd/hostapd.conf conforme à nos besoins, par exemple avec l’éditeur nano :
# interface utilisateur
interface=wlan0
# pilote
driver=rtl871xdrv
ieee80211n=1
#nom de l'AP
ssid=PoppyWiFi
# mode Wifi
hw_mode=g
# canal à utiliser
channel=3
# on accepte toutes les adresse MAC
macaddr_acl=0
# on accepte que OSA
auth_algs=1
# on ne cache pas le SSID
ignore_broadcast_ssid=0
# chiffrement WPA2
wpa=2
# la phrase secrete
wpa_passphrase=poppy2016
# gestion PSK
wpa_key_mgmt=WPA-PSK
# chiffrement TKIP pour WPA
wpa_pairwise=TKIP
# chiffrement CCMP pour WPA2
rsn_pairwise=CCMP

Dans ce fichier, vous pouvez uiliser :

  • ssid pour donner l’identifiant sous lequel apparaîtra le WiFi,
  • channel pour choisir votre numéro de canal WiFi ,
  • wpa_passphrase pour fixer le mot de passe.

=> Modification du fichier /etc/defaults/hostapd :
Ne pas oublier de décommenter la ligne qui contient la définition de DAEMON_CONF pour écrire :

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Il ne reste plus qu’à lancer le service hostapd :

sudo service hostapd stop
sudo service hostapd start
sudo service hostapd status
● hostapd.service - LSB: Advanced IEEE 802.11 management daemon
Loaded: loaded (/etc/init.d/hostapd)
Active: active (running) since jeu. 2016-06-02 22:01:54 UTC; 1 weeks 3 days ago
CGroup: /system.slice/hostapd.service
└─782 /usr/sbin/hostapd -B -P /run/hostapd.pid /etc/hostapd/hostapd.conf

Et là, le tour est joué, depuis un portable, je vois le réseau WiFi de la carte raspberry…

7/ Épilogue

Voilà, la carte Raspberry est maintenant configurée pour être un Point d’Accès WiFi : un dernier reboot, et on peut se connecter sur la carte Raspberry Pi 2 avec un n’importe quel navigateur web (Firefox, Safari, Chromium…) depuis un ordi portable en utilisant l’URL 10.0.0.25. Le navigateur montre alors la page d’accueil Poppy… que du bonheur en perspective :heart_eyes: !

Bon, je pense qu’il y a de quoi faire un script setup-wifi.sh qui serait lancé par raspoppyfication.sh


Installation de Raspbian sur "Rapsberry Pi 3 B+" pour Poppy-Torso
#11

J’ai eu des échos très enthousiastes du concours ! J’ai hâte de voir ça au colloque la semaine prochaine.

Super c’est une super contribution au projet ! Tu as du y passer quelques heures ! J’intègre ça dans la prochaine release !


#12

Ouaip, je veux bien faire le bêta testeur pour le prochain script shell setup-wifi.sh :wink:

Je vais également faire l’acquisition de cartes Raspberry pi 3 : le WiFi est intégré sur la carte => peut-être que le chipset sera mieux supporté par le binaire hostapd ?


#13

On a pas testé hostapd sur RPI3 mais le Wifi est super stable.


#14

Hello :slight_smile:
Suite à un souci avec ma carte Odroid, j’essaye de faire fonctionner mon Poppy Torso avec une Raspberry Pi 3.
J’ai suivi la procédure de JeanLuc, j’arrive à accéder au tableau de bord de Poppy, qui est bien celui du Torso.
En revanche, aucun moteur/primitive n’est affiché dans le moniteur. Vu les logs, je pense que poppy-services n’arrive pas à pointer vers poppy-torso, et donc ne s’initialise pas :

À noter que pour le pip install poppy-torso, j’ai dû installer plusieurs packages qui n’étaient pas mentionnés dans le tuto :
sudo apt-get install python-pip libblas-dev liblapack-dev libatlas-base-dev gfortran python-scipy

Mais après cela, j’ai pu terminer l’installation.

Auriez-vous une idée de comment je pourrais régler ce problème svp ?
Merci d’avance.


#15

Bonjour,

j’avais installé un poppy humanoide sur une RPi3 moi-même, tu peux trouver les indications sur ce lien Raspberry Pi 3 + screen for poppy humanoid/torso.

La première partie de la procédure devrait vous aider, elle permet d’installer le nécessaire à partir d’une image Raspbian Jessie.

Ensuite, il me semble que pour avoir le monitoring avec les moteurs, il fallait que j’exécute manuellement un programme python contenant cette initialisation :

import pypot
from poppy_torso import PoppyTorso
pop = PoppyTorso(use_http=True, start_services=True)


#16

Bonjour,
Effectivement les primitives apparaissent et peuvent être utilisées lorsque j’exécute les lignes Python que tu m’as indiquées, merci ! :slightly_smiling_face:

Avais-tu également cette erreur (non bloquante) après exécution ?

import pypot
from poppy_torso import PoppyTorso
pop = PoppyTorso(use_http=True, start_services=True)
Exception in thread Thread-2:
Traceback (most recent call last):
File “/usr/lib/python2.7/threading.py”, line 801, in __bootstrap_inner
self.run()
File “/usr/lib/python2.7/threading.py”, line 754, in run
self.__target(*self.__args, **self.__kwargs)
File “/usr/local/lib/python2.7/dist-packages/pypot/utils/stoppablethread.py”, line 130, in _wrapped_target
self._target()
File “/usr/local/lib/python2.7/dist-packages/pypot/utils/stoppablethread.py”, line 205, in run
make_update_loop(self, self.update)
File “/usr/local/lib/python2.7/dist-packages/pypot/utils/stoppablethread.py”, line 175, in make_update_loop
update_func()
File “/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/controller.py”, line 60, in update
self.set_register(self.synced_motors))
File “/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/controller.py”, line 92, in set_register
getattr(self.io, 'set
{}’.format(self.regname))(dict(zip(ids, values)))
File “/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/controller.py”, line 91, in
values = (m.dict[self.varname] for m in motors)
KeyError: ‘pid’

Exception in thread Thread-1:
Traceback (most recent call last):
File “/usr/lib/python2.7/threading.py”, line 801, in __bootstrap_inner
self.run()
File “/usr/lib/python2.7/threading.py”, line 754, in run
self.__target(*self.__args, **self.__kwargs)
File “/usr/local/lib/python2.7/dist-packages/pypot/utils/stoppablethread.py”, line 124, in _wrapped_target
self._setup()
File “/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/syncloop.py”, line 22, in setup
[c.start() for c in self.controllers]
File “/usr/local/lib/python2.7/dist-packages/pypot/robot/controller.py”, line 29, in start
self.wait_to_start()
File “/usr/local/lib/python2.7/dist-packages/pypot/utils/stoppablethread.py”, line 89, in wait_to_start
’for details.’.format(self._thread.name))
RuntimeError: Setup failed, see Thread-2 Tracebackfor details.

Comme ces erreurs sont non bloquantes je ne vais pas m’attarder dessus.

En revanche, saurais-tu comment configurer poppy-services pour instancier automatiquement la créature de notre choix au démarrage de la Raspberry ?
Merci d’avance.