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 [https://github.com/nicknack70/bebop/blob/master/UBHG/UBHG1_7_3.pdf 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 }}}