Roboy Zwischenpräsentation

Seit nun 3 Monaten arbeiten mein Team und ich daran das Roboy und seine Rikshaw autonom fahren können. Dazu gehört der gesamte software Stack: von der Kartierung der Umgebung, über das Pathplanning und Hindernisvermeidung, dem Erstellen eines Fahrzeugmodells bis hin zum Kalibrieren der Sensoren zueinander.

Nun haben wir unsere Zwischenergebnisse präsentiert.

Am 1. März müssen wir fertig sein, wir liegen aber gut im Zeitplan. Ich bin zuversichtlich das wir unsere Ziele erreichen!

Unser gesamter Code ist (wie alles von Roboy) opensource, unsere beiden Repositories sind auf Github hier und hier zu finden.

Franka Emika Panda

Seit ein paar Wochen habe wir nun den Panda Roboter von Franka Emika bei uns im Labor. Dies ist ein kollaborativer Roboterarm, der Roboter ist mit inertial measurement units (IMUs) und Sensoren in den Motoren ausgestattet um Kollisionen des Arms zu erkennen und die Bewegung schnell abzubrechen. So kann der Roboter sicher mit Menschen zusammen arbeiten.

Hier in diesem Video kann man erkennen wie gut die Vermeidung von Unfällen des Roboters funktioniert.

Hier ist der Roboterarm in zusammengeklapptem Zustand auf einer Platte montiert bei uns im Labor.

Die Projekte welche wir mit dem Arm und eventuellen anderen Sensoren und Komponenten machen werden sind für das Erste geheim – das es aber unglaublich coole Sachen sind welche wir vorhaben kann ich schon berichten!

Roboy Autonomous Driving

Seit Oktober bin ich der team lead bei Roboy für autonomous driving. Roboy ist ein Forschungsprojekt in dem es darum geht einen humanoiden, menschengroßen Roboter zu bauen. Dieser hat, im Gegensatz zu den meisten anderen Robotern, keine Motoren direkt in den Gelenken. Dafür hat der Roboter Seile, welche wie Sehnen funktionieren. So sind die meisten Motoren im Brustkorb untergebracht.

Das Ziel für dieses Semester ist es das Roboy in der Lage ist autonom auf einem (großen) Dreirad über den TUM Campus in Garching zu fahren. Ich wurde ausgewählt das autonomous driving team zu leiten. Informationen zu den Aufgaben in diesem Semester gibt es hier.

Ich habe beschlossen das wir ein 2D LiDAR von SICK, zusammen mit einer Intel RealSense, Odometriesensoren und einem Hall-Sensor für den aktuellen Lenkwinkel verwenden.

Odometrie und Motorcontroller ROS nodes

Im Moment arbeite ich an einem ROS Node welcher die Lichtschranken überwacht, die Odometrie berechnet und eine nav_msgs/odometry message publiziert. Dies kann ich dann als zusätzlichen Input für den Google Cartographer SLAM benutzen. Allerdings bin ich mir noch nicht sicher wie genau die Odometrie wird. Einerseits wegen des beträchtlichen Drift welcher durch die „Panzer Lenkung“ zustande kommt, andererseits weil der Taktgeber nur 32 Flanken pro Umdrehung generiert, was in einer Strecke von 1,9cm Pro tick resultiert. Die Kovarianz der Odometrie muss ich dann durch Messungen ermitteln.

Zusätzlich arbeite ich an einem ROS node welcher die Motoren steuert, so sind dann alle Systeme mit ROS ansprechbar.

orb_slam_2_ros

Seit kurzem ist meine Implementierung des ORB-SLAM2 für ROS online. Im vergleich zu der originalen Implementierung von Raul Mau-Artal ist meine Version auf den Einsatz mit ROS optimiert. Das Package kann komplett mit catkin build gebaut werden und die Position, die Pointcloud und ein Livestream der Kamera mit gefundenen Keypoints wird als ROS topic publiziert. Darüber hinaus verzichtet das Package auf den integrierten viewer, das Laden des vocabulary file wurde stark beschleunigt und Parameter sind über den ROS Parameterserver einstellbar.

Das Package findet sich hier, auf dem offiziellen Github account von appliedAI.

ROS Kinetic auf der Jetson

Auf der Nvidia Jetson TX2 Läuft jetzt Ubuntu 16.04 und ROS Kinetic. ROS ist eine Robotik Middleware und erleichtert das Entwickeln von Prototypen sehr. Im ROS Framework kommunizieren die Programmteile (Nodes) untereinande nach dem publisher-subscriber Prinzip.

Im Moment arbeite ich an einer Library welche die GPIO Funktionen der Pins und I2C bereit stellt. Diese benutze ich dann um meinen Motorcontroll-Node zu bauen.

 

ROS Kinetic Kame

ORB-SLAM auf der Drohne

ORB-SLAM auf der Drohne funktioniert bis jetzt nicht immer verlässlich. Ich konnte das das Ergebnis durch Anpassungen an den Parametern zwar noch etwas verbessern, trotzdem verliert die Drohne gerade bei schnellen Bewegungen das Tracking. Auch das Initialisieren der Karte schlägt manchmal noch fehl.

 

Im Video sieht man sehr gut die ORBs welche vom Algorithmus gefunden und verfolgt werden. Die Drohne fliegt etwas durch den Raum zum testen.

Das paper zum ORB-SLAM findet sich hier.

 

Test auf dem Schiff

Wir haben nun unser Setup im live Betrieb auf einem Schiff getestet. Dabei haben wir die Daten aller Sensoren aufgezeichnet damit später die (neuen) Algorithmen in den gleichen Situationen immer und immer wieder testen zu können.

Hier ein kleiner Teil unseres Setups, eine Kamera und ein LiDAR.

Neue Motortreiber

Ich habe mich dazu entschieden meine selbstgelöteten Motortreiber durch gekaufte Platinen zu ersetzen welche sich über I2C ansteuern lassen. Das erleichtert mir das Handling und ich kann Fehler in der Elektronik ausschließen falls etwas nicht funktioniert.

Die neuen Platinen sind auch schon montiert. Die Verkabelung für den Strom zu den Boards und Motoren liegt auch schon, was noch fehlt sind die I2C Kabel beider Boards zu einem Hub und dann zu der TX2.

Mein SICK LiDAR musste ich für die Montage des vorderen Treibers abschrauben.

NVIDIA Jetson TX2

Von appliedAI habe ich eine Nvidia Jetson TX2 bekommen. Dies wird meinen Raspberry Pi  und den Atmega32 ersetzen.

Die Jetson CPU hat zwei Denver Kerne und vier Cortex-A57 Kerne. Die Denver Kerne bieten eine wesentlich höhere Singlethread performance, die Kortex Kerne sind sparsamer.  In dem Modul ist auch eine 256 Core Pascal GPU integriert welche sich super für das inferencing von tiefen neuronalen Netzen eignet.

Der Raspi und der Atmel Atmega32 sind jetzt mit der Nvidia Jetson ersetzt. Die Antennen rechts im Bild an dem Board sind für WLAN.