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 ?
Non
Pour raspberry il y a l’installer suivant mais qui ne fonctionne pas encore pour le torso :
C’est compliqué ce qu’il reste à faire pour que ça marche pour un torso ?
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 !
Merci, je vais essayer cela…
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 ?
Pas encore malheureusement. N’hésite pas à partager si tu as quelque chose !
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 !
Pour l’instant on le fait en ligne de commande avec wpa-supplicant. Regarde le “tuto” sur le site de Raspberry Pi.
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
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
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 :
- Télécharger un binaire qui va bien (croiser les doitgs !),
- 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) :
- Connecté sous le login
pi
, passer en mode admimistrateur :
sudo -s
- Installer les paquets
hostap
etisc-dhcp-server
apt-get install hostap isc-dhcp-server
- 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
- Aller dans le bon répertoire (ça se mérite !!) :
cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd
- 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
- 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
- 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 !
Bon, je pense qu’il y a de quoi faire un script setup-wifi.sh
qui serait lancé par raspoppyfication.sh
…
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 !
Ouaip, je veux bien faire le bêta testeur pour le prochain script shell setup-wifi.sh
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
?
On a pas testé hostapd
sur RPI3 mais le Wifi est super stable.
Hello
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.
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)
Bonjour,
Effectivement les primitives apparaissent et peuvent être utilisées lorsque j’exécute les lignes Python que tu m’as indiquées, merci !
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.