Version 1 (modified by 5 years ago) ( diff ) | ,
---|
Cette page contient les informations nécessaires pour utiliser le drone parrot bebop2 sous linux avec des programmes "maison". Tous les capteurs et actionneurs sont utilisables. N'hésitez pas à contribuer en envoyant un mail à drones(at)hds.utc.fr
Le drone bebop2 fonctionne avec une distribution linux Parrot. Certains logiciels spécifiques ajoutés par Parrot ont leurs sources sur https://github.com/Parrot-Developers On y trouve notamment les sources du noyau utilisé.
Une doc sur le "hack" du drone ici.
Connexion
Pendant son boot le drone crée un point d'accès wifi Bebop2-xxxxxx. Il faut s'y connecter depuis son PC. Ensuite il faut appuyer 4 fois rapidement sur le gros bouton rouge à l'arrière sous la batterie et un serveur telnet est lançé. Il suffit alors de taper telnet 192.168.42.1
Si après les 4 appuis un câble USB est branché, alors le drone crée une connexion ethernet over USB. On peut donc aussi accéder au drone par cette interface avec telnet 192.168.43.1
, ce qui est pratique en cas de problème avec une configuration wifi custom.
Procédure de démarrage
Au démarrage le premier processus exécuté ("init") correspond au binaire /sbin/boxinit (programme maison Parrot, fork d'android init. Non publié sur Parrot-devs).
Celui-ci exécute les instructions présentent dans /etc/boxinit.rc. Les instructions sont organisées par "classes" qui contiennent des "services". La classe "core" est lancée au boot. Apparemment la classe "core-main" est lancée ensuite. Le service rcs-init, membre de la classe core, correspond au principal script de démarrage, /etc/init.d/rcS. Ce script effectue les actions "one shot" qui doivent être faites au démarrage: configurer le réseau et les IOs notamment.
Logs
Toutes les opérations sont loguées par le démon ulogger. Il s'agit d'un binaire Parrot (sources fournis sur Parrot-devs, projet "ulog").
ulogger -h
pour les options.
Les logs peuvent être consultés avec le binaire ulogcat.
Très intéressant pour suivre toutes les étapes du démarrage.
Réseau
démarrage
Lors du démarrage le script /etc/init.d/rcS démarre udev (/usr/bin/udevd_init). La configuration d'udev se trouve dans /lib/udev (histoire qu'on galère un peu pour la trouver...). le fichier rules.d/50-network.rules rassemble les règles associées à la gestion du réseau principal (wifi).
Au démarrage le bsp créé un périphérique usb broadcom. Udev le détecte, ce qui active une règle qui exécute /sbin/broadcom_setup.sh insmod
. En conséquence les modules wl (driver broadcom propriétaire) et bcm_dbus sont chargés.
Le chargement du driver wl entraîne la déclaration de l'interface eth0 dans le noyau.
Udev le détecte, ce qui active une règle qui exécute /sbin/broadcom_setup.sh create_net_interface
. En conséquence l'interface eth0 est configurée en mode wifi access point.
à la fin du démarrage on lance un chroot sur un système de fichier maison afin de continuer avec nos programmes. Le système de fichier, obtenu avec robomap3, se trouve là https://devel.hds.utc.fr/software/flair/wiki/setup_target
watchdog
Au démarrage un démon de surveillance est démarré /usr/bin/bcm-watchdog. bcm-watchdog -h
pour les options.
Appelle broadcom_setup.sh reboot
en cas de perte de connexion. Ce script appelle broadcom_reset.sh. Ce script désactive l'interface réseau, attend 3s et la réactive (ça doit faire bizarre en vol!)
Gros bouton
Pendant le démarrage un démon est lancé pour surveiller les appuis sur le gros bouton rouge à l'arrière sous la batterie. Les différents comportements sont décrits dans le répertoire /bin/onoffbutton. Les comportement sont
- 1 appui court: shutdown
- 4 appuis courts: mode debug. Démarrage du démon telnet, du démon adb (android debug) et configuration d'une liaison "ethernet over usb" sur l'interface réseau rndis0.
- 1 appui long: changement de bande wifi
- 1 appui trèèèès long: DANGER! factory reset: toute la partie /data est écrasée, on perd tout ce qu'on a installé
rootfs
We use a chrooted environment https://uav.hds.utc.fr/src/bebop/robomap3/core-image-flair-bebop.tar.bz2
chroot script
chroot script (/data/ftp/internal_000/bebop_chroot.sh):
#!/bin/sh kk mount -o bind /dev /data/ftp/internal_000/rootfs/dev/ mount -o bind /sys /data/ftp/internal_000/rootfs/sys/ mount -o bind /proc /data/ftp/internal_000/rootfs/proc/ mount -t tmpfs -o mode=0755,nodev,nosuid tmpfs /data/ftp/internal_000/rootfs/run mount -t devpts devpts /data/ftp/internal_000/rootfs/dev/pts chroot /data/ftp/internal_000/rootfs/ /etc/init.d/dropbear start