Code destiné à être sur la plateforme Jetson d'NVIDIA.
NE PAS TOUCHER AUX PINS GPIO LORSQUE LE JETSON EST EN MARCHE. CELA FAIT COURT-CIRCUITER LE DEV BOARD!
Devine qui a découvert ça (hint: il a aussi un problème avec les batteries)...
- Setup du Jetson
- Entrainement du réseau de neurone
Pour installer le système d'exploitation sur le Jetson, il faut télécharger l'installateur du Jetpack 3.2
.
https://developer.nvidia.com/embedded/dlc/jetpack-l4t-3_2
Ensuite, il faut que suivre les étapes de l'installateur.
Pour un temps d'installation optimal, nous recommandons de connecter le Jetson par ethernet à un routeur ayant un accès internet. L'ordinateur d'installation devra être connecté à ce même routeur en wifi ou par ethernet si possible.
Pour des raisons de sécurité apparentes il est impératif de changer les mots de passe par défaut du Jetson.
Le mot de passe par défaut du compte nvidia
est nvidia
sudo passwd nvidia
sudo passwd ubuntu
ROS ne pourra pas être installé si les paquets ne sont pas mis à jour.
sudo apt update
sudo apt upgrade
sudo reboot
Il est normal d'avoir certaines erreurs de signature de source apt pour les repos locaux. Simplement les ignorer!
Pour overclocker le Jetson au démarage, créer le fichier /etc/rc.local
et y ajouter:
(sleep 60 && /home/nvidia/jetson_clocks.sh) &
Ensuite, éxécuter les commandes suivantes:
sudo /etc/init.d/rc.local start
Puisque l'espace disque est limité sur le Jetson, il est falcultatif mais pertinent de supprimer certains éléments supperflus comme certains logiciels inutiles:
- Thunderbird
- Suite LibreOffice
- Transmission
sudo apt remove chromium-browser thunderbird libreoffice-* transmission-*
sudo apt autoremove
Afin de faire fonctionner le TX* avec elikos_jetson
, les programmes suivant doivent être installés
- ROS
- LibRealSense
- darknet_ros
Suivre les instructions sur le site de ROS
Nous voulons aussi utiliser les Catkin Command Line Tools
:
sudo apt install python-catkin-tools
À noter: Nous voulons installer la version ros-kinetic-desktop
Le Jetson aura une architecture à double workspace
~/jetson_ws
- Contiendra les différentes nodes conçues par Élikos qui seront exécutés sur le Jetson
~/jetson_lib_ws
.- Contiendra les pilotes et autres librairies requises au bon fonctionnement des nodes de
~/jetson_ws
.
- Contiendra les pilotes et autres librairies requises au bon fonctionnement des nodes de
Le paquet ros-kinetic-librealsense
est incompatible avec le Jetson.
Pour y remédier, nous devons compiler une version spécifique de librealsense
et de realsense-camera
.
Premièrement, installer librealsense
sur le système:
github.com/jetsonhacks a déjà fait un script pour automatiser l'installation
cd ~
git clone https://github.com/jetsonhacks/installLibrealsenseTX2.git
cd installLibrealsenseTX2
chmod +x installLibrealsense.sh
./installLibrealsense.sh
Ensuite, installer librealsense
dans la workspace ROS
L'installation de librealsense
se fera dans ~/jetson_lib_ws
.
cd ~/jetson_lib_ws/src
git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
git checkout v1.12.1
wget https://raw.githubusercontent.com/jetsonhacks/installLibrealsenseTX1/master/patches/uvc-v4l2.patch
patch -p1 -i uvc-v4l2.patch
# Patch appliquée pour la reconnaissance du module uvc du kernel
Puis cloner realsense-camera
:
cd ~/jetson_lib_ws/src
git clone https://github.com/intel-ros/realsense.git
cd realsense
git checkout 1.8.0
cd ../..
sudo rosdep -y install --from-paths src --ignore-src --rosdistro kinetic
Puis build le tout:
catkin_make -DCMAKE_BUILD_TYPE=Release
Installons maintenant le code qui sera éxécuté sur le Jetson.
cd ~
mkdir -p jetson_ws/src
cd jetson_ws/src
git clone --recurse-submodules [email protected]:elikos/elikos_jetson.git
cd ..
catkin build
Pour éviter une prise de panique soudaine lors du démarage du Jetson, nous allons ajouter les workspaces au .bashrc
pour une inclusion automatique:
Ajouter les lignes suivantes au ~/.bashrc
:
source ~/jetson_lib_ws/devel/setup.bash
source ~/jetson_ws/devel/setup.bash
Puis faire la commande:
source ~/.bashrc
Pour que le réseau de neurone fonctionne, il faut d'abord l'entrainer avec les images à détecter
Darknet peut être cloné directement à partir du repo GitHub.
git clone https://github.com/pjreddie/darknet.git
cd darknet
Pour une raison mystérieuse, cette dernière version de Darknet peut être incompatible avec certaines cartes grahique. Pour régler ce problème, il est possible d'utiliser la version d'AlexeyAB. Cette version ne doit pas être utilisé sur le Jetson.
git clone https://github.com/AlexeyAB/darknet
cd darknet
Avant de compiler darknet, il faut télécharger et installer CUDA 8. https://developer.nvidia.com/cuda-80-ga2-download-archive
Il faut ensuite modifier le Makefile pour activer Cuda en modifiant le flag GPU=1
(et OPENCV=1
si désiré et installé).
make
Afin de créer le dataset, il est possible d'utiliser l'utilitaire d'AlexayAB.
git clone https://github.com/AlexeyAB/Yolo_mark
Suivre les étapes décrites sur la page github de Yolo_mark https://github.com/AlexeyAB/Yolo_mark.
Pour entrainer le dataset produit par Yolo_mark, copier le dossier x64
dans le dossier darknet
. Ensuite, télécharger les weights d'entrainement du site de darknet dans le dossier darknet/x64/Release
. Finalement, exécuter la commande suivante.
./darknet detector train x64/Release/data/obj.data x64/Release/yolo-obj.cfg x64/Release/darknet19_448.conv.23
À chaque 100 itérations, darknet sauvegarde les résultats dans le dossier darknet/backup
.
Note: Il est possible de diminuer le paramètre batch
et augmenter le paramètre subdivisions
dans le fichier yolo-obj.cfg si il n'y a pas assez de mémoire graphique.