In den letzten Jahren haben wir die Einführung künstlicher Intelligenz in unserem täglichen Leben erlebt - von Roboterstaubsaugern bis hin zu unbemannten Drohnen. Alle von ihnen, die von künstlicher Intelligenz kontrolliert werden, sind für uns bereits alltäglich. Trotzdem dauert der Entwicklungsprozess vom Design bis zur Implementierung Jahre und ist nicht billig. Darüber hinaus erfordern Algorithmen für maschinelles Lernen Big Data und es gibt keine Garantie dafür, dass auf lange Sicht alles funktioniert.
Früher oder später kommt jeder Entwickler zu dem Schluss, dass Sie vor dem Erstellen eines echten Roboters das Konzept in einer Simulation testen, alle Systeme debuggen und am Ende verstehen müssen, ob der Entwicklungspfad ausgewählt wurde.
Dr. Andrew Howard hatte ähnliche Gedanken, als er mit seinem Schüler Nathon Koenig 2002 mit der Entwicklung eines 3D-Simulator-Pavillons an der University of Southern California begann. Das Konzept eines hochpräzisen Simulators entstand aufgrund der Notwendigkeit, Roboter unter verschiedenen schwierigen Außenbedingungen zu testen. In den ersten Entwicklungsphasen spart dieser Ansatz Zeit und Geld beim Kauf der erforderlichen Ausrüstung.
In dieser Artikelserie möchte ich meine Erfahrungen bei der Simulation und Ausbildung eines unbemannten Fahrzeugs mit nur einer normalen Kamera als Sensor teilen.

Hallo an alle. Ich bin Master of Science (Informatik, MS) in Angewandter Informatik an der Fachhochschule Berlin (HTW-Berlin).
Im Rahmen meines Kurses arbeite ich an Methoden zum Trainieren autonomer Roboter in einer simulierten Umgebung mit ROS [1], Gazebo [2] und OpenAI Gym [3]. Diese Kursarbeit gliedert sich in zwei Teile.
Der erste Teil ist der Entwicklung eines Frameworks gewidmet, das das Testen von Algorithmen für das Reinforcement Learning (Training mit Verstärkung) an verschiedenen autonomen Robotern innerhalb der Gazebo-Simulation vereinfachen soll.
Im zweiten Teil werde ich mich auf die Implementierung des Algorithmus für autonomes Fahren konzentrieren. Ich werde im nächsten Semester daran arbeiten, daher konzentrieren sich dieser und die nächsten Artikel hauptsächlich auf die Implementierung der OpenAI Gym-Umgebung für Gazebo. Das Reinforcement Learning (RL) selbst wird oberflächlich beeinflusst.
Den vollständigen Projektcode finden Sie
hier .
Systemanforderungen
- Ubuntu 18.04 oder Windows WSL Ubuntu 18.04
- Python 2.7
- pip
- Tenserflow-CPU oder GPU
Wir werden die ROS-Version von Melodic verwenden. Diese Version hat mehrere Einschränkungen und die wichtigste davon ist Ubuntu 18 (es ist auch möglich, ROS unter Windows WSL und unter Ubuntu Headless zu installieren, aber dazu ein anderes Mal mehr). Darüber hinaus unterstützt ROS Python 3 immer noch nicht.
Erster Teil: Einführung
In diesem Pilotteil werde ich kurz auf die Technologien eingehen, die zur Erstellung der Umgebung verwendet werden. Ich werde auch den Installationsprozess beschreiben und am Ende eine vollständige Simulation starten, die über die Gym-API gesteuert werden kann.
ROS: "Das Rad nicht neu erfinden"
Das Robot Operating System (ROS) ist ein Framework zum Programmieren von Robotern. ROS ist ein „Software-Kleber“, mit dem sich Entwickler auf ihre spezifische Aufgabe konzentrieren können. Obwohl ROS kein Betriebssystem ist, bietet es Dienste wie Hardware-Abstraktion, Geräteverwaltung auf niedriger Ebene, Implementierung häufig verwendeter Funktionen, Weitergabe von Nachrichten zwischen Prozessen und Verwaltung von Paketen (Plugins).
ROS ist als lose gekoppeltes System konzipiert, in dem ein als Knoten bezeichneter Prozess für eine Aufgabe verantwortlich sein muss. Knoten kommunizieren miteinander über Nachrichten, die über logische Kanäle geleitet werden, die als Themen bezeichnet werden. Jeder Knoten kann mithilfe des Publish-Subscribe-Musters Daten von einem anderen Knoten senden oder empfangen
Für ROS wurden bereits Treiber implementiert, die es ermöglichen, mit vielen Geräten wie Controllern, GPS, Kameras, Laser-Entfernungsmessern usw. auf eine einzige Weise zu arbeiten.
Installieren Sie daher ROS Melodic (
vollständige Anleitung ).
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 sudo apt update sudo apt install ros-melodic-desktop-full sudo rosdep init rosdep update echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source /opt/ros/melodic/setup.bash
Aus irgendeinem Grund enthält das vollständige Installationspaket einige erforderliche Pakete nicht. Installieren Sie sie separat:
sudo apt install ros-melodic-ackermann-msgs sudo apt install ros-melodic-effort-controllers sudo apt install ros-melodic-joy sudo apt install ros-melodic-tf2-sensor-msgs
Wir werden nicht im Detail darauf eingehen. Sie werden benötigt, um unseren Roboter zu steuern, worauf später noch eingegangen wird.
Pavillon
Gazebo ist ein dynamischer Open-Source-3D-Simulator, der von der
Open Source Robotic Foundation entwickelt wurde und sehr eng mit ROS zusammenarbeitet. Mit Gazebo können Sie Roboter sowohl unter schwierigen Innen- als auch unter Außenbedingungen genau und effizient simulieren.
Der Simulator besteht aus dem
gzserver- Server, der an der Berechnung von Physik, Kollisionen und der Simulation von Sensoren beteiligt ist. Clients können eine Verbindung zum Server herstellen, z. B.
gzclient (für den Desktop) und
gzweb (für den Browser). Sie sind diejenigen, die die Modelle rendern.
All dies ermöglicht es, komplexe Robotersysteme im virtuellen Raum viel schneller und ohne das Risiko zu testen, teure reale Roboter zu beschädigen.
Gazebo ist im vollständigen ROS-Installationspaket enthalten, sodass Sie nichts anderes installieren müssen. Für die kopflose Konfiguration ist
gzweb erforderlich. Ich werde in den folgenden Abschnitten über ihn sprechen.
OpenAI Gym
OpenAI ist ein gemeinnütziges Forschungsunternehmen für künstliche Intelligenz, das von Ilon Max mitbegründet wurde.
OpenAI Gym ist eine Python-Bibliothek, die eine API zum Entwickeln und Vergleichen von RL-Algorithmen mit einer großen Anzahl virtueller Umgebungen und einer gemeinsamen API bietet. Das Fitnessstudio verfügt bereits über viele vorgefertigte Umgebungen, auch für Atari-Spiele.
openai_ros
Mein Projekt basiert auf dem Paket
openai_ros . Dieses Paket implementiert die vom
The Construct- Team vorgeschlagene Architektur. Die Konstrukteure haben ein gemeinsames Framework entwickelt, das die für die Verwaltung der Simulation erforderliche API implementiert und eine API für die Integration von Gazebo in das Fitnessstudio beschreibt, für die nur eine minimale Implementierung erforderlich ist. Die vorgeschlagene Struktur besteht aus drei logischen Schichten (Sie können tatsächlich eine beliebige Zahl verwenden). Die niedrigste davon ist ein weiterer „Kleber“, der die Gym-API mit Gazebo verbindet. Mehr dazu im nächsten Teil, wenn wir den Code analysieren werden.
Alles zusammenfügen
Zuerst müssen wir ein Arbeitsverzeichnis für catkin erstellen.
catkin ist ein Build-Automatisierungssystem wie CMake, das standardmäßig im ROS-Installationspaket enthalten ist:
cd ~ mkdir catkin_ws cd catkin_ws/ mkdir src cd src/
und klonen Sie die erforderlichen ROS-Pakete.
Mit Rennwagen
Wir brauchen ein vom MIT entwickeltes Robotermodell mit allen Sensoren.
git clone https://github.com/mit-racecar/racecar.git git clone https://github.com/mit-racecar/racecar-simulator.git
openai_ros
git clone https://bitbucket.org/theconstructcore/openai_ros.git
Neuroracer
Nun, eigentlich das Projekt selbst
git clone https://github.com/karray/neuroracer.git
Als nächstes müssen Sie alle diese Pakete kompilieren
cd ~/catkin_ws catkin_make
Sie müssen auch alle erforderlichen Python-Bibliotheken installieren.
pip install -U numpy tensorflow gym keras
Simulation ausführen
Um ein ROS-Paket auszuführen, müssen zuerst alle von uns kompilierten ROS-Pakete in die aktuelle Terminalsitzung geladen werden:
source ~/catkin_ws/devel/setup.bash
Jetzt können wir die Racecar-Robotersimulation ausführen:
roslaunch racecar_gazebo racecar_tunnel.launch
Dieser Befehl startet den ROS-Master-Server, den Gazebo-Server zusammen mit seiner Benutzeroberfläche (auf dem Desktop), lädt den Roboter und die Welt dafür.
Screenshot:
Und das Gleiche im zweiten Terminal für unseren RL-Algorithmus:
source ~/catkin_ws/devel/setup.bash roslaunch neuroracer_gym_rl qlearning.launch
Dieses Team wird unser Paket
neuroracer_gym_rl starten, das einen einfachen Q-Learning-Algorithmus in unserer Gym-Umgebung implementiert. Wir werden es im nächsten Teil analysieren.
Wer nicht warten kann, findet hier den Quellcode. Mit Blick auf die Zukunft möchte ich sagen, dass dieser einfache Algorithmus nach mehreren Tagen Training auf einem Server mit einer GeForce GTX 1080 Ti 11 GB RAM-Karte wirklich nichts gelernt hat. Im nächsten Teil werde ich die möglichen Gründe auflisten, aber jetzt können Sie mit Ihrer Implementierung experimentieren.
Fazit
Wir haben also eine voll funktionsfähige Simulation eines autonomen Autos und eine vorgefertigte RL-Algorithmusvorlage. Im nächsten Teil werden wir openai_ros genauer analysieren und die auf dem Roboter installierten Sensoren diskutieren. Danach werde ich zeigen, wie meine Algorithmen implementiert werden und welche Probleme während des Trainings auftreten können.
PS: Dies ist meine erste Erfahrung beim Schreiben eines Artikels. Zögern Sie daher nicht zu schreiben, wenn Sie Fehler finden oder Ideen oder konstruktive Kritik haben. Ich werde versuchen, dies in den folgenden Teilen zu berücksichtigen.
Referenzen
[1] (M. Quigley, K. Conley, B. Gerkey, J. Faust, T. Foote, J. Leibs, R. Wheeler und AY Ng. Ros: ein Open-Source-Roboterbetriebssystem Open Source Software, Band 3, Seite 5. Kobe, Japan, 2009.
[2] NP Koenig und A. Howard. Entwerfen und verwenden Sie Paradigmen für Pavillon, einen Open-Source-Multi-Roboter-Simulator.
In IROS, Band 4, Seiten 2149–2154 . Citeseer, 2004.
[3] LPJSJSJTWZ Greg Brockman, Vicki Cheung. Openai Gym, 2016,
arXiv: 1606.01540