Entrée dans Aeronet: lancement d'un quadricoptère autonome dans un environnement virtuel


Peut-être que tout le monde peut piloter un quadcopter maintenant, si vous le souhaitez. Mais afin de résoudre le problème du contrôle autonome, afin que vous n'ayez pas besoin de déplacer les manettes de la télécommande et de surveiller constamment le drone - dans ce cadre, la solution peut nécessiter beaucoup de ressources: acheter, assembler, souder, configurer, décoller, déposer, et après la chute - revenir au début du cycle.


En enseignant aux juges / professeurs d'Aeronet sur notre projet, nous sommes confrontés à la nécessité d'une programmation simplifiée "entrée dans le sujet" des véhicules sans pilote pour les professeurs de robotique / informatique, qui possèdent déjà un ensemble de connaissances de base.


Il existe un moyen facile d'apprendre les rudiments de la programmation des vols de drones - un environnement de simulation virtuelle, un exemple étape par étape de l'utilisation dont nous examinerons dans notre article.


Vous n'avez pas besoin d'acheter quoi que ce soit pour améliorer vos compétences de base en programmation de drones - utilisez simplement le simulateur de drone jMAVSim du projet PX4. PX4 est une suite logicielle open source puissante conçue pour être utilisée sur une variété de véhicules sans pilote, volant et voyageant au sol. Le code source du logiciel du projet est sur Github .


Initialement, les auteurs de PX4 recommandent Linux Ubuntu LTS comme environnement de développement. Il existe également un support Mac. Cette année, un environnement de simulation et de développement pour Windows est apparu dans Cygwin, qui peut simplifier la vie des établissements d'enseignement russes qui utilisent Windows dans les cours d'informatique.


Ensuite, nous examinerons le processus d'installation, de construction et d'exécution du simulateur sous Linux et sous Windows.


Installation et exécution de jMAVSim sur Linux Ubuntu


Les développeurs de PX4 recommandent Linux Ubuntu 16.04 LTS comme système standard. Linux vous permet de construire le package PX4 pour tous les systèmes pris en charge (plates-formes matérielles basées sur NuttX, Qualcomm Snapdragon Flight, Linux, environnement de simulation, ROS).


Tout d'abord, ajoutez l'utilisateur au groupe de numérotation:


sudo usermod -a -G dialout $USER 

Connectons-nous au système pour que les modifications prennent effet.


La chaîne d'outils de développement pour Pixhawk / NuttX, y compris jmavsim, est installée automatiquement à l'aide du script ubuntu_sim_nuttx.sh . Vous devez télécharger le script dans le répertoire utilisateur et l'exécuter à l'aide de la commande


 source ubuntu_sim_nuttx.sh 

Toutes les questions posées par le script reçoivent une réponse positive.


À la fin du script, redémarrez l'ordinateur.


Il nous reste à télécharger le code source du contrôleur qui contrôle le vol et à le construire.


Nous clonons le référentiel logiciel du contrôleur de vol PX4 avec github:


 git clone https://github.com/PX4/Firmware.git 

Dans le dossier Firmware, nous avons maintenant le code source complet qui est exécuté dans le contrôleur de vol (et dans le simulateur). À l'avenir, il peut être utile à la fois pour étudier et pour y apporter des modifications. Accédez au dossier Firmware copié du référentiel:


 cd src/Firmware 

Nous compilons et exécutons le simulateur:


 make px4_sitl jmavsim 

Le premier processus de compilation prend un certain temps. Une fois l'opération terminée, la console PX4 apparaîtra à l'écran:


Console PX4


Le drone peut être envoyé en vol en entrant la commande dans la console:


 pxh> commander takeoff 

Drone en vol


Atterrissage d'un drone - commande le commander land , arrête la simulation - CTRL + C ou shutdown commande.


Installer et exécuter jMAVSim sous Windows


La boîte à outils PX4 Cygwin est apparue en 2018. C'est le moyen le plus puissant pour compiler / développer PX4 pour Windows. Pour installer - téléchargez et exécutez le fichier d'installation depuis Github ou Amazon .


Par défaut, la chaîne d'outils est installée dans le dossier C: \ PX4.


À la dernière étape du programme d'installation, vous pouvez cocher la case «cloner le référentiel PX4, construire et exécuter la simulation avec jMAVSim» (cloner le référentiel PX4, compiler et exécuter le simulateur jMAVSim).


L'environnement de développement est lancé dans Cygwin à l'aide du fichier run-console.bat du répertoire d'installation (par défaut, C: \ PX4).


Si vous avez oublié de cocher la case de lancement de jMAVSim pendant le processus d'installation - dans Cygwin, vous pouvez cloner le référentiel et exécuter le simulateur à l'aide des commandes:


 git clone --recursive -j8 https://github.com/PX4/Firmware.git cd Firmware make px4_sitl jmavsim 

Après la compilation, la console PX4 et la fenêtre du simulateur apparaîtront à l'écran:


Fenêtre du simulateur JMAVSim pour Windows


Je n'ai pas encore affiché le ciel et les arbres sur Windows, au lieu d'eux un fond noir, comme rapporté aux développeurs du simulateur .


Les commandes de la console pour contrôler le drone sont les mêmes: décollage - décollage commander takeoff , atterrissage - commander land , simulation d'arrêt - CTRL + C ou shutdown .


Vols avec le programme de station au sol QGroundControl


Le programme QGroundControl vous permet de configurer entièrement les drones sur les plates-formes PX4 ou ArduPilot, ainsi que de planifier et d'effectuer des vols extérieurs autonomes via GPS.


Le code du programme est complètement ouvert et fonctionne sur les plates-formes Windows, OS X, Linux, iOS et Android. Le fichier d'installation de la plate-forme souhaitée peut être téléchargé dans la section Téléchargement du site Web du programme .


Pour Windows, téléchargez et exécutez ce fichier .
Après l'installation et le lancement, si jMAVSim est déjà en cours d'exécution sur notre ordinateur, le programme s'y connectera automatiquement.


Vous pouvez lancer un drone en vol à l'aide du bouton Fly-Takeoff et atterrir - Atterrir. Vous pouvez également effectuer un vol virtuel sur des points GPS:


QGroundControl


Programmation de vol autonome avec mavros


Le drone virtuel jMAVSim peut être contrôlé à l'aide du protocole mavlink, qui est décrit dans plusieurs articles (par exemple, 1 , 2 ). Pour implémenter la communication mavlink, nous utiliserons le package mavros du système ROS (robot operating system) .


Les développeurs de PX4 recommandent d'utiliser ROS Kinetic.


Le package mavros assure la communication via le protocole MAVLink entre un ordinateur exécutant ROS (par exemple, une machine virtuelle avec Linux ou Raspberry PI) et un contrôleur de vol (réel ou dans un environnement de simulateur).


Le package mavros est installé avec d'autres packages lors de l' installation complète de ROS Kinetic .


Le package mavros est lancé avec la connexion au simulateur par la commande roslaunch, indiquant l'adresse IP et le port de l'ordinateur sur lequel le simulateur s'exécute:


 roslaunch mavros px4.launch fcu_url:="udp://@192.168.0.22:14557" 

Si le simulateur ne fonctionne pas sur l'hôte sur lequel jMAVSim s'exécute, avant de vous connecter à mavros, vous devez activer l'envoi des messages mavlink sur le réseau à l'aide de la commande param set MAV_BROADCAST 1 dans la console jMAVSim. Lorsque la commande est exécutée, l'adresse IP hôte utilisée pour le protocole mavlink s'affiche. Le port peut être trouvé à l'aide de la commande mavlink status dans la console du simulateur:


Statut Mavlink


La réussite de la connexion au contrôleur de vol doit être vérifiée à l'aide de la commande:


 rostopic echo /mavros/state 

Si la connexion réussit, les soi-disant messages apparaîtront dans la console. rythme cardiaque mavlink, environ une fois par seconde:


battement de coeur mavlink


Si les messages n'apparaissent pas / ne sont pas mis à jour / champ Connected = False - la communication avec le contrôleur de vol n'est pas établie, et vous devez comprendre pourquoi.


Au moment de la rédaction, sous Windows, après la commande param set MAV_BROADCAST 1, les messages de la console jMAVSim ont commencé à apparaître en boucle:


 WARN [mavlink] getting required buffer size failed. 

Pour que le simulateur fonctionne correctement sous Windows, vous devez ajouter la ligne 1029 au fichier src / modules / mavlink / mavlink_main.cpp:


 #if defined(__APPLE__) && defined(__MACH__) || defined(__CYGWIN__) 

Et recompilez / redémarrez le simulateur avec la commande make px4_sitl jmavsim .


Ce problème a été signalé aux développeurs , il pourrait être corrigé dans les futures versions.


Après une connexion réussie, vous pouvez lancer le drone en vol autonome en utilisant les commandes suivantes de la console du système ROS:


  • Nous publions 5 fois par seconde le point cible pour le vol du drone en mode OFFBOARD. Pour que le drone ne «tombe» pas en mode de vol autonome OFFBOARD, il est nécessaire de publier le point cible tout le temps, plusieurs fois par seconde:

     rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' pose: position: x: 0.0 y: 0.0 z: 5.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0" 


  • Nous avons mis le drone en mode OFFBOARD (dans une nouvelle session de terminal séparée):

     rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'" 

  • Nous envoyons une commande pour mettre le drone en mode vol (ie, "feed"):

     rosservice call /mavros/cmd/arming "value: true" 

Après avoir exécuté la dernière commande, le drone virtuel devrait décoller et planer à une hauteur de 5 mètres:


Flying jmavsim


Vous pouvez également lancer un drone à l'aide d'un simple code Python:


 import rospy from geometry_msgs.msg import PoseStamped from mavros_msgs.srv import CommandBool, SetMode rospy.init_node("offbrd",anonymous=True) rate=rospy.Rate(5) setpoint_pub=rospy.Publisher("/mavros/setpoint_position/local",PoseStamped,queue_size=10) arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool) set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode) setpt=PoseStamped() setpt.pose.position.z=5 for i in range (0,10): setpoint_pub.publish(setpt) rate.sleep() set_mode(0,"OFFBOARD") arming_s(True) while (rospy.is_shutdown()==False): setpoint_pub.publish(setpt) rate.sleep() 

Le code ci-dessus utilise un appel aux mêmes services ROS que l'exemple d'appel de ligne de commande.


Vous devez copier le code dans un fichier texte, par exemple, fly_jmavsim.py, et l'exécuter à partir de la ligne de commande avec la python fly_jmavsim.py .


Lors du débogage de cet exemple, j'ai rencontré une caractéristique du simulateur jMAVSim - il a besoin d'un processeur puissant pour un fonctionnement normal. Sur la machine virtuelle Linux, il a réussi à calculer seulement 10 FPS et s'est écrasé immédiatement après le décollage. Sur l'ordinateur portable, pendant que j'écrivais l'article, il perdait également régulièrement le contrôle / plantait. La puissance de l'ordinateur portable a aidé - car lorsqu'il est alimenté par une batterie, le mode d'économie d'énergie est activé, ce qui sous-estime les performances du processeur, ce qui affecte directement le simulateur.


Sur la base des exemples donnés, ceux qui le souhaitent peuvent eux-mêmes développer des programmes de vol autonomes (dans un carré, dans un cercle, dans une trajectoire arbitraire, etc.). La réalisation de tels exercices peut être utile pour préparer la programmation de missions autonomes sur un vrai quadricoptère.


Nous vous souhaitons tous des vols réussis!


Références:


Système d'exploitation de robot (ROS)
Pilote automatique PX4

Source: https://habr.com/ru/post/fr434220/


All Articles