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.

Autonomes Schiff

Ein anderes Projekten an dem wir zur Zeit arbeiten, ist ein autonomes Schiff. Hier soll erst nur die perception pipeline entworfen, implementiert und getestet werden um herauszufinden, welche Sensoren wirklich gebraucht werden, welche Probleme es gibt und welche Algorithmen eingesetzt werden können. Das planning und control wird dann zu einem späteren Zeitpunkt entwickelt.

Wir benutzen Kameras, LiDARs, GPS, IMU und Accelerometer für unsere Navigation. Später könnten dann noch Radar oder etwa AIS Daten hinzukommen.

Die Daten der SICK 3D LiDARs benutze ich um SLAM mit dem Google Cartographer zu machen. Dieser Algorithmus ist zur Zeit state of the art, was LiDAR SLAM angeht. Das Paper zu dem Algorithmus, allerdings für 2D Daten, kann man sich hier durchlesen.

Die LiDARs habe ich mit unseren Kameras kalibriert, so haben wir zusätzlich zu den Tiefeninformationen auch RGB Daten, was sich für die Objekterkennung nutzen lässt.

In ein paar Wochen werden wir unser System auf einem Schiff montieren und dann ausgiebig testen. Ich bin gespannt!

Autonome Drohne

Eines meiner Projekte an denen ich bei appliedAI arbeite ist eine autonome Drohne welche indoor navigiert. Das Einsatzgebiet und -Zweck soll allerdings zur Zeit noch geheim bleiben.

Die Drohne ist ausgestattet mit einer ToF RGBD Kamera und einem (relativ) leistungsstarken onboard Rechner. Einer meiner Aufgaben in diesem Projekt ist die Realisierung der Navigation und Stabilisierung, da GPS in geschlossenen Räumen nicht verfügbar ist.

Zur Zeit benutze ich eine Implementierung des ORB-SLAM 2, da dieser sehr effizient läuft und wir keine dichte Karte unserer Umgebung brauchen. Die Genauigkeit ist sehr gut, allerdings macht der SLAM bei der Initialisierung noch Probleme, gerade wenn nicht viele Key-Points im Sichtfeld der Kamera sind.

AppliedAI

Seit Dezember 2017 bin ich Junior AI Engineer bei appliedAI, eine Initiative welche zum Ziel hat den Einsatz von künstlicher Intelligenz in der Industrie und Gesellschaft zu beschleunigen.

Wir arbeiten mit verschiedensten Partnern zusammen und ein Netzwerk an Firmen, Startups und Experten aufzubauen, entwicklen mit Partnern zusammen Prototypen und bilden im Bereich KI weiter.

Meine Aufgaben sind das Entwickeln an Robotik-Projekten, speziell SLAM, sensor fusion und Navigation. Aber auch deep learning für Robotik und Projekt Management sind Teil meiner Arbeit!

Ich habe mir nun ein Semester Zeit genommen um Vollzeit bei appliedAI zu arbeiten.