J'avais initialement prévu d'utiliser le package darknet_ros pour détecter yolov3 sur la voiture intelligente équipée d' Ubuntu 18.04
La première consiste à implémenter la détection darknet_ros (YOLO V3) sous ROS
Article de référence
https://blog.csdn.net/qq_42145185/article/details/105730256
1. Téléchargement de code
Page d'accueil Code Github : https://github.com/leggedrobotics/darknet_ros
Commande de téléchargement :
mkdir -p catkin_workspace/src
cd catkin_workspace/src
git clone --recursive [email protected]:leggedrobotics/darknet_ros.git
cd ../
Le temps de téléchargement peut être relativement long, veuillez patienter...
Si le système Ubuntu téléchargé ne prend pas en charge l'exploration directe du code depuis gitthub, vous pouvez changer la méthode de téléchargement en téléchargement. Cliquez sur cloner dans GitHub, et vous pouvez choisir ssh et https à charger en mode déroulant. Pour le moment, il vous suffit de convertir le code git clone.
via ssh
git clone --recursive [email protected]:mirrors/leggedrobotics/darknet_ros.git
par https
git clone --recursive https://gitcode.net/mirrors/leggedrobotics/darknet_ros.git
Pour les autres problèmes que vous pourriez rencontrer lors du téléchargement, veuillez vous référer au chapitre de téléchargement du package darknet_ros dans cet article
http://t.csdn.cn/hPQyd
Parmi eux, parce qu'il est déplacé vers la voiture équipée d'Ubuntu, il est directement téléchargé via win11, puis déplacé vers le système Ubuntu à l'intérieur de la voiture via une clé USB. Au cours de ce processus de déplacement, des fichiers peuvent être manquants ou endommagés, ce qui peut provoquer des erreurs lors d'une opération ultérieure, il n'est donc pas recommandé. Il est préférable de télécharger directement via la méthode ci-dessus, et non en téléchargeant divers packages compressés tels que le zip de GitHub.
Par exemple,
démarrez yolo3 pour détecter les objets vus par la caméra
roslaunch darknet_ros darknet_ros.launch
Rapport d'erreur
Cette erreur est probablement due au fait que certains fichiers cfg ne peuvent pas être reconnus après le déplacement de ce package de Windows vers Ubuntu.
Retournez dans le répertoire /home/xx/catkin_ws/src/darknet_ros, ouvrez le terminal, exécutez
git stash
et relancez.
2. Compilez
Dans le répertoire de l'espace de travail ROS, exécutez la commande :
catkin_make -DCMAKE_BUILD_TYPE=Release
À ce stade, l'ensemble du projet commencera à être compilé. Une fois la compilation terminée, il vérifiera s'il existe deux fichiers de modèle, yolov2-tiny.weights et yolov3.weights, dans le {catkin_ws}/darknet_ros/darknet_ros/yolo_network_config /fichier de pondérations. Le volume est sans ces deux fichiers de modèle. Par conséquent, il commencera automatiquement à télécharger le fichier modèle après la compilation, ce qui représente un autre long temps d'attente.
Si vous avez déjà téléchargé le fichier modèle, c'est très bien. Copiez simplement le fichier modèle dans le dossier ci-dessus avant de commencer à compiler, et vous ne le téléchargerez plus.
Lien de téléchargement:
https://pjreddie.com/media/files/yolov2.weights
https://pjreddie.com/media/files/yolov2-tiny.weights
https://pjreddie.com/media/files/yolov3.weights
https://pjreddie.com/media/files/yolov3-tiny.weights
Placez le fichier téléchargé dans le fichier /darknet_ros/darknet_ros/yolo_network_config/weights
Continuer
catkin_make -DCMAKE_BUILD_TYPE=Release
3. Publication de sujet d'image
Étant donné que darknet_ros s'abonnera directement au nom de sujet d'image spécifié, puis détectera l'image, dessinera le cadre de détection et publiera le sujet de détection correspondant, vous devez donc d'abord trouver un package ROS pouvant publier des sujets d'image. est recommandé ici Le package de pilote usb_cam officiel peut publier directement des images capturées par la caméra intégrée de l'ordinateur ou une caméra USB connectée à l'ordinateur en tant que sujet d'image ROS.
Téléchargez le pilote de la caméra :
sudo apt-get install ros-kinetic-usb-cam
Téléchargez le pilote de la caméra Parfois, votre propre système d'exploitation n'est peut-être pas la version kinetic, vous devez donc interroger votre propre version ros via les commandes du terminal.
rosversion -d
S'il s'agit d'une version mélodique, utilisez :
sudo apt-get install ros-kinetic-usb-cam
Publiez ensuite le sujet de l'image de la webcam :
roslaunch usb_cam usb_cam-test.launch
Si tout se passe bien, vous devriez pouvoir voir l'interface d'affichage de l'image réelle.
3. Démarrez le nœud de test de caméra
Erreur 1
Après avoir entré la commande de démarrage de test suivante, une erreur se produit.
Solution
1. Essayez de brancher l'interface de la caméra sur USB3.0.
USB3.0, USB3.0 est également appelé bus USB SuperSpeed.Comparé au bus USB2.0 haute vitesse (haute vitesse), sa vitesse de transmission est plus rapide.
2. Deuxièmement, comme indiqué dans la figure ci-dessous, il doit être vérifié, sinon cela signifie que la caméra n'est pas connectée.
Résolution de l'erreur 2
:
sudo apt-get install ros-melodic-image-view
erreur 3
Configurez le périphérique USB et vérifiez ubs3.
Ensuite, exécutez darknet_ros
puis exécutez darknet_ros pour détecter. Avant d'exécuter la détection, vous devez modifier le fichier de configuration afin que les sujets souscrits par darknet_ros correspondent aux sujets des images publiées par usb_cam.
Ouvrez le fichier darknet_ros/config/ros.yaml et trouvez :
Modifiez le sujet dans camera_reading comme indiqué dans la figure ci-dessus, à savoir :
subscribers:
camera_reading:
topic: /usb_cam/image_raw
queue_size: 1
Retournez ensuite dans le répertoire racine de l'espace de travail darknet et exécutez :
source devel/setup.bash
roslaunch darknet_ros darknet_ros.launch
Nous avons seulement besoin de remplacer l'ensemble de pré-formation par YOLO v3 pour la détection. Le remplacement est le suivant : Trouvez le fichier de configuration et vous pouvez voir l'ensemble de formation suivant. Ouvrez le fichier de lancement
et
modifiez darknet_ros.launch
arg name="network_param_file" default="$(find darknet_ros)/config/yolov2-tiny.yaml"/
改为
arg name="network_param_file" default="$(find darknet_ros)/config/yolov3.yaml"/
如下:
Redémarrez ensuite :
roslaunch darknet_ros darknet_ros.launch
Cela peut être réalisé presque, et fondamentalement, les erreurs ci-dessus sont les solutions trouvées dans les articles de référence suivants.
Implémentation de la détection darknet_ros (YOLO V3) sous ROS
https://blog.csdn.net/qq_42145185/article/details/105730256
Bras robotique Car yolo (1) Gazebo sous ros pour construire une voiture (contrôle au clavier) installer la simulation de caméra et charger yolo pour détecter et identifier les objets marqués
https://blog.csdn.net/WhiffeYF/article/details/109187804
Apprentissage ROS (3) appel portable et caméra externe usb
https://blog.csdn.net/m0_56451176/article/details/126174060?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169020102516800227494294%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169020102516800227494294&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-126174060-null-null.142^v91^insert_down1,239^v3^control&utm_term=sudo%20apt-get%20install%20ros-melodic-usb-cam&spm=1018.2226.3001.4187
Utiliser la caméra sous ROS
https://blog.csdn.net/wilylcyu/article/details/51732710
Allumez la caméra en ROS_étapes détaillées
https://blog.csdn.net/weixin_41074793/article/details/83474501?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242
Notes d'étude ROS - connecter une caméra USB dans ROS
https://blog.csdn.net/weixin_51244852/article/details/116169460?ops_request_misc=&request_id=&biz_id=102&utm_term=sudo%20apt-get%20install%20ros-melod&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-116169460.142^v91^insert_down1,239^v3^control&spm=1018.2226.3001.4187
Utilisez le pilote usb_cam pour lire les données de la caméra sous ROS
https://blog.csdn.net/Yangxiaoaijiejie/article/details/127061479?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169020121616800227474354%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169020121616800227474354&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-127061479-null-null.142^v91^insert_down1,239^v3^control&utm_term=%E5%AE%89%E8%A3%85ROS_USB%E9%A9%B1%E5%8A%A8%E6%8A%A5%E9%94%99&spm=1018.2226.3001.4187
Voici une explication pour un rapport d'erreur utilisant yolov3, car il existe différents fichiers de lancement dans le fichier darknet_ros.launch, si vous utilisez la commande suivante.
roslaunch darknet_ros yolov3.launch
Une erreur peut être signalée indiquant que le fichier yolov3-tiny.cfg est manquant. Si ce fichier est introuvable, vous devez créer manuellement un nouveau fichier .cfg et le coller.
Ce lien de fichier contient des commentaires en chinois et peut signaler une erreur. Voici le code compilé pour votre propre référence.
https://blog.csdn.net/weixin_44152895/article/details/106570976?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169027884416800222821030%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169027884416800222821030&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-26-106570976-null-null.142^v91^insert_down1,239^v3^control&utm_term=yolov3-tiny.cfg%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187
[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=2
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1
[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=1
[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky
###########
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear
[yolo]
mask = 3,4,5
anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319
classes=80
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
[route]
layers = -4
[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky
[upsample]
stride=2
[route]
layers = -1, 8
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear
[yolo]
mask = 0,1,2
anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319
classes=80
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1