| 1 | 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. |
| 2 | N'hésitez pas à contribuer en envoyant un mail à drones(at)hds.utc.fr |
| 3 | |
| 4 | 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 |
| 5 | On y trouve notamment les sources du noyau utilisé. |
| 6 | |
| 7 | Une doc sur le "hack" du drone [https://github.com/nicknack70/bebop/blob/master/UBHG/UBHG1_7_3.pdf ici]. |
| 8 | |
| 9 | == Connexion == |
| 10 | 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 }}} |
| 11 | |
| 12 | 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. |
| 13 | |
| 14 | == Procédure de démarrage == |
| 15 | 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). |
| 16 | |
| 17 | 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. |
| 18 | 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. |
| 19 | |
| 20 | == Logs == |
| 21 | 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"). |
| 22 | {{{ ulogger -h }}} pour les options. |
| 23 | Les logs peuvent être consultés avec le binaire ulogcat. |
| 24 | Très intéressant pour suivre toutes les étapes du démarrage. |
| 25 | |
| 26 | == Réseau == |
| 27 | === démarrage === |
| 28 | 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). |
| 29 | 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. |
| 30 | Le chargement du driver wl entraîne la déclaration de l'interface eth0 dans le noyau. |
| 31 | 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. |
| 32 | |
| 33 | à 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] |
| 34 | === watchdog === |
| 35 | Au démarrage un démon de surveillance est démarré /usr/bin/bcm-watchdog. {{{bcm-watchdog -h}}} pour les options. |
| 36 | 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!) |
| 37 | |
| 38 | == Gros bouton == |
| 39 | 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. |
| 40 | Les comportement sont |
| 41 | * 1 appui court: shutdown |
| 42 | * 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. |
| 43 | * 1 appui long: changement de bande wifi |
| 44 | * 1 appui trèèèès long: '''DANGER! ''' factory reset: toute la partie /data est écrasée, on perd tout ce qu'on a installé |
| 45 | |
| 46 | === rootfs === |
| 47 | |
| 48 | We use a chrooted environment |
| 49 | https://uav.hds.utc.fr/src/bebop/robomap3/core-image-flair-bebop.tar.bz2 |
| 50 | |
| 51 | === chroot script === |
| 52 | chroot script (''/data/ftp/internal_000/bebop_chroot.sh''): |
| 53 | |
| 54 | {{{ |
| 55 | #!/bin/sh |
| 56 | |
| 57 | kk |
| 58 | |
| 59 | mount -o bind /dev /data/ftp/internal_000/rootfs/dev/ |
| 60 | mount -o bind /sys /data/ftp/internal_000/rootfs/sys/ |
| 61 | mount -o bind /proc /data/ftp/internal_000/rootfs/proc/ |
| 62 | |
| 63 | mount -t tmpfs -o mode=0755,nodev,nosuid tmpfs /data/ftp/internal_000/rootfs/run |
| 64 | mount -t devpts devpts /data/ftp/internal_000/rootfs/dev/pts |
| 65 | |
| 66 | chroot /data/ftp/internal_000/rootfs/ /etc/init.d/dropbear start |
| 67 | }}} |