Kategorien
Allgemein

ROV Projekt

ROV steht für remotely operated vehicule und wird meist als Bezeichnung einer an einem Kabel ferngesteuerten Unterwasser-Drohne verwendet.

Im Herbst 2019 besuchten Jonas und ich eine Science City Veranstaltung an der ETH Zürich, an der die Firma Tethys einige ROVs ausstellte. Jonas war davon fasziniert, und da ein ferngesteuertes U-Boot auch zu meinen Kindheitsträumen gehörte, entschlossen wir uns, eines zu bauen.

Erste Tipps bekamen wir sogleich von Andrej und Jonas. Der wichtigste dabei war, viel Geduld zu haben.

Komponenten

Ein ROV besteht aus einem Schwimmkörper, Ballast, einem wasserdichten Behälter für die Elektronik, Motoren, Lampen, einer Kamera und weiteren Sensoren und ev. einem Greifarm, sowie einem Rahmen, an den die verschiedenen Teile befestigt werden können.

Um das ROV vom Land aus zu steuern braucht es ein Kabel, da übliche drahtlose Kommunikation unter Wasser nicht funktioniert. Mit einem Computer und einen Steuerknüppel oder so etwas Ähnlichem können Befehle ans ROV übermittelt und Kamerabilder angesehen werden. Für die Steuerung und Kommunikation braucht es zudem geeignete Elektronik sowie die entsprechender Software.

Während ein U-Boot Wasser hinein- und herauspumpt um ab- oder aufzutauchen, ist ein ROV so tariert, dass es bei einem Ausfall der Motoren selbständig langsam auftaucht. Der zum Abtauchen benötigte Abtrieb wird von den Motoren erzeugt, die natürlich entsprechend angeordnet sein müssen.

Damit das ROV möglichst stabil schwimmt, sollten der Auftriebs- und der Schwerpunkt möglichst weit auseinander liegen, da die Lage sonst aktiv geregelt werden muss.

Vorgehen

Da wir keine Ahnung vom Bau eines ROV haben, ist das Projekt natürlich mit erheblichen Risiken verbunden, die es zum Scheitern bringen können. Um einen allfälligen Schaden möglichst klein zu halten, wählen wir deshalb das Vorgehen so, dass bei einem Projektabbruch nicht zu hohe Kosten anfallen, und möglichst wenige unnütze Teile herumliegen. Schliesslich ist es ein Freizeitprojekt und soll kostengünstig sein.

Im ersten Schritt soll geprüft werden, wie die Motoren angesteuert werden können. Als Motorenbauart wählen wir bürstenlose Motoren, da sie gegen Feuchtigkeit unempfindlich sind. Allerdings muss zur Ansteuerung ein ESC (electronic speed controller) verwendet werden, um das benötigte Drehfeld zu erzeugen.

Im zweiten Schritt soll ein Weg gefunden werden, um die Kommunikation zwischen der Motorsteuerung und dem Computer an Land aufzubauen. Das Ziel ist, ca. 100m Distanz zu überwinden. So müssen die Teile höchstens 10bar (dem Druck in 100m Tiefe) aushalten.

Erst wenn die ersten beiden Schritte geschafft sind, sollen im dritten Schritt die teuren wasserdichten Spezialteile beschafft und das ROV zusammengebaut werden.

1. Schritt

Um mit einem ROV zu navigieren, braucht es im Minimum 4 Motoren, welche vorwärts und rückwärts drehen können. Je einen links und rechts horizontal und je einen vorne und hinten vertikal. Die Drehrichtung der entgegengesetzten Schrauben sollte einmal links herum und einmal rechts herum sein, um das Drehmoment auszugleichen.

Für die Ansteuerung der Motoren ESCs braucht es einen echtzeitfähigen Microcontroller, der Pulsweitenmodulation (PWM) oder sogar ein digitales Protokoll ermöglicht. Daneben soll er eine USB Schnittstelle für die Kamera, eine Ethernet Schnittstelle und ein paar konfigurierbare Ein- und Ausgänge besitzen.

Die Wahl fällt schnell auf einen Arduino. Er ist gut dokumentiert, billig und in verschiedenen, auch sehr kleinen Varianten zu haben. Er besitzt zwar keine Ethernet Schnittstelle, es kann aber ein entsprechender Shield dazugekauft werden.

Wir kaufen also einen Arduino Mega, einen Ethernet Shield, 4 ESC und 4 Schiffsschrauben mit Motor, sowie einen LiPo Akku mit Ladegerät.

Als erstes wird die Arduino IDE auf die Mac und Linux Laptops installiert, das geht recht schnell.

Die ESCs sind ab Werk für Drohnen konfiguriert, d.h. sie lassen die Motoren nur in eine Richtung drehen. Mit der BLHeli Suite und viel Gefrickel lassen sie sich umkonfigurieren, so dass sie die Motoren vor- und zurück drehen lassen können.

Die nächste Hürde ist die Ansteuerung der ESCs. Sowohl Arduino als auch die ESCs beherrschen PWM, aber aufgrund der analogen Ansteuerung müssen die Motoren vor dem Start jeweils kalibriert werden. Unsere ESCs würden aber auch das digitale DShot Protokoll verstehen. Auf dem Arduino gibt es dafür eine Library, die allerdings „noch nicht ganz fertig“ ist.

Also selber machen! Assembler ist dank der guten AVR Microcontroller Dokumentation nicht schwer, aber da die Arduino IDE doch einige Annehmlichkeiten bietet, muss das DShot Protokoll mit Inline-Assembler programmiert werden, was dann doch einiges an Aufwand bedeutet. Das DShot 300 und 600 Protokoll funktionieren am Ende gut, das langsame DShot 150 komischerweise nicht, macht aber nichts. Und für DShot 1200 ist der Arduino mit seinen 16MHz ohnehin zu langsam.

Heraus kommt eine recht übersichtliche Applikation, die maximal 8 ESCs ansteuern kann und zwischen den Assemblersequenzen immer noch mehr als genügend Platz für andere Aufgaben lässt. Und die Testapplikation lässt die Motoren schön erst in die eine, dann in die andere Richtung drehen.

2. Schritt

Allem Anschein ist der Arduino zu langsam, um Videos in einer passablen Qualität zu streamen, aber wir möchten ja gerne sehen, was die Kamera im ROV aufnimmt. Damit wird die Lösung mit dem Arduino Ethernet Shield hinfällig, und es muss ein zweiter, genügend leistungsfähiger Microcontroller her. Dafür fällt die Wahl auf den Raspberry Pi, da er über genügend Leistung und geeignete Schnittstellen verfügt. Ausserdem liegt gerade noch einer herum.

Jetzt besteht die Qual der Wahl einer geeigneten Programmiersprache auf dem Raspi. Die Wahl fällt auf Python, da es sowohl im Raspi als auch in Linux gut integriert ist, und es haufenweise Libraries dafür gibt. Nun müssen die beiden Microcontroller ja noch miteinander kommunizieren, und hier kommt I2C zum Einsatz, da es auf beiden Systemen die Schnittstellen und entsprechende Libraries gibt.

Die Kommunikation zwischen Raspi und Arduino klappt recht schnell, jedenfalls, nachdem die Kabel richtig eingesteckt sind.

Dann werden in der PyCharm Entwicklungsumgebung eine Server- und eine Clientapplikation geschrieben, die mit Sockets über Ethernet miteinander kommunizieren. Die Serverapplikation auf dem Raspi bedient eigentlich nur die I2C und die Ethernetschnittstelle. Um den Joystick einzulesen, verwendet die Clientapplikation auf dem Linuxlaptop die Pygame Library.

Nachdem alles miteinander kommuniziert, und auch die Motoren abstellen, wenn irgendwo etwas unterbrochen ist, wird ein 100m langes CAT5 Kabel mit Crimpsteckern und Zange gekauft. Das Crimpen der Stecker ist etwas hakelig, und deshalb ist es nicht verwunderlich, dass der erste Versuch mit dem 100m langen Kabel misslingt.

Zur Probe wird dann die Geschwindigkeit des LAN von 100 auf 10Mb/s gedrosselt, aber ohne Erfolg. In mehreren Schritten wird das Kabel jetzt bis auf 80m gekürzt, und plötzlich funktioniert das LAN ohne Probleme bei vollem Durchsatz. Die angestrebte Distanz von 100m kann so zwar nicht ganz erreicht werden, aber was soll’s. Der Pfäffikersee ist sowieso nur 35m tief.

Zu guter Letzt wird noch ausprobiert, ob der Laptop mit dem Raspi auch dann noch kommunizieren kann, wenn die beiden statische IP Adressen haben und direkt miteinander verbunden werden. Heutige Ethernet Adapter merken ja, wenn ein Patchkabel anstatt eines Crossoverkabels verwendet wird, und siehe da, auch das klappt.

Bisher war das Projekt sehr elektronik- und softwarelastig, so dass die eine Hälfte des Projektteams noch nicht so viel beitragen konnte. Daher bauen wir zusammen einen kleinen Versuchsaufbau, um die bisher verwendeten Komponenten von vorne bis hinten durchzutesten. Bis auf ein verschmortes Versuchsboard wegen eines Kurzschlusses geht auch alles gut, sehen Sie selbst:

Anschluss des 2. Schrittes: Test des Versuchsaufbaus

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.