Chrono in Unreal, Teil 7: Die Drohne
Die Drohne liefert die dritte Ansicht der Demo. Sie war zuerst ein kinematischer Actor, der einer Bahn folgte, mit einer Kamera, die fest am Rumpf sass. Das Bild wirkte nicht wie von einer Drohne: keine Neigung beim Beschleunigen, kein Gegenhalten im Wind, und beim Nicken schwenkten die eigenen Rotoren ins Bild. Jetzt ist sie ein Chrono® Körper mit vier Rotoren und einem Regler, und die Choreografie liefert nur noch Sollwerte. Dieser Teil beschreibt das Modell, den Regler, die Führung der Sollwerte und das Akkumodell. Die Reihe: Teil 1 Überblick, Teil 2 Architektur, Teil 3 Fallen, Teil 4 Klang, Teil 5 Bild, Teil 6 Parasail, Teil 9 Sequenz.
Die Demo, um die es in der Serie geht. Die Drohnenansicht rechts unten. Auf YouTube in 1080p ist die Konsole lesbar.
Der Körper
Ein Quadrocopter mit 1.5 kg, 22 cm Armlänge und einer Kollisionskugel, damit er mit dem Fahrzeug kollidieren kann. Jeder Rotor gibt einen Schub proportional zum Quadrat seiner Drehzahl entlang der Hochachse des Rumpfes, angreifend am Rotor, und ein Reaktionsmoment proportional zum Schub mit wechselndem Drehsinn. Die Schubkonstante ist so gewählt, dass vier Rotoren bei der Schwebedrehzahl das Gewicht tragen. Die Drehzahl folgt dem Sollwert mit einer Motorverzögerung von 50 Millisekunden. Dazu Luftwiderstand gegen die Anströmung aus Eigengeschwindigkeit und Wind, und eine leichte Drehratendämpfung.
Damit ist die Drohne ein unteraktuiertes System wie ein echter Quadrocopter: sie kann nur entlang ihrer Hochachse schieben und muss sich neigen, um seitlich zu beschleunigen oder im Wind zu stehen. Das Bild zeigt diese Neigung, und die Kamera darunter muss sie ausgleichen.
Der Regler
Der Regler ist eine Kaskade, die vom Sollwert bis zu den vier Drehzahlen führt:
- Aus Sollposition und Sollgeschwindigkeit ein Geschwindigkeitswunsch, aus dem Geschwindigkeitsfehler ein Beschleunigungswunsch, horizontal begrenzt. Beim Filmen liegt die Grenze niedriger, damit die Kamera ruhig bleibt.
- Beschleunigungswunsch plus Schwerkraft ergibt den Schubvektor. Seine Länge ist der Gesamtschub, seine Richtung die Sollhochachse. Zusammen mit der Sollrichtung der Kamera folgt daraus die Solllage als Rotationsmatrix.
- Der Lagefehler wird geometrisch auf der Rotationsgruppe gebildet, eR = ½ vee(RdᵀR − RᵀRd), und das Moment ist M = −kR eR − kω ω + ω × Jω. Der Kreiselterm kompensiert die Kopplung der Achsen, die beiden Verstärkungen sind Lage und Rate.
- Ein Mischer verteilt Gesamtschub und drei Momente auf vier Rotorschübe, jeder begrenzt zwischen einem Minimum und dem Maximalschub, und daraus folgt die Solldrehzahl.
Die geometrische Formulierung statt Eulerwinkeln hat einen praktischen Grund: den Backflip. Er ist als Nickreferenz um die Querachse geschrieben, die über 180 Grad läuft, mit einem kurzen Schubstoss davor. Ein Regler mit Eulerwinkeln bricht bei 90 Grad Nick zusammen, der geometrische nicht, und die Drohne folgt der Referenz mit ihren Rotoren, was das Bild einmal über Kopf dreht.
Sollwerte, die man fliegen kann
Die Choreografie, Intro, Orbit, Ballverfolgung, Tiefflug zum Dünenkamm, Sturzflug zum Parasail, Formationsflug, Rückflug zum Fahrzeug, kennt nur Sollpunkte. Die erste Fassung übergab diese Punkte direkt an den Regler. Ein Sprung im Sollpunkt, weil das Gelände voraus anders ist oder ein Ziel wechselt, wurde damit zu einem Sprung in den Rotorkräften: die Drohne bremste, hüpfte und pendelte nach. Das war im Bild zu sehen, und der Entwickler hat es benannt: “die Drohne stoppt mehrfach und pendelt”.
Der Sollwert läuft jetzt durch einen Folger mit Geschwindigkeits- und Beschleunigungsgrenze pro Flugphase, horizontal und vertikal getrennt. Die gewünschte Geschwindigkeit zum Sollpunkt folgt einem Bremsprofil v = √(2 a d), sodass die Drohne früh und stetig verzögert, statt am Ziel hart zu bremsen; nahe am Ziel geht das Profil in eine proportionale Annäherung über. Eine Geschwindigkeitsschleife mit der Beschleunigungsgrenze führt das aus. Bewegt sich das Ziel, das Fahrzeug im Intro, der Ball, der Schirm im Sturzflug, wird seine Geschwindigkeit vorgesteuert. Ohne Vorsteuerung läuft ein Folger einem bewegten Ziel um den Betrag Geschwindigkeit durch Verstärkung hinterher, und im Sturzflug holte die Drohne den Schirm nie ein. Der Folger hat noch eine Rückkopplung vom physischen Körper: der Sollpunkt darf nicht weiter unter der wirklichen Drohne liegen als ein Fanghalt, sonst zieht der Regler die Drohne dem Sollpunkt hinterher in den Boden, und die Drohne fiel zu Beginn durch den Sand. Der Halt war zuerst überall 0.2 Meter, und das hat den Abstieg am Anfang der Demo zerstört: der Sollpunkt musste in der Beschleunigungsphase auf die Drohne warten, der Abstieg lief in Schüben mit im Mittel unter einem Meter pro Sekunde und war nach den 15 Sekunden Intro nicht unten. Jetzt gilt 0.2 Meter in den letzten drei Metern über dem Boden, wo das Durchfallen passiert, mit höchstens 1.5 Metern pro Sekunde Sinkrate, und ein Meter darüber; der Abstieg ist wieder gleichmässig mit 3.5 Metern pro Sekunde.
Im Tiefflug über Land wird das Tempo geplant, nicht gedrosselt. Die erste Fassung nahm vor jeder Bodenerhebung im Vorausblick Tempo weg, und die Drohne schlich mit 6 Metern pro Sekunde über flache Hügel; der Entwickler wollte, dass sie jagt und dabei vorausdenkt. Jetzt tastet die Drohne das Gelände alle 10 Meter bis 150 Meter voraus ab. Jede Steigung begrenzt die Geschwindigkeit, mit der sie sich mit der verfügbaren Steigrate überfliegen lässt, Steigrate durch Steigung, und der Bremsweg sagt, wie schnell die Drohne jetzt noch sein darf, um dort auf diese Geschwindigkeit zu kommen: v ≤ √(vk² + 2 a dk). Das Minimum über alle Abtastpunkte ist der Plan. Flaches Gelände und sanfte Hügel kosten damit nichts, ein steiler Hang wird verlangsamt angeflogen, und die Drohne ist auf dem Weg zum Kamm mit 17 Metern pro Sekunde unterwegs, wo sie vorher mit 6 flog. Die Flughöhe folgt dem Boden 45 Meter voraus mit einem Abstand, der über Wasser und nahe am Fahrzeug grösser ist, wegen des Stegs. Unabhängig davon gilt in jeder Phase ausser der Landung eine Mindesthöhe über dem Maximum aus Gelände und Meeresspiegel. Die Geländefunktion liefert unter Wasser den Meeresboden, und ohne die Bedingung auf den Meeresspiegel plante die Drohne ihren Abflug vom gesunkenen Fahrzeug 2 Meter unter der Wasseroberfläche.


Der Gimbal
Die Kamera will auf ihren Fokuspunkt schauen. Relativ zum Rumpf darf sie 90 Grad nach unten und 30 nach oben nicken und 15 Grad rollen; die Neigung des Rumpfes gleicht sie nur innerhalb dieser Grenzen aus. Darüber liegt sie am Anschlag, und das Bild kippt mit dem Rumpf, so wie es ein realer Gimbal tut. Das HUD zeigt den Anschlag an. Der eigene Actor ist für die eigene Kamera ausgeblendet, sonst schwenkt die Rotorscheibe von oben ins Bild. Auf dem Wasser, nach dem Abschalten, ist der Gimbal aus, und die Kamera hängt fest am Rumpf.
Der Akku bestimmt das Ende
Das Akkumodell macht aus der Drohne einen Zeitgeber der Demo. Die Leistung jedes Motors geht mit der dritten Potenz seiner Drehzahl, nach der Propellergesetzmässigkeit, dazu eine konstante Leistung für Flugregler, Kamera und Videofunk. Die Zellenspannung im Leerlauf ist eine Funktion des Ladezustands, eine Kennlinie mit dem flachen Mittelteil und dem Knick unter 20 Prozent, und die Klemmenspannung ist die Leerlaufspannung minus Strom mal Innenwiderstand. Der Strom folgt aus Leistung und Klemmenspannung, und die entnommene Ladung senkt den Ladezustand. Zwei Dinge folgen daraus, die ein einfacher Zähler nicht hätte: bei tiefem Ladezustand braucht dieselbe Leistung mehr Strom, und die Spannung bricht unter Last ein. Der Akku ist im HUD sichtbar, mit Spannung, Strom und Ladezustand.
Auf dem Kamm bleibt die Drohne nicht stehen. Nach der Drehung fliegt sie einen langsamen Kreis mit 12 Metern Radius, eine Runde pro Minute, den Blick über die Insel gehalten, bis die Dämmerung sie zum Schirm schickt. Ein Versuch, sie sofort zum Schirm zu schicken, hat das Ende verschoben: das Kreisen um den Schirm kostet mehr als das Kreisen auf dem Kamm, und der Akku war bei 15 Prozent, bevor das Boot am Strand war.

Der Schluss der Demo hängt an diesen Zahlen, nicht an einer Uhr. Bei 15 Prozent bricht die Drohne den Formationsflug ab und fliegt zum gesunkenen Fahrzeug zurück, acht Meter davor in Richtung Steg, 2.5 Meter über dem Wasser. Bei 10 Prozent beginnt die Notlandung, ein langsames Absinken mit 0.4 Metern pro Sekunde. Die Motoren gehen erst aus, wenn sie auf dem Wasser sitzt. Ab da gilt kein Regler mehr, nur Schwerkraft, Luftwiderstand, Auftrieb und Dämpfung im Wasser. Der Regler ohne Schub hatte in einem Lauf eine ungültige Lage produziert, und ein Wächter stellt seither bei ungültigem Zustand die letzte gültige Pose wieder her. Im Wasser zieht die Elektronik weiter, Blinklicht, Kamera, Funk und die nassen Regler, bei 8 Prozent schaltet die Drohne ab, und zwei Sekunden später endet die Demo. Im gezeigten Lauf lag der Ladezustand nach 487 Sekunden Flug bei 15 Prozent; mit den gewählten Kapazitäts- und Leistungswerten ist das die Flugzeit einer kleinen Kameradrohne. Die Kapazität ist am Ende von 2.6 auf 2.86 Amperestunden gesetzt worden, zehn Prozent mehr. Der Grund ist das Fahrzeug: nach der Notbremsung am Strand steht es, setzt zurück und fährt erst dann weiter, und diese Zeit fehlte der Drohne am Schluss. Das sauberere Mittel wäre, das Zurücksetzen nach einer Notbremsung zu sperren; der pragmatische Entscheid war der grössere Akku.

Nachts
Sobald es dunkel wird, fliegt die Drohne eine Formation um Schirm und Boot, ein Kreis um den Mittelpunkt der beiden mit 9 Grad pro Sekunde und einem weiten Bildwinkel, damit beide im Bild bleiben. Dazu das Blinklicht, ein Doppelblitz pro Sekunde, wie es die Bootslichter tun. Der Entwickler hat beides gefordert, den Kreis, weil die Drohne “im Dunkeln rumdödelte”, und das Licht, damit man sie im Bild des Fahrzeugs findet.
Was das Modell kostet
Ein Körper, vier Kräfte, ein Regler mit einigen Matrixoperationen pro Teilschritt. Die Physikzeit hat sich damit nicht messbar verändert. Der Aufwand lag in der Abstimmung der Sollwertführung, nicht im Modell, und das ist bei einer Kameradrohne auch die richtige Stelle: das Modell soll nur stimmen, die Führung soll gut aussehen.
Woraus das Bild der Nacht besteht, mit Blinklicht, Suchscheinwerfer, Mond und Sternen, steht in Teil 8.
Schlüsselwörter: Quadrocopter Simulation Chrono, geometrischer Lageregler SO(3), Drohne Unreal Engine Physik, Sollwertfolger Beschleunigungsgrenze, Akkumodell Innenwiderstand Ladezustand, Gimbal Anschlag Simulation, Kameradrohne Choreografie, Serious Gaming, Simulation Beratung Schweiz, swissEmbedded
Ein Fluggerät, das im Modell fliegt statt auf einer Bahn? Wir bauen Regler und Modelle, die zusammen im Bild bestehen und auf dem Prüfstand halten.
Unreal® und Unreal Engine® sind Marken oder eingetragene Marken von Epic Games, Inc. in den USA und anderswo; diese Artikel sind von Epic Games weder unterstützt noch geprüft. Project Chrono ist ein Open-Source-Projekt der University of Wisconsin-Madison und des Politecnico di Milano unter BSD-3-Lizenz.