Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose21:kamerapublic:start

Projektdokumentation Kamerafahrtroboter

Einleitung

Ziel unseres Projekts war es einen Roboter zu bauen , dem es möglich ist eine vorher einprogrammierte Kamerafahrten abzuspielen und der auch live mit einem Programm gesteuert werden kann. Einerseits kann dieser Roboter einen Kameramann ersetzen, vor allem sind in der Videonachbearbeitung mehr Effekte möglich, wenn mehrmals die selbe Fahrt aufgenommen wird. An dem Roboter ist eine Webcam befestigt, welche an verschiedenen Gelenken beweglich ist und das Filmen aus verschiedenen Perspektiven in variable Richtungen ermöglicht. Die Webcam kann mit einem USB-Kabel an den Computer oder Laptop angeschlossen werden. Das Gestell kann sich des weiteren auf Schienen hin und her bewegen.

Erste Idee und Planung

Umsetzung

Bild 1: Übersicht über den Aufbau des Roboters

Bild 2: Roboter von Oben

Die Basis

Die Basis des Roboters besteht aus aus einer ca. 2mm dicken Platte aus Holz. Auf ihr befinden sich die Schaltung mit dem Arduino sowie der Stepper-Motor welcher den Arm betreibt. Unter ihr sind zwei Achsen mit Zahnrädern befestigt welche von einem weiteren Stepper-Motor angetrieben werden. Die Plattform bewegt sich mit dem unten angebrachten Stepper-Motor auf zwei Zahnstangen welche als Schienen für den Roboter dienen.

Plattform mit Achse und Stepper-Motor Abb. 1: Plattform mit Achse und Stepper-Motor Stepper-Motor an der Achse Abb. 2: Stepper-Motor an der Achse

Rotieren des Arms

Der Arm kann sich mit Hilfe eines auf der Basis befestigten Stepper-Motors hin und her drehen. Damit ist es möglich den ganzen Arm in eine bestimmte Richtung zu schwenken um zum Beispiel näher oder weiter weg von einem bestimmten Objekt zu kommen.

Bild 5: Stepper-Motor um den Arm zu drehen.

Hoch- und Runterbewegen des Arms

Mit einem weiteren Stepper-Motor, welcher sich über dem Stepper-Motor der den Arm dreht auf einer runden Holz Plattform befindet, lässt sich die Bewegung des Arms nach oben und nach unten steuern. Damit der Motor genug Kraft hat um den Arm hoch und runter zu bewegen haben wir uns für eine doppelte Zahnradübersetzung entschieden, wobei bei dem letzten Zahnrad ein Seil aufgewickelt wird. Das Seil wird über eine Rolle weitergeleitet. Die Rolle befindet sich ca. 10cm hinter dem Arm, damit das Seil nicht in Kontakt mit dem Arm kommt und so verschoben wird. Auf der anderen Seite vom Arm haben wir weiterhin ein Gegengewicht angebracht, damit der Arm stabil nach vorne zeigt und damit die Kraft die auf den Stepper-Motor, welcher den Arm hält, wirkt, geringer ist. Mit dem Hoch- und Runterbewegen des Arms lässt sich sowohl die Höhe als auch die Entfernung zu einem gewissen Objekt kontrollieren.

Bild 6: Stepper-Motor mit Zahnradübersetzungen zum Hoch- und Runterbewegen des Arms.

Befestigung der Kamera

Die Kamera ist mit Klett an einem Servo-Motor befestigt welcher es einem ermöglicht die Kamera oben an dem Arm noch zu Rotieren. Der Servo ist mit zwei Kabelbindern an einem Scharnier befestigt welches wiederum an der Unterseite vom Arm befestigt ist. Das Scharnier dient dazu die Kamera im Lot zu halten, wenn sich der Arm nach oben oder nach unten bewegt.

Bild 7: Kamerabefestigung mit Servo

Was wir weggelassen haben:

Wir haben uns am Ende dazu entschieden den Arm nur aus einem Stück zu bauen und nicht oben noch eine zweiten Teil des Arms anzubringen, da es sonst von dem Gewicht nicht funktioniert hätte. Der Arm besteht größtenteils aus Holz was uns dabei Hilft das der Arm stabil ist aber auch dazu führ das der Arm sehr schwer ist. Weiterhin waren die Stepper Motoren die wir verwendet haben nicht unbedingt die beste Wahl, da sie nicht wirklich genug Kraft hatten schwere Gewichte zu bewegen.

Technische Daten und Bauteile

Schaltplan

Unser Roboter ist über zwei USB-Kabeln mit dem Computer verbunden. Das eine ist für den Arduino Nano während das andere für die Webcam ist. Mit unserem Arduino haben wir dann drei Treiber für die Stepper-Motoren und einen Servo verbunden. Die Treiber für die Stepper-Motoren sind weiterhin mit einem externen Netzteil verbunden. Die Stepper-Motoren lassen sich über die Pins D2-D7 ansteuern wobei die geraden Zahlen die Stepper Pins sind und die ungeraden die Direction Pins sind. Der Servo ist mit dem Pin D8 verbunden.

Materialliste

Programm

Unsere Programmierung besteht aus zwei Programmen. Das eine Programm ist ein Arduino Programm, welches vorab auf den Arduino geladen wird. Das andere Programm wurde mit Unreal Engine 4 erstellt und sendet Informationen an den Arduino. Es beinhaltet weiterhin ein Graphisches Interface mit dem es möglich ist den Roboter zu kontrollieren.

Das Arduino Programm

Es empfängt einen String bestehend aus 7 Integern, welches das Programm in ein Array speichert bis das Ende des Strings erreicht ist. Die Integer geben an wie sich der Roboter bewegen soll. Eine 1 an Position 1 des Strings steht zum Beispiel dafür das der Stepper Motor unten am Arm sich bewegen soll. Eine 0 an Position 1 gibt an das der Stepper Motor sich nicht mehr bewegen soll. Die 2. Position des Strings gibt die Richtung an in die sich der Stepper Motor unten am Arm bewegen soll. Eine 1 ist hier die eine Richtung, eine 0 ist die andere Richtung. Der Code zum Speichern des Strings sieht ungefähr so aus (Der Code steht eigentlich in einer loop Funktion):

1 while (Serial.available()> 0) {        // solange ein String zu lesen ist wird die Schleife ausgeführt
2 ...                                    // Deklaration von Variablen
3 char inByte = Serial.read();           // der nächste Part des Strings wird gelesen
4 if (inByte != '\n'){                   // solange der String nicht vorbei ist wird die if Schleife erneut ausgeführt
5   message[messagePosition] = inByte;     // Der nächste Teil vom String wird in der nächsten Position des Arrays gespeichert
6   messagePosition++;                     // Die Array Position wird um eins erhöht
7 } else {
8 ...  // Hier werden aus dem Array die Informationen in einzelne Variablen festgelegt, sobald der String komplett gesendet wurde
9 } ... }

Weiter in der loop Funktion werden dann die einzelnen Funktionen aufgerufen, welche den Arm bewegen. Problematisch war für uns das wir nicht mit einem delay arbeiten konnten, da wir mehrere Bewegungen gleichzeitig ausführen wollten. Wir haben uns deshalb entschieden mit Millis zu arbeiten. Ein Delay sieht bei uns ungefähr so aus:

1 unsigned long currentMillis = millis();  // currentMillis speichert die Anzahl der vergangenen Millisekunden
2 ...
3 if (currentMillis - previousArmMillis >= turnArmDelay){   
4 previousArmMillis = currentMillis;
5 ...
6 }

Das Programm speichert die Anzahl der vergangenen Millisekunden in einer Variable. Es wird dann in einer if Funktion getestet ob die Anzahl der vergangenen Millisekunden minus die Anzahl der Millisekunden die bei dem letzten durchlauf der Funktion gespeichert wurde kleiner oder gleich dem Delay, was wir vorher in einer Variable definiert haben, ist. Wenn das wahr ist, werden der Millisekunden für den letzten durchlauf der Funktion gleichgesetzt mit den aktuell vergangenen Millisekunden. Weiterhin wird dann zum Beispiel eine Bewegung des Arms um einen Schritt nach rechts ausgeführt. Das ganze verhindert das andere Funktionen wie bei einem delay mit verzögert werden.

Das Unreal Engine 4 Programm

Bild 8: Überblick über das Unreal Engine Programm

Das Unreal Engine Programm ist so aufgebaut, das es einem möglich ist die aktuelle Position des Roboters zu sehen. Weiterhin ist es möglich den Roboter, mit den in oben links im Programm definierten Tasten, in Echtzeit zu kontrollieren. Das Programm zeigt einem oben rechts die aktuellen Winkel und die Position des Roboters an. Mittig rechts kann man die angeschlossene Kamera auswählen welche einem dann rechts unten angezeigt wird. Es ist auch möglich, mit dem Symbol oben links in der Kamera Ansicht, die Ansicht der Kamera auf den ganzen Bildschirm zu maximieren.

Unten am Bildschirm befindet sich die Timeline. Mit ihr kann man Key-frames setzen um eine Animation zu erstellen welche dann abgespielt werden kann. Die Animation kann bis zu 60 Sekunden lang sein. Unten links befindet sich weiterhin der Live-Button er bestimmt ob die Informationen in Echtzeit an den Roboter übertragen werden soll oder nicht.
Die Position des Roboters muss am Anfang manuell kalibriert werden.

Bild 9: Programm mit live Übertragung

Die Echtzeit Übertragung (live-Modus) funktioniert im allgemeinen so, das eine boolean Variable festlegt ob er an ist oder nicht. Wenn der live-Modus an ist, wird geschaut welche Tasten gedrückt werden. Es wird dementsprechend ein String verändert, welcher aussagt wie der Arm sich bewegen soll. Wenn zum Beispiel Q gedrückt wird, wird bei dem String an erster Stelle eine 1 gesetzt was dafür steht das der Arm sich bewegen soll und an zweiter Stelle eine 0, was dafür steht das die Richtung nach links ist. Dieser String wird dann an den Arduino gesendet wenn er sich im Vergleich zu davor geändert hat.
Wenn Q jetzt losgelassen wird, wird die 1 an erster Stelle mit einer 0 ersetzt und der String wieder an den Arduino gesendet. Das sagt ihm das er aufhören soll sich zu bewegen.

Bild 10: Programm mit Kamera im Fullscreen

Ergebnis

Aktueller Stand

Video 1: Roboter in Bewegung

Dem Roboter ist es möglich sich zu drehen, die Höhe der Kamera zu verändern, die Kamera zu drehen und sich auf den Schienen vor und zu rück zu bewegen. Der Roboter kann hierbei in Echtzeit kontrolliert werden oder eine Kamerafahrt abspielen. Er kann auch gleichzeitig mehrere Bewegungen ausführen, wie zum Beispiel sich nach oben und zur Seite zu bewegen. Das Fahren der Plattform, auf den Zahnrädern verläuft teilweise nicht optimal da die Zahnräder sich oft so lösen das sie den Kontakt miteinander verlieren. Das liegt daran das wir Muttern verwendet haben, welche sich mit dem Drehen der Achse über einen bestimmten Zeitraum lösen.

Video 2: Problem mit den Zahnrädern

Verbesserungsmöglichkeiten

Der Arm ist durch die verwendeten Materialien deutlich zu schwer um größere Erweiterungen vorzunehmen. Um einen zweiten Teil vom Arm für eine separate Entfernung- und Höheneinstellung anzubringen wäre eine Verwendung von leichteren Materialien und stärkeren Motoren von Nöten. Stärke Motoren und leichtere Materialien würden es dem Roboter auch ermöglichen sich schneller zu bewegen. Besonders das Hoch- und Runterfahren ist bei unserem Roboter nicht unbedingt schnell. Der Roboter ist weiterhin relativ laut, was für Videos mit Ton nicht wirklich funktioniert. Es wäre also für eine bessere Variante des Roboters sinnvoll Motoren zu verwenden, die weniger laut sind als unsere jetzigen Motoren.

Code und Dateien

projektesose21/kamerapublic/start.txt · Zuletzt geändert: 2021/10/16 09:50 von d.golovko