Messages dans la série:
8. Nous contrôlons à partir du téléphone-ROS Control, GPS-node7. Localisation du robot: gmapping, AMCL, points de référence sur le plan de la salle6. Odométrie avec encodeurs de roue, plan de salle, lidar5. Nous travaillons en rviz et gazebo: xacro, nouveaux capteurs.4. Créez une simulation de robot à l'aide des éditeurs rviz et gazebo.3. Accélérez, changez la caméra, corrigez la démarche2. Logiciel1. FerLa dernière
fois , en travaillant avec OpenCV et ROS (système d'exploitation de robot), en utilisant toute la puissance de la framboise pi 3b +, nous avons réussi à rouler le long de la ligne, à voir des sourires sur le visage des gens, le museau triste des chats et même à aller à leur rencontre.
Mais avec les premiers pas encourageants dans ce domaine de la robotique, j'ai dû faire face à une multitude de petites tâches: la framboise lente, une petite distance de la caméra, qui reconnaissait le visage, se déplaçant sur le côté lors de la conduite, et d'autres. La manière de les résoudre, y compris l'ouverture de nouveaux petits horizons dans le développement de ROS, sera décrite plus loin.
1. En exécutant tous les nœuds (scripts dans ROS) à partir d'un projet précédemment assemblé et en commençant à travailler avec les cascades Haar, il est rapidement devenu clair que les performances d'un ordinateur à carte unique pour de telles tâches sont encore plutôt faibles. Malgré le fait que la charge du processeur n'était pas maximale et variait à moins de 80%, le robot a longtemps réfléchi lorsqu'il a vu le visage d'une personne ou le visage d'un chat, qu'il a dû suivre.
Le plus triste, c'est qu'après que le visage ou le visage soit sorti du champ de vision de la caméra, le robot a commencé à bouger, "pensant" qu'il allait vers l'objet. En général, comme dans M.Yu. Lermontov:
"Le banni de longue date a erré
Dans le désert du monde sans abri ... ".
Les premières tentatives pour rectifier la situation ont été les suivantes:
- dans le nœud de lancement de la caméra (sur raspberry pi), la taille de l'image capturée a été réduite de 640x480 60fps à 320x240 15 fps.
cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver nano pi_camera_driver.py
Cela a donné une certaine augmentation de la productivité, mais l'image dans son ensemble est loin d'être idéale.
De plus, dans le script pour commencer à suivre le visage d'une personne (follow_face.py) ou d'un chat (follow_cat2.py), les conclusions sur l'écran des images ouvertes elles-mêmes ont été commentées. C'est tout cv.imshow. Maintenant, au début du voyage, il était impossible d'observer visuellement si le robot voit une image vers laquelle il se déplace ou non. Eh bien, j'ai dû sacrifier la clarté.
De plus, les informations-sorties de ROS lui-même dans les scripts ont été commentées: # rospy.loginfo.
Cela a légèrement réduit la charge et augmenté la vitesse de travail.
Mais ... il fallait trouver autre chose.
2. De plus, le robot était terriblement myope. Suite à notre propre expérience et à nos recommandations dans ce domaine, une caméra fish-eye a été utilisée:

Cette caméra offre un angle de vision assez large et vous permet de capturer une partie importante de la pièce.
Cependant, il s'est avéré que ses résultats dans le domaine de la qualité de la reconnaissance faciale n'étaient pas impressionnants ... Mckayla n'a pas été impressionné ... En raison du même angle de vue large que celui utilisé par la caméra, il déforme simultanément l'objet reconnaissable lui-même. Pour cette raison, les cascades Haar utilisées ne fonctionnent pas bien. L'éclairage a également un effet significatif; lorsqu'il est ombragé, la qualité diminue encore plus.
3. Et pour couronner le tout - le robot manquait de vitesse angulaire pour des torsions claires, et même sur les seuils (pas ceux qui doivent être franchis) et les tapis, il était complètement coincé. Ici, le poivre a ajouté la différence de puissance des moteurs de «même puissance», qui ne sont presque jamais les mêmes, même après avoir quitté le même lot. Pour cette raison, le robot a dérivé de manière significative vers la gauche.
Amélioration des «performances».
Eh bien, avec les performances, la situation a commencé à s'améliorer sensiblement lorsque le principal avantage de ROS en tant que système est venu à la rescousse, à savoir: la possibilité de répartir la charge sur différentes machines.
Autrement dit, il suffit d'exécuter des nœuds de mouvement, des caméras et le nœud maître sur la framboise elle-même, et d'autres nœuds fortement chargés peuvent être posés sur les épaules de systèmes plus puissants.
Par exemple, installer ROS sur un ordinateur portable ou déployer une machine virtuelle.
Dans cette situation, la deuxième option a été choisie.
Afin de ne pas décrire comment installer Ubuntu, ROS sur une machine virtuelle, nous utilisons le slogan de Winnie Jones «
nous avons besoin d'un volontaire sans vie ». Nous l'avons préparé ... - une machine virtuelle avec toute la farce peut être téléchargée
ici .
Les paramètres de la machine virtuelle dont l'utilisation est proposée sont les suivants:

Il est entendu que vous le déployez (l'exécutez) sur la station de travail VMware.
Mot de passe: framboise
Vous pouvez désormais évaluer les performances lors de la digestion des cascades de Haar sur du fer, plus puissant que la framboise pi!
Afin de démarrer le système ROS, désormais divisé en 2 parties, vous devez spécifier la machine virtuelle sur laquelle le nœud maître fonctionne (et il démarre sur framboise immédiatement après le démarrage du système).
Pour ce faire, modifiez bashrc dans une machine virtuelle:
sudo nano ~/.bashrc
Dans les lignes à la fin du fichier, spécifiez les adresses IP:
export ROS_MASTER_URI=http://192.168.1.120:11311 export ROS_HOSTNAME=192.168.1.114
La première IP est l'adresse Raspberry Pi, la seconde IP est l'adresse de la machine virtuelle.
* La machine virtuelle et la framboise doivent être sur le même réseau local.
Sur framboise, le même bashrc sera différent:
<source lang="bash">export ROS_MASTER_URI=http://192.168.1.120:11311 export ROS_HOSTNAME=192.168.1.120
Deux adresses IP sur match de framboise.
* N'oubliez pas de redémarrer après avoir changé bashrc.
Comment démarrer un système ROS distribué?
Il y a deux terminaux sur framboise.
Au 1er mouvement:
rosrun rosbots_driver part2_cmr.py
Dans le 2ème appareil photo framboise:
sudo modprobe bcm2835-v4l2 roslaunch usb_cam usb_cam-test.launch
Au total, 2 nœuds fonctionneront sur la framboise: l'un attend qu'une commande se déplace, le second envoie la vidéo de la caméra au réseau.
Pour vous connecter au maître et contrôler le robot à partir du clavier, maintenant dans la machine virtuelle, vous devez exécuter:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel
De la même manière, au lieu de gérer à partir d'une machine virtuelle, vous pouvez exécuter un nœud - en suivant le visage d'une personne:
cd /home/pi/rosbots_setup_tools/rpi_setup python follow_face.py
Maintenant, des statistiques un peu sèches sur les résultats de la caméra fish-eye framboise pi à différents paramètres de l'image capturée par la caméra.
320x240, 30fps:
Visage d'homme. 80-100 cm.Influences d'éclairage, ne voit pratiquement pas dans l'ombre. Il est préférable de diriger la lampe vers le visage pour une amélioration. Sourire, avec un sourire, reconnaît le visage plus rapidement.
Visage de chat sur feuille A4. 15-30 cm.
À 800x600 et 60fps - le visage voit à une distance de 2-3 m.
À 1280x720 et 60fps - le visage voit à une distance de 3-4 m. Mais il y a des faux positifs - il voit une horloge murale comme le visage, etc.
Un chat sur A4 reconnaît avec un retard de 1-2 secondes, une distance de 1-1,5 m.
Charge de la machine virtuelle 77-88%.Comme vous pouvez le voir, avec une plus grande fenêtre de l'image capturée par la caméra, la charge sur la machine virtuelle et la distance à laquelle le robot voit l'objet augmenter. La charge sur la framboise augmente, mais pas de manière significative. La vitesse de reconnaissance par rapport au fonctionnement de tous les nœuds uniquement sur la framboise a considérablement augmenté.
Traiter la myopie
Les statistiques ci-dessus ont montré que pour améliorer la vision, il est nécessaire d'augmenter la résolution et les fps de la caméra, ce qui paie les performances de la machine virtuelle. Cependant, même à 1280x720 et 60fps, la distance à l'objet n'est pas trop grande.
La solution à ce problème est venue de façon inattendue.
Comme vous le savez, toute une gamme de caméras est disponible pour la framboise. Et pour notre cas, l'un d'eux était parfait, à savoir:

Ses résultats sont les suivants:
Avec un éclairage artificiel dans la pièce, il voit son visage à une distance de 7 à 8 m! Il n'est même pas nécessaire de sourire)
800x600 et 60fps - téléchargement. machine virtuelle - 70-80%, framboise - 21% (il n'y a que des nœuds de mouvement et commencez à diffuser la caméra).
Un chat sur A4 reconnaît avec un retard de 1-2 secondes, une distance de 2-2,3 m.Comme vous pouvez le voir, les chats souffrent à nouveau, qui sont déterminés à des distances plus courtes. Mais ici, la raison est très probablement dans les paramètres des cascades Haar, et non dans la caméra.
* Cette caméra est généralement livrée avec des oreilles infrarouges. Il n'est pas nécessaire de les utiliser en plein jour:

Ainsi, l'appareil photo pour framboise pi, différent de fish-eye, a montré les meilleurs résultats lorsque vous travaillez avec des objets, même dans un éclairage artificiel de mauvaise qualité. Cependant, pour augmenter la distance de la caméra, j'ai dû payer avec des angles de vue et cela doit être pris en compte.
Maintenant sur l'amélioration du châssis et la démolition du robot sur le côté
Comme mentionné ci-dessus, il n'y a pratiquement pas de moteurs bimoteurs et le robot est voué à rouler soit à droite, soit à gauche, selon la puissance du moteur, toutes choses égales par ailleurs.
Habituellement, la différence de mouvement est compensée en utilisant des encodeurs, car ils sont bons dans notre projet. Sur la façon dont cela fonctionne, il y a un bon
film .
Cependant, ici, vous pouvez tout simplifier et opter pour une petite astuce en corrigeant uniquement le script pour suivre le visage d'une personne (follow_face.py) ou d'un chat (follow_cat2.py) dans une machine virtuelle.
Nous sommes intéressés par les lignes suivantes:
Selon où et combien le robot souffle, vous devez ajuster les valeurs de z. Dans le code ci-dessus, les valeurs sont sélectionnées lors de l'alimentation du pilote de moteur 12V.
Il est possible d'augmenter les caractéristiques de fonctionnement du robot (vitesse et maniabilité) en appliquant au pilote du moteur, qui est utilisé dans le projet (L9110s) au lieu de 8 V - 12V. Mais il vaut mieux ne pas le faire sans installer un stabilisateur de puissance ou au moins un condensateur, car Les puces de pont en H L9110s brûlent bien, comme il s'est avéré. Peut-être que cela les rend si bon marché. Néanmoins, le robot pilote le 12 V de manière assez rapide et frivole.
Au lieu d'une conclusion
Eh bien, maintenant que le robot a cessé d'être emporté et que sa vision s'est améliorée, vous pouvez jouer à cache-cache avec lui, par exemple. Ou pour forcer quelque chose à apporter de l'autre bout de la pièce. Bien sûr, se tourner pour lui faire face, comme pour une personne.
À suivre.