Aeronet betreten: Starten eines autonomen Quadrocopters in einer virtuellen Umgebung


Auf Wunsch kann jetzt jeder einen Quadcopter fliegen. Um das Problem der autonomen Steuerung zu lösen, müssen Sie die Sticks der Fernbedienung nicht bewegen und die Drohne ständig überwachen. In dieser Einstellung erfordert die Lösung möglicherweise viele Ressourcen: Kaufen, Zusammenbauen, Löten, Konfigurieren, Abheben, Ablegen und nach dem Sturz - kehren Sie zum Beginn des Zyklus zurück.


Wenn wir die Richter / Lehrer von Aeronet in unserem Projekt unterrichten, sehen wir uns mit der Notwendigkeit eines vereinfachten "Einstiegs in das Thema" -Programmierung unbemannter Fahrzeuge für Lehrer der Robotik / Informatik konfrontiert, die bereits über Grundkenntnisse verfügen.


Es gibt eine einfache Möglichkeit, die Grundlagen der Programmierung von Drohnenflügen zu erlernen - eine virtuelle Simulationsumgebung, ein schrittweises Beispiel für die Verwendung, das wir in unserem Artikel betrachten werden.


Sie müssen nichts kaufen, um Ihre grundlegenden Programmierkenntnisse für Drohnen zu verbessern. Verwenden Sie einfach den jMAVSim-Drohnen-Simulator des PX4-Projekts. PX4 ist eine leistungsstarke Open-Source-Software-Suite, die für den Einsatz in einer Vielzahl unbemannter Fahrzeuge entwickelt wurde, die sowohl fliegen als auch am Boden unterwegs sind. Der Quellcode für die Projektsoftware befindet sich auf Github .


Zunächst empfehlen PX4-Autoren Linux Ubuntu LTS als Entwicklungsumgebung. Es gibt auch Mac-Unterstützung. In diesem Jahr erschien in Cygwin eine Simulations- und Entwicklungsumgebung für Windows, die das Leben russischer Bildungseinrichtungen, die Windows im Informatikunterricht verwenden, vereinfachen kann.


Als nächstes betrachten wir den Prozess der Installation, Erstellung und Ausführung des Simulators unter Linux und Windows.


Installieren und Ausführen von jMAVSim unter Linux Ubuntu


PX4-Entwickler empfehlen Linux Ubuntu 16.04 LTS als Standardsystem. Unter Linux können Sie das PX4-Paket für alle unterstützten Systeme erstellen (Hardwareplattformen basierend auf NuttX, Qualcomm Snapdragon Flight, Linux, Simulationsumgebung, ROS).


Fügen Sie den Benutzer zunächst der Dialout-Gruppe hinzu:


sudo usermod -a -G dialout $USER 

Melden wir uns beim System an, damit die Änderungen wirksam werden.


Die Entwicklungs-Toolchain für Pixhawk / NuttX, einschließlich jmavsim, wird automatisch mithilfe des Skripts ubuntu_sim_nuttx.sh installiert. Sie müssen das Skript in das Benutzerverzeichnis herunterladen und mit dem Befehl ausführen


 source ubuntu_sim_nuttx.sh 

Alle vom Skript gestellten Fragen werden positiv beantwortet.


Starten Sie am Ende des Skripts den Computer neu.


Es bleibt uns überlassen, den Quellcode des Controllers, der den Flug steuert, herunterzuladen und zu erstellen.


Wir klonen das PX4 Flight Controller Software Repository mit github:


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

Im Firmware-Ordner haben wir jetzt den vollständigen Quellcode, der im Flugcontroller (und im Simulator) ausgeführt wird. In Zukunft kann es sowohl zum Lernen als auch zum Vornehmen von Änderungen nützlich sein. Wechseln Sie in den kopierten Firmware-Ordner des Repositorys:


 cd src/Firmware 

Wir kompilieren und führen den Simulator aus:


 make px4_sitl jmavsim 

Der erste Kompilierungsprozess dauert einige Zeit. Nach erfolgreichem Abschluss wird die PX4-Konsole auf dem Bildschirm angezeigt:


PX4-Konsole


Die Drohne kann durch Eingabe des Befehls in der Konsole zum Flug geschickt werden:


 pxh> commander takeoff 

Drohne während des Fluges


Landung einer Drohne - Befehlskommandant commander land , Simulation stoppen - STRG + C oder Befehl shutdown .


Installieren Sie jMAVSim und führen Sie es unter Windows aus


Die PX4 Cygwin Toolbox erschien im Jahr 2018. Dies ist die leistungsstärkste Methode zum Kompilieren / Entwickeln von PX4 für Windows. Zum Installieren - Laden Sie die Installationsdatei von Github oder Amazon herunter und führen Sie sie aus.


Standardmäßig wird die Toolchain im Ordner C: \ PX4 installiert.


Im letzten Schritt des Installationsprogramms können Sie das Kontrollkästchen "PX4-Repository klonen, Simulation mit jMAVSim erstellen und ausführen" aktivieren (PX4-Repository klonen, jMAVSim-Simulator kompilieren und ausführen).


Die Entwicklungsumgebung wird in Cygwin mithilfe der Datei run-console.bat im Installationsverzeichnis gestartet (standardmäßig C: \ PX4).


Wenn Sie während des Installationsvorgangs vergessen haben, das Kontrollkästchen jMAVSim zu aktivieren, können Sie in Cygwin das Repository klonen und den Simulator mit den folgenden Befehlen ausführen:


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

Nach der Kompilierung werden die PX4-Konsole und das Simulatorfenster auf dem Bildschirm angezeigt:


JMAVSim-Simulatorfenster für Windows


Ich habe unter Windows noch keinen Himmel und keine Bäume angezeigt, stattdessen einen schwarzen Hintergrund, wie den Entwicklern des Simulators berichtet .


Die Konsolenbefehle zur Steuerung der Drohne sind dieselben: Start - Start des commander takeoff , Landung - Landung des commander land , Stoppsimulation - STRG + C oder shutdown .


Flüge mit dem QGroundControl Ground Station Programm


Mit dem QGroundControl-Programm können Sie Drohnen auf den Plattformen PX4 oder ArduPilot vollständig konfigurieren sowie autonome Außenflüge über GPS planen und durchführen.


Der Programmcode ist vollständig geöffnet und funktioniert auf den Plattformen Windows, OS X, Linux, iOS und Android. Die Installationsdatei für die gewünschte Plattform kann im Download-Bereich der Programm-Website heruntergeladen werden .


Laden Sie diese Datei für Windows herunter und führen Sie sie aus.
Wenn jMAVSim nach der Installation und dem Start bereits auf unserem Computer ausgeführt wird, stellt das Programm automatisch eine Verbindung her.


Sie können eine Drohne im Flug mit der Fly-Takeoff-Taste starten und landen - landen. Sie können auch einen virtuellen Flug über GPS-Punkte durchführen:


QGroundControl


Autonomen Flug mit Mavros programmieren


Die virtuelle jMAVSim-Drohne kann mithilfe des mavlink-Protokolls gesteuert werden, das in mehreren Artikeln (z. B. 1 , 2 ) beschrieben ist. Um die mavlink-Kommunikation zu implementieren, verwenden wir das mavros-Paket des ROS-Systems (Robot Operating System) .


PX4-Entwickler empfehlen die Verwendung von ROS Kinetic.


Das mavros-Paket ermöglicht die Kommunikation über das MAVLink-Protokoll zwischen einem Computer, auf dem ROS ausgeführt wird (z. B. eine virtuelle Maschine mit Linux oder Raspberry PI), und einem Flugcontroller (real oder in einer Simulatorumgebung).


Das mavros-Paket wird zusammen mit anderen Paketen während der vollständigen Installation von ROS Kinetic installiert.


Das mavros-Paket wird mit der Verbindung zum Simulator über den Befehl roslaunch gestartet, wobei die IP-Adresse und der Port des Computers angegeben werden, auf dem der Simulator ausgeführt wird:


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

Wenn der Simulator nicht auf dem Host ausgeführt wird, auf dem jMAVSim ausgeführt wird, müssen Sie vor dem Herstellen einer Verbindung zu mavros das Senden von mavlink-Nachrichten über das Netzwerk mit dem param set MAV_BROADCAST 1 in der jMAVSim-Konsole aktivieren. Wenn der Befehl ausgeführt wird, wird die für das mavlink-Protokoll verwendete Host-IP-Adresse angezeigt. Der Port kann mit dem Befehl mavlink status in der Simulatorkonsole gefunden werden:


Mavlink-Status


Der Erfolg der Verbindung zum Flugregler sollte mit dem folgenden Befehl überprüft werden:


 rostopic echo /mavros/state 

Wenn die Verbindung erfolgreich ist, werden in der Konsole sogenannte Nachrichten angezeigt. mavlink Herzschlag, ungefähr einmal pro Sekunde:


Mavlink Herzschlag


Wenn Meldungen nicht angezeigt werden / nicht aktualisiert werden / Feld Verbunden = Falsch - Die Kommunikation mit dem Fluglotsen wurde nicht hergestellt, und Sie sollten verstehen, warum.


Zum Zeitpunkt des Schreibens wurden unter Windows nach dem Befehl param set MAV_BROADCAST 1 die Meldungen in der jMAVSim-Konsole in einer Schleife angezeigt:


 WARN [mavlink] getting required buffer size failed. 

Damit der Simulator unter Windows ordnungsgemäß funktioniert, sollten Sie der Datei src / modules / mavlink / mavlink_main.cpp Zeile 1029 hinzufügen:


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

Und kompilieren Sie den Simulator mit dem Befehl make px4_sitl jmavsim .


Dieses Problem wurde Entwicklern gemeldet und kann in zukünftigen Versionen behoben werden.


Nach einer erfolgreichen Verbindung können Sie die Drohne im autonomen Flug mit den folgenden Befehlen der ROS-Systemkonsole starten:


  • Wir veröffentlichen 5 Mal pro Sekunde den Zielpunkt für den Flug der Drohne im OFFBOARD-Modus. Damit die Drohne nicht aus dem autonomen OFFBOARD-Flugmodus „herausfällt“, muss der Zielpunkt mehrmals pro Sekunde veröffentlicht werden:

     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" 


  • Wir haben die Drohne in den OFFBOARD-Modus versetzt (in einer neuen separaten Terminalsitzung):

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

  • Wir senden einen Befehl, um die Drohne in den Flugmodus zu versetzen (dh "Feed"):

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

Nach dem Ausführen des letzten Befehls sollte die virtuelle Drohne in einer Höhe von 5 Metern abheben und schweben:


Fliegender jmavsim


Sie können eine Drohne auch mit einem einfachen Python-Code starten:


 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() 

Der obige Code verwendet einen Aufruf derselben ROS-Dienste wie das Beispiel für einen Befehlszeilenaufruf.


Sie müssen den Code in eine Textdatei kopieren, z. B. fly_jmavsim.py, und ihn über die Befehlszeile mit dem python fly_jmavsim.py .


Beim Debuggen dieses Beispiels bin ich auf eine Funktion des jMAVSim-Simulators gestoßen - er benötigt einen leistungsstarken Prozessor für den normalen Betrieb. Auf der virtuellen Linux-Maschine konnte er nur 10 FPS berechnen und stürzte sofort nach dem Start ab. Während ich den Artikel schrieb, verlor er auf dem Laptop regelmäßig die Kontrolle / stürzte ab. Die Leistung des Laptops hat geholfen - weil Bei Batteriebetrieb wird der Energiesparmodus aktiviert, wodurch die Prozessorleistung unterschätzt wird, die sich direkt auf den Simulator auswirkt.


Anhand der gegebenen Beispiele können diejenigen, die dies wünschen, selbst autonome Flugprogramme entwickeln (in einem Quadrat, in einem Kreis, in einer beliebigen Flugbahn usw.). Das Durchführen solcher Übungen kann nützlich sein, um die Programmierung autonomer Missionen auf einem echten Quadrocopter vorzubereiten.


Wir wünschen Ihnen allen erfolgreichen Flügen!


Referenzen:


Roboterbetriebssystem (ROS)
Autopilot PX4

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


All Articles