Python + Raspberry Pi + Pixhawk und Quadrocopter. Oder wie man keine Roboter macht

Hallo Habr!

Mein Name ist Aleksey, seit 7 Jahren bin ich ein führender Entwickler von Smart-TV-Lösungen in einem großen Unternehmen für kundenspezifische Entwicklung aus Ischewsk. Jedes Jahr veranstalten wir einen Wettbewerb mit Neujahrsdekorationen, und jedes Mal dekorieren wir nichts, aber wir schneiden alle Arten von technologischen Dingen. Diesmal überquerten sie die Drohne und die Smart-TV-Anwendung. Und was daraus wurde - lesen Sie unten.

Die Idee war durchaus machbar. Sie wollten einen Quadrocopter in Form eines Weihnachtsmannschlittens bauen, der den Mitarbeitern Geschenke zur Musik ins Büro bringen würde. Gleichzeitig musste er mithilfe der Analyse von ArUco-Tags im Weltraum navigieren, mit TV-Anwendungen interagieren (mit Arbeitsschrauben Rauch aus den Rohren „blasen“, Tiere auslaufen lassen, um den Quadrocopter zu treffen / zu sehen).

Und für alle drei Monate. Natürlich hatten wir keine Zeit.

Obwohl zu unterschiedlichen Zeiten bis zu sieben Personen an dem Projekt arbeiteten, war das Ergebnis alles andere als ideal. Im Allgemeinen haben wir nur gelernt, wie man einen Copter startet, und Anwendungen für Fernseher geschrieben. Richten Sie die Interaktion des Quadrocopters mit Fernsehgeräten ein. Aber das Wichtigste zuerst.



Ich erinnere mich nicht, in wessen krankem Kopf (sicherlich nicht in meinem, aber das ist nicht richtig) die Idee entstand, einen Quadrocopter-Bomber im Büro zu starten. Die Aufgabe ist neu und nicht einfach, aber wir haben nichts gefunden, was über unsere Stärke hinausgeht. Ja, wir haben das Internet durchsucht, um eine Bibliothek zur Steuerung des Copter-Controllers zu finden. Ja, das Stream-Image musste von der Webcam auf den Client übertragen und auf dem Server analysiert werden. Ja, es war notwendig, ein Bombentor zu bauen. Ja, Sie müssen im Allgemeinen eine Shell schreiben, die all dies in sich sammelt. Na und? Wir haben dies alles bereits getan (außer für die Steuerung des Controllers). Daher erhielt das Projekt grünes Licht.

Gerät


Jeder Evolutionsfehler eines Hubschraubers, der über Ihrem Kopf summt, besteht im Prinzip aus einem Satz von Mechanismen und Schemata. Das:

  1. Controller
  2. Propellermotoren
  3. Batterie
  4. Drehzahlregler (ESC),
  5. Telemetrieantenne
  6. GPS-Modul und Kompass,
  7. die Kamera.

Die letzten beiden Punkte sind optional. Das Schaltbild des Drehflüglerfreundes ist hier zu sehen:



Dieses Gut wird auf den Fall gelegt. Das Korps beschloss jedoch, ihre eigenen zu machen. Weil:

  • dich mit einem Schnurrbart
  • brauchte einen Rumpf genau in Form eines Schlittens,
  • es war schon unanständig teuer.

Controller




Der wichtigste Teil jeder Hubschrauberlarve. Es verfügt über Beschleunigungsmesser in drei Achsen, Software-Firmware, Eingänge für die Installation von Peripheriegeräten und den Anschluss von Motoren sowie einen Ausgang für die Steuerung. Ohne sie wird keine Drohne in die Luft fliegen. Das Teil ist so wichtig, dass es auf einer speziellen stoßdämpfenden Plattform montiert ist, um die Auswirkungen von Vibrationen und Stoßbelastungen zu verringern. So etwas wie das:



Wir haben einen relativ großen Controller gewählt. "Relativ", denn dann habe ich mir die Monster genauer angesehen, die für ernsthafte Onkel angeboten werden ... Trotzdem verfügt der Controller über ein GPS, einen Kompass, einen Autopiloten, alle möglichen anderen guten Brötchen und unterstützt bis zu 8 Motoren.

Genau genommen sind solche Controller nicht nur für eine vertikal aufsteigende Bruderschaft gedacht. Sie können auf jeder beweglichen Plattform installiert werden, von Hubschraubern über Flugzeuge bis hin zu Autos und Booten. Eine Reihe von Anwendungsfällen. Aber wir waren etwas abgelenkt.

Motoren




Es gibt sehr viele dieser Freunde. Rund, quadratisch, Kurven, schräg, groß, klein, teuer und billig. Der Hauptunterschied: maximaler Stromverbrauch, Stromstärke und Anzahl der Umdrehungen pro Sekunde. Idealerweise hätte der Schlitten eine Dose Bier (0,5 kg) heben können. Nachdem wir das Gesamtgewicht der Struktur geschätzt hatten, berechneten wir die ungefähr erforderliche Hubkraft und nahmen hochwertige, leistungsstarke Motoren. Wie sich später herausstellte, liefen sie nie mit voller Kapazität. Aber besser ist mehr als weniger ...

Batterie




Die einzige Energiequelle, durch die ein potenzieller Kamikaze in der Luft bleibt. Während des Betriebs wurden einige interessante Punkte herausgefunden.

Erstens frisst der Summen der Technologie Energie als frei. Die Dose ist im Moment gelandet und das Aufladen dauert lange.

Zweitens isst er nicht nur, sondern weiß auch, wie man eine Ladung "in Reserve" lässt. Die Idee ist gut, denn wenn die Schwellenspannung erreicht ist, unterbricht das Auto den Flug und landet sanft. Dies drückt sich jedoch darin aus, dass die Dose noch schneller "gelandet" ist.

Drehzahlregler




Ein kleiner Chip, ohne den die Motoren einfach nicht funktionieren. Entwickelt für die Spannungsverteilung von Bänken zum Motor. Eine sehr wichtige Sache, kommt normalerweise mit einem gekauften Motor.

Telemetrieantenne


""

Im Wesentlichen wird es jedoch ohne Peripheriegeräte nicht möglich sein, die Sackgasse der Entwicklung von Flugobjekten zu steuern. Darüber hinaus wird die Telemetrie nicht nur zur Steuerung, sondern auch zur Übertragung des Videosignals von der Kamera verwendet, sodass normalerweise zwei Antennen vorhanden sind. Übrigens wird die Telemetrie durchgeführt, indem Signale an eine Liste von Kanälen gesendet und gesendet werden. Sie können auch programmgesteuert gesteuert werden, dies wird jedoch kategorisch nicht empfohlen, da wir auf diese Weise den kabelgebundenen Autopiloten tatsächlich verlassen und unseren eigenen schreiben. Auf dem Knie. Und Substanzen und Stöcke. In der letzten Nacht. Wie wir lieben.

GPS-Modul




Der wichtigste und fast einzige Weg, um einen fliegenden Nervenzerstörer im Weltraum zu positionieren. Normalerweise enthält das GPS-Modul auch einen Kompass. Damit ihn im Flug nichts beeinflusst, wird das Modul auf eine spezielle Stange gelegt, damit es überhaupt nichts beeinflusst. Wir haben es nur wegen des Kompasses benutzt, weil das GPS im Raum nicht sehr gut zu fangen ist. Unterstützt andere Positionierungssysteme.

Wie jedes GPS mit Selbstachtung kann es Fehler machen. Der Fehler variiert von mehreren Metern bis zu mehreren Kontinenten. Aber im Allgemeinen ein notwendiges Gerät auf der Straße für Missionen in der Ferne.

Kamera




Das, wofür alles getan ist. Das Gewitter der englischen Flughäfen kann nicht nur unter einer Kamera chatten. Der Controller kann ihn stabilisieren, fernsteuern und sehr detaillierte Einstellungen und Tools für seine Verwaltung bereitstellen. Aber wir haben nicht alles benutzt. Ein Andermal.

Management


Alle sapiens Ingenieurhandwerke, die Steuerungen verwenden, werden im Wesentlichen von einem Programm gesteuert: Mission Planer. Es sieht ungefähr so ​​aus:



Lesen Sie hier mehr darüber.

Es bietet die größte Auswahl an Funktionen und Einstellungen. Es gibt eine Flugaufgabenplanung, Geopositionierung, manuelle Steuerung, verschiedene Einstellungen und Gerätekalibrierung.

Regel Nummer 1: Verwenden Sie nur das, was Sie brauchen


Ja, das Programm ist notwendig und nützlich. Im Prinzip. Aber nicht für unsere Aufgabe, da der Luftteiler per Software gesteuert werden muss und wir viel Zeit für die Bearbeitung dieses Schedulers verloren haben.

Die manuelle Steuerung selbst kann nach Herzenslust erfolgen. Es gibt Einstellungen für die Fernbedienung, für den Joystick. Sie können das Steuerelement auf der Maus und der Tastatur anzeigen. Die Hauptanforderung besteht darin, das Bedienfeld zu kalibrieren. Nun, manuell verwalten. Da wir faule Entwickler sind, wollten wir nicht manuell verwalten. Ich wollte, dass das Drehflügler von alleine fliegt.

Programmsteuerung


Im Internet fanden sie nur diese Bibliothek, die zur programmatischen Steuerung der Ähnlichkeit von Flugzeugen entwickelt wurde. Und es ist in Python geschrieben (Drum Roll). Im Allgemeinen funktionierte es für die Versionen 2.x, aber auch für Python 3.5 recht stabil. Die Bibliothek verfügt über umfangreiche Funktionen und eine relativ gute Dokumentation. Bevor Sie jedoch mit dem Schreiben Ihres Mega-Control-Drohnencodes beginnen, müssen Sie zunächst ... Ja, Sie müssen eine Verbindung zum Controller herstellen.

Der Raspberry Pi-Mikrocomputer wurde als Steuerungssoftwarekomponente verwendet, auf der der Webserver im aiohttp-Framework bereitgestellt wurde.

Das Schema und die Anweisungen zum Verbinden der "Himbeeren" und des Controllers finden Sie hier .

Schematisch sieht es so aus:



Die Verbindungsmethode ist dies. Der Controller und die Himbeeren sind durch Drähte gemäß dem angegebenen Schema verbunden. Auf diese Weise wird das von der Steuerung gesendete und empfangene Funksignal emuliert. Bei Himbeeren müssen Sie einen Proxyserver ausführen, der sich an den Controller klammert und Daten von diesem überträgt. Die Verbindung kann per Telemetrie oder über USB hergestellt werden. Sie verwenden unterschiedliche COM-Ports. Die Abbildung zeigt die Methode durch Telemetrie.

Regel Nummer 2: unvollständige Dokumentation. Schreiben Sie oft nicht die offensichtlichsten Dinge.


Um beispielsweise eine Verbindung von Python zum Controller herzustellen, müssen Sie die Adresse und den Port angeben: connectionString = '127.0.0.1:14540'

Es stellte sich jedoch heraus, dass diese Adresse und dieser Port auch in der Startzeile des Proxyservers angegeben werden müssen. Hier:

mavproxy.py —master=/dev/ttyAMA0 —baudrate 921600 —aircraft MyCopter 

Ja, das ist offensichtlich, aber niemals offensichtlich. Und wir haben viel Zeit damit verbracht, es herauszufinden.

Doch selbst nach dem Starten des Proxys mit der richtigen Zeile und nach erfolgreicher Verbindung mit der Python-Drohne wollte das Wunder der feindlichen Technik nicht beginnen. Das heißt, wir erhalten Daten vom Hubschrauber, wir sehen sie, aber die zukünftige himmlische Bedrohung der Menschheit weigert sich, Befehle auszuführen. Im letzten Moment stellte sich heraus, dass die Daten für die Verbindung zur Drohne erheblich mehr benötigten. Bedingt sollte er anfangen, Daten an die angeschlossene Telemetrie zu senden, andernfalls hat er sie einfach nicht verbunden und war zufrieden.

Daher Regel Nummer 3: Verwenden Sie USB


Ja, die Dokumentation dafür war viel weniger, aber die Stabilität der Verbindung wäre definitiv höher. Weil ich keine Himbeerstifte verwenden müsste.

Testflug




Und plötzlich stellte sich heraus, dass:

  1. Der Hubschrauber fliegt nicht reibungslos
  2. Fehler seiner Telemetrie ± Meter oder mehr,
  3. Für einen Flug Aufgaben wie: 10-20 Meter klettern, 100 Meter nach Norden fliegen usw.

Ich möchte Sie daran erinnern, dass dieses Design, das unter dem Einfluss von Hubschraubern aus dem Film "Avatar" erstellt wurde, innerhalb der Wände des Büros auf den Markt gebracht wurde, wo viele Bürogeräte, Lampen, Belüftung und Dekor von der Decke hängen. Nun, es gibt auch Mitarbeiter. Im Allgemeinen wurde schnell klar, dass ein ernsthafter Innenflug mit 160 abgetrennten Köpfen behaftet sein würde.

Regel Nummer 4: Verwenden Sie normale Testbedingungen


Wenn ein fliegender Panzer 50 x 60 cm groß ist, führt seine Anwesenheit in der Luft in einem geschlossenen Raum zwangsläufig entweder zu Schäden an ihm oder zu Schäden an Personen in seiner Nähe. Ein idealer Testbereich wäre ein Raum in Fitnessraumgröße.

Computer Vision


Ein separates Portal zur Hölle war die Aufgabe der Computer Vision. Die Idee ist, ArUco-Tags zu lesen, von denen jedes eine aufgezeichnete Position im Raumplan hat und zu der der Hubschrauber seine Position im Raum sowie die Position relativ zum aktuellen Punkt der Route bestimmt.

Etikettenbeispiel:



Für die Implementierung wurde die openCV- Bibliothek verwendet . Es wird verwendet, um im Allgemeinen alles zu erkennen, was im Besonderen ist: Gesichter, Objekte, Autonummern und unsere Marken. Die Installation der Bibliothek auf dem Himbeer-Betriebssystem Rasbian wurde zu einem Albtraum, mit dem vier Personen abwechselnd kämpften. Trotzdem haben wir es erfolgreich gelöst, und jetzt hat die Maschine "gelernt", Markierungen im Videostream von der Webcam zu erkennen. Aber auch hier war nicht genug Zeit, um alles zu konfigurieren. Beispielsweise gab die Bibliothek von zwei oder mehr Tags die erkannten Nummern aller Tags und die Daten nur für eines zurück. Warum so? Es gibt ein großes Geheimnis ...

Die Regel ist wichtig: Planen Sie genügend Zeit ein, um die Lösung zu verfeinern


Andere Sinne


Damit die Mutante der Flügel des Ikarus nicht in plötzlich auftretende Hindernisse eindringt, wollten sie Abstandssensoren einsetzen. Sie sollten sich auf allen Seiten des Wagens befinden und die Annäherung an ein Hindernis signalisieren, wodurch der Hubschrauber anhalten, einen „Schritt zur Seite“ machen und sich weiter auf der Strecke bewegen sollte.

Wir hatten überhaupt keine Zeit für diese Funktionalität.

Routen


Wir haben viel über die Flugwege des Hubschraubers gesprochen. Und was für Tiere sind das? Ich werde gleich sagen, dass diese Funktionalität von Anfang an vollständig implementiert wurde, aber ... nicht nützlich war.

Bewegungsrouten sind zusammenhängende Graphen mit Scheitelpunkten, von denen jeder seine dreidimensionale Koordinate im Raum des Raums hat. Dementsprechend muss der Hubschrauber vom Startpunkt bis zum Endpunkt folgen, um zuletzt die Flugmission durchzuführen. Es folgt der Übergang vom aktuellen Scheitelpunkt zum nächsten. Da wir für jeden Scheitelpunkt seine Koordinaten kennen und für den Hubschrauber seine Position (Kompass) und Position (Markierungen) kennen, ist es eine rein technische Angelegenheit, herauszufinden, wohin geflogen werden soll. Die Aufgabe, den Weg zwischen Startpunkt und Ziel zu finden, wird durch eine rekursive Funktion gelöst. Routen, Kanten und Spitzen werden in einer Datenbank gespeichert, die auf Himbeeren bereitgestellt wird.

Die letzte Regel: Tun Sie nur das, was Sie implementieren müssen


Technologischer Stapel


Copter: Himbeer-Pi , Rasbian , OpenCV , Python 3.5 , aiohttp , DroneKit , RPi.GPIO , SQLite .

Server mit Dynamik für TV: node.js , Express , socket.io .

TV-Anwendungen: JavaScript ES6 , Webpack 2 , Canvas .

Repository mit Copter-Code hier . Für Sterne - Pluspunkte im Karma.

Ein paar Worte zur Verdeutlichung der Begriffe (ich bitte Sie, alle Bewertungen als subjektiv zu betrachten).

  • Himbeer-Pi. Vollwertiger Mikrocomputer mit verfügbaren Pins und Ausgängen für eine spezielle Kamera und einen Touchscreen. Darauf befindet sich der Steuercode, der Webserver und die openCV-Bibliothek. Tatsächlich ist ein Hubschrauber ein fliegender Server.
  • Raspbian Linux-Betriebssystem für Himbeeren. Es gibt mehrere davon, und im Allgemeinen können Sie beliebige verwenden. Es ist jedoch besser, speziell entwickelte zu verwenden. Andernfalls kann es zu Problemen bei der Interaktion mit Computergeräten kommen, z. B. mit denselben Pins. Es gibt sogar eine angepasste Version von Windows 10.
  • OpenCV. Bibliothek zum Erkennen von Elementen in einem Videostream. Kann auch den Videostream streamen, der im Projekt zum Ausgeben von Bildern an den Client verwendet wird. (Ja, der Copter hat einen eigenen Webclient)
  • Python 3.5. Python 3.5. Nicht 2. *.
  • Aiohttp. In Python geschriebenes asynchrones Webserver-Framework. Aus irgendeinem Grund mochte er Django mehr. Aber es gibt eine Wahl.
  • DroneKit. Bibliothek zum Anschließen an die Copter-Steuerung vom Programm aus. Sehr umfangreiche Funktionalität, gepaart mit relativ guter Dokumentation. In Abwesenheit von Analoga - ein brillantes Werkzeug.
  • RPi.GPIO. Python-Bibliothek für die Interaktion mit Himbeerstiften. Ermöglicht das Ein- und Ausschalten von Pins und das Abhören ihrer Werte. Andere Werte als 0 oder 1-ts können nicht übergeben werden. Oder ich habe nicht gefunden.
  • SQLite DBMS + DB + Brennholz in einer Datei zusammengefasst. Ideal für Schulungs- und Nichtverkaufsprojekte, wenn Sie keine stark ausgelasteten Projekte bereitstellen müssen. Bequem, um Änderungen vorzunehmen.
  • Node.js. Serverseitiges JavaScript
  • Express In node.js geschriebenes Webserver-Framework. Sehr komfortabel und minimalistisch.
  • Socket.io. Server- und Clientbibliothek zur Implementierung des webSocket-Protokolls. Das Hauptplus ist die Stabilität der Arbeit und die umfangreiche Funktionalität.

Schlussfolgerungen


In der ursprünglichen Formulierung ist die Aufgabe machbar, obwohl sie wesentlich mehr Zeit und Mühe erfordert. Aufgrund der Tatsache, dass die Steuerungsmethoden für Autopilot und Hubschrauber etwas weniger als vollständig an GPS gebunden sind, müssen sie in Richtung direkter Befehle an die Steuerkanäle aufgegeben werden. Dies beinhaltet die Notwendigkeit, Ihren Autopiloten zu schreiben, was die Aufgabe ist, die gelöst wird. Und dann - testen, testen und testen.

Persönlich war ich interessiert. Und ich mache sowieso den automatisierten Geschenkbomber. Und allen Interessierten gehe ich vielleicht

Die einzige Regel ist: Setzen Sie sich hohe und schwierige Ziele und gehen Sie zu ihnen!


Viel Glück an alle!

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


All Articles