etape 11 sous le capot de tinypilot - arthur-expeditions/pypilot-workbook-fr GitHub Wiki
Tinypilot fonctionne sous TinyCore Linux. Ce linux s'écarte des distributions habituelles. Si vous voulez en connaître le contexte, nous vous conseillons de lire quelques chapitres de http://www.tinycorelinux.net/corebook.pdf.
- Pour un accès ssh à distance, connectez-vous avec le nom d'utilisateur 'tc' et le mot de passe 'pypilot'.
Prenez un moment pour vous rendre compte de la différence principale entre Debian et tinycore linux :
- Dans debian, les paquets sont des fichiers .deb et ils sont installés une fois à partir du fichier .deb sur le système de fichiers racine en lecture-écriture.
- Dans tinycore linux, les paquets sont des fichiers .tcz, ils sont chargés au démarrage sur un système de fichiers en lecture seule et des liens symboliques sont créés vers les exécutables. Le script qui charge les paquets au démarrage est
/opt/bootlocal.sh
. La commande qui charge les paquets .tcz esttce-load
.
Notez que
/opt/bootlocal.sh
s'exécute en arrière-plan, mais envoie quand même ses données à la console. Ainsi, lorsque vous regardez la séquence de démarrage sur la console (si vous attachez un écran à votre pi), l'invite du shell sera écrasée par la sortie debootlocal.sh
. Pypilot sera déjà en cours d'exécution, tandis quebootlocal.sh
continue de charger des outils de développement secondaires, qui peuvent afficher des messages d'erreur. Cela peut vous faire penser à tort que quelque chose s'est mal passé lors du démarrage de pypilot, mais si vous vérifiez l'interface du navigateur, vous constaterez probablement que pypilot est déjà en marche.
Prenez un autre moment pour comprendre comment le paquet pypilot (pypilot.tcz !) est chargé dans tinycore. Ouvrez /opt/bootlocal.sh
et regardez le code. Si vous comprenez cela, ça vous rendra la vie vraiment plus facile :
# This is the pypilot package:
tc@box:~$ find / -name pypilot.tcz 2>/dev/null
/mnt/mmcblk0p2/tce/optional/pypilot.tcz
# This line is where it is being 'loaded' at boot-time:
tc@box:~$ grep pypilot /opt/bootlocal.sh | grep tce-load
chpst -utc tce-load -i python-serial python-RTIMULib python-ujson pypilot > /dev/null
# After loading, the package is availabe at this read-only filesystem:
tc@box:~$ df | grep pypilot
/dev/loop19 384.0K 384.0K 0 100% /tmp/tcloop/pypilot
# And this is how the executables are being accessed: through symbolic links into the read-only filesystem:
tc@box:~$ which pypilot
/usr/local/bin/pypilot
tc@box:~$ ls -al /usr/local/bin/pypilot
lrwxrwxrwx 1 root root 41 Jun 11 20:00 /usr/local/bin/pypilot -> /tmp/tcloop/pypilot/usr/local/bin/pypilot
services are defined under /etc/sv/
startup with sudo sv {start|stop} servicename
log files are under /var/log/servicename/current
configuration under .pypilot, which links to /mnt/mmcblk0p2/.pypilot
Mise à jour de pypilot sur tinypilot
La façon la plus simple de mettre à jour tinypilot est de télécharger la dernière image depuis https://pypilot.org et de la graver sur la carte SD. Prenez une nouvelle carte SD pour pouvoir revenir à la précédente en cas de problème. Il faut cependant noter que la dernière image tinypilot ne garantit pas les derniers correctifs du logiciel pypilot.
Si vous avez compris le paragraphe précédent, vous savez déjà que la mise à jour de pypilot sur tinypilot revient essentiellement à remplacer pypilot.tcz par une nouvelle version. Maintenant, lisez attentivement ceci :
Pour créer un nouveau fichier pypilot.tcz, clonez pypilot depuis github et exécutez pypilot.build.
Connexion de tinypilot à Internet - Pour cloner, tinypilot doit être connecté à l'internet. S'il est connecté en tant que client au point d'accès wi-fi d'OpenPlotter et que ce dernier est connecté à Internet avec un câble (ou, sur le bateau, avec un câble USB à votre smartphone), vous pouvez cloner directement à partir du tinypilot. NOTE : cela fonctionne si vous avez spécifié DHCP
dans les paramètres wi-fi du tinypilot. Si vous avez spécifié une adresse ip fixe (Client Mode Address), vous obtiendrez le message fatal : Unable to look up github.com (port 9418) (Temporary failure in name resolution)
. C'est compréhensible, car vous n'avez pas encore spécifié un dns et une passerelle fixes. Assurez-vous qu'il y a un nameserver 8.8.8.8
dans /etc/resolve.conf
et spécifiez une passerelle par défaut, par exemple sudo route add default gw 10.10.10.1
.
Si vous avez fait tout cela, exécutez ce code pour mettre à jour pypilot. Le mieux est de le faire ligne par ligne et d'envoyer la sortie de chaque commande dans un fichier texte, que vous enregistrez avec la date dans le nom du fichier.
cd
mkdir pypilot-update
cd pypilot-update/
git clone git://github.com/pypilot/pypilot
git clone --depth 1 git://github.com/pypilot/pypilot_data
cp -rv pypilot_data/* pypilot
cd pypilot
. pypilot.build
Après cela, redémarrez tinypilot. sudo reboot
fera l'affaire, en débranchant et rebranchant l'alimentation également.
Mise à jour de tinypilot à distance - Si la connexion de tinypilot à internet est un problème, vous pouvez aussi le mettre à jour à distance depuis un raspberry qui est connecté à internet ; remplacez 10.10.10.3 par l'adresse ip de tinypilot :
git clone https://github.com/pypilot/pypilot
git clone --depth 1 https://github.com/pypilot/pypilot_data
cp -rv pypilot_data/* pypilot
scp -r pypilot/ [email protected]:~/pypilot_update/
ssh [email protected] "cd pypilot_update; . pypilot.build; sudo reboot"
Mise à niveau rétroactive - Dans les deux cas, vous pouvez revenir à l'ancienne version de pypilot en exécutant pypilot.build dans l'ancien répertoire source :
ssh [email protected] "cd pypilot; . pypilot.build; sudo reboot"
Exécuter pypilot en ligne de commandes
Pour exécuter pypilot en ligne de commandes et obtenir ainsi une sortie de journal instantanée, arrêtez le service pypilot, puis exécutez le script pypilot. Rappelez-vous que c'est la sortie qui vous permet d'obtenir une aide ciblée lorsque vous posez une question sur le forum pypilot :
tc@box:/mnt/mmcblk0p2/.pypilot$ sudo sv stop pypilot
ok: down: pypilot: 0s
tc@box:/mnt/mmcblk0p2/.pypilot$ pypilot
ERROR loading learning.py No module named tensorflow , No module named learning
ERROR loading learning.py No module named tensorflow , No module named learning
warning, failed to make calibration process idle, trying renice
Settings file not found. Using defaults and creating settings file
Using settings file RTIMULib.ini
Detected MPU9250/MPU9255 at standard address
Using fusion algorithm Kalman STATE4
IMU Name: MPU-925x
min/max compass calibration not in use
Using ellipsoid compass calibration
Using accel calibration
loading servo calibration /home/tc/.pypilot/servocalibration
WARNING: using default servo calibration!!
connected to gpsd
Loaded Pilots: ['wind', 'simple', 'basic', 'absolute']
warning: failed to open special file /dev/watchdog0 for writing
cannot stroke the watchdog
MPU-925x init complete
servo is running too _slowly_ 0.0678148269653
value 65535
arduino servo found on [u'/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0', 38400]
serialprobe success: /home/tc/.pypilot/servodevice [u'/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0', 38400]